3.6 目标识别与跟踪


3.6 目标识别与跟踪

本节摘要:静态地图之外,机器人还要知道"谁正在动、往哪动"。本节讲检测与跟踪的分工——为什么不能每帧重新检测,给出 IoU 关联与卡尔曼跟踪的最小实现,并说明动态障碍如何进入规划层。

别以为每帧跑一遍检测就够了

把目标检测网络跑在每一帧上,看起来是最省心的方案:帧帧有框,何必跟踪?实机跑起来立刻露馅。检测器输出天然抖动:同一辆推车,第 10 帧给出 (1.02, 0.88, 0.40, 0.31) 的框,第 11 帧变成 (1.01, 0.86, 0.42, 0.33),坐标级噪声让下游"预测行人轨迹"直接崩掉;更糟的是身份丢失——检测器不知道第 10 帧和第 11 帧的框是不是同一个物体,避障逻辑会把一辆推车拆成两辆车,再突然合并,减速决策反复跳变。跟踪解决的是检测给不了的两件事:时序平滑身份连续

跟踪框架三件套

经典做法(SORT 类跟踪器的骨架)把任务拆成三件:

检测:每帧(或隔帧)跑一次检测器,输出带置信度的目标框/点云簇。检测是"事件级"的输入,不必高频。

状态预测:对每个已跟踪目标维持一个卡尔曼滤波(3.3 节的家族成员直接上岗),状态取中心位置与尺寸,匀速模型外推下一帧它该出现在哪。

数据关联:把新检测框与预测框配对。最简单可靠的判据是 IoU(交并比):预测框与新检测框重叠超过阈值(常取 0.3)即配对;多对多时按 IoU 最大做贪心或匈牙利算法求最优指派。配不上的检测开启新航迹,连续数帧(比如 3 帧)无检测配对的旧航迹删除——这个"寿命数"是抗误检的关键旋钮。

def iou(a, b): """两个框 [x1,y1,x2,y2] 的交并比""" ix = max(0, min(a[2], b[2]) - max(a[0], b[0])) iy = max(0, min(a[3], b[3]) - max(a[1], b[1])) inter = ix * iy area_a = (a[2]-a[0]) * (a[3]-a[1]) area_b = (b[2]-b[0]) * (b[3]-b[1]) return inter / (area_a + area_b - inter) # 关联:帧 t 的检测 vs 各航迹的预测框 for det in detections: best, best_iou = None, 0.0 for trk in tracks: s = iou(det.box, trk.predicted_box()) if s > best_iou: best, best_iou = trk, s if best_iou > 0.3: best.update(det.box) # 卡尔曼更新航迹 else: tracks.append(Track(det)) # 新航迹,等下一帧确认

进阶版本把外观特征加进关联判据(DeepSORT 类思路):IoU 决定"空间上像不像",外观嵌入向量决定"长得像不像",两者加权——人被柱子挡一秒再出现,位置预测已经不可信,靠"长得像"找回身份。

图:检测与跟踪的时序分工

图:检测与跟踪的时序分工

动态障碍怎么进规划

静态障碍躺在地图里等查询,动态目标必须换一种方式进入规划层:以"位置 + 速度 + 不确定性"的预测体参与。两种常用粒度:保守法把目标按最大速度膨胀成一个安全区(比如行人按 1.5 m/s 膨胀未来 2 秒的 3 米范围),规划器当静态障碍绕行——简单可靠,代价是过度避让;预测法沿预测轨迹做时空规划,规划器在"未来某一时刻的占用格"上搜索——效率高,但预测错了要靠重规划兜底。无论哪种,跟踪器的速度估计质量直接决定规划层的反应品质:速度噪声大,机器人就会对平稳走近的行人忽停忽走。

⚠️ 常见坑:跟踪参数在办公室调好、进商场失效。人群密集处 IoU 关联大量失败(互相遮挡、交叉行走),航迹频繁断合。对策是提高检测频率、引入外观特征、并把"人群"当作一个整体目标处理而不是逐人跟踪。

本节要点

  • 检测与跟踪分工:检测给"本帧有什么",跟踪给"轨迹与身份",两者缺一不可。
  • SORT 骨架三件套:低频检测、每帧卡尔曼预测、IoU 关联;寿命数抗误检,外观特征抗遮挡。
  • 动态障碍以"位置+速度+不确定性"进规划,保守膨胀与时空预测是两种粒度选择。
  • 跟踪器速度估计的品质直接决定机器人避让行为的顺滑度。

匈牙利算法:多目标指派的正规解法

两个目标交叉走过时,贪心关联(每个检测找 IoU 最大的航迹)可能配错对——A 的检测被分给 B 的航迹。匈牙利算法在全体"检测-航迹"的代价矩阵上求全局最优指派,彻底消解交叉错配。工程实现里代价矩阵通常取 IoU 的补或距离,配合门限(超过门限的组合直接禁止配对)压掉不可能项。目标数在几十以内时计算量可忽略,这是 SORT 及其后续系统的标准配置。配合第 3.3 节的卡尔曼预测,交叉场景的容错还来自预测:交叉瞬间靠预测"各自走到该在的位置",出交叉口再靠检测确认身份。

速度估计的品质决定避让的手感

跟踪器输出的速度是"位置差分加滤波"的产物,它的噪声水平直接传导给规划层。速度噪声大时,机器人对行人"忽快忽慢"的判断反复摇摆:膨胀区一忽大一忽小,表现为走近行人时的"走走停停",乘用体验很差。改善的抓手按性价比排序:提高检测帧率(差分基数更稳)、卡尔曼滤波的过程噪声按行人真实机动水平整定(行人不是导弹,Q 不必给大)、对速度输出做限幅(禁止瞬间跳变)。这三件事做完,多数"见人既停又不敢停"的抖动会消失。

问题:跟踪目标的生命周期怎么管理才不出鬼影

鬼影 = 目标已消失,航迹还活着并持续膨胀。管理靠三条规则配合:出生需确认(新航迹连续 N 帧——典型 3 帧——有检测配对才转正,单帧检测可能是误检);死亡需宽容(短暂遮挡不断 ID,连续 M 帧无配对才删除——典型 30 到 50 帧);出口需清理(删除的航迹若曾被规划层订阅,必须广播"航迹终止"消息,否则规划层拿着过期目标继续绕行)。三条规则的关键数字(N 与 M)按场景速度整定:人流密集商场 N 大 M 大(防误检防误删),空旷仓库 N 小 M 小(快生快灭)。

补多目标跟踪的数据关联工程要点。关联算法从简到繁:最近邻(距离最近即匹配,实现五分钟)→匈牙利算法(全局最优一一匹配,漏检少时的主力)→JPDA(联合概率,密集目标才需要)。工程上比算法选择更关键的三件事:其一,检测置信度过滤——低置信度检测进入关联会拉出幽灵轨迹,宁可丢弃或降权;其二,轨迹生命周期管理——新轨迹要连续几帧确认才转正(防误检),失联几帧后删除(防僵尸轨迹),这两组参数对体验的影响常大于算法本身;其三,ID 切换的处理——遮挡后重关联失败会换 ID,下游业务(计数、行为分析)要预设 ID 切换的容忍策略。调参的基准动作:标注一段含遮挡的测试视频,用 MOTA 与 ID 切换数双指标回归——没有回归集的跟踪调参全是玄学。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U