当前位置: 首页 > news >正文

示例:在ML.NET中应用Model Builder模型生成器构建图片分类模型

一、目的:ML.NET 是一个开源且跨平台的机器学习框架,专为 .NET 开发人员设计。它允许你在 .NET 应用程序中构建、训练和部署机器学习模型,而无需离开 .NET 生态系统。ML.NET 支持多种机器学习任务,包括分类、回归、聚类、异常检测、推荐系统和图像处理等。

主要特点
1.    跨平台:支持 Windows、Linux 和 macOS。
2.    集成:与 .NET 生态系统无缝集成,支持 C# 和 F#。
3.    多种任务:支持分类、回归、聚类、推荐系统、异常检测、自然语言处理和图像处理等任务。
4.    易于使用:提供简单易用的 API,适合初学者和专业开发人员。
5.    可扩展:支持自定义机器学习算法和模型。
典型工作流程
1.    加载数据:从文件、数据库或内存中加载数据。
2.    预处理数据:对数据进行清洗、转换和特征工程。
3.    选择和训练模型:选择合适的机器学习算法并训练模型。
4.    评估模型:使用测试数据评估模型性能。
5.    部署模型:将训练好的模型部署到生产环境中进行预测。

Model Builder 是 Microsoft 提供的一个用于在 Visual Studio 中构建、训练和部署机器学习模型的工具。它是 ML.NET 的一部分,旨在简化机器学习模型的创建过程,使开发人员无需深入了解机器学习的复杂细节即可构建和使用模型。

下面示例演示应用Model Builder创建一个按男女分类图像的训练和使用过程


二、实现

1.    安装 Model Builder:


•    在 Visual Studio 中,打开“扩展和更新”窗口。
•    搜索并安装“ML.NET Model Builder”。

2.    启动 Model Builder:


•    在解决方案资源管理器中,右键点击项目并选择“添加” > “机器学习模型”。

3.    选择场景:


•    选择你要解决的机器学习任务,例如分类、回归、推荐系统等。 

 本示例选择图像分类

4.    加载数据:


•    选择数据源,可以是本地文件、SQL 数据库或其他数据源。
•    配置数据加载选项,例如分隔符、是否包含标题等。 

 

本示例选择的是本地已经创建好的男女图片数据源,如下是我本机数据源

MAN目录数据集

 

WOMAN数据集 

 

5.    训练模型:


•    Model Builder 会自动选择最佳算法并进行训练。
•    你可以查看训练进度和模型性能指标。 

 

6.    评估模型:


•    查看模型的评估结果,例如准确率、精度、召回率等。
•    如果不满意,可以调整数据或重新训练。 

  点击浏览图片选择一张图片,此时会应用训练好的模型对该图像进行分类,并输出分类结果

 

7.    生成代码:


•    Model Builder 会生成用于训练和预测的代码文件。
•    你可以将这些代码集成到你的项目中。 

 

可以使用上面模板生成项目,也可以提取代码封装成通用API调用 

    public class SexClassification{public static IOrderedEnumerable<KeyValuePair<string, float>> PredictAllLabels(byte[] imageBytes){//var imageBytes = File.ReadAllBytes(@"C:\Users\LENOVO\Pictures\图像分类\人物\0348134dd5de2a80f148522228b33263.jpg");var sampleData = new SexClassificationMLModel.ModelInput(){ImageSource = imageBytes,};// Make a single prediction on the sample data and print results.return SexClassificationMLModel.PredictAllLabels(sampleData);}public static string PredictLabel(byte[] imageBytes){return PredictAllLabels(imageBytes)?.FirstOrDefault().Key;}}

 如上既是封装的一个图像按男女分类的方法,你可以按如下方法,浏览一张图片并调用接口来输出分类结果

        private async void Button_Click(object sender, RoutedEventArgs e){OpenFileDialog openFileDialog = new OpenFileDialog();//openFileDialog.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory; //设置初始路径openFileDialog.Filter = "PNG文件(*.png)|*.png|JPG文件(*.jpg)|*.jpg|所有文件(*.*)|*.*"; //设置“另存为文件类型”或“文件类型”框中出现的选择内容openFileDialog.FilterIndex = 2; //设置默认显示文件类型为Csv文件(*.csv)|*.csvopenFileDialog.Title = "打开文件"; //获取或设置文件对话框标题openFileDialog.RestoreDirectory = true; //设置对话框是否记忆上次打开的目录openFileDialog.Multiselect = false;//设置多选if (openFileDialog.ShowDialog() != true)return;//var imageBytes = System.IO.File.ReadAllBytes(@"C:\Users\LENOVO\Pictures\图像分类\人物\0348134dd5de2a80f148522228b33263.jpg");this.btn.Background = new ImageBrush(new BitmapImage(new Uri(openFileDialog.FileName))) { Stretch = Stretch.UniformToFill };this.btn.Content = "正在生成结果...";var result = await Task.Run(() =>{var imageBytes = System.IO.File.ReadAllBytes(openFileDialog.FileName);return SexClassification.PredictLabel(imageBytes);});this.btn.Content = $"输出结果:{result}";}

效果:

 

三、环境


VS2022,NET8.0

需要了解的知识点

ML.NET 文档 - 教程和 API 参考 | Microsoft Learn 

什么是模型生成器,它的工作原理是怎样的? - ML.NET | Microsoft Learn 

什么是 ML.NET 以及它如何工作? - ML.NET | Microsoft Learn 

教程:在 Azure 中使用 Model Builder 训练图像分类模型 - ML.NET | Microsoft Learn 

教程:用于对图像进行分类的 ML.NET 分类模型 - ML.NET | Microsoft Learn 

源码地址

https://github.com/HeBianGu/ML-API

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

了解更多

System.Windows.Controls 命名空间 | Microsoft Learn

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 定位Oracle表空间问题
  • 基于若依框架开发的Spring Boot+Vue的MES(生产制造执行系统)是一种专为中小型工厂设计的ERP(企业资源计划)系统
  • Nerd Fonts
  • 如果你感到焦虑、精神内耗,那就跑步去吧!
  • Spring Cloud全解析:注册中心之Eureka服务发现
  • 前端 HTML 概述
  • MATLAB在科研领域的重要性
  • E25.【C语言】练习:修改二进制序列的指定位
  • LeetCode Medium|【3. 无重复字符的最长子串】
  • 41缺失的第一个正数【力扣】【C++】
  • SAP支出管理,企业成本控制的智能钥匙
  • C语言之unsigned long long与struct相互转换实例(五十六)
  • 基于 systemc-2.3.1的virtual device 接入 qemu-arm
  • 深入解析 KMZ 文件的处理与可视化:从数据提取到地图展示项目实战
  • 计算几何 点乘 两点间距离 两向量夹角
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • angular组件开发
  • classpath对获取配置文件的影响
  • docker-consul
  • JAVA SE 6 GC调优笔记
  • leetcode388. Longest Absolute File Path
  • nodejs调试方法
  • PHP变量
  • Python进阶细节
  • Python学习笔记 字符串拼接
  • quasar-framework cnodejs社区
  • rabbitmq延迟消息示例
  • Rancher如何对接Ceph-RBD块存储
  • 阿里云Kubernetes容器服务上体验Knative
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 工程优化暨babel升级小记
  • 基于axios的vue插件,让http请求更简单
  • 使用agvtool更改app version/build
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • ionic异常记录
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #AngularJS#$sce.trustAsResourceUrl
  • #nginx配置案例
  • (0)Nginx 功能特性
  • (10)STL算法之搜索(二) 二分查找
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (一)VirtualBox安装增强功能
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • *Django中的Ajax 纯js的书写样式1
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • :class的用法及应用
  • @FeignClient注解,fallback和fallbackFactory
  • [AIGC] SpringBoot的自动配置解析
  • [AIGC] 解题神器:Python中常用的高级数据结构