目标:
- SORT算法的原理
- DeepSORT算法的原理
SORT(Simple Online and Realtime Tracking)和DeepSORT是两种广泛应用在计算机视觉领域的多目标跟踪算法。
SORT: SORT算法由Martin Danelljan等人于2016年提出,是一种基于关联的在线实时多目标跟踪算法。它主要依赖于卡尔曼滤波器进行状态预测和更新,并采用匈牙利算法解决数据关联问题。SORT假设目标的特征不变,仅依据目标的位置信息(如bounding box中心坐标)进行跟踪,因此对于外观变化较大的场景可能表现不佳。
DeepSORT: DeepSORT是在SORT的基础上发展起来的一种算法,由Wojciech Mozharovskyi和Andreas Geiger于2017年提出。DeepSORT除了继承了SORT的优点外,还引入了深度学习特征表示,特别是使用卷积神经网络提取目标的视觉特征,增强了目标在外观变化和遮挡等复杂情况下的区分能力。这样,当目标出现短暂的遮挡或者形变时,DeepSORT能更好地保持跟踪的稳定性。
总结来说,SORT的核心是卡尔曼滤波和匈牙利算法,而DeepSORT在此基础上结合了深度学习特征,提高了在复杂环境下的目标跟踪性能。两者都被广泛应用于自动驾驶、视频监控、无人机追踪等多种场景。
SORT案例: 假设在一个行人跟踪的视频监控场景中,我们应用SORT算法进行目标跟踪。首先,视频每一帧都会通过物体检测算法(如YOLO、Faster R-CNN等)获取行人候选框。SORT算法利用这些检测结果,并通过卡尔曼滤波器预测每一目标在下一帧可能出现的位置。然后,借助匈牙利算法,按照距离度量(如IoU或基于位置和速度的度量)将当前帧的检测框与前一帧的目标进行关联匹配,从而实现连续的、一对一的目标跟踪。
例如,若第一帧识别到三个行人的位置,第二帧由于行人移动导致位置发生变化,SORT算法会根据卡尔曼滤波器预测的位置信息和第二帧的实际检测结果进行匹配,确定每个新检测到的行人对应于上一帧的哪个行人,进而更新每个目标的轨迹。
DeepSORT案例: 同样是在行人跟踪的场景下,但此时行人可能会因穿着相似、遮挡等原因造成视觉特征难以区分。这时我们可以使用DeepSORT算法。
例如,在大型商场的人流监控中,顾客A和顾客B起初穿的衣服颜色和体型都很相近,传统的SORT算法可能因为这些相似性而在跟踪过程中混淆二者。然而,DeepSORT通过深度学习模型提取每个人独特的视觉特征,即便他们在一段时间内出现了交叉行走或遮挡的情况,仍然可以根据他们的面部特征、衣服纹理等细节差异准确地维持各自的跟踪轨迹,从而提高跟踪的准确性。
1.SORT
SORT核心是卡尔曼滤波和匈牙利匹配两个算法。流程图如下所示,可以看到整体可以拆分为两个部分,分别是匹配过程和卡尔曼预测加更新过程,都用灰色框标出来了。
关键步骤:轨迹卡尔曼滤波预测→ 使用匈牙利算法将预测后的tracks和当前帧中的detecions进行匹配(IOU匹配) → 卡尔曼滤波更新
卡尔曼滤波分为两个过程:预测和更新。SORT引入了线性速度模型与卡尔曼滤波来进行位置预测,先进行位置预测然后再进行匹配。运动模型的结果可以用来预测物体的位置。
匈牙利算法解决的是一个分配问题,用IOU距离作为权重(也叫cost矩阵),并且当IOU小于一定数值时,不认为是同一个目标,理论基础是视频中两帧之间物体移动不会过多。在代码中选取的阈值是0.3。scipy库的linear_sum_assignment都实现了这一算法,只需要输入cost_matrix即代价矩阵就能得到最优匹配。