2、目标检测基础:边界框、类别置信度、IoU、NMS等核心概念与评估指标(mAP、FPS)
目标检测是计算机视觉中最具工程挑战性的任务之一:模型不仅要回答"图像里有什么",还要回答"这些物体在哪里"。与图像分类只输出一个类别标签不同,目标检测的输出是一组结构化的预测结果——每个预测包含边界框坐标、类别标签和置信度分数。在TinyML场景下,这些基础概念直接决定了模型压缩策略的选择、端侧部署的可行性以及最终产品的体验质量。本节将系统梳理目标检测的四个核心概念(边界框、类别置信度、IoU、NMS)和两个关键评估指标(mAP、FPS),并特别关注它们在资源受限环境下的特殊含义。
上图展示了目标检测从输入到输出的完整链路,以及评估指标和TinyML约束之间的关系。下面我们将逐一深入每个核心概念。
2.1 边界框:目标定位的数学表达
核心原理:边界框(Bounding Box)是目标检测中最基础的输出形式,通常用矩形框来标注图像中目标的位置。最常见的表示方式有两种:(x, y, w, h) 形式(左上角坐标+宽高)和 (cx, cy, w, h) 形式(中心点坐标+宽高)。在深度学习模型中,边界框通常以归一化坐标表示,即相对于图像宽高的比例值,范围在0~1之间。这种归一化表示使得模型在不同分辨率输入下具有更好的泛化能力。
判断方法与工程细节:在TinyML场景中,边界框的表示方式直接影响模型的输出层设计和后处理复杂度。例如,YOLO系列使用 (cx, cy, w, h) 格式,而SSD使用 (xmin, ymin, xmax, ymax) 格式。端侧部署时,需要注意以下几点:
- 坐标精度:量化后坐标值可能丢失精度,建议对坐标使用较高比特位宽(如16位定点数)或使用delta偏移量。
- 解码复杂度:某些模型输出的是相对于先验框(anchor)的偏移量,需要在端侧进行解码,这会增加计算量。
- 内存布局:边界框的存储格式(如NHWC vs NCHW)会影响内存访问效率,在MCU上通常选择NHWC以减少转置开销。
2.2 类别置信度:模型对预测的把握程度
核心原理:类别置信度(Confidence Score)表示模型对某个边界框内目标属于某一类别的概率估计。在分类任务中,softmax输出天然具有概率解释;但在目标检测中,置信度通常由两部分组成:目标存在性概率(objectness)和类别概率(class probability)。YOLO系列将两者相乘得到最终置信度,而SSD直接输出每个类别的概率。
阈值选择策略:置信度阈值(conf_threshold)是后处理中的关键超参数。阈值设置过高会漏检(降低召回率),设置过低会产生大量误检(降低精确率)。在TinyML场景中,由于模型容量有限,置信度分布往往不够尖锐,需要根据具体应用场景调整阈值:
| 应用场景 | 推荐阈值范围 | 原因 |
|---|---|---|
| 工业质检(漏检代价高) | 0.2~0.3 | 优先保证召回率,允许少量误检 |
| 智能安防(误报代价高) | 0.5~0.6 | 优先保证精确率,减少误报 |
| 通用物体检测 | 0.3~0.4 | 平衡精确率和召回率 |
量化影响:8位量化后,置信度分数的精度会下降。例如,原始浮点分数0.35在量化后可能变为0.33或0.37,这可能导致原本刚好在阈值附近的检测结果被错误过滤。建议在量化校准过程中保留足够的动态范围,并在部署前用验证集重新校准阈值。
2.3 IoU:衡量预测框与真实框的重叠程度
核心原理:交并比(Intersection over Union, IoU)计算两个边界框的交集面积与并集面积的比值,公式为:
IoU = Area(交集) / Area(并集)
IoU的取值范围为[0, 1],0表示完全不重叠,1表示完全重合。IoU是目标检测中最重要的几何度量,它同时用于训练阶段的匹配策略(如SSD的默认框匹配)和推理阶段的NMS去重。
IoU在TinyML中的特殊考量:在资源受限设备上,IoU计算涉及大量浮点运算(尤其是平方和开方),这会消耗宝贵的CPU周期。优化方法包括:
- 整数近似:将坐标转换为整数后,使用整数运算计算IoU,误差控制在可接受范围内。
- 快速拒绝:先检查两个框是否可能重叠(通过中心点距离和半宽高比较),不重叠则直接返回0,避免复杂计算。
- 查表法:对于固定输入尺寸的模型,可以预先计算常见框尺寸组合的IoU值,用查表替代实时计算。
2.4 NMS:消除冗余检测的关键步骤
核心原理:非极大值抑制(Non-Maximum Suppression, NMS)是目标检测后处理中不可或缺的一步。由于滑动窗口或anchor-based方法会产生大量重叠的候选框,NMS通过以下步骤去除冗余:
- 将所有候选框按置信度从高到低排序。
- 选择置信度最高的框,将其加入最终结果。
- 计算该框与其余所有框的IoU,将IoU大于阈值(通常为0.5)的框删除。
- 重复步骤2-3,直到候选框列表为空。
标准NMS的端侧问题:标准NMS是串行算法,时间复杂度为O(n²),其中n为候选框数量。在TinyML场景中,候选框数量可能达到数百甚至上千,这会导致严重的延迟。此外,标准NMS对IoU阈值敏感,阈值过高会保留大量重叠框,阈值过低会合并本应分开的相邻目标。
轻量化NMS策略:
- Fast NMS:基于矩阵运算的并行NMS,适合在GPU上运行,但在MCU上仍需优化。
- 类别感知NMS:不同类别的框不进行抑制,减少计算量。
- 距离惩罚NMS:在IoU基础上加入中心点距离惩罚项,对轻微偏移的框更宽容。
- 提前截断:在排序后只取Top-K个框进行NMS,K通常设为50~100。
- 第一步:将置信度阈值从0.3提高到0.5,候选框减少到约80个,NMS耗时降至25ms。
- 第二步:使用快速拒绝策略(先检查中心点距离),NMS耗时降至12ms。
- 第三步:将IoU计算改为整数运算(坐标缩放为整数),NMS耗时降至7ms。
- 最终:结合提前截断(Top-50),NMS总耗时控制在5ms以内,满足30FPS的实时要求。
2.5 mAP:综合衡量检测精度
核心原理:平均精度均值(mean Average Precision, mAP)是目标检测最常用的精度评估指标。计算过程如下:
- 对每个类别,将所有预测框按置信度降序排列。
- 逐个计算精确率(Precision)和召回率(Recall),绘制P-R曲线。
- 计算P-R曲线下的面积(Average Precision, AP)。
- 对所有类别的AP取平均,得到mAP。
mAP@[.5:.95]:这是COCO数据集的标准评估方式,计算IoU阈值从0.5到0.95(步长0.05)共10个阈值下的mAP平均值。这个指标对边界框的定位精度要求更高,更适合评估精细检测任务。
TinyML中的mAP考量:在端侧部署时,mAP并不是唯一的指标,需要与模型大小、推理速度进行权衡。一个常见的误区是盲目追求高mAP而忽视模型复杂度。实际上,对于许多嵌入式应用,mAP@0.5(IoU阈值为0.5时的mAP)已经足够,因为端侧任务通常不需要像素级精确的边界框。
| 评估指标 | 计算方式 | 端侧适用性 | 注意事项 |
|---|---|---|---|
| mAP@0.5 | IoU阈值固定为0.5 | 高 | 对定位精度要求较低,适合粗略检测 |
| mAP@[.5:.95] | IoU阈值从0.5到0.95取平均 | 中 | 对定位精度要求高,适合精细检测 |
| F1-Score | 精确率和召回率的调和平均 | 高 | 适合类别不平衡场景 |
2.6 FPS:衡量推理速度的关键指标
核心原理:每秒帧数(Frames Per Second, FPS)表示模型每秒能处理的图像帧数。在TinyML场景中,FPS不仅取决于模型本身的推理速度,还受到图像采集、预处理、后处理等全链路的影响。端到端延迟(End-to-End Latency)通常比FPS更重要,因为FPS是平均值的倒数,而延迟关注单帧的最坏情况。
FPS的测量方法:
- 纯推理时间:只测量模型前向传播的时间,不包括预处理和后处理。
- 端到端时间:从图像采集到输出结果的完整时间,包括传感器读取、图像缩放、归一化、推理、NMS等。
- 稳态FPS:连续运行多帧后取平均,排除冷启动影响。
TinyML中的FPS优化:在MCU上,FPS通常受限于内存带宽和算力。例如,STM32H7系列(Cortex-M7 @ 480MHz)运行MobileNetV1(输入尺寸96×96)时,推理时间约为150ms,对应约6.6 FPS。优化手段包括:
- 输入尺寸裁剪:将输入从224×224降至128×128或96×96,计算量可减少4~5倍。
- 量化:从FP32转为INT8,推理速度提升2~4倍。
- 算子融合:将Conv+BN+ReLU融合为单个算子,减少内存访问。
- 硬件加速:利用MCU的DSP指令或专用NPU(如STM32N6的NPU)进行加速。
2.7 综合案例:从模型选择到端侧部署的完整评估
假设我们需要在电池供电的智能摄像头(使用Cortex-M7 @ 480MHz,2MB SRAM)上实现人员检测功能,要求端到端延迟小于200ms,mAP@0.5大于0.7。
初始方案:选择YOLOv5n(输入尺寸320×320),FP32模型大小为3.8MB,在PC上mAP@0.5为0.82。但部署到MCU后发现:模型无法装入2MB SRAM,且推理时间超过1秒。
优化过程:
- 模型压缩:使用TensorFlow Lite进行INT8量化,模型大小降至1.1MB,推理时间降至420ms。
- 输入裁剪:将输入尺寸从320×320降至192×192,推理时间降至180ms,mAP@0.5降至0.74。
- 后处理优化:使用快速NMS(Top-50 + 整数IoU),后处理时间从35ms降至8ms。
- 最终结果:端到端延迟188ms(约5.3 FPS),mAP@0.5为0.74,满足需求。
复盘经验:
- 模型压缩(量化)是第一步,通常能带来2~4倍的体积和速度优化,且精度损失可控。
- 输入尺寸裁剪是第二步,但需要验证精度是否满足要求。
- 后处理优化往往被忽视,但在MCU上可能成为瓶颈。
- 最终方案需要在精度、速度、内存三者之间找到平衡点,而不是追求单一指标的最优。
2.8 常见误区与总结
误区一:mAP越高越好。在TinyML场景中,mAP的边际收益往往以巨大的模型复杂度为代价。例如,mAP从0.75提升到0.78可能需要模型参数量增加50%,这在端侧是不可接受的。
误区二:NMS阈值固定不变。不同场景下最优的NMS IoU阈值不同。密集场景(如人群检测)需要较低的IoU阈值(0.3~0.4),稀疏场景(如工业零件检测)可以使用较高的阈值(0.5~0.6)。
误区三:忽略预处理开销。在MCU上,图像缩放和归一化可能占用总延迟的20%~30%。使用硬件加速的DMA进行图像拷贝、使用查表法进行归一化,可以显著降低这部分开销。
误区四:FPS与延迟混淆。FPS是平均值的倒数,但实际应用中更关心最坏情况延迟。例如,某模型平均推理时间100ms(10 FPS),但偶尔出现300ms的峰值,这会导致明显的卡顿。