使用 Azure Custom Vision 训练水果质量图像分类器:IoT-For-Beginners 制造项目实战
【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners
本教程取自 IoT-For-Beginners 开源课程的制造与加工项目(4-manufacturing)第一课,系统讲解如何利用机器学习中的图像分类技术区分好果与坏果(如未熟、过熟、碰伤、腐烂),并完整演示基于 Azure Custom Vision 云服务从零训练、测试与重训一个水果质量检测器的全过程。学完本课,你将掌握图像分类与迁移学习的核心概念,能够用 Azure CLI 创建认知服务资源,并在 Custom Vision 门户中完成数据集标注、模型训练、快速测试与迭代重训,为后续将分类器接入 IoT 设备(摄像头拍摄 → 云端分类)打下基础。
为什么要在食品分拣中使用 AI 与机器学习
养活全球人口是一项艰巨挑战,尤其是要让食品价格对所有人都可负担。其中最大的成本之一便是人力,因此农场主们越来越依赖自动化和 IoT 工具来降低劳动成本。人工采摘是劳动密集型工作,在发达国家正逐步被机械取代。然而机械采收有一个天然缺陷:在收割的同时完成食品分拣。
并非所有作物都会均匀成熟。例如番茄藤上大部分果实已经可以采摘时,仍会残留一些青色果实。提前采收属于浪费,但对农民来说,用机器一次性收割所有果实、之后再丢弃未熟的果实,成本更低、操作更简单。
自动化采收的兴起把分拣工作从田间转移到了工厂。食品在长长的传送带上移动,由成组的工人逐件挑拣、移除不符合质量标准的果实。机械让采收变便宜了,但人工分拣仍然是一笔开销。
下一步演进是让机器来分拣——无论是内置于收割机,还是部署在加工厂。第一代分拣机使用光学传感器检测颜色,通过杠杆或压缩空气将绿番茄拨入废料箱,让红番茄继续沿传送带网络前进。
✅ 思考一下:在工厂或田间,要让这类光学传感器正常工作,需要具备哪些条件?
分拣机的最新演进则利用了 AI 和机器学习,用训练好的模型区分好果与坏果——不仅依靠绿番茄对红番茄这种明显的颜色差异,还能识别可能预示病害或碰伤的细微外观差异。
机器学习视角下的图像分类
传统编程与机器学习的本质区别
传统编程是:取数据 → 对数据应用算法 → 得到输出。以本课程此前的地理围栏(geofence)项目为例:输入 GPS 坐标和围栏区域,应用 Azure Maps 提供的算法,输出该点是否在围栏内。输入越多数据,得到越多输出。
机器学习把这一过程反转了——从数据和已知输出出发,让机器学习算法从数据中学习。之后便可以把这个训练好的算法(称为机器学习模型,简称模型)用于输入新数据、获得新输出。
🎓 机器学习算法从数据中学习的过程称为训练(training);输入的样本与对应的已知输出统称为训练数据(training data)。
例如,把数百万张未熟香蕉图片作为输入训练数据(输出标记为unripe),再把数百万张熟香蕉图片作为训练数据(输出标记为ripe),ML 算法就会基于这些数据构建一个模型。之后给这个模型一张全新的香蕉图片,它就能预测这张图是熟香蕉还是生香蕉。
🎓 ML 模型的输出结果称为预测(prediction)。
模型输出的是概率而非二值答案
ML 模型并不给出"是/否"式的二值答案,而是输出概率。例如模型分析一张香蕉图片后可能预测ripe的概率为 99.7%、unripe的概率为 0.3%,你的代码随后选取最优预测并判定这根香蕉是熟的。
用于识别图像的 ML 模型称为图像分类器(image classifier)——它接收带标签的图片,然后依据这些标签对新的图片进行分类。
💁 这是一种简化表述,训练模型还有其他许多方式,并非总需要带标签的输出,例如无监督学习。课程中同时提供了 ML for Beginners(24 课时机器学习课程)供深入学习。
训练图像分类器的核心思路:迁移学习
要成功训练一个图像分类器,理论上需要数百万张图片。但事实是:一旦你拥有一个基于数百万甚至数十亿张杂项图片训练好的图像分类器,就可以通过迁移学习(transfer learning),仅用一小批图片对它进行复用和重训,并获得出色的效果。
🎓 迁移学习是指把已有 ML 模型学到的知识,迁移到一个基于新数据构建的新模型上。
一旦图像分类器在大量图片上训练完成,其内部结构便非常擅长识别形状、颜色与纹理。迁移学习让模型把已经学会的"识别图像局部"的能力,应用到识别全新图片上。
可以把它类比为儿童形状认知书:一旦你能识别半圆、矩形和三角形,就能根据这些形状的组合方式认出帆船或猫。图像分类器负责识别形状,迁移学习则教会它"什么组合构成一艘船或一只猫"——或者是一根熟香蕉。
完成这件事的工具很多,其中包括云服务——帮你训练模型,然后通过 Web API 调用模型。
💁 训练这些模型需要大量算力,通常依赖图形处理器(GPU)——也就是让 Xbox 游戏画面惊艳的那种专用硬件。借助云,你可以按需租用配备 GPU 的强算力计算机,只为需要的时间付费。
认识 Custom Vision
Custom Vision 是一款云端图像分类器训练工具,只需少量图片即可训练分类器。你可以通过 Web 门户、Web API 或 SDK 上传图片,并为每张图片打上一个表示分类的标签(tag),然后训练模型、测试其表现。对模型满意后,你可以发布模型的多个版本,通过 Web API 或 SDK 访问。
💁 每个分类类别最少可以用 5 张图片训练出一个 Custom Vision 模型,但图片越多效果越好——每类至少 30 张可以获得更理想的精度。
Custom Vision 是微软 Cognitive Services(认知服务)家族的一员。这些是开箱即用或只需少量训练的 AI 工具,涵盖语音识别与翻译、语言理解、图像分析等,在 Azure 中以包含免费层(free tier)的服务形式提供。
💁 免费层足以完成"创建模型 → 训练 → 用于开发调试"的完整流程。关于免费层额度的详细信息,参见微软文档中 Custom Vision 的 Limits and quotas 页面。
动手第一步:用 Azure CLI 创建认知服务资源
要使用 Custom Vision,首先需要用 Azure CLI 在 Azure 中创建两个认知服务资源:一个用于 Custom Vision训练,一个用于 Custom Vision预测。
为本项目创建一个名为
fruit-quality-detector的资源组(Resource Group)。用以下命令创建免费的 Custom Vision 训练资源:
az cognitiveservices account create --name fruit-quality-detector-training \ --resource-group fruit-quality-detector \ --kind CustomVision.Training \ --sku F0 \ --yes \ --location <location>将
<location>替换为创建资源组时使用的位置。此命令会在资源组中创建名为fruit-quality-detector-training的 Custom Vision 训练资源,使用F0SKU(即免费层)。--yes表示你同意认知服务的条款与条件。💁 如果你的任何认知服务已占用免费账户,请改用
S0SKU。用以下命令创建免费的 Custom Vision 预测资源:
az cognitiveservices account create --name fruit-quality-detector-prediction \ --resource-group fruit-quality-detector \ --kind CustomVision.Prediction \ --sku F0 \ --yes \ --location <location>将
<location>替换为创建资源组时使用的位置。此命令会创建名为fruit-quality-detector-prediction的预测资源,同样使用F0免费层,--yes表示同意条款。
动手第二步:创建图像分类器项目
- 打开 Custom Vision 门户(customvision.ai),使用与 Azure 账户相同的微软账号登录。
- 参照微软文档 build a classifier 快速入门中的"创建新项目"部分创建新项目(门户 UI 可能随版本变化,文档始终是最新参考)。
- 项目命名为
fruit-quality-detector。 - 务必选用刚才创建的
fruit-quality-detector-training资源。 - 项目类型(Project Type)选择Classification(分类)。
- 分类类型(Classification Types)选择Multiclass(多类)。
- 领域(Domains)选择Food(食品)。
- 项目命名为
✅ 创建完成后,花点时间探索一下 Custom Vision 的门户界面。
动手第三步:收集并上传训练数据
训练图像分类器需要多张不同质量的水果图片,以便打上"好/坏"标签,例如一根熟香蕉和一根过熟香蕉。
💁 这些分类器可以对任意内容分类,所以如果手头没有不同品质的水果,也可以换成两种不同的水果,甚至猫和狗!
数据集规范要点
- 背景控制:理想情况下,每张图片应只包含水果本身,背景要么一致、要么多样化。务必确保背景中没有任何与"熟/生"相关的特定物件。
- 警惕"背景泄漏":不要让每个标签对应特有的背景或无关物件,否则分类器可能只会基于背景分类。文档中举了一个著名的反面案例:某个皮肤癌分类器用普通痣与癌变痣训练,而癌变痣的照片中总有一把用于测量尺寸的尺子——结果该分类器以近 100% 的准确率识别的是图片中的尺子,而不是癌变痣。
- 分辨率真相:图像分类器在极低分辨率下运行。Custom Vision 最多可接收 10240x10240 的训练与预测图片,但模型实际是在227x227分辨率下训练与推理的。大图会被压缩到这个尺寸,因此务必让被分类物体占据图片的绝大部分,否则它在小图里可能小到无法辨认。
- 数量与配比:每个标签至少需要 5 张图片用于训练,越多越好;此外还需要几张额外的图片用于测试。训练集与测试集应针对同一对象的不同照片。文档给出的基准方案是:用 2 根熟香蕉,从不同角度各拍几张,至少 7 张(5 张训练、2 张测试);再用 2 根生香蕉重复同样过程。最终至少应有 10 张训练图(熟、生各 ≥5 张)和 4 张测试图(熟、生各 2 张)。熟与生的数量应大致对等,多多益善。
- 文件格式:图片应为 PNG 或 JPEG,单张小于 6MB。例如 iPhone 拍摄的高分辨率 HEIC 图片需要转换、必要时压缩后才能使用。
本仓库的课程目录恰好内置了一套可直接使用的示例数据集:训练集位于 4-manufacturing/lessons/1-train-fruit-detector/images/training,包含ripe(熟,25 张)与unripe(生,29 张)两个子目录;测试集位于 4-manufacturing/lessons/1-train-fruit-detector/images/testing,同样按ripe/unripe各 2 张划分,且命名与训练集不重复,符合"测试图片不得用于训练"的要求。仓库内 banana-training-images 示例图 展示了多角度拍摄两根不同香蕉的照片形态。
上传、标注与训练
- 参照微软文档 build a classifier 快速入门中的"上传并标注图片"部分,上传训练图片;将熟果标注为
ripe,生果标注为unripe。 - 参照文档中的"训练分类器"部分,对已上传图片执行训练;在选择训练类型时,选择Quick Training(快速训练)。
随后分类器开始训练,通常需要几分钟完成。
🍌 如果训练期间你决定吃掉这些水果,务必先确保留有足够的测试图片!
测试你的图像分类器
训练完成后,可以用一张新图来检验分类器的表现。
- 参照微软文档中的 test your model 文档测试分类器。请使用之前专门留出的测试图片,不要使用任何训练图片。
- 把手里所有测试图片都试一遍,观察各标签的概率输出。
测试时你还会看到 Custom Vision 为本次训练生成的评估指标——Precision(精确率)、Recall(召回率)与AP(Average Precision,平均精度),它们从不同角度量化模型质量,可参照文档的 evaluate the classifier 部分理解其含义。
用预测结果迭代重训模型
测试时分类器可能给出与预期不符的结果。要理解原因:图像分类器基于"图片特定特征与某个标签匹配的概率"来预测图中内容,它并不理解图片里是什么——它不知道香蕉是什么,也不知道什么特征使香蕉成为香蕉而非一艘船。改进方法是:用分类错误的图片重新训练。
每次使用 Quick Test 快速测试进行预测时,图片与结果都会被保存下来,你可以用这些图片重训模型:
- 参照微软文档中"use the predicted image for training(将预测图片用于训练)"部分,为每张图片打上正确的标签后重新训练。
- 重训完成后,再用新图片测试,观察效果是否改善。
💡 重训一次就会产生一个新的迭代(iteration)。迭代机制会在本项目的下一课中发挥关键作用——发布迭代后即可获得形如
https://<location>.api.cognitive.microsoft.com/customvision/v3.0/Prediction/<id>/classify/iterations/Iteration2/image的预测 API 端点与Prediction-Key密钥,供 IoT 设备调用。相关细节可参见 2-check-fruit-from-device 课程。
挑战:测试模型的泛化边界
想一想:如果给一个只在香蕉上训练过的模型输入一张草莓图片、一张充气香蕉图片、一个穿着香蕉服装的人,甚至一个黄色卡通角色,会发生什么?试着用这些"越界"图片跑一次预测并观察结果,你会直观感受到图像分类器依赖特征概率而非真实语义理解的本质。
课后延伸与作业
- 评估指标自学:回顾训练完成后生成的 Precision、Recall、AP 数值,理解它们如何刻画模型质量。
- 模型改进:阅读 Custom Vision 关于 how to improve your Custom Vision model 的文档,掌握通过补充多样数据、平衡类别、提升图片质量等方式改进模型的方法。
- 作业:完成 assignment.md——为多种水果和蔬菜训练分类器。注意,对于成熟时会变色的水果,图像分类器可能不如色彩传感器有效(分类器通常在灰度/低分辨率特征上工作);尤其建议尝试外观相似的水果(如苹果与番茄)检验分类器的区分能力。
本课在课程体系中的位置
本课是制造与加工项目(4-manufacturing/README.md)四课系列的第一课。完整的知识链为:本课在云端训练水果质量检测器 → 2-check-fruit-from-device 用 IoT 设备摄像头拍摄并调用已发布的模型 → 3-run-fruit-detector-edge 将模型部署到边缘设备本地推理 → 4-trigger-fruit-detector 用接近传感器触发检测并完成原型架构设计。完成本课的模型训练与发布,是后续所有课程的前提。
【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考