资讯详情

【OC_SORT 02】多轨迹算法OCSort-IoU 代价与VDC 方向一致性融合过程

📅 2026/11/3 19:24:14 | 华诺云谱 👁 阅读
【OC_SORT 02】多轨迹算法OCSort-IoU 代价与VDC 方向一致性融合过程
IoU 代价与 VDC 方向一致性融合过程对应源码ocsort/association.py的iou_batch、speed_direction_batch、associateOC-SORT 第一轮关联的代价由两部分相加IoU位置重叠 VDC速度方向一致性。后者是它区别于 SORT/ByteTrack 的核心——匹配时不光看框在哪还看轨迹正在往哪走、这个框是不是在那个方向上。一、iou_batch位置重叠项函数功能输入输出iou_batch(bboxes1, bboxes2)计算两组框两两之间的 IoUbboxes1: N×4 检测框 [x1,y1,x2,y2]bboxes2: M×4 轨迹预测框N×M 相似度矩阵值越大越可能配对计算步骤输入框1 条轨迹预测框2 个检测框轨迹1: [80, 80, 120, 120] 检测A: [84, 82, 126, 122] 检测B: [60, 95, 100, 135]第 1 步算每一对的 IoU交集面积 ÷ 并集面积。以轨迹1 vs 检测A 为例交集: 宽 min(120,126) − max(80,84) 36高 min(120,122) − max(80,82) 38 交集面积 36 × 38 1368 轨迹1 面积 40 × 40 1600检测A 面积 42 × 40 1680 并集面积 1600 1680 − 1368 1912 IoU 1368 / 1912 0.72其余各对同样算法结果相似度检测A 检测B 轨迹1 [ 0.72, 0.55 ]二、speed_direction_batch VDC方向一致性项2.1 两个方向从哪来量来源含义检测方向 (dy, dx)speed_direction_batch(dets, previous_obs)轨迹参考点中心 → 检测框中心归一化单位向量“如果这个检测框配给我我的运动方向就变成这样”轨迹惯性方向 (inertia_y, inertia_x)KalmanBoxTracker.velocitydelta_t(3) 帧前的真实观测 → 最近真实观测归一化单位向量“我最近一直在往哪走”两者都是 (Δy, Δx) 顺序的单位向量点积即夹角余弦。2.2 计算步骤associate 内 :255-273输入轨迹1 预测框中心 (100, 100)惯性方向 (inertia_y, inertia_x) (0, 1) ← 一直向右x运动 检测A 中心 (112, 101)置信度 0.8 检测B 中心 ( 88, 112)置信度 0.9 vdc_weight (inertia) 0.2第 1 步算各检测框相对轨迹的方向单位向量轨迹中心 → 检测框中心检测A: (Δy,Δx) (1, 12)模长 √145 ≈ 12.04 → (0.083, 0.996) ← 几乎正右 检测B: (Δy,Δx) (24, −12)模长 √720 ≈ 26.8 → (0.895, −0.447) ← 左下第 2 步与惯性方向做点积 → 夹角余弦A: 0×0.083 1×0.996 0.996 ← 几乎同向 B: 0×0.895 1×(−0.447) −0.447 ← 大角度偏向反方向第 3 步转成方向得分diff_angle (π/2 − |夹角|) / πA: 夹角 arccos(0.996) ≈ 0.089 弧度 → (1.571 − 0.089)/π ≈ 0.472 ← 越同向越接近 0.5 B: 夹角 arccos(−0.447) ≈ 2.033 弧度 → (1.571 − 2.033)/π ≈ −0.147 ← 反向得负分第 4 步乘权重与检测置信度angle_diff_cost × vdc_weight × scoresA: 0.472 × 0.2 × 0.8 0.076 B: −0.147 × 0.2 × 0.9 −0.026第 5 步与 IoU 相加得总相似度检测A 检测B 轨迹1 [ 0.72 0.076 0.796, 0.55 − 0.026 0.524 ]2.3 VDC 起了什么作用只看 IoUIoU VDC检测A 与轨迹10.720.796同向 → 加分检测B 与轨迹10.550.524反向 → 减分A 领先 B0.170.27检测 B 离轨迹也不算远IoU 0.55但它出现在轨迹运动方向的反侧——密集交叉路口里那大概率是旁边对向/横向车流的目标。VDC 把它压下去避免轨迹拐到别人身上。这正是密集场景下减少 ID 切换的关键一环。valid_mask 保护刚建档还没有真实观测的轨迹参考点是占位符 [-1,-1,-1,-1,-1]——valid_mask置 0VDC 项整体清零不给无方向信息的轨迹瞎加分减分。三、linear_assignment全局最优分配函数功能输入输出linear_assignment(cost_matrix)匈牙利算法求总代价最小的唯一配对N×M 代价矩阵K×2 配对索引数组调用时传入负相似度-(iou_matrix angle_diff_cost)把最大化问题转成最小化。优先用lap.lapjvC 实现快环境没装 lap 自动回退scipy.optimize.linear_sum_assignment——结果一致只差速度。保守快速路径associate里分配前先检查——若 IoU 超过阈值(0.3)的候选配对每行每列恰好各只有一个即每条轨迹只有一个够格检测、每个检测也只够格给一条轨迹直接取这些唯一配对跳过匈牙利。绝大多数帧走这条路省一次全局分配。四、与 ByteTrack 代价设计的对比ByteTrackfuse_scoreOC-SORTIoU VDC公式cost 1 − IoU × confcost −(IoU 0.2 × 方向得分 × conf)置信度的作用直接乘进相似度——高分框全面优先只缩放 VDC 方向项IoU 本身不看置信度方向信息无有轨迹惯性 vs 候选框方位风险低置信度的真目标代价被抬高遮挡恢复偏慢方向估计错delta_t 帧前观测是误检时会系统性带偏一个直观对照置信度 0.35 的遮挡目标 vs 置信度 0.9 的旁车两者 IoU 都是 0.6——ByteTrack 里旁车代价低很多0.46 vs 0.79遮挡目标容易被抢走配对OC-SORT 里两者 IoU 项相同只有方向项受置信度轻微缩放遮挡目标若在同向位置就有均等机会配回。描述链接项目基于 Ultralytics OC-SORT 多目标跟踪与改进往期回顾链接数据集数据集汇总软件开发深度学习软件开发汇总
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑