一、 准备工作

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

C# .NET ML.NET 机器学习 图像分类的更多相关文章

  1. AI Boot Camp 分享之 ML.NET 机器学习指南

    今天在中国七城联动,全球134场的AI BootCamp胜利落幕,广州由卢建晖老师组织,我参与分享了一个主题<ML.NET 机器学习指南和Azure Kinect .NET SDK概要>, ...

  2. 机器学习 - ML

    CNCC - 2016 | 机器学习(原文链接) Machine Learning - ML,机器学习起源于人工智能,是AI的一个分支. 机器学习的理论基础:计算学习理论 - Computationa ...

  3. 一个开源的,跨平台的.NET机器学习框架ML.NET

    微软在Build 2018大会上推出的一款面向.NET开发人员的开源,跨平台机器学习框架ML.NET. ML.NET将允许.NET开发人员开发他们自己的模型,并将自定义ML集成到他们的应用程序中,而无 ...

  4. 使用ML.NET + Azure DevOps + Azure Container Instances打造机器学习生产化

    介绍 Azure DevOps,以前称为Visual Studio Team Services(VSTS),可帮助个人和组织更快地规划,协作和发布产品.其中一项值得注意的服务是Azure Pipeli ...

  5. 开源的,跨平台的.NET机器学习框架ML.NET

    微软在Build 2018大会上推出的一款面向.NET开发人员的开源,跨平台机器学习框架ML.NET. ML.NET将允许.NET开发人员开发他们自己的模型,并将自定义ML集成到他们的应用程序中,而无 ...

  6. 机器学习、深度学习以及人工智能正在快速演进(ML、DL、AI)

    机器学习.深度学习以及人工智能正在快速演进 机器学习.深度学习和人工智能(ML.DL和AI)是彼此相关的概念,他们正在改变不知多少行业,改变其自身管理模式,同时改变做出决策的方式.显然,ML.DL和A ...

  7. 机器学习 - ML + 深度学习 - DL

    机器学习 CNCC - 2016 | 机器学习(原文链接) Machine Learning - ML,机器学习起源于人工智能,是AI的一个分支. 机器学习的理论基础:计算学习理论 - Computa ...

  8. iOS 11: CORE ML—浅析

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/OWD5UEiVu5JpYArcd2H9ig 作者:l ...

  9. 使用 .NET 5 体验大数据和机器学习

    翻译:精致码农-王亮 原文:http://dwz.win/XnM .NET 5 旨在提供统一的运行时和框架,使其在各平台都有统一的运行时行为和开发体验.微软发布了与 .NET 协作的大数据(.NET ...

随机推荐

  1. C语言函数中的3个点 ...有什么作用

    标准库提供的一些参数的数目可以有变化的函数.例如我们很熟悉的printf,它需要有一个格式串,还应根据需要为它提供任意多个"其他参数".这种函数被称作"具有变长度参数表的 ...

  2. 7. Github Pages 搭建网站

    7. Github Pages 搭建网站 个人站点 访问 https://用户名.github.io 搭建步骤 1) 创建个人站点   ->  新建仓库(注:仓库名必须是[用户名.github. ...

  3. 王下邀月熊_Chevalier的前端每周清单系列文章索引

    感谢 王下邀月熊_Chevalier 分享的前端每周清单,为方便大家阅读,特整理一份索引. 王下邀月熊大大也于 2018 年 3 月 31 日整理了自己的前端每周清单系列,并以年/月为单位进行分类,具 ...

  4. Codepen 每日精选(2018-4-6)

    按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以打开原始页面. 按照画出的路线吃豆子的交互动画https://codepen.io/createjs/f... 模拟真实手 ...

  5. Mybatis实现批量添加操作

    Mybatis实现批量添加操作 学习内容: 1. 使用 2. 代码实现 2.1 UserMapper.java 接口 2.2 UserMapper.xml 总结: 学习内容: 1. 使用 这里通过动态 ...

  6. Java基础之浅谈接口

    前言 前几篇文章我们已经把Java的封装.继承.多态学习完了,现在我们开始比较便于我们实际操作的学习,虽然它也是Java基础部分,但是其实入门容易,精通很难. 我认真的给大家整理了一下这些必须学会.了 ...

  7. 记一次使用git报错,解决Unable to negotiate with **** port 22: no matching host key type found. Their offer: ssh-rsa

    windows电脑重装系统,去官网下载了最新的git安装,一路next下来,打开bash按老路子设置,生成公钥 git config --global user.name "yourname ...

  8. Sql递归查询,Sqlserver、Oracle、PG、Mysql

    递归分两种:一种由父项向下级递归,另一种是由子项向上级递归.下面就这两种情况做个简单的处理. 假设有一个表treeview,包含字段 id,parentid,text 分别代表id,上级id,描述字段 ...

  9. linux中find与三剑客之grep用法

    find用法 find一般用来用来查找文件名称 根据文件的名称或者属性查找文件. 语法格式: find [查找范围] [参数] 参数: -name : 按照文件的名字查找文件 * :通配符 -inam ...

  10. 物理层(PHY)

    一.物理层的定义 物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础.物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境.如果您想要用尽量少的词来记住这个第一层, ...