2、TinyML视觉任务基础:图像分类、目标检测、关键点检测等常见任务及其对数据集的要求
TinyML视觉任务的核心挑战在于:在资源极度受限的MCU(微控制器)或边缘NPU上,用尽可能小的模型和数据集实现可靠的视觉感知。与云端视觉不同,TinyML的数据集不仅要考虑“标注什么”,更要考虑“硬件能处理什么”。本章将系统梳理三类最常见的TinyML视觉任务——图像分类、目标检测、关键点检测,并深入剖析每类任务对数据集采集、标注、格式和规模的特殊要求,为后续章节的拍摄规范和标注实践奠定理论基础。
上图展示了三类视觉任务在TinyML场景下的核心差异与数据集要求的汇聚关系。可以看到,尽管任务目标不同,但都受限于MCU的算力、内存和功耗,因此在数据集层面呈现出“低分辨率、小规模、强增强”的共同特征。下面逐一展开分析。
2.1 图像分类:最基础的TinyML视觉任务
核心原理
图像分类是TinyML中最成熟、部署最广泛的任务。其本质是学习一个从图像像素空间到类别标签空间的映射函数。在MCU上,典型的实现方式是采用MobileNetV1、MobileNetV2或更轻量的自定义CNN结构,经过量化(通常为INT8)后部署。分类任务对数据集的要求相对宽松,但“类别混淆”问题在低分辨率下尤为突出。例如,区分“空瓶”和“满瓶”在96×96分辨率下可能仅依赖瓶盖区域的细微纹理差异,这对数据采集的针对性提出了很高要求。
数据集要求与判断方法
| 维度 | 要求 | 判断标准 | 常见错误 |
|---|---|---|---|
| 类别数量 | 2~20类为宜 | 超过20类需考虑分组或改用检测 | 类别过多导致模型过大 |
| 每类样本量 | 50~500张/类 | 迁移学习可降至30张/类 | 盲目追求大数据量 |
| 分辨率 | 32×32 ~ 96×96 | 需验证目标最小特征是否可辨 | 直接使用224×224 |
| 背景多样性 | 至少5种背景 | 覆盖实际部署场景的80% | 单一背景导致过拟合 |
| 标注格式 | 文件夹名或CSV | 与训练框架兼容 | 标注与文件名不匹配 |
案例拆解:工业质检中的螺丝分类
某电子厂需要在一条产线上用TinyML设备区分“合格螺丝”和“滑牙螺丝”。初始方案直接使用公开数据集预训练模型,但实际部署时发现误检率高达15%。分析后发现,产线光照为黄色钠灯,而公开数据集多为白色LED光照。重新采集时,团队在三个不同时段(早、中、晚)各拍摄200张,并刻意将螺丝旋转0°、45°、90°、135°四个角度。关键操作是:将分辨率从128×128降至64×64后,模型准确率反而从92%提升至96%——因为降分辨率起到了天然去噪作用,抑制了金属反光的干扰。最终数据集为每类600张,其中400张用于训练,100张验证,100张测试。部署后误检率降至2%以内。
常见误区与总结
- 误区一:认为分类任务不需要精确标注。实际上,标签错误(如将“合格”标为“滑牙”)对模型的影响远大于样本量不足。
- 误区二:忽略类别不均衡。当“合格”与“滑牙”比例达到10:1时,模型会倾向预测多数类。建议采集时保持1:1,或使用加权损失。
- 误区三:直接使用RGB三通道。在灰度场景(如红外、单色传感器)下,单通道数据可减少1/3内存占用,且精度损失极小。
2.2 目标检测:定位与分类的复合任务
核心原理
目标检测在TinyML中通常采用轻量级检测头(如MobileNet-SSD、YOLOv5n、EfficientDet-Lite0)配合NMS(非极大值抑制)后处理。与分类不同,检测任务需要同时输出目标的边界框坐标和类别。这对数据集提出了“框的精度”和“目标尺度多样性”的双重要求。在MCU上,输入分辨率通常为192×192或320×320,但实际部署时往往降至160×160以换取帧率。这意味着标注框的微小偏差(±3像素)在低分辨率下会被放大,直接影响IoU(交并比)计算。
数据集要求与操作流程
- 标注格式选择:推荐使用Pascal VOC格式(XML)或COCO格式(JSON),但TinyML部署时需转换为TFLite的TFLite格式或CSV格式。建议在采集阶段就确定格式,避免后期转换错误。
- 框的标注规范:框必须紧贴目标边缘,但允许包含不超过目标面积10%的背景。对于遮挡目标,标注可见部分即可,但需在标签中注明“遮挡程度”。
- 目标尺度覆盖:每个类别至少包含“近景大目标”(占画面30%以上)、“中景中目标”(10%~30%)、“远景小目标”(5%以下)各20张以上。
- 负样本(背景)采集:至少采集200张不含任何目标的纯背景图,用于降低误检率。
案例拆解:智能货架上的商品检测
某零售项目需要在TinyML设备上检测货架上的3种饮料瓶。初始数据集采集了500张图片,标注了1500个框,但部署后出现两个问题:一是将货架上的价格标签误检为“可乐瓶”;二是对重叠摆放的瓶子漏检。分析发现,价格标签的红色与可乐瓶标签颜色相近,且标注时未将“价格标签”作为负样本。解决方案是:①补充采集200张含价格标签的负样本;②将标注框的上下边距收紧2像素,避免将瓶盖阴影纳入框内;③对重叠场景,将NMS阈值从0.5调至0.3,允许更多重叠框输出。调整后,mAP从0.71提升至0.85,误检率下降60%。
常见误区与总结
- 误区一:标注框过大或过小。框过大引入背景噪声,框过小丢失目标边缘特征。建议使用标注工具的“自动贴合”功能,并人工复核。
- 误区二:忽略小目标。在低分辨率下,小于16×16像素的目标几乎无法被检测。采集时应确保最小目标在目标分辨率下至少占20×20像素。
- 误区三:训练集和验证集来自同一段视频的连续帧。这会导致验证集与训练集高度相似,评估结果虚高。应使用不同时间、不同角度拍摄的数据划分。
2.3 关键点检测:结构化输出的精细任务
核心原理
关键点检测(如人体姿态估计、手部关键点、工业部件定位)在TinyML中属于较前沿的任务。其输出是固定数量的关键点坐标(x, y)及可见性标志。在MCU上,通常采用Heatmap回归或直接坐标回归两种方式。Heatmap方式精度更高但计算量大,坐标回归方式更轻量但精度受限。关键点检测对数据集的要求最为苛刻:不仅需要标注点的位置,还需要保证点与点之间的语义一致性(例如,第3个关键点始终代表“左肘”)。
数据集要求与标注规范
| 要求项 | 具体标准 | 验证方法 |
|---|---|---|
| 关键点数量 | 5~17个为宜 | 超过17个需考虑分阶段检测 |
| 点坐标精度 | ±2像素(在96×96下) | 多人标注取平均,计算标准差 |
| 可见性标注 | 0=不可见,1=可见,2=遮挡 | 遮挡点需单独标记 |
| 姿态多样性 | 每个关键点至少覆盖±30°角度变化 | 绘制关键点分布热力图 |
| 样本量 | 每类姿态至少100张 | 验证集需包含未见过的姿态 |
案例拆解:手势识别中的关键点标注
一个智能家居项目需要识别5种手势(握拳、张开、食指、点赞、OK)。团队使用MediaPipe预标注后人工修正,但发现“OK”手势的食指与拇指接触点标注不一致——有的标在指尖,有的标在指腹。这导致模型训练时该关键点的损失函数无法收敛。解决方案是制定详细的标注规范:①定义“接触点”为两指皮肤接触区域的最小外接矩形中心;②对同一张图由3人独立标注,计算坐标标准差,超过3像素的重新标注;③最终数据集包含1200张图,每张17个关键点,其中“OK”手势的接触点标准差从初始的5.2像素降至1.8像素。部署后,手势识别准确率从82%提升至94%。
常见误区与总结
- 误区一:关键点顺序混乱。不同标注者可能按不同顺序标注,导致训练时对应关系错乱。必须在标注工具中固定点序,并设置自动校验。
- 误区二:忽略不可见点。对于被遮挡的关键点,不能简单删除,应标注为“不可见”并让模型学习预测其存在性。
- 误区三:数据增强不当。对关键点检测做随机旋转时,必须同步旋转关键点坐标;做水平翻转时,必须交换左右对称点的索引(如左肘↔右肘)。
2.4 三类任务的数据集对比与选择策略
在实际项目中,选择哪类任务不仅取决于业务需求,还取决于数据集的可获取性和标注成本。下表从多个维度对比了三类任务在TinyML场景下的差异:
| 对比维度 | 图像分类 | 目标检测 | 关键点检测 |
|---|---|---|---|
| 标注成本(每张图) | 约5秒 | 约30秒 | 约60秒 |
| 最小数据集规模 | 每类50张 | 每类200张+200背景 | 每类100张 |
| 模型输出维度 | 类别数 | 框数×(4+类别数) | 关键点数×3 |
| 典型内存占用 | 50~200KB | 200~500KB | 150~400KB |
| 部署难度 | 低 | 中 | 高 |
| 适用场景 | 质量分级、状态判断 | 计数、定位、多目标 | 姿态、手势、精细操作 |
选择任务类型时,建议遵循“最小充分原则”:如果分类能解决问题,就不要升级到检测;如果检测能定位,就不要升级到关键点。每升一级,数据集制作成本增加3~5倍,模型部署难度也同步增加。在TinyML的约束下,保持任务简单是项目成功的关键。