ML.NET是微软提供的机器学习库,从VS2019开始直接集成在VS里,帮助.NET开发者快速开发自己的机器学习应用。目前ML.NET的资料已经非常丰富,开发者可以到其官网查阅相关资料。https://dotnet.microsoft.com/en-us/learn/ml-dotnet。
本篇博客以健康码识别(绿码/黄码/红码)为例,看在.NET中如何使用ML.NET。
一、准备工作
启用ML.NET Model Builder。VS中工具-选项-预览功能,勾选Enable ML.NET Model Builder。
然后就可以右键项目,添加"机器学习":
二、具体步骤
点击上图中的“机器学习”,弹出如下页面:
可以看到有文本分类、图像分类的等等功能。因为我们是分类绿码黄码红码图片,所以选择图像分类。
看到训练环境可以选择本地或者Azure(微软云)。点击"数据"。
选择本地准备好的分门别类整理好的健康码的图片(将采集到的图片数据分为两类:训练集和测试集,这里使用训练集图片训练,测试集可以用来测试模型的预测效果)。当然这里的数据集的质量及数量都有一定的讲究,尽量有代表性且数量相等。像我下面的红码只有一张图片就不太符合要求,可能对识别结果准确率有影响(这里仅做演示)。
点击"训练"
开始训练即可。这里训练的时长跟机器的配置、网络状态及图片的数目都有关系,像上面的数据量在我的电脑上训练可能需要半个小时左右。
关于这个本地训练时长的大小,微软也给出了相应的参考。https://docs.microsoft.com/zh-cn/dotnet/machine-learning/automate-training-with-model-builder#how-long-should-i-train-for。
模型训练中...,如果网络不稳定,会重新下载...
当然更好的方法是直接用迅雷等工具下载这个meta文件(https://aka.ms/mlnet-resources/resnet_v2_50_299.meta)并放到你本机的MLNET目录中(比如我的是C:\Users\arizon\AppData\Local\Temp\MLNET)。
点击训练,可以看到训练过程,默认会经过好几轮训练。
训练完成后,可以对该训练好的模型进行评估。
选择本地的测试集中的图片进行评估
可以看到该模型智能识别为绿码。点击下一步,获取代码。
添加到项目
可以看到自动添加了两个项目,同时直接给出了后续步骤。
设置MLConsoleAppML.ConsoleApp项目为启动项目,然后运行就可以看到识别结果。
这是一个控制台的示例,可以将其引用到你的任意.NET项目中。另外可以看到项目中有个MLModel.zip模型文件,如果模型的训练效果不佳,可以重新训练,然后将新训练得到的模型文件替换更新项目中的这个模型文件即可。
该演示非常简单的就实现了机器学习的功能,ML.NET很强大的机器学习库!