总述
总共可以分为三种方法:基于CNN的方法(绿色分支);基于相关滤波的方法(黄色分支);其他的方法(图中others分支)
一、传统算法——KCF
不用深度学习,只需在第一帧图像中给出目标框的位置,只能做单目标跟踪?
难点;运行模糊;遮挡;尺度变化;
二、深度学习算法
参考:https://zhuanlan.zhihu.com/p/97449724
1 、IOU2、SORT
sort详解
代码:https://github.com/abewley/sort
卡尔曼预测是在库filerpy/kalman/kalman_filter.py中。根据前n帧的结果预测,n可以设置。
self.kf = KalmanFilter(dim_x=7, dim_z=4)
SORT作为一个粗略的框架,核心就是两个算法:卡尔曼滤波和匈牙利匹配。
卡尔曼滤波分为两个过程:预测和更新。预测过程:当一个小车经过移动后,且其初始定位和移动过程都是高斯分布时,则最终估计位置分布会更分散,即更不准确;更新过程:当一个小车经过传感器观测定位,且其初始定位和观测都是高斯分布时,则观测后的位置分布会更集中,即更准确。
匈牙利算法解决的是一个分配问题。SK-learn库的linear_assignment_和scipy库的linear_sum_assignment都实现了这一算法,只需要输入cost_matrix即代价矩阵就能得到最优匹配。不过要注意的是这两个库函数虽然算法一样,但给的输出格式不同。具体算法步骤也很简单,是一个复杂度 [公式] 的算法。
3、DeepSORT
这是DeepSORT算法的流程图,和SORT基本一样,就多了级联匹配(Matching Cascade)和新轨迹的确认(confirmed)。
关键步骤:轨迹卡尔曼滤波预测→ 使用匈牙利算法将预测后的tracks和当前帧中的detecions进行匹配( 特征匹配和IOU匹配) → 卡尔曼滤波更新
DeepSORT在IOU Match之前做了一次额外的级联匹配,利用了外观特征和马氏距离。外观特征就是通过一个Re-ID的网络提取的。
4、DCF
参考:
也是deepstream sdk中用到的一个目标跟踪算法
参考: