在 Custom Vision 中对比不同域:IoT-For-Beginners 库存检测器(Stock Detector)域切换与效果评估指南
【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners
导读
本文围绕 IoT-For-Beginners 零售(Retail)模块第 1 课"训练库存检测器"的课后作业展开,讲解如何在 Azure Custom Vision 中为对象检测项目切换不同的域(Domain),并通过重新训练与测试,对比各域对"货架商品库存检测"这一场景的实际效果。读完本文,你将掌握 Custom Vision 域切换的完整操作路径(Settings → 选择新域 → Save changes → 重训 → 测试新迭代)、科学的对比测试方法,以及如何依据 Precision、Recall、mAP 和预测概率来判定哪个域更优。
一、任务背景:为什么库存检测器需要对比域
在《训练库存检测器》一课中,你已在 Custom Vision 门户中创建了一个名为stock-detector的对象检测项目,并在创建项目时选择了Object Detection项目类型与Products on Shelves(货架商品)域。Custom Vision 提供多个预训练域,每个域针对不同的图像类别和场景做了优化:
- General(通用):适用于一般对象检测场景,覆盖类别广但无特定领域优化;
- Products on Shelves(货架商品):专门针对检测商店货架上的库存商品而设计,与该课程中检测番茄酱罐头、腰果桶等"货架陈列商品"的目标高度匹配;
- Logo、General (compact)等:分别面向徽标识别与可导出到边缘设备的轻量模型场景(compact 域为轻量模型,支持导出到设备端运行)。
创建项目时的域选择界面如下图所示(图中项目名为stock-detector、资源为stock-detector-training [F0]、项目类型为 Object Detection,域已选中Products on Shelves):
课后作业的核心命题是:既然创建时有多个域可选,那么对于你的库存检测器,各个域的实际表现如何?哪一个能给出更好的结果?这要求你不仅要会切换域并重训模型,还要能用一套可重复的测试流程量化对比,最终给出有依据的结论。
二、域切换的完整操作流程
根据作业要求,切换域的操作路径如下:
- 打开你的
stock-detector项目,点击顶部菜单中的Settings(设置)按钮; - 在设置页中选择一个新的域(例如从 Products on Shelves 切换为 General,或反向操作);
- 点击Save changes(保存更改)按钮;
- 重新训练(retrain)模型,等待训练完成(该课程使用Quick Training(快速训练)选项,通常需要几分钟);
- 使用基于新域训练出的新迭代(iteration)进行测试,而非旧迭代。
💡 注意:切换域后必须重新训练。域决定了模型底层的特征提取器与场景先验,旧迭代仍基于原域训练,无法代表新域的效果。测试时应确认使用的最新迭代版本为新域训练所得。
三、测试与结果对比方法
训练完成后,按以下方法进行对比测试:
- 使用Quick Test(快速测试)按钮上传测试图片,验证对象是否被正确检测。必须使用训练时未用过的测试图片——课程强调"使用你之前创建的测试图片,而不是任何用于训练的图片",否则无法客观评估泛化能力;
- 依次测试你拥有的全部测试图片,观察每个检测框的概率值(probability),并记录下来;
- 对每个候选域重复上述 1-2 步,保证同一组测试图片、同一测试环境,这是对比公平性的前提。
典型的检测结果界面如下图所示——Quick Test 检测出图片中的 3 罐番茄酱,分别给出 38%、35.5% 与 34.6% 的置信度,右侧面板还能显示迭代版本与预测阈值(Predicted Object Threshold):
对比时建议重点观察:
- 检测框数量是否正确:是否漏检(少框)或误检(多框、错框)?
- 置信度分布:同一批图片在不同域下,概率整体偏高还是偏低?
- 边界框贴合度:框是否紧贴物体(该课程在标注时强调"保持框紧贴对象"),域差异有时会反映在定位精度上。
四、对比实验的推荐步骤
为了让结论可复现、可引用,推荐按如下实验流程组织对比:
- 固定测试集:挑选 5-10 张覆盖不同角度、光照条件且包含所有目标对象的测试图片(可复用课程 images 目录下 testing 子目录中的示例图,如腰果与番茄酱图片);
- 基准记录:先记录当前 Products on Shelves 域下各图片的检测结果(检测对象数、概率值);
- 切换域:按上文流程切到另一个域(如 General),保存并重训;
- 重测:用同一测试集重跑 Quick Test,逐图记录结果;
- 汇总对比:制作表格,对比各域的漏检数、误检数、平均置信度,以及是否检测出所有对象;
- 给出结论:结合检测准确性与置信度,明确说明"哪个域在你的库存检测器上表现更好",并分析原因(例如 Products on Shelves 因针对货架商品场景优化,通常对番茄酱罐头这类货架商品更具优势)。
💁 该课程提供的训练图片(training 与 testing 目录)即按"货架商品"思路拍摄——模型面向货架上的商品设计,照片也应尽量把物体摆在类似货架的环境里拍摄。
五、评估标准(Rubric)解读
作业附带的评估表给出了两个核心评分维度,可作为自我检验清单:
| 标准 | 优秀(Exemplary) | 合格(Adequate) | 需改进(Needs Improvement) |
|---|---|---|---|
| 用不同域训练模型 | 成功切换域并重新训练模型 | 成功切换域并重新训练模型 | 无法切换域或无法重新训练模型 |
| 测试模型并对比结果 | 能使用不同域测试模型、对比结果,并说明哪个更好 | 能使用不同域测试模型,但无法对比结果或说明哪个更好 | 无法使用不同域测试模型 |
可以看出,作业的重点不只是"会切换域",而是完整的对比闭环:切换 → 重训 → 测试 → 对比 → 论证。第一项满分与合格的标准相同,说明操作本身不是难点;真正的区分度在第二项——能否给出有数据支撑、有分析深度的对比结论。
六、深化评估:Precision、Recall 与 mAP
在反复训练与测试之外,还可以借助 Custom Vision 训练完成后给出的模型评估指标来量化域之间的差异。课程明确指出,训练对象检测器时会看到Precision(精确率)、Recall(召回率)与 mAP(平均精度均值)三项指标:
- Precision:检测出的结果中真正正确的比例,衡量"误检"的多少;
- Recall:所有真实对象中被成功检出的比例,衡量"漏检"的多少;
- mAP(mean Average Precision):综合精确率与召回率在不同置信度阈值下的表现,是对象检测任务中最常用的综合评分。
切换域并重训后,对比同一验证集上的这三项指标,能比单纯看单张测试图的概率更全面、更客观。结合 Quick Test 的逐图概率记录与这三项指标,即可形成"定量指标 + 实测样本"的双重证据链,支撑最终结论。
💁 类似的评估思路在项目前一模块中亦有体现:可参考 4-manufacturing/lessons/1-train-fruit-detector/README.md 中关于重训图像分类器的讨论——分类器同样可能给出意外结果,需要通过预测结果回灌训练来持续改进。
七、注意事项与后续衔接
- 资源限制:该课程使用免费层 Custom Vision 资源(
stock-detector-training、stock-detector-prediction),免费层每个账户通常只有有限的训练与预测资源配额,反复重训不同域时应注意资源用量与清理(可参考课程中的清理说明 clean-up.md)。 - 图片规范:训练图片须为 png 或 jpeg、小于 6MB,若使用 iPhone 等设备拍摄的高分辨率 HEIC 图片需先转换与压缩。
- 迭代管理:每次重训都会生成新迭代,测试时务必确认选中正确的迭代版本(测试界面的迭代下拉框中可查看)。
- 下一步衔接:完成域对比后,可进入下一课《在设备上检查库存》,将选定域训练出的模型部署到 IoT 设备端进行实际库存检测——域的最终选择将直接影响边缘端推理效果。
总结
域是 Custom Vision 对象检测项目在创建时就定下的重要配置,它决定了模型适配的场景先验。本作业通过"切换域 → 重训 → 同测试集对比 → 论证结论"的完整闭环,帮助你建立机器学习实验对比的方法论:固定变量、量化观测、以数据和指标说话。完成对比后,你可以基于结论为库存检测器选择最合适的域,为后续的设备端部署(5-retail/lessons/2-check-stock-device/README.md)打下坚实基础。相关作业原文可见 translations/en/5-retail/lessons/1-train-stock-detector/assignment.md,完整课程内容见 5-retail/lessons/1-train-stock-detector/README.md。
【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考