SORT(SIMPLE ONLINE AND REALTIME TRACKING)算法研究
算法提出
- 2016年提出,作者仅灵活地使用了卡尔曼滤波算法和匈牙利算法的结合,就实现了当时SOTA的表现效果。结果非常amazing呀!
卡尔曼滤波算法
- 算法参考解读:卡尔曼滤波算法解读
- 什么是卡尔曼滤波?
只要是存在不确定信息的动态系统,卡尔曼滤波就可以对系统下一步要做什么做出有根据的推测。即便有噪声信息干扰,卡尔曼滤波通常也能很好的弄清楚究竟发生了什么,找出现象间不易察觉的相关性。 - 卡尔曼滤波的目标
从不确定信息中挤出尽可能多的信息!捕获系统变量的相关性! - 作用
卡尔曼滤波非常适合不断变化的系统,它的优点还有内存占用较小(只需保留前一个状态)、速度快,是实时问题和嵌入式系统的理想选择。 - 本质
卡尔曼滤波实质就是将预测状态量的高斯分布和观测量的高斯分布做融合,生成一个新的高斯分布,其中新的高斯分布的均值和方差是两个独立的高斯分布的相关参量的加权,这个加权就是卡尔曼增益,但是预测状态量和观测量可能维度不同,需要将他们同时转换到一个向量空间中,所以观测量前面有线性变换矩阵。 - 公式推导
匈牙利算法
- 算法解读参考:匈牙利算法解读
- 二分图: 匈牙利算法与KM算法都是为了求解二分图的最大匹配问题
概念:二分图就是能分成两组:U、V。其中,U上的点不能相互连通,只能连去V中的点,同理,V中的点不能相互连通,只能连去U中的点。这样,就叫做二分图。
可以把二分图理解为视频中连续两帧中的所有检测框,第一帧所有检测框的集合称为U,第二帧所有检测框的集合称为V。同一帧的不同检测框不会为同一个目标,所以不需要互相关联,相邻两帧的检测框需要相互联通,最终将相邻两帧的检测框尽量完美地两两匹配起来。而求解这个问题的最优解就要用到匈牙利算法或者KM算法。
- 匈牙利算法原理
- 定义:是一种在多项式时间内求解任务分配问题的组合优化算法。
- 解读参考:趣味解读
- 算法总结:
a. 最终的结果是我们匹配出了三对目标,由于候选的匹配目标中包含了许多错误的匹配红线(边),所以匹配准确率并不高。可见匈牙利算法对红线连接的准确率要求很高,也就是要求我们运动模型、外观模型等部件必须进行较为精准的预测,或者预设较高的阈值,只将置信度较高的边才送入匈牙利算法进行匹配,这样才能得到较好的结果。
b. 匈牙利算法的流程熟悉后,有一个很明显的问题相信大家也发现了,按这个思路找到的最大匹配往往不是我们心中的最优。匈牙利算法将每个匹配对象的地位视为相同,在这个前提下求解最大匹配。这个和我们研究的多目标跟踪问题有些不合,因为每个匹配对象不可能是同等地位的,总有一个真实目标是我们要找的最佳匹配,而这个真实目标应该拥有更高的权重,在此基础上匹配的结果才能更贴近真实情况。 - 代码示意(结合趣味讲解)
//匹配
bool find(int x){
int j;
for (j=1;j<=m;j++){ //扫描每个妹子
if (line[x][j]==true && used[j]==false)
//如果有暧昧并且还没有标记过(这里标记的意思是这次查找曾试图改变过该妹子的归属问题,但是没有成功,所以就不用瞎费工夫了)
{
used[j]=1;
if (girl[j]==0 || find(girl[j])) {
//名花无主或者能腾出个位置来,这里使用递归
girl[j]=x;
return true;
}
}
}
return false;
}
//主程序中
for (i=1;i<=n;i++)
{
memset(used,0,sizeof(used)); //这个在每一步中清空
if find(i) all+=1;
}
KM算法
- KM算法就能比较好地解决匈牙利算法(b)的问题。
- KM算法解决的是带权二分图的最优匹配问题。
- 算法解读参考:KM解读
- 算法总结
匈牙利算法得到的最大匹配并不是唯一的,预设匹配边、或者匹配顺序不同等,都可能会导致有多种最大匹配情况,所以有一种替代KM算法的想法是,我们只需要用匈牙利算法找到所有的最大匹配,比较每个最大匹配的权重,再选出最大权重的最优匹配即可得到更贴近真实情况的匹配结果。但这种方法时间复杂度较高,会随着目标数越来越多,消耗的时间大大增加,实际使用中并不推荐。
SORT中的卡尔曼滤波
-
参考:SORT中的卡尔曼滤波
-
论文地址:
-
预测和更新的过程,就是信息融合的过程,目的就是融合所有已知的信息,使得状态的预测更加准确,该过程中具体算法实现,就是大名鼎鼎的卡尔曼滤波算法。所以卡尔曼滤波会经常和“多传感器信息融合”等词眼一起出来。
-
SORT中将卡尔曼滤波器用于检测框运动的预测,那么描述一个检测框需要以下四个状态:
(1) 检测框中心的横坐标;
(2) 检测框中心的纵坐标;
(3) 检测框的大小(论文中叫做scale或者area);
(4) 长宽比;
以上四个状态可以描述一个检测框的基本信息,但是不能完全描述一个状态的运动状态信息,所以需要引入上述的状态的变化量信息(可以看作变化速度)来进行运动状态信息的描述。由于SORT假设一个物体在不同帧中检测框的长宽比不变,是个常数,所以变化量只考虑上面的(1)(2)(3),不考虑(4),即:
(1) 检测框中心的横坐标的变化速度;
(2) 检测框中心的纵坐标的变化速度;
(3) 检测框的大小(论文中叫做scale或者area)的变化速度;
所以SORT中共使用了7个参数,用来描述检测框的状态。