2、目标检测基础:边界框、类别置信度、IoU、NMS等核心概念与评估指标(mAP、FPS)

目标检测是计算机视觉中最具工程挑战性的任务之一:模型不仅要回答"图像里有什么",还要回答"这些物体在哪里"。与图像分类只输出一个类别标签不同,目标检测的输出是一组结构化的预测结果——每个预测包含边界框坐标、类别标签和置信度分数。在TinyML场景下,这些基础概念直接决定了模型压缩策略的选择、端侧部署的可行性以及最终产品的体验质量。本节将系统梳理目标检测的四个核心概念(边界框、类别置信度、IoU、NMS)和两个关键评估指标(mAP、FPS),并特别关注它们在资源受限环境下的特殊含义。

目标检测核心概念与评估体系 输入图像 W×H×3 检测模型 CNN / Transformer 原始预测 大量候选框 含冗余/低分 后处理 IoU计算 NMS去重 最终检测 框+类别+分数 评估指标 mAP:精度/召回 FPS:速度/延迟 关键概念 边界框 / 类别置信度 IoU / NMS TinyML约束 内存 / 算力 / 功耗 量化 / 剪枝 / 蒸馏 端侧部署决策链 模型结构 → 压缩策略 → 后处理简化 → 指标验证 → 硬件适配

上图展示了目标检测从输入到输出的完整链路,以及评估指标和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以减少转置开销。
经验提醒:在MCU上部署时,建议将边界框解码操作合并到模型最后一层之后,避免在CPU上逐框解码造成额外延迟。如果使用TFLite Micro,可以利用其内置的FlexDelegate或自定义算子来优化这一过程。

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周期。优化方法包括:

  1. 整数近似:将坐标转换为整数后,使用整数运算计算IoU,误差控制在可接受范围内。
  2. 快速拒绝:先检查两个框是否可能重叠(通过中心点距离和半宽高比较),不重叠则直接返回0,避免复杂计算。
  3. 查表法:对于固定输入尺寸的模型,可以预先计算常见框尺寸组合的IoU值,用查表替代实时计算。
风险提示:在MCU上使用整数IoU时,注意坐标值不要溢出。例如,对于320×240的输入图像,坐标范围在0~320之间,使用16位整数足够;但如果输入尺寸更大,可能需要32位整数或使用归一化坐标。

2.4 NMS:消除冗余检测的关键步骤

核心原理:非极大值抑制(Non-Maximum Suppression, NMS)是目标检测后处理中不可或缺的一步。由于滑动窗口或anchor-based方法会产生大量重叠的候选框,NMS通过以下步骤去除冗余:

  1. 将所有候选框按置信度从高到低排序。
  2. 选择置信度最高的框,将其加入最终结果。
  3. 计算该框与其余所有框的IoU,将IoU大于阈值(通常为0.5)的框删除。
  4. 重复步骤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。
实战案例:在某智能门锁项目中,我们使用MobileNetV2-SSD在ESP32-S3上部署人脸检测模型。初始实现使用标准NMS,候选框数量约300个,NMS耗时达85ms,远超预算。优化过程如下:
  • 第一步:将置信度阈值从0.3提高到0.5,候选框减少到约80个,NMS耗时降至25ms。
  • 第二步:使用快速拒绝策略(先检查中心点距离),NMS耗时降至12ms。
  • 第三步:将IoU计算改为整数运算(坐标缩放为整数),NMS耗时降至7ms。
  • 最终:结合提前截断(Top-50),NMS总耗时控制在5ms以内,满足30FPS的实时要求。
复盘经验:NMS优化的关键在于减少候选框数量和简化IoU计算,而不是盲目优化算法本身。先通过阈值过滤减少输入规模,再优化计算细节,往往能获得最大收益。

2.5 mAP:综合衡量检测精度

核心原理:平均精度均值(mean Average Precision, mAP)是目标检测最常用的精度评估指标。计算过程如下:

  1. 对每个类别,将所有预测框按置信度降序排列。
  2. 逐个计算精确率(Precision)和召回率(Recall),绘制P-R曲线。
  3. 计算P-R曲线下的面积(Average Precision, AP)。
  4. 对所有类别的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。优化手段包括:

  1. 输入尺寸裁剪:将输入从224×224降至128×128或96×96,计算量可减少4~5倍。
  2. 量化:从FP32转为INT8,推理速度提升2~4倍。
  3. 算子融合:将Conv+BN+ReLU融合为单个算子,减少内存访问。
  4. 硬件加速:利用MCU的DSP指令或专用NPU(如STM32N6的NPU)进行加速。
风险提示:FPS指标容易被"刷高"。例如,只测量纯推理时间而不包含预处理和后处理,或者使用过小的输入尺寸。在评估端侧性能时,务必明确测量范围,并确保输入尺寸和预处理流程与实际部署一致。

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秒。

优化过程:

  1. 模型压缩:使用TensorFlow Lite进行INT8量化,模型大小降至1.1MB,推理时间降至420ms。
  2. 输入裁剪:将输入尺寸从320×320降至192×192,推理时间降至180ms,mAP@0.5降至0.74。
  3. 后处理优化:使用快速NMS(Top-50 + 整数IoU),后处理时间从35ms降至8ms。
  4. 最终结果:端到端延迟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的峰值,这会导致明显的卡顿。

总结建议:在TinyML目标检测项目中,建议按以下顺序进行优化:① 确定应用场景的精度底线(mAP@0.5或mAP@[.5:.95]);② 选择合适的模型架构(MobileNetV2-SSD、EfficientDet-Lite等);③ 进行量化感知训练和INT8量化;④ 优化后处理(NMS)和预处理流程;⑤ 在真实硬件上测量端到端延迟和内存占用;⑥ 根据测量结果迭代调整。