2、TinyML视觉任务基础:图像分类、目标检测、关键点检测等常见任务及其对数据集的要求

TinyML视觉任务的核心挑战在于:在资源极度受限的MCU(微控制器)或边缘NPU上,用尽可能小的模型和数据集实现可靠的视觉感知。与云端视觉不同,TinyML的数据集不仅要考虑“标注什么”,更要考虑“硬件能处理什么”。本章将系统梳理三类最常见的TinyML视觉任务——图像分类、目标检测、关键点检测,并深入剖析每类任务对数据集采集、标注、格式和规模的特殊要求,为后续章节的拍摄规范和标注实践奠定理论基础。

TinyML视觉任务与数据集要求总览 图像分类 输出:类别标签 典型:物品/缺陷/手势 数据集:类别均衡 标注:单标签/多标签 目标检测 输出:边界框+类别 典型:人/物/缺陷定位 数据集:框的精度 标注:矩形框/多边形 关键点检测 输出:关键点坐标 典型:人体/手部/部件 数据集:点的一致性 标注:点坐标+可见性 数据集通用要求(TinyML约束下) 分辨率 32×32 ~ 96×96 量化友好 光照/角度 场景覆盖 增强策略 标注格式 TFLite/COCO JSON/CSV 数据量 每类50~500张 迁移学习可减 三类任务在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(交并比)计算。

数据集要求与操作流程

  1. 标注格式选择:推荐使用Pascal VOC格式(XML)或COCO格式(JSON),但TinyML部署时需转换为TFLite的TFLite格式或CSV格式。建议在采集阶段就确定格式,避免后期转换错误。
  2. 框的标注规范:框必须紧贴目标边缘,但允许包含不超过目标面积10%的背景。对于遮挡目标,标注可见部分即可,但需在标签中注明“遮挡程度”。
  3. 目标尺度覆盖:每个类别至少包含“近景大目标”(占画面30%以上)、“中景中目标”(10%~30%)、“远景小目标”(5%以下)各20张以上。
  4. 负样本(背景)采集:至少采集200张不含任何目标的纯背景图,用于降低误检率。

案例拆解:智能货架上的商品检测

某零售项目需要在TinyML设备上检测货架上的3种饮料瓶。初始数据集采集了500张图片,标注了1500个框,但部署后出现两个问题:一是将货架上的价格标签误检为“可乐瓶”;二是对重叠摆放的瓶子漏检。分析发现,价格标签的红色与可乐瓶标签颜色相近,且标注时未将“价格标签”作为负样本。解决方案是:①补充采集200张含价格标签的负样本;②将标注框的上下边距收紧2像素,避免将瓶盖阴影纳入框内;③对重叠场景,将NMS阈值从0.5调至0.3,允许更多重叠框输出。调整后,mAP从0.71提升至0.85,误检率下降60%。

风险提示:目标检测的数据集制作成本是分类的3~5倍。如果项目只需要判断“有无目标”而不需要精确定位,建议退化为“图像块分类”——将图像切分为网格,对每个网格做二分类。这可以大幅降低标注成本。

常见误区与总结

  • 误区一:标注框过大或过小。框过大引入背景噪声,框过小丢失目标边缘特征。建议使用标注工具的“自动贴合”功能,并人工复核。
  • 误区二:忽略小目标。在低分辨率下,小于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的约束下,保持任务简单是项目成功的关键。

实战建议:在项目启动初期,先用手机拍摄100张样本,用现成工具(如Edge Impulse、TensorFlow Lite Model Maker)快速训练一个分类模型验证可行性。如果分类准确率低于80%,再考虑是否需要检测或关键点方案。这种“快速验证”策略能避免在数据集制作上过度投入。