使用ML.NET模型生成器来完成图片性别识别

使用ML.NET模型生成器来傻瓜式生成图片性别识别的代码

什么是ML.NET?

ML.NET 使你能够在联机或脱机场景中将机器学习添加到 .NET 应用程序中。 借助此功能,可以使用应用程序的可用数据进行自动预测。 机器学习应用程序利用数据中的模式来进行预测,而不需要进行显式编程。

ML.NET 的核心是机器学习模型 。 该模型指定将输入数据转换为预测所需的步骤。 借助 ML.NET,可以通过指定算法来训练自定义模型,也可以导入预训练的 TensorFlow 和 ONNX 模型。

ML.NET 支持在使用 .NET Core 的 Windows、Linux 和 macOS 或使用 .NET Framework 的 Windows 上运行。 所有平台均支持 64 位。 Windows 支持 32 位,TensorFlow、LightGBM 和 ONNX 相关功能除外。

了解ML.NET模型生成器

ML.NET 模型生成器是一个直观的图形化 Visual Studio 扩展,用于生成、训练和部署自定义机器学习模型。其使用自动化的机器学习 (AutoML) 来探索不同的机器学习算法和设置,以帮助找到最合适的方案。
使用模型生成器不需要具备机器学习的专业知识。 只需要一些数据,和确定要解决的问题。 模型生成器会生成将模型添加到 .NET 应用程序的代码。

值得注意的是,目前ML.NET 模型生成器是属于预览版,需要先启用此预览功能:

启用ML.NET模型生成器

接下来,我们将使用此模型生成器来生成图片性别生成的代码。

生成图片性别识别的代码

主体步骤如下所示:

  1. 创建控制台项目,然后添加【机器学习】

    添加机器学习

  2. 选择方案,这里我们选择【图像分类】

    当完成了第一步操作之后,我们将打开ML.NET模型生成器的UI界面。这里我们选择【图像分类】方案:

    选择方案

  3. 选择训练环境

    选择训练环境

  4. 添加数据

    在此之前,我们需要先准备好数据。由于是做图片分类,我们需要先准备图片数据,并且以文件夹的形式分类,比如:

    图片文件夹

    图片数据

    准备好图片数据后,我们就可以在【数据】界面添加对应的文件夹了:

添加数据

添加完成后,就可以看到【数据预览】:

数据预览

这里笔者准备了5000多张学生图片,由于涉及隐私,这些数据样本不会公开,如需要训练可以去国外很多AI网站下载数据样本。

  1. 训练

    训练是一个自动的过程,模型生成器通过该过程教模型如何回答方案相关的问题。 训练后,模型可以对其没有见过的输入数据进行预测。 例如,在预测房价时,可以预测新上市的房屋销售价。因为模型生成器使用自动机器学习 (AutoML),所以在训练期间不需要任何人工输入或微调操作。

准备训练

接下来,我们【开始训练】:

开始训练

一般500M数据需要训练大概半小时以上(具体还需视机器性能而定):

训练

  1. 评估

    训练结束后,我们就可以开始评估了。评估是衡量模型品质的过程。下面97.08的准确性已经是性能非常好的模型了,高于50%的准确性才是可以接受的模型。

    评估

    如果模型性能评分不符合预期,可以:

    • 延长训练时间。 有了更多时间,自动机器学习引擎可以体验更多算法和设置。
    • 添加更多更精确的数据。 有时,数据量不足以训练高质量的机器学习模型。对于包含少量示例的数据集,尤其如此。
    • 均衡分配数据。 对于分类任务,请确保在各个类别间均匀分配训练集。 例如,若有四个类别和 100 个训练示例,前两类(标记 1 和标记 2)包含 90 个记录,而剩下两类(标记 3 和标记 4)只包含 10 个记录,这就存在数据不均衡的问题,可能会导致模型很难正确预测标记 3 或标记 4。

    回到刚才的主题,我们可以试用刚训练出的模型。这里笔者找了几张数据样本之外的图片进行测试:

    模型测试

    模型测试

    模型的准确性非常之高,我们用一张偏女性化的男性图片进行测试:

    模型测试

    从上面的测试结果可以看出,准确性基本上取决于数据样本的数量和质量!

  2. 添加代码

    完成评估阶段后,模型生成器可以输出一份模型文件和代码,我们可以使用该代码将模型添加到应用程序。 ML.NET 模型保存为 zip 文件。 用于加载和使用模型的代码会以新项目的形式添加到解决方案中。 模型生成器还会添加一个示例控制台应用,可以运行该应用来查看工作状态下的模型。

    此外,模型生成器还会输出生成模型的代码,以便你能了解生成模型所使用的步骤。 还可以通过模型训练代码使用新的数据重新训练模型。添加代码如下所示:

    添加代码

    【添加】之后,在解决方案中我们就可以相关代码了:

    解决方案

    如上图所示,ML.NET模型的zip文件也包含在解决方案中。

    执行示例代码

    我们将【GenderRecognitionML.ConsoleApp】工程设置为启动项目,打开示例代码如下所示:

    using System;
    using GenderRecognitionML.Model;
    
    namespace GenderRecognitionML.ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Create single instance of sample data from first line of dataset for model input
                ModelInput sampleData = new ModelInput()
                {
                    ImageSource = @"D:\workspace\AI\GenderRecognition\数据样本\女\20200612180307_xxx.jpg",
                };
    
                // Make a single prediction on the sample data and print results
                var predictionResult = ConsumeModel.Predict(sampleData);
    
                Console.WriteLine("Using model to make single prediction -- Comparing actual Label with predicted Label from sample data...\n\n");
                Console.WriteLine($"ImageSource: {sampleData.ImageSource}");
                Console.WriteLine($"\n\nPredicted Label value {predictionResult.Prediction} \nPredicted Label scores: [{String.Join(",", predictionResult.Score)}]\n\n");
                Console.WriteLine("=============== End of process, hit any key to finish ===============");
                Console.ReadKey();
            }
        }
    }

    通过上面的示例代码我们非常简单了解了如何来使用模型,仅需传入图片路径,即可使用模型输出对应的图像标签(男、女)和准确性,我们可以运行起来,执行结果如下所示:

    启动执行

    至此,整个教程就完成了,是不是非常简单呢?即使我们不具备机器学习的专业知识!


 上一篇
Magicodes.IE 3.0重磅设计畅谈 Magicodes.IE 3.0重磅设计畅谈
Magicodes.IE 3.0重磅设计畅谈 Magicodes.IE导入导出通用库,支持Dto导入导出、模板导出、花式导出以及动态导出,支持Excel、Csv、Word、Pdf和Html。 IE在去年年底重构一次之后,经过这么长时间的迭代
下一篇 
Magicodes.IE 2.4发布 Magicodes.IE 2.4发布
今天我们发布了2.4版本,这离不开大家对Magicodes.IE的支持,我们也对大家的意见以及需求不断的进行更新迭代,目前我们的发布频率平均在一周一个beta版本,一个月一个正式版本的更新,我们欢迎更多的开发者加入进来,欢迎大家来提issu
  目录