C# .NET ML.NET 机器学习 图像分类

C# .NET ML.NET 机器学习 图像分类

一、 准备工作
先下载好“resnet_v2_50_299.meta”这个文件,放入“C:\Users\jk\AppData\Local\Temp\MLNET\”这个文件夹,目录不存在自己新建下。“jk”是WINDOWS登录名,注意换成你自己的。

下载地址:https://download.csdn.net/download/runliuv/15724931

新建一个“z机器学习样本1”目录,再建立“猫”和“狗”2个子目录。在网上下载“猫”和“狗”的图片各几十张,分别放到这2个子目录中。这2个子目录名也称为标签(Label)。


二、 添加和使用
新建一个“WindowsFormsApp1”的.NET FRAMEWORK 4.7 的WINFORM程序。
在菜单-工具-选项-环境-预览功能中,选中“Enable ML.NET Model Builder”

C# .NET ML.NET 机器学习 图像分类_第1张图片

 

在“WindowsFormsApp1”上右键-添加机器学习。

C# .NET ML.NET 机器学习 图像分类_第2张图片

 

选择图像分类.

C# .NET ML.NET 机器学习 图像分类_第3张图片

 

选择本地.

C# .NET ML.NET 机器学习 图像分类_第4张图片

 

选择刚才收集好的图片文件夹(D:\z机器学习样本1)。

C# .NET ML.NET 机器学习 图像分类_第5张图片

 

开始训练。

C# .NET ML.NET 机器学习 图像分类_第6张图片

 

训练完成(可能要几分钟)。

C# .NET ML.NET 机器学习 图像分类_第7张图片

 

试用模型(随便选一张猫或狗的图片)。

C# .NET ML.NET 机器学习 图像分类_第8张图片

 

添加项目。

C# .NET ML.NET 机器学习 图像分类_第9张图片

 

如何调用ML.NET的提示

C# .NET ML.NET 机器学习 图像分类_第10张图片

 


可以把 WindowsFormsApp1ML.ConsoleApp 设置为启动项。F5运行试用下。
其中predictionResult.Prediction 是识别出来的类别,predictionResult.Score 是相似度。

C# .NET ML.NET 机器学习 图像分类_第11张图片

 

把“WindowsFormsApp1”右键设置为启动项。
Nuget 中安装,这4个包尽量和“WindowsFormsApp1ML.ConsoleApp”中版本一致:
Microsoft.ML 1.5.0
Microsoft.ML.ImageAnalytics 1.5.0
Microsoft.ML.Vision 1.5.0
SciSharp.TensorFlow.Redist 1.14.0

在WINFORM界面上添加按钮和文件对话框(openFileDialog).

private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (openFileDialog1.ShowDialog() != DialogResult.OK)
                {
                    return;
                }
                string fileName = openFileDialog1.FileName;

                ModelInput sampleData = new ModelInput()
                {
                    ImageSource = fileName,
                };
                // Make a single prediction on the sample data and print results
                var predictionResult = ConsumeModel.Predict(sampleData);
                MessageBox.Show(predictionResult.Prediction);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


运行起来。就可以了。

C# .NET ML.NET 机器学习 图像分类_第12张图片

 

三、简单解析
查看 WindowsFormsApp1ML.ConsoleApp中的 ModelBuilder 类。
这个类是用来训练的。
TRAIN_DATA_FILEPATH 是训练文件索引(C:\Users\jk\AppData\Local\Temp\4233eca3-43b3-479f-97f8-50ac3124e9c7.tsv)。用记事本打开TRAIN_DATA_FILEPATH路径的文件。里面包含2列,Label和ImageSource。

C# .NET ML.NET 机器学习 图像分类_第13张图片

 

MODEL_FILEPATH 是训练后保存的模型。使用时要放到使用程序的根目录,微软自动生成的代码,路径是写死的。
CreateModel() 是训练方法。相当于我们刚才的鼠标点击训练。
如果要用代码来训练,就用代码生成 TRAIN_DATA_FILEPATH 中的 .tsv 文件 。再调用 CreateModel()。

再看 WindowsFormsApp1ML.Model 中的 ConsumeModel类。
这个类是使用。
Predict() 就是调用主入口了,子方法中 CreatePredictionEngine(),modelPath 是写死的,有需要则替换。

这个提示是正在下载resnet_v2_50_299.meta文件,从微软下载这个可能需要花很长时间:

[Source=ImageClassificationTrainer; Ensuring meta files are present., Kind=Info] Downloading resnet_v2_50_299.meta from https://aka.ms/mlnet-resources/resnet_v2_50_299.meta to C:\Users\jk\AppData\Local\Temp\MLNET\resnet_v2_50_299.meta
[Source=ImageClassificationTrainer; Ensuring meta files are present., Kind=Info] resnet_v2_50_299.meta: Downloaded 3596 bytes out of 102616931


 

你可能感兴趣的:(机器学习,c#,.net)