前言
今天大姚给大家分享一个.NET开源、免费、跨平台(支持Windows、Linux、macOS多个操作系统)的机器学习框架:ML.NET。并且本文将会带你快速使用ML.NET训练一个属于自己的图像分类模型,对图像进行分类。
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230249070-278187377.png)
ML.NET框架介绍
ML.NET 允许开发人员在其 .NET 应用程序中轻松构建、训练、部署和使用自定义模型,而无需具备开发机器学习模型的专业知识或使用 Python 或 R 等其他编程语言的经验。该框架提供从文件和数据加载的数据。数据库,支持数据转换,并包含许多机器学习算法。
AI和机器学习有什么区别?
AI 是一个计算分支,涉及训练计算机执行通常需要人类智能的操作。机器学习是 AI 的一部分,它涉及计算机从数据中学习和在数据中发现模式,以便能够自行对新数据进行预测。
ML.NET支持的.NET框架
目前ML.NET支持.NET、.NET Core (版本 2.0 及更高版本)和 .NET Framework (版本 4.6.1 及更高版本)。
框架源代码
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230305563-148209660.png)
ML.NET官方提供的使用示例
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230319607-1875041062.png)
ML.NET使用环境安装
安装本机.NET环境
首先需要准备好本机的.NET开发环境:
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230332754-1957102706.png)
Visual Studio环境配置
选择.NET 桌面开发工作负荷以及可选的 ML.NET Model Builder 组件。
ML.NET Model Builder 组件介绍:提供易于理解的可视界面,用于在 Visual Studio 内生成、训练和部署自定义机器学习模型。
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230345790-639506203.png)
创建一个WinForms应用
创建一个名为:MLNETExercise
的.NET8 WinForms应用。
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230357292-639440482.png)
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230402706-1502401907.png)
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230409027-1934682311.png)
准备好需要训练的图片
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230421258-278522753.png)
训练图像分类模型
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230435830-1287814308.png)
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230440938-334143350.png)
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230449668-1157509174.png)
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230459711-1862221628.png)
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230505817-1343470173.png)
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230511993-1489521773.png)
测试训练模型的分析效果
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230526795-1876639533.png)
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230533073-2136158570.png)
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230539150-1025625664.png)
在WinForms中调用图像分类模型
调用完整代码
private void Btn_SelectImage_Click(object sender, EventArgs e)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.Title = "Select Image";
openFileDialog.Filter = "Image Files (*.jpg, *.png, *.bmp)|*.jpg;*.png;*.bmp|All Files (*.*)|*.*";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
// 获取用户选择的文件路径
string selectedImagePath = openFileDialog.FileName;
// 从文件加载图片
Image img = Image.FromFile(openFileDialog.FileName);
this.pictureBox.Image = img;
var imageBytes = File.ReadAllBytes(selectedImagePath);
MLImageAnalysis.ModelInput sampleData = new MLImageAnalysis.ModelInput()
{
ImageSource = imageBytes,
};
//Load model and predict output
var result = MLImageAnalysis.Predict(sampleData);
this.txt_Box.Text = result.PredictedLabel;
}
}
}
运行效果展示
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230555720-1936217088.png)
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230602770-1556866044.png)
![](https://img2024.cnblogs.com/blog/1336199/202407/1336199-20240714230608267-1798595491.png)
项目源码地址
更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个Star支持💖。
- GitHub开源地址:https://github.com/dotnet/machinelearning
- 本文示例源码地址:https://github.com/YSGStudyHards/DotNetExercises/tree/master/MLNETExercise
优秀项目和框架精选
该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。
DotNetGuide技术社区交流群
- DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
- 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
- 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。