多水果图像分类器训练实战:从香蕉扩展到多类别质检——IoT-For-Beginners 制造业课程作业深度指南
多水果图像分类器训练实战从香蕉扩展到多类别质检——IoT-For-Beginners 制造业课程作业深度指南【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本篇文章以 4-manufacturing/lessons/1-train-fruit-detector/assignment.md 的课后作业为核心骨架结合同课 README.md 与后续课程源码系统讲解如何将只识别一种水果香蕉熟度的图像分类器扩展为能区分多种水果、多类别质量标签的实战模型。你将掌握多标签训练的数据准备规范、Azure Custom Vision 训练/评估全流程、跨品类预测的局限性与改进策略并能从源码层面理解 IoT 设备调用分类器预测 API 的完整调用链。作业背景从单水果到多水果的分类器演进在第 15 课《Train a fruit quality detector》中你已经使用 Azure Custom Vision 训练了一个图像分类器其目标仅是区分同一种水果香蕉的熟与未熟两个标签。而本次作业要求更进一步训练分类器识别多种水果且允许水果处于不同成熟度训练效果会因水果类型、以及熟果与生果之间的外观差异而不同需要特别关注外观相似的水果例如苹果与西红柿之间的区分能力。也就是说模型的标签集从「{ripe banana, unripe banana}」扩展为「{ripe apple, unripe apple, ripe tomato, unripe tomato}」这类多类别集合分类问题也从简单的二分类演化为真正的多类别Multiclass图像分类。✅ 思考题观察你身边的果蔬——无论农场、花园还是超市它们是否成熟度完全一致多水果训练正是模拟工厂/仓库流水线上一篮混装、需逐级分拣的真实场景。为什么图像分类器不总是最佳选择作业文档给出了一个重要提示对于成熟时会发生颜色变化的水果图像分类器可能不如颜色传感器color sensor有效——因为许多分类器实际运行在灰度图像上而不是全彩图像。这背后是分类器的实际运行机制Custom Vision 接受最大 10240x10240 的训练/预测图片但训练与推理均将图片缩放至 227x227 分辨率见 README.md。在如此低的分辨率下依赖绿色→红色这类强颜色信号的判断确实可能被基于色相的光学传感器如流水线上用杠杆把青西红柿弹入废料箱的早期光学分拣机做得更直接。这也是为什么传统光学分拣是第一代自动化方案而 ML 模型的价值在于识别疾病、瘀伤、腐烂等更微妙的形态差异。前置知识回顾图像分类与迁移学习在动手扩展训练之前需要明确几个核心概念均来自 第 15 课 README传统编程数据 算法 → 输出机器学习数据 已知输出 → 训练出模型model→ 模型对新数据输出预测prediction图像分类器image classifier基于带标签图片训练对未见图片按标签进行分类的模型迁移学习transfer learning分类器在海量数百万乃至数十亿图片上预训练后其内部已擅长识别形状、颜色与纹理再用少量新图片微调即可适配新任务。迁移学习正是 Custom Vision 能以「每标签最少 5 张图片」起步的原因官方建议至少 30 张以获得更好效果。本次多水果作业正是迁移学习能力的直接检验。实战一训练多水果分类器的完整流程1. 准备 Azure 资源训练 预测使用 Azure CLI 在资源组fruit-quality-detector中创建两个认知服务资源SKU 均为免费层F0# 训练资源 az cognitiveservices account create --name fruit-quality-detector-training \ --resource-group fruit-quality-detector \ --kind CustomVision.Training \ --sku F0 \ --yes \ --location location # 预测资源 az cognitiveservices account create --name fruit-quality-detector-prediction \ --resource-group fruit-quality-detector \ --kind CustomVision.Prediction \ --sku F0 \ --yes \ --location locationlocation替换为创建资源组时所用的区域--yes表示同意认知服务条款若免费账户已占用任一认知服务的免费层则改用S0SKU。2. 创建多类别分类项目在 CustomVision.ai设置项取值资源fruit-quality-detector-training项目类型Classification分类分类类型Multiclass多类别域Food食品对于本次多水果作业Multiclass 意味着每张图片只归属一个标签如熟苹果模型输出的是各标签的概率分布取概率最高者作为预测结果。这与每张图可含多个标签的 Multilabel 是不同的建模思路。3. 多水果训练数据采集规范采集数据是本次作业的核心工作量需遵守以下规范源于 README.md数量每个标签至少 5 张训练图更多更好建议 30 张另需若干独立测试图用于训练后的验证绝不与训练图重复格式PNG 或 JPEG单张小于 6MBiPhone 等设备拍摄的 HEIC 需先转换并压缩构图被分类物体应占据画面主体因为最终会被缩放到 227x227背景控制背景要么一致、要么多样绝不能让背景与标签强相关。文档举例曾有皮肤癌分类器几乎 100% 识别的是照片里的尺子而非痣——因为恶性样本照片都放了尺子。多水果训练中同理不能让苹果都放在红色桌布、西红柿都放在绿色桌布。以本次作业为例可参照课程自带的香蕉示例数据集training 目录 下含 25 张熟香蕉、29 张生香蕉testing 目录 下各 2 张为每种水果、每个成熟度标签准备类似的图片集合并通过 Custom Vision 门户的上传并标记图片功能打上ripe/unripe标签参考 image-upload-bananas.png。4. 训练、测试与重训练迭代上传并标记所有标签的图片后在门户中选择Quick Training快速训练训练通常耗时数分钟用预留的测试图片而非训练图做 Quick Test观察各标签的概率输出——模型输出的是概率而非硬性二值答案例如一张图可能预测ripe 99.7%、unripe 0.3%由代码取最高概率参考 bananas-ripe-vs-unripe-predictions.png对于预测错误的图片通过Predictions标签页将其修正标签后并入训练集再次训练出新迭代iteration反复迭代直到满意——每次 Quick Test 的图片与结果都会被服务端存储供重训练使用。实战二从 IoT 设备调用多水果分类器源码佐证训练完成并发布迭代Performance 标签页 → Publish绑定fruit-quality-detector-prediction资源得到形如https://location.api.cognitive.microsoft.com/customvision/v3.0/Prediction/id/classify/iterations/Iteration2/image的预测 URL 与Prediction-Key后即可从各类 IoT 设备调用。仓库 2-check-fruit-from-device 课程提供了三套实现树莓派 / 虚拟设备Pythonpi/fruit-quality-detector/app.py 展示了完整调用链先用PiCamera以 640x480 拍摄 JPEG再解析预测 URL 提取endpoint、project_id、iteration_name最后用CustomVisionPredictionClient携带Prediction-Key调用classify_image并逐条打印tag_name与概率from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient from msrest.authentication import ApiKeyCredentials prediction_url prediction_url prediction_key prediction key parts prediction_url.split(/) endpoint https:// parts[2] project_id parts[6] iteration_name parts[9] prediction_credentials ApiKeyCredentials(in_headers{Prediction-key: prediction_key}) predictor CustomVisionPredictionClient(endpoint, prediction_credentials) image.seek(0) results predictor.classify_image(project_id, iteration_name, image) for prediction in results.predictions: print(f{prediction.tag_name}:\t{prediction.probability * 100:.2f}%)注意iteration_name取 URL 的第 10 段索引 9这意味着更换模型迭代只需替换 URL——这正是多轮重训练后发布新迭代、设备端零改动切换模型的机制。虚拟设备版本app.py仅将摄像头替换为 CounterFit 模拟counterfit_shims_picamera逻辑完全一致。Wio TerminalArduino/Cmain.cpp 走 REST 直调路线按下板载 C 键后拍摄 JPEG 存入缓冲区用HTTPClient向PREDICTION_URL发送POSTContent-Type 为application/octet-stream头带Prediction-Key返回 200 后解析 JSON 中的predictions数组并打印tagName与概率。其中PREDICTION_URL、PREDICTION_KEY、WiFi 凭据及 TLS 根证书Microsoft Azure DigiCert Global Root G2集中在 config.hTLS 证书用于WiFiClientSecure的加密连接。这套 REST 调用对多水果模型完全透明——标签从 2 个变为 N 个设备端代码无需任何改动只需在代码逻辑里针对多个标签做业务分流例如对ripe类放行、对unripe/bruised类剔除。评估清单本次作业评分标准作业官方评分标准Rubric是自检多水果训练成果的直接依据标准示范Exemplary合格Adequate待改进Needs Improvement为多种水果训练分类器成功为多种水果训练分类器仅成功为一种额外水果训练无法为更多水果训练分类器判断分类器效果能正确评价分类器对不同水果的表现能观察并提出改进建议无法评价分类器效果结合评分标准建议提交作业时至少完成扩展标签在香蕉之外增加至少一种水果示范级可加入苹果 西红柿这类易混淆组合对照实验分别记录「单水果」与「多水果」训练后的测试概率尤其关注苹果/西红柿这类相似外观的混淆概率合理性分析解释为什么某些水果对如外观差异大的柑橘与草莓更容易区分而颜色变化型水果青→红西红柿在低分辨率灰度推理下可能不如光学传感器——这与作业开头强调的局限性呼应。局限性与进阶方向数据分布漂移用手机拍的训练图与 IoT 摄像头实拍图在清晰度、色彩、光照上差异明显会导致预测准确率下降。第 16 课建议直接用设备拍摄图片重训练模型见 2-check-fruit-from-device/README.md 的 Improve the model 小节必要时删除原训练图重新迭代Edge 化部署训练好的迭代可发布为 Azure IoT Edge 模块将推理下沉到设备端减少云端往返与网络依赖见 3-run-fruit-detector-edge传感器触发结合距离传感器在果实到达检测位时再拍照可构建完整的自动化分拣触发链路见 4-trigger-fruit-detector。延伸挑战作业之外README.md 的 Challenge 环节提出了值得尝试的边界测试用草莓、充气香蕉、香蕉服人偶、甚至黄色卡通角色的图片去预测——图像分类器基于概率特征匹配不理解香蕉的语义这类域外图片的预测结果往往颇具启发性也是检验模型鲁棒性的低成本手段。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考