使用 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 云服务为主线,系统讲解如何利用机器学习图像分类技术,用一小批"成熟/未成熟"水果照片训练出可区分果实好坏的模型,并完成创建资源、上传打标、训练、测试与重训的完整闭环。读完本文,你将掌握从零训练一个可被 IoT 设备通过 Web API 调用的图像分类器的全流程,并理解其背后的迁移学习与预测概率原理。
本文主体依据课程英文原文与捷克语翻译版整理(
4-manufacturing/lessons/1-train-fruit-detector/README.md及其翻译translations/cs/4-manufacturing/lessons/1-train-fruit-detector/README.md),并结合仓库内的后续课程与示例代码进行纵深补充。
背景:AI/ML 如何进入农产品分拣流水线
养活全球人口是一项高成本工程,其中最大的成本之一是人力。因此,农民越来越多地转向自动化与 IoT 工具来压缩劳动力开支。人工采摘既费时又繁重,在发达国家正逐步被机械取代;但机械采摘带来一个副作用——采摘过程中的分拣能力下降。
并非所有作物都会均匀成熟。以番茄为例,当藤上大部分果实已可收获时,仍可能有部分果实是绿色的。虽然提前采收是一种浪费,但对农民而言,用机器一次收完、之后再剔除未成熟果实,往往更便宜也更简单。
自动采摘的普及把分拣环节从田间转移到了工厂:食物在长长的传送带上行进,由人工挑出不符合质量标准的果实。尽管机械让采摘更便宜,人工分拣仍是成本。下一阶段的演进是让机器来分拣——第一代分拣机使用光学传感器检测颜色,驱动执行机构(杠杆或气流)把绿色番茄弹入废料箱,红色番茄则继续沿传送带网络前进。
最新一代分拣机则利用 AI 与机器学习:模型被训练用于区分好果实与坏果实,不仅能识别"绿番茄 vs 红番茄"这类明显的颜色差异,还能捕捉暗示病害或碰伤(bruising)的细微外观差异。这正是本课训练的"水果品质检测器"要解决的问题场景。
机器学习图像分类的核心原理
先回顾传统编程与机器学习的本质区别。传统编程是"输入数据 → 套用算法 → 得到输出"。例如在运输篇课程中,把 GPS 坐标与地理围栏交给 Azure Maps 提供的算法,得到"点在内/外"的结果——数据越多,输出越多。
机器学习则把这个过程倒过来:从数据和已知输出出发,算法从数据中学习,产出被称为机器学习模型(machine learning model,简称模型)的训练结果;之后把新数据交给模型,就能得到新输出。
🎓 机器学习算法从数据中学习的过程叫训练(training);输入与已知输出合称训练数据(training data)。
例如,给模型几百万张未成熟香蕉图片作为输入训练数据、输出标记为unripe,再给几百万张成熟香蕉图片、输出标记为ripe,ML 算法就会基于这些数据建立模型。此后给它一张新的香蕉图片,它就能预测新图属于成熟还是未成熟。
🎓 ML 模型的输出结果称为预测(prediction)。
关键点在于:ML 模型并不返回二值答案,而是返回概率。例如模型看到一张香蕉图,预测ripe概率 99.7%、unripe概率 0.3%,代码再选取最高概率项,判定该香蕉为成熟。
用于识别图像的这类 ML 模型被称为图像分类器(image classifier)——给它带标签(labelled)的图片,它就能基于这些标签对新图片进行分类。
💁 这是对 ML 的简化表述。现实中还有不需要标签输出的训练方式(如无监督学习)。课程还推荐了《ML for Beginners》24 课学习路径,可在原文档中查看对应链接。
迁移学习:用少量图片训练分类器
要"成功"训练一个图像分类器,理论上需要数百万张图片。但实际上,一旦你拥有了一个在数百万甚至数十亿张各类图片上训练好的分类器,就可以借助迁移学习(transfer learning),用一小批新图片对它进行再训练,并获得出色的效果。
🎓 迁移学习,就是把已有 ML 模型学到的知识,迁移到基于新数据建立的新模型上。
一个在广泛图片上训练过的分类器,其内部机制非常擅长识别形状、颜色和模式;迁移学习让模型把"识别图像局部"的已有能力,用来识别新的图像。可以把它想象成儿童形状书:一旦认识了半圆、长方形和三角形,就能根据这些形状的组合识别出帆船或猫——图像分类器识别形状,迁移学习则教会它"什么组合构成一艘船、一只猫,或一根成熟的香蕉"。
这类训练模型通常需要大量算力,一般依赖 GPU(Graphics Processing Units,图形处理器)——与让游戏画面出色的同一类硬件。通过云计算,你可以按需租用配备 GPU 的高性能计算时间,只在需要时获取算力。
认识 Azure Custom Vision
Custom Vision是微软提供的一项云端图像分类器训练工具,允许仅用少量图片训练分类器。你可以通过 Web 门户、Web API 或 SDK 上传图片,并为每张图片打上代表其分类的标签(tag);然后训练模型、测试效果,满意后可发布模型的版本,供 Web API 或 SDK 调用。
💁 每个分类只需 5 张图片即可训练 Custom Vision 模型,但图片越多效果越好,每个分类至少 30 张图片能获得更理想的结果。
Custom Vision 隶属于微软名为Cognitive Services(认知服务)的 AI 工具套件。这些 AI 工具既可开箱即用,也可配合少量训练,涵盖语音识别与翻译、语言理解、图像分析等能力,并以 Azure 服务的形式提供免费层。
💁 免费层足够完成"创建模型→训练→用于开发调试"的全流程。免费层的具体配额与限制,原文档引用了微软官方《Custom Vision 限制与配额》页面,建议以官方最新说明为准。
任务一:创建认知服务资源
使用 Custom Vision 前,需要先用 Azure CLI 在 Azure 中创建两个认知服务资源:一个用于 Custom Vision 训练(Training),一个用于 Custom Vision 预测(Prediction)。
- 为该项目创建名为
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的预测资源,使用F0SKU(免费层),--yes表示同意条款。
两个资源分开创建的原因在于 Custom Vision 的"训练"与"推理/预测"是两个独立服务形态:训练端负责跑训练任务,预测端负责承载已发布模型供外部应用实时调用(后文"发布与调用"一节会用到预测资源)。
任务二:创建图像分类项目
- 打开 Custom Vision 门户并登录你用于 Azure 账户的 Microsoft 账户。
- 按官方《构建分类器快速入门》中"创建新项目"的指引新建 Custom Vision 项目(门户 UI 可能变化,官方文档始终是最新参考),将项目命名为
fruit-quality-detector。 - 创建项目时务必选择此前创建的
fruit-quality-detector-training资源,并配置:- 项目类型:Classification(分类)
- 分类类型:Multiclass(多分类)
- 域(Domain):Food(食物)
✅ 可以花点时间熟悉 Custom Vision 门户中图像分类器的各项界面元素。
任务三:训练你的图像分类项目
训练分类器需要多张"好/坏"品质的水果照片,例如成熟与过熟(overripe)的香蕉。
💁 这类分类器能对任何物体分类,手边没有不同品质的水果时,用两种不同的水果、甚至猫和狗都可以!
数据收集的要点:
- 构图与背景:理想情况下每张图片只包含果实本身,背景应保持一致或具有足够多样性。务必避免背景中出现与"成熟/未成熟"相关的特异性元素。
- 背景陷阱警示:不要为每个标签准备与该分类对象无关的特有背景或道具,否则分类器可能只是按背景分类。原文档举了一个真实案例:某皮肤癌分类器用正常痣与癌变痣训练,而癌变痣照片中都放着用于量尺寸的尺子,结果该分类器几乎 100% 准确识别的是图片里的尺子,而非癌变痣。
- 分辨率约束:图像分类器以极低分辨率运行。Custom Vision 可接受最大 10240×10240 的训练与预测图片,但模型实际在227×227的尺寸上训练和运行,大图会被缩小到这个尺寸。因此被分类对象必须在图中占据足够大的面积,否则在缩小后的图上可能过小。
- 数量与格式:每个标签至少 5 张图片用于训练(越多越好),另外还需若干张测试图片。以香蕉为例:取 2 根成熟香蕉,从几个不同角度各拍若干张,至少 7 张(5 张训练、2 张测试);未成熟香蕉重复同样流程。最终至少应有 10 张训练图(成熟、未成熟各 ≥5)和 4 张测试图(成熟、未成熟各 2)。图片应为 png 或 jpeg 格式、小于 6MB;iPhone 拍摄的高分辨率 HEIC 图片需要转换并可能缩小。成熟与未成熟图片数量应大致均衡。
💁 如果你手头没有成熟和未成熟两种状态的果实,可以使用不同种类的水果,或任意两个手边可用的物体。仓库的
4-manufacturing/lessons/1-train-fruit-detector/images目录下提供了成熟/未成熟香蕉的示例图片,其中training/ripe、training/unripe各约 25 张训练样例,testing/ripe、testing/unripe各 2 张测试样例,可直接取用。
具体操作步骤:
- 按官方《构建分类器快速入门》中"上传并标记图片"的指引上传训练图片,将成熟水果标记为
ripe,未成熟水果标记为unripe。
- 按官方快速入门中"训练分类器"的指引,在已上传图片上训练分类器。训练类型选择Quick Training(快速训练)。
随后分类器开始训练,通常需要几分钟完成。
🍌 如果在训练期间决定把水果吃掉,请先确保留有足够的测试图片!
测试你的图像分类器
训练完成后,可以给分类器一张新图片来检验其表现。
- 按官方《测试你的模型》文档操作,使用此前专门留出的测试图片——不要使用任何训练过的图片。
- 把手上所有测试图片都试一遍,观察各标签的概率分布。预测以概率形式输出,代码侧取最高概率标签作为最终判定。
重新训练你的图像分类器
测试时分类器可能给出不符合预期的结果。要理解原因:图像分类器基于"图片特定特征与某标签匹配的概率"来做预测,它并不真正理解图片内容——它不知道什么是香蕉,也不理解"什么让香蕉成为香蕉而非帆船"。因此,可以用它判错的图片来改进模型。
每次用快速测试(Quick Test)做预测时,图片与结果都会被保存下来(对应 Custom Vision 门户的Predictions(预测)标签页),这些图片可用于重新训练模型。
- 按官方文档中"将预测图片用于训练"的指引,为每张预测错误的图片打上正确标签后重新训练模型。
- 重训完成后,再用新的图片测试效果。
在 Custom Vision 中每次训练都会产生一个新的迭代(iteration)(如 Iteration 1、Iteration 2……),迭代机制用于跟踪不同数据集上训练出的模型版本;快速测试时可通过下拉框选择迭代,便于跨版本对比结果。
从模型到 IoT 设备:与下一课的衔接
本课训练出的模型会在下一课(4-manufacturing/lessons/2-check-fruit-from-device/README.md)中被 IoT 设备实际调用。从仓库源码可以清楚看到这条消费链路:
- 模型需先发布(Publish)迭代,发布时指定本课创建的
fruit-quality-detector-prediction预测资源,随后门户会给出形如https://<location>.api.cognitive.microsoft.com/customvision/v3.0/Prediction/<id>/classify/iterations/Iteration2/image的预测 URL 以及必须随请求携带的Prediction-Key——只有通过该密钥校验的应用才能调用模型,其余请求会被拒绝。 - IoT 侧调用可参考
4-manufacturing/lessons/2-check-fruit-from-device/code-classify/pi/fruit-quality-detector/app.py与code-classify/virtual-iot-device/fruit-quality-detector/app.py:它们使用 Custom Vision 的 Python SDK(CustomVisionPredictionClient),先从预测 URL 中解析出 endpoint、项目 ID 与已发布迭代名,再用Prediction-Key包装成凭据创建预测客户端,最终把摄像头捕获的图片发送到云端完成分类。也就是说,本课训练的fruit-quality-detector模型,正是后续 IoT 端到端检测流程的"大脑"。
评估指标、挑战与作业
- 评估指标:训练完成后,门户会展示Precision(精确率)、Recall(召回率)和AP(Average Precision,平均精确率)等指标,用于量化模型质量,官方《评估分类器》文档对这些指标有详细解释。
- 🚀 挑战:想一想——如果用一张草莓图片、一张充气香蕉、一个穿香蕉套装的人,甚至黄色卡通角色(例如辛普森一家的人物)去测试这个只见过真实香蕉的模型,会发生什么?试着用图像搜索找些图片来预测并观察结果。
- 作业:将分类器扩展训练到多种水果与蔬菜,评估其在"外观相似水果"(如苹果与番茄)上的表现。可参考本课的作业说明
4-manufacturing/lessons/1-train-fruit-detector/assignment.md(评分标准涵盖"能否为多种水果完成训练"与"能否正确评价分类器在不同水果上的表现")。注意,以颜色变化作为成熟标志的水果,图像分类器可能不如颜色传感器有效,因为分类器通常基于灰度图像运行而非全彩图像。
小结与资源清理
本课完成了"水果品质检测器"的训练闭环:从理解 ML 图像分类与迁移学习的原理,到用 Azure CLI 创建训练/预测双资源,再到门户中建项目(Classification/Multiclass/Food)、收集与上传打标图片、Quick Training 训练、测试、用错误样本重训。这套能力随后将支撑 IoT 设备端"拍照→云端分类→判定果实品质"的实时质检应用(见制造篇其余三课)。
本课及后续课程会使用部分云资源。如果不想继续完成制造篇的后续课程,建议按仓库根目录的 clean-up.md 清理相关 Azure 资源,避免产生不必要的费用。制造篇整体脉络与四课之间的依赖关系,可参见 4-manufacturing/README.md。
【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考