今天调一个RT-DETR的部署问题,模型推理速度明明达标了,但在实际视频流里跟踪目标时总出现“闪跳”——同一个目标在相邻帧里忽左忽右。
盯着输出看了半天,发现是相邻帧的检测框置信度相差0.01,NMS直接就把低分框干掉了,导致目标位置在帧间不连续。这个经典问题让我决定好好聊聊NMS后处理的那些事儿。
传统NMS的硬伤
标准NMS的逻辑简单粗暴:按置信度排序,最高分的框作为保留框,然后干掉所有和它IoU超过阈值的其他框。这个“干掉”是物理删除,直接置零。
在RT-DETR这种密集预测的场景里,两个其实都是正确目标的框,可能因为角度、遮挡导致IoU略高,就被误杀了。
# 典型NMS实现(问题版本)defnaive_nms(boxes,scores,iou_thresh=0.5)