什么是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 模型生成器是属于预览版,需要先启用此预览功能:

 

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

生成图片性别识别的代码

主体步骤如下所示:

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

 

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

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

 

3.选择训练环境

 

4.添加数据

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

 

 

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

 

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

 

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

5.训练

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

 

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

 

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

 

6.评估

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

 

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

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

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

 

 

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

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

7.添加代码

完成评估阶段后,模型生成器可以输出一份模型文件和代码,我们可以使用该代码将模型添加到应用程序。 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();
}
}
}

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

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

使用ML.NET模型生成器来完成图片性别识别的更多相关文章

  1. 模式识别hw2-------基于matconvnet,用CNN实现人脸图片性别识别

    主要来源模式识别课程大作业,本文首先感谢当初的助教和一起完毕作业的队友 matconvnet在matlab下封装了CNN常见算法,网址http://www.vlfeat.org/matconvnet/ ...

  2. C++开发人脸性别识别教程(10)——加入图片的人脸检測程序

    现在我们的MFC框架已经初具规模,能够读取并显示目录下的图片.在这篇博文中我们将向当中加入人脸检測的程序. 一.人脸检測算法 这里我们使用OpenCv封装的Adaboost方法来进行人脸检測,參见:C ...

  3. 基于OpenCV性别识别

    叙述性说明 所谓的性别识别推断检测到的面部是男性还是女性.它是一个二值分类问题. 识别算法可以用于SVM,BP神经网络.LDA,PCA,PCA+LDA等等.OpenCV官网给出的文档是基于Fisher ...

  4. keras实现简单性别识别(二分类问题)

    keras实现简单性别识别(二分类问题) 第一步:准备好需要的库 tensorflow  1.4.0 h5py 2.7.0 hdf5 1.8.15.1 Keras     2.0.8 opencv-p ...

  5. python手写bp神经网络实现人脸性别识别1.0

    写在前面:本实验用到的图片均来自google图片,侵删! 实验介绍 用python手写一个简单bp神经网络,实现人脸的性别识别.由于本人的机器配置比较差,所以无法使用网上很红的人脸大数据数据集(如lf ...

  6. 基于人脸识别+IMDB-WIFI+Caffe的性别识别

    本文用记录基于Caffe的人脸性别识别过程.基于imdb-wiki模型做finetune,imdb-wiki数据集合模型可从这里下载:https://data.vision.ee.ethz.ch/cv ...

  7. C++开发人脸性别识别教程(16)——视频人脸性别识别

    在之前的博文中我们已经可以顺利驱动摄像头来採集源图像.在这篇博文中将正式为其加入性别识别的代码,实现摄像头视频的人脸性别识别. 一.人脸检測 在得到摄像头採集的源图像之后,首先要做的就是对其进行人脸检 ...

  8. C++开发人脸性别识别教程(12)——加入性别识别功能

    经过之前几篇博客的解说,我们已经成功搭建了MFC应用框架,并实现了主要的图像显示和人脸检測程序,在这篇博文中我们要向当中加入性别识别代码. 关于性别识别,之前已经专门拿出两篇博客的篇幅来进行解说.这里 ...

  9. C++开发人脸性别识别教程(19)——界面美化

    在这篇博文中将完毕<C++开发人脸性别识别>的收尾工作.主要内容分为两部分:加入视频暂定功能.界面规范化. 一 视频暂停功能 严格来说这个视频暂定功能算是视频人脸性别识别的一个遗留问题,本 ...

随机推荐

  1. Java基础一篇过(三)I/O流总结

    一.啥是I/O 概念:I/O为输入,输出流的统称,流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象. 本质:本质是数据传输,即数据在两设备间的传输称为流,根据数据传输特性将流抽象为各 ...

  2. 微服务实战系列(四)-注册中心springcloud alibaba nacos

    1.场景描述 因要用到微服务,关于注册中心这块,与同事在技术原型上做了讨论,初步定的方案是使用:阿里巴巴的nacos+springcloud gateway,下面表格是同事整理的注册中心对比,以前用的 ...

  3. SSH 框架常见错误

    新手学习SSH框架的时候总会遇到很多问题,一碰到404 或者500错误就不知道怎么解决. 404错误是很常见的一个错误,如果没有用框架基本上只可能是没有这个路径或者文件,但是用了框架之后404的原因就 ...

  4. 2020 CiGA Game Jam活动总结

    CiGA Game Jam 总结 今年8月14.15.16号,48小时游戏开发--Game Jam开始了.蠢新第一次参加Game Jam,今年还是线上开展,情绪复杂= = 还有一个坏消息,晓航旅游缺席 ...

  5. sqli-labs第二关 详解

    学会了第一关,时隔多天来到了第二关,怎么说了没有看wp就给做出来了. 首先,我是自己先判断了下,这个是什么注入 ?id=1' 不行 ?id=1' or '1'='1--+ 也不行 然后又尝试了下 ?i ...

  6. CentOS openssh升级到openssh-7.2版本

    查看现在的版本SSH -V 一.准备 备份ssh目录(重要) cp -rf /etc/ssh /etc/ssh.bak [ 可以现场处理的,不用设置 安装telnet,避免ssh升级出现问题,导致无法 ...

  7. Java 异常 Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date'

    查询时发送给服务器的日期的字符串格式:yyyy-MM-dd HH:mm:ss 服务器接收到日期的字符串之后,向 MySQL 数据库发起查询时,因为没有指定日期时间格式,导致字符串数据不能正确地转换为日 ...

  8. 【学习笔记】Polya定理

    笔者经多番周折终于看懂了\(\text{Burnside}\)定理和\(\text{Polya}\)定理,特来写一篇学习笔记来记录一下. 群定义 定义:群\((G,·)\)是一个集合与一个运算·所定义 ...

  9. springcloud学习入门

    Springcloud入门学习笔记 1. 项目初始化配置 1. 1. 新建maven工程 使用idea创建maven项目 1. 2. 在parent项目pom中导入以下依赖 <parent> ...

  10. 二进制部署Redis-5.07

    Redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理. 它支持字符串.哈希表.列表.集合.有序集合,位图,hyperloglogs等数据类 ...