标题目标追踪算法学习经验总结
最近对目标追踪算法进行了学习,以下是我的学习经验,如有不对之处,欢迎大家指正。
1、简介
1.1 定义
目标跟踪是通过分析视频图片序列,对检测出的各个候选目标区域实施匹配,定位出这些目标在图像中的坐标位置,然后得到一系列相同目标的连续变化的过程。
1.2 分类
单目标跟踪:给定某视频序列初始帧的目标大小与位置的情况下,预测后续帧中该目标的大小与位置。
多目标跟踪(MOT):追踪多个目标的大小和位置,且每一帧中目标的数量和位置都可能变化。
重识别(Re-ID):即给定一个监控行人图像,检索跨设备下的该行人图像。旨在弥补固定的摄像头的视觉局限,并可与行人检测/行人跟踪技术相结合。
1.3 难点
1.遮挡与消失;
2.形态变化;
3.运动模糊;
4.复杂背景;
5.准确性与实时性。
2、多目标追踪
2.1 分类
在线追踪:仅利用当前帧与过去帧的信息,与人眼类似;
离线追踪:可以利用当前帧、过去帧、未来帧的信息进行追踪。
主流方法是TBD(Tracking-by-Detection),即先进行目标检测,再对生成的检测框进行匹配跟踪。还有一种算法是JDE,即使用类似检测的算法直接实现跟踪。
2.2 基本步骤
1.给定视频的原始帧;
2.运行对象检测器以获得对象的边界框;
3.对于每个检测到的物体,计算出不同的特征,通常是视觉和运动特征;
4.相似度计算步骤计算两个对象属于同一目标的概率;
5.关联步骤为每个对象分配数字ID。
2.3 主要评价指标
一、MOTA(MOT Accuracy)
衡量检测物体和保持轨迹方面的性能
FN:未检测到的GT框数目(漏检)
FP: 不能与GT框相匹配的预测框数量;
IDSW:GT框所分配的id变化次数。
MOTA考虑了FN、FP、ID Switch 三个问题,对所有帧求和,缺点是FN、FP的比重过大、更考虑检测器的性能。
二、MOTP(MOT Precision)
衡量定位精度(检测器性能)
分母为t帧总共匹配的数目,分子的d表示检测框与实际GT框之间的距离。
三、ID Scores
IDP(识别精确度):整体评价精确度的好坏。
IDF1(平均数比率):正确的目标检测数与真实数和计算检测数和的平均数比率。
IDR(识别召回率):当IDF1-score最高时正确预测的目标数与真实目标数之比。
IDTP:在整个视频中检测目标被正确分配的数量;
IDFN:在整个视频中检测目标被漏分配的数量;
IDFP: 在整个视频中检测目标被错误分配的数量。
3、经典算法
3.1 Sort
全称(Simple Online and Realtime Tracking)
由目标检测、卡尔曼滤波、匈牙利匹配算法组成。
优缺点:原理简单、易于实现;但当目标物被遮挡时,准确率急剧下降。
3.1.1 目标检测
原论文使用Faster R-CNN,也可以使用YOLO系列等等目标检测模型。
3.1.2 卡尔曼滤波
定义:是一个去噪算法,结合先验经验与当前测量更新的状态估计算法;在SORT中,即将数学模型根据上一帧轨迹进行预测的预测框与当前帧对应的检测器检测的检测框进行融合,找到最优估计值。
作用:检测器所得到的预测框不够准确; 俩帧之间的间距很小,目标物的外形、运动特征具有较高相似度,是可以通过上一帧的信息对当前帧的位置进行预测。
简单流程:
3.1.3 匈牙利匹配
匈牙利算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。它的基本原则就是在原有匹配(最开始的按优先顺序匹配)基础上重新分配,看是否可以添加一个新的匹配。
简单原理:假设存在俩个集合S,T。S中有m个元素,T中有n个元素,集合内部的元素不相连,匈牙利算法则是要把俩个集合中的元素进行俩俩匹配。匹配原则为:“损失最小”。
在SORT中,将检测器在当前帧检测到的m个检测框与n个轨迹预测的预测框进行IOU距离计算,得到n*m的IoU代价矩阵,其中COSTij就表示预测框i与检测框j的IOU损失;去除小于置信度阈值的元素;再使用匈牙利算法进行递归匹配,最终得到三个集合,分别为匹配上的轨迹,未匹配上的轨迹,未匹配上的检测框。
3.1.4 算法流程
3.2 DeepSort
在SORT基础上进行改进,相比于SORT,多了级联匹配,以及新轨迹确认。
3.2.1 马氏距离
运动模型、又称为协方差距离,可以有效计算俩个未知样本集相似度的方法,度量预测和检测的匹配程度。
其中,d和y分别代表测量分布和预测分布;S为两个分布之间的协方差矩阵,它是一个实对称正定矩阵。
3.2.2 余弦距离
当物体的运动状态的不确定性较低时,可以使用马氏距离。但是当目标物突然加减速,运动状态快速变化时,就要使用余弦距离来度量预测与检测之间的表观特征间的距离。
DeepSort为每个目标物设计了一个“深度外观特征描述符”,是一个在行人重识别数据集上离线训练的 ReID 网络提取到的 128 维单位特征向量(模长为 1 )。对于每个追踪器 tracker,保留它最后 100 个与检测框关联成功的外观特征描述符集合 R 并计算出它们和检测框的最小余弦距离:
同上,余弦距离这部分也使用了一个指示器,如果余弦距离小于,则认为匹配上。这个阈值在代码中被设置为0.2(由参数max_dist控制),这个属于超参数,在人脸识别中一般设置为0.6。
3.2.3 级联匹配
目的:当物体被长时间遮挡时,卡尔曼滤波器不能对目标状态准确预测。但是当两个轨迹竞争同一检测框时,其中一个是长期丢失目标的轨迹A,一个是短期丢失目标的轨迹B,马氏距离会带来较大的不确定性。会导致A优先于B被匹配,但这很可能是错误匹配,造成目标物ID的连续变换。因此,Deep Sort引入了级联匹配,来赋予更少丢失目标的轨迹的优先匹配权。
步骤:
1、输入跟踪目标轨迹集合T,当前帧检测器检测的检测框集合D,允许连续被遮挡的最大帧数A_max。
2、计算T与D的运动及外观匹配度矩阵C;
可以通过超参数λ来控制每个指标对合并成本的影响。在论文中,发现当摄像机运动较大时,将λ=0 ,即只使用余弦距离,而不使用马氏距离。马氏距离仅作为门控矩阵过滤马氏距离较远的检测框。
3、计算T与D的阈值矩阵;
4、对成功匹配集合P、未成功匹配预测框集合U进行初始化;
5、开始匹配,对于没丢失过的轨迹优先匹配,丢失最久的轨迹最后匹配。
3.2.4 算法流程
激活轨迹:已连续俩帧以上追踪到的轨迹;
未激活轨迹:新轨迹,仅一帧检测到的轨迹;
失追轨迹:丢失目标物的轨迹(age<A_max)。
age:丢失目标的帧数;
A_max:允许最大丢失目标帧数。
3.3 ByteTrack
相比于DeepSORT,ByteTrack认为检测器所得到的低置信度的检测框仍有作用,很可能是目标物被部分遮挡而导致的低置信度,因此算法对低分的检测框也进行了一次匹配。
同时,相比于DeepSORT,ByteTrack仅在检测器部分使用了深度学习算法,而跟踪器部分并没有使用。
3.3.1 算法流程
3.4 BoT-Sort
在ByteTrack的基础上进行改进,拥有BoT-SORT、BoT-SORT-ReID(多了一个重识别)俩个版本。
改进:1、卡尔曼滤波的状态变量改进;2、加入相机运动补偿(CMC),即利用稀疏光流(目标外画面中的关键点)来获得俩帧之间画面的移动,进而补偿卡尔曼滤波算法的状态估计过程;3、IoU距离与Re-ID特征的余弦距离的融合。
3.4.1 KF中的状态向量改进
3.4.2 相机运动补偿
动态相机运动场景下,目标边界框的位置可能发生剧烈变化,在静态情况下,也有可能由于风等原因造成相机移动。
使用OpenCV中的全局运动补偿(GMC),将前后俩帧的图像配准转化为相机的运动在二维平面上的投影,即通过转化坐标系,将后一帧的图像进行投影,使其与前一帧的图像配准。
3.4.3 IoU距离与ReID特征的余弦特征融合
没有使用DeepSort中的超参数λ。
3.4.4 算法流程
4 总结与对比
4.1 参数对比
BoTSort论文中
4.2 总结
目标检测器的性能很大程度上影响整个跟踪算法的精度,如ByteTrack也是由于检测器精度够高,才能对低分检测框进行利用;
Re-ID能够一定程度上解决短时间内目标遮挡的现象,但会降低模型运行速度;
相机运动补偿可以提高一定的跟踪精度。
5、 参考链接
1、实时目标追踪:ByteTrack算法步骤详解和代码逐行解析
2、【论文阅读5】BoT-SORT:Robust Associations Multi-Pedestrian Tracking
3、【论文-目标追踪】BoT-SORT: Robust Associations Multi-Pedestrian Tracking
4、多目标跟踪算法 | DeepSort
5、多目标跟踪入门篇(1):SORT算法详解
6、深入浅出——零基础一文读懂DeepSORT(原理篇)
7、目标追踪—deepsort原理讲解
8、目标跟踪概念、多目标跟踪算法SORT和deep SORT原理
9、知乎-----多目标跟踪(MOT)入门