- 什么是多目标追踪?
- 在目标检测上,同一个目标在帧与帧之间并没有关联起来
- 要确定上一帧的A_1目标是不是下一帧的A_2目标,这里就要用到多目标跟踪。
- 多目标追踪传输的是一个视频流
- 对于每一帧,需要检测目标并分配一个“对象 ID”
- 在下一帧中,如果检测到相同的对象,则需要分配相同的对象 ID。
- 有许多算法用于 MOT,如 SORT(简单在线实时跟踪)、DeepSort、StrongSort 等。
- 关于 ByteTrack 与 DeepSort,他们各有限制
- ByteTrack:跟踪效果非常依赖检测的效果。检测器的效果好,跟踪也会取得不错的效果。
- DeepSort:使用了外观描述符和复杂的匹配算法,在某些复杂场景下计算量较大,影响实时性能。
- 下面先展示使用香橙派aipro 的ByteTrack项目结果,后面再来解析具体算法
- 因没做后处理独立进程处理,后处理时间可能较长,最终46fps左右
- ByteTrack的核心有以下几点
- 使用低置信度检测框避免漏检和减少轨迹断裂
- 使用卡尔曼滤波预测轨迹的位置
- 通过IoU 特征距离计算预测框和检测框之间的相似性
- 通过高置信度,低置信度,IOU相似度数据来分化不同目标
- 如匹配成功的矩阵matchs,未匹配成功的跟踪目标u_track,未匹配成功的检测目标u_detection
- 卡尔曼滤波
- 用预测的和观测的去更新 成为更新数据
- 用更新数据去预测 成为预测数据
- 要实现上述目标,需要做下列工作
- 安装Eigen,C++中可以用来调用并进行矩阵计算的一个库
- 移植ByteTrack 核心 C++代码
- 主main 嵌入调用 ByteTrack API
- 构建 双向链表 定时机制进行核心框 中心点数据记录更新
- 定时查验存续框数据,删除mark_removed的 中心点数据链表
- 使用MOT17数据进行验证