Press "Enter" to skip to content

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

一、 准备工作

 

IDE是 VS2019。

 

先下载好“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”

 

 

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

 

 

选择图像分类.

 

 

选择本地.

 

 

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

 

 

开始训练。

 

 

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

 

 

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

 

 

添加项目。

 

 

如何调用ML.NET的提示

 

 

可以把 WindowsFormsApp1ML.ConsoleApp 设置为启动项。F5运行试用下。

 

其中predictionResult.Prediction 是识别出来的类别,predictionResult.Score 是相似度。

 

 

把“WindowsFormsApp1”右键设置为启动项。

 

Nuget 中安装:

 

Microsoft.ML 1.5.0

 

Microsoft.ML.ImageAnalytics 1.5.0

 

Microsoft.ML.Vision 1.5.0

 

SciSharp.TensorFlow.Redist 1.14.0

 

,这4个包尽量和“WindowsFormsApp1ML.ConsoleApp”中版本一致

 

在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);
            }
        }

 

 

运行起来。就可以了。

 

三、简单解析

 

查看 WindowsFormsApp1ML.ConsoleApp中的 ModelBuilder 类。

 

这个类是用来训练的。

 

TRAIN_DATA_FILEPATH 是训练文件索引(C:\Users\jk\AppData\Local\Temp\4233eca3-43b3-479f-97f8-50ac3124e9c7.tsv)。用记事本打开TRAIN_DATA_FILEPATH路径的文件。里面包含2列,Label和ImageSource。

 

 

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

 

end

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注