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
C# .NET ML.NET 机器学习 图像分类的更多相关文章
- AI Boot Camp 分享之 ML.NET 机器学习指南
今天在中国七城联动,全球134场的AI BootCamp胜利落幕,广州由卢建晖老师组织,我参与分享了一个主题<ML.NET 机器学习指南和Azure Kinect .NET SDK概要>, ...
- 机器学习 - ML
CNCC - 2016 | 机器学习(原文链接) Machine Learning - ML,机器学习起源于人工智能,是AI的一个分支. 机器学习的理论基础:计算学习理论 - Computationa ...
- 一个开源的,跨平台的.NET机器学习框架ML.NET
微软在Build 2018大会上推出的一款面向.NET开发人员的开源,跨平台机器学习框架ML.NET. ML.NET将允许.NET开发人员开发他们自己的模型,并将自定义ML集成到他们的应用程序中,而无 ...
- 使用ML.NET + Azure DevOps + Azure Container Instances打造机器学习生产化
介绍 Azure DevOps,以前称为Visual Studio Team Services(VSTS),可帮助个人和组织更快地规划,协作和发布产品.其中一项值得注意的服务是Azure Pipeli ...
- 开源的,跨平台的.NET机器学习框架ML.NET
微软在Build 2018大会上推出的一款面向.NET开发人员的开源,跨平台机器学习框架ML.NET. ML.NET将允许.NET开发人员开发他们自己的模型,并将自定义ML集成到他们的应用程序中,而无 ...
- 机器学习、深度学习以及人工智能正在快速演进(ML、DL、AI)
机器学习.深度学习以及人工智能正在快速演进 机器学习.深度学习和人工智能(ML.DL和AI)是彼此相关的概念,他们正在改变不知多少行业,改变其自身管理模式,同时改变做出决策的方式.显然,ML.DL和A ...
- 机器学习 - ML + 深度学习 - DL
机器学习 CNCC - 2016 | 机器学习(原文链接) Machine Learning - ML,机器学习起源于人工智能,是AI的一个分支. 机器学习的理论基础:计算学习理论 - Computa ...
- iOS 11: CORE ML—浅析
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/OWD5UEiVu5JpYArcd2H9ig 作者:l ...
- 使用 .NET 5 体验大数据和机器学习
翻译:精致码农-王亮 原文:http://dwz.win/XnM .NET 5 旨在提供统一的运行时和框架,使其在各平台都有统一的运行时行为和开发体验.微软发布了与 .NET 协作的大数据(.NET ...
随机推荐
- 微信小程序 MinUI 组件库系列之 price 价格组件
MinUI 是基于微信小程序自定义组件特性开发而成的一套简洁.易用.高效的组件库,适用场景广,覆盖小程序原生框架.小程序组件化框架等,并且提供了高效的命令行工具.MinUI 组件库包含了很多基础的组件 ...
- 深入理解ES6之《扩展对象》
属性初始值的简写 当对象字面量只有一个属性的名称时,JS引擎会在可访问作用域中查找其同名变量:如果找到则该变量的值被赋给对象字面量里的同名属性 function createPerson(name, ...
- java中为什么接口中的属性都默认为static和final?
1)为什么接口中的属性都默认为static和final?Sun公司当初为什么要把java的接口设计发明成这样?[新手可忽略不影响继续学习]答:马克-to-win:接口中如果可能定义非final的变量的 ...
- Hadoop真分布式实现SSH免密登录
首先需要两台服务器(CentOS安装Linux见:https://www.cnblogs.com/syq816/p/12355115.html) 伪分布式的搭建见:https://www.cnblog ...
- Mysql中如何开启慢查询功能?
1.修改mysql的配置文件my.ini,增加如下信息,修改之后需要重启mysql服务器. 2.执行一句sql查询语句,结果如下. mysql> select count(*) from ecs ...
- 解决stram++的host代理443端口被占用的问题(电脑有虚拟机进!!)
解决stram++的host代理443端口被占用的问题 一.steam++ 最近在用steam++这个开源且功能强大的加速器,过多就不介绍了 主页地址跳转:Steam++ - 主页 (steampp. ...
- mysql HikariCP连接池配置
#连接池配置 #最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size spring.datasource.hikari.minimum ...
- 定时执行任务-springboot
定时执行任务-springboot 先看两个接口 这两个接口springboot已经帮我们封装好了,我们不需要去手动使用 TaskScheduler //任务调度者 TaskExecutor //任务 ...
- Python学习阵痛期
Python和之前学习的Java语法上有较大的区别,例如Java中for循环常使用++自增符,在Python中是没有++的. 因为Python中整型.字符型等都是不可变的,一改变值就重新分配了新的内存 ...
- 小程序canvas 圆角框带填充颜色
// ctx: 获取canvas的id --- const ctx = wx.createCanvasContext('canvasId') // x 横坐标 y 纵左边 w 框的宽度 h 框的高 ...