无人机跟踪器——检测跟踪一体化框架优化(线程池异步计算)
检测跟踪一体化框架优化
上一版的不足
上一版的我提出了以下几点的优化,也给出了状态机的工作思路(并非完整代码)。
- 可以自主选择目标(对目标检测结果进行优化)
- 可以长时间针对特定目标进行跟踪(对单目标跟踪特征信息进行优化)
- 跟踪丢失时(遮掩或高速运动)可以再次找回上一次跟踪的目标(目标检测和目标跟踪融合)
通过上述三点优化,跟踪器已经能够较好的进行跟踪任务,但是由于整体架构采用串行设计,导致跟踪和检测是一种互斥关系,要么使用检测实现自主选择目标或者校准,要么使用跟踪对目标进行高频跟踪。这样的设计无法充分利用RK3588的硬件资源(CPU, NPU),且在实际使用中会发现跟踪器存在明显的顿感(跟踪切换到检测时帧率大幅下降导致跟踪器云台控制频率降低)。所以这一版我将整个检测跟踪一体化框架进行异步设计,对高频单目标跟踪和低频目标检测进行数据融合(类似低频GPS+高频IMU的数据融合实现高精度目标定位),进一步提高跟踪器的精度和可靠性。
优化思路
既然是串行设计导致的性能不足和资源利用率低,那就引用异步设计。这里我选择构建一个线程池,用户提交任务类型和数据,线程池将任务提交给任务队列并给用户返回一个future对象负责监听任务完成情况,线程完成任务给promise对象设置值,用户使用wait_for无阻塞查询线程是否完成。
——待续
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 YJK的博客!