第 2 步只跟 1 辆车。现在前面有 3 辆,雷达每 0.1 秒给一堆框:框上没写是谁,顺序还每帧打乱。跟踪器每帧做三件事:① 猜(每条轨迹各自 predict)② 配对(距离表 + 匈牙利算法)③ 管编号(配上的合一下,没配上的先留着,没人认领的发新编号)。
先回答聊天里那道小检查(马上删,还是先留几帧),再往下点。
| 每一帧 | 做什么 | 用到什么 |
|---|---|---|
| ① 猜 | 每条轨迹各自 predict 0.1 秒 | 第 2 步的 KalmanCV,x、y 各一个 |
| ② 配对 | 距离表(几条轨迹 × 几个框)→ 匈牙利算法一行一列只挑一个、总距离最小 → 超过门槛 2 米的不算 | scipy 的 linear_sum_assignment |
| ③ 管编号 | 配上的:update,misses 清零 没配上的轨迹:misses + 1,超过 10 才删 没人认领的框:新轨迹,发新编号 | 编号只增不减,删掉的号不再用 |
| 旋钮 | 太小 | 太大 |
|---|---|---|
| 门槛(这里 2 米) | 车稍微跑偏一点就配不上,被当成新车,编号乱换 | 旁边车道的车(这里隔 3.5 米)也能来抢,配错人 |
| 最多留几帧(这里 10) | 挡一下就删,回来换了编号(②) | 误检的“鬼影”留得久(③) |
和 A5 第 4 步“框认领真东西”是同一个套路:距离表、一对一、门槛。区别是 A5 拿检测框去对真值(评测),这里拿这一帧的框去对上一帧猜的位置(跟踪器自己)。A5 用“先配全场最近的一对”,这里用匈牙利(总距离最小);这个场景每一帧两种配法结果都一样,车挨得很近时才会不同。
数字来自 sim/fake_traffic.py 的场景(3 辆车、测距误差 0.2 米、2.0–2.4 秒右车道那辆被挡住、3.5 秒护栏误检一次)加一个参考跟踪器。第 3 步你自己写同样的逻辑,跑出来应该是同一组数。