Skip to content

ML .NET 猫狗图像分类

L edited this page Mar 9, 2022 · 8 revisions

本文将使用ML .NET的图像分类对猫狗的图像数据进行训练,得到模型;
并且开发一个简单的识别程序用来识别猫咪和狗狗。

流程

根据什么是 ML.NET 以及它如何工作?中的描述,我们知道,工作流如图:
1
这里我按照我的理解重新画了一幅:
2
首先我们需要准备训练数据集和测试数据集;
然后通过训练数据集进行训练,获得训练模型;
之后检验模型是否合格;
如果合格,投入使用;
如果不合格,重新设计训练数据集的数据,或者调参,重新训练,直至合格。

数据集来源

kaggle Dogs vs. Cats中下载train.ziptest1.zip
其中train.zip中的图像用于训练,test1.zip用于测试、检验模型是否可用。
下载解压之后train.zip得到了很多图像
3
根据图像名称,将猫咪和狗狗的图像分成两个文件夹
5
6
7

开始分类训练

在项目中,创建训练模型
6
如图所示,进入一个可视化的配置页面,在方案一栏选择图像分类
7
第二步选择训练环境,选择本地CPU
如果有条件使用Azure的话,可以选择通过Azure进行训练
10
也可以选择本地GPU进行训练,点击检查兼容性可以看到提示,根据提示可以确定本机是否支持训练,并且得知需要安装的内容
11
第三步选择准备好的训练数据集
12
根据左边的提示,只需要按照文件夹目录,将不同分类的图像放置到不同的文件夹下即可,这点在准备数据的时候已经完成
第四步,开始训练
13
这里我使用开发机训练了大概1.7天左右的时间,完成了训练
训练结束后有一个简单的测试功能,
14
如果对于结果不满意,可以重新训练
我们也可以通过准备好的测试数据集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分数相差较小的时候,可能是识别效果不好或者识别出错
比如拿一张既不是猫也不是狗的图像进行识别,得到的分数几乎相同,此时应该处理为无法识别为猫或者狗
至此,我们可以使用训练好的模型了。

调用模型完成功能

制作一个简单的输入-输出功能,调用模型,完成功能
15

评估与重新训练

与价格预测篇基本类似,不再赘述
注意这次使用的算法是MLContext.MulticlassClassification,所以评估也应该使用MLContext.MulticlassClassification.Evaluate

总结

可以看出,ML .NET降低了机器学习的复杂度,使对机器学习零基础的开发也可以无压力使用机器学习完成一些工作
我们只需要通过快速学习,了解ML .NET可以完成哪些工作,并通过简单的可视化页面输入数据,选择算法,就可以完成工作
同时,如果对机器学习有一定了解,也可以更改代码,调参,得到更好的模型

示例代码

CatAndDogClassification

参考资料

10分钟快速入门
官方示例machinelearning-samples
教程:通过 ML.NET 图像分类 API 使用迁移学习自动进行肉眼检查

Clone this wiki locally