本文将使用ML .NET的图像分类
对猫狗的图像数据进行训练,得到模型;
并且开发一个简单的识别程序用来识别猫咪和狗狗。
流程
根据什么是 ML.NET 以及它如何工作?中的描述,我们知道,工作流如图:
这里我按照我的理解重新画了一幅:
首先我们需要准备训练数据集和测试数据集;
然后通过训练数据集进行训练,获得训练模型;
之后检验模型是否合格;
如果合格,投入使用;
如果不合格,重新设计训练数据集的数据,或者调参,重新训练,直至合格。
数据集来源
在kaggle Dogs vs. Cats中下载train.zip
和test1.zip
,
其中train.zip
中的图像用于训练,test1.zip
用于测试、检验模型是否可用。
下载解压之后train.zip
得到了很多图像
根据图像名称,将猫咪和狗狗的图像分成两个文件夹猫
和狗
开始分类训练
在项目中,创建训练模型
如图所示,进入一个可视化的配置页面,在方案一栏选择图像分类
第二步选择训练环境,选择本地CPU
如果有条件使用Azure
的话,可以选择通过Azure
进行训练
也可以选择本地GPU进行训练,点击检查兼容性
可以看到提示,根据提示可以确定本机是否支持训练,并且得知需要安装的内容
第三步选择准备好的训练数据集
根据左边的提示,只需要按照文件夹目录,将不同分类的图像放置到不同的文件夹下即可,这点在准备数据的时候已经完成
第四步,开始训练
这里我使用开发机训练了大概1.7天左右的时间,完成了训练
训练结束后有一个简单的测试功能,
如果对于结果不满意,可以重新训练
我们也可以通过准备好的测试数据集test1.zip
中的图像进行检验
最后ML .NET给出了一个使用模型的代码段
//Load sample data
var sampleData = new CatAndDogMLModel.ModelInput()
{
//想要识别的图像路径
ImageSource = @"...\TrainData\狗\dog.0.jpg",
};
//Load model and predict output
//获得识别结果
var result = CatAndDogMLModel.Predict(sampleData);
识别结果有Prediction
这个最终结果,也有Score
这样的各个分类的分数集合
当Score
分数相差较小的时候,可能是识别效果不好或者识别出错
比如拿一张既不是猫也不是狗的图像进行识别,得到的分数几乎相同,此时应该处理为无法识别为猫或者狗
至此,我们可以使用训练好的模型了。
调用模型完成功能
制作一个简单的输入-输出功能,调用模型,完成功能
评估与重新训练
与价格预测篇基本类似,不再赘述
注意这次使用的算法是MLContext.MulticlassClassification
,所以评估也应该使用MLContext.MulticlassClassification.Evaluate
总结
可以看出,ML .NET
降低了机器学习的复杂度,使对机器学习零基础的开发也可以无压力使用机器学习完成一些工作
我们只需要通过快速学习,了解ML .NET可以完成哪些工作,并通过简单的可视化页面输入数据,选择算法,就可以完成工作
同时,如果对机器学习有一定了解,也可以更改代码,调参,得到更好的模型
示例代码
参考资料
10分钟快速入门
官方示例machinelearning-samples
教程:通过 ML.NET 图像分类 API 使用迁移学习自动进行肉眼检查