检测跟踪一体化框架优化

上一版的不足

上一版的我提出了以下几点的优化,也给出了状态机的工作思路(并非完整代码)。

  • 可以自主选择目标(对目标检测结果进行优化)
  • 可以长时间针对特定目标进行跟踪(对单目标跟踪特征信息进行优化)
  • 跟踪丢失时(遮掩或高速运动)可以再次找回上一次跟踪的目标(目标检测和目标跟踪融合)

通过上述三点优化,跟踪器已经能够较好的进行跟踪任务,但是由于整体架构采用串行设计,导致跟踪和检测是一种互斥关系,要么使用检测实现自主选择目标或者校准,要么使用跟踪对目标进行高频跟踪。这样的设计无法充分利用RK3588的硬件资源(CPU, NPU),且在实际使用中会发现跟踪器存在明显的顿感(跟踪切换到检测时帧率大幅下降导致跟踪器云台控制频率降低)。所以这一版我将整个检测跟踪一体化框架进行异步设计,对高频单目标跟踪和低频目标检测进行数据融合(类似低频GPS+高频IMU的数据融合实现高精度目标定位),进一步提高跟踪器的精度和可靠性。

下图是串行阻塞方案和异步决策融合方案的差异,其中串行阻塞的资源消耗较低,但是检测和跟踪是一种互斥关系,校准时无法及时跟踪目标。而异步方案相当于开了多个并行的检测和跟踪模块,模块之间可以进行数据融合,使得跟踪稳定性大幅提升。

image-20250603171649878

优化思路

既然是串行设计导致的性能不足和资源利用率低,那就引用异步设计。这里我选择构建一个线程池,用户提交任务类型和数据,线程池将任务提交给任务队列并给用户返回一个future对象负责监听任务完成情况,线程完成任务给promise对象设置值,用户使用wait_for无阻塞查询线程是否完成。

异步设计又会存在几个需要注意的事项:

  1. 线程池的构建: 根据单生产者和多生产者模型,线程间通信可以设计单共享队列或双共享队列。
  2. 异步时间差: 由于检测跟踪模型进行异步计算,就会存在检测结果存在时间差导致的坐标滞后问题,可以通过预测模型进行优化
  3. 数据融合策略: 融合策略的好坏决定了异步优化的上限,初步可通过IOU以及坐标中心距离判断跟踪好坏。