目标追踪最核心的两个算法就是卡尔曼滤波和匈牙利算法算法。
卡尔曼滤波:根据当前帧中的轨迹预测下一帧的轨迹。
匈牙利算法:将预测的目标位置与检测到的目标位置进行匹配,实现对目标的准确跟踪。
Sort算法
Sort算法分为以下几个步骤:
1.卡尔曼滤波预测轨迹
2.利用匈牙利算法匹配当前帧 目标检测(Detection) 的结果以及步骤一中卡尔曼滤波预测的轨迹进行匹配 (IOU匹配)
3.若匹配成功,卡尔曼滤波进行更新,若匹配失败则直接删除。
Deep Sort算法
Deep Sort算法是在Sort算法基础上进行了一系列的优化,其中最重要的优化就是增加了级联匹配。主要步骤如下:
1.卡尔曼滤波预测轨迹
2.利用匈牙利算法匹配当前帧 目标检测(Detection) 的结果以及步骤一中卡尔曼滤波预测的轨迹进行匹配 (级联匹配 + IOU匹配)
3.卡尔曼滤波进行更新
https://blog.csdn.net/qq_43591839/article/details/126008607
多目标追踪
随着目标的移动,是不是同一个人。是不是之前那个目标。
如果目标突然不见了,等它再出现,要判断他是不是之前识别的人,id不能变。
既要得到每一帧检测结果
也要看看当前每一帧还是不是之前的人。
卡尔曼滤波
必须是一帧一帧的,不是当前是第一帧,下次是第5帧。
卡尔曼滤波的初始值
预测值和估计值都有误差,卡尔曼滤波就是想办法综合预测值和预测值得到更优的结果。
如何实现跟踪?
从当前帧 的绿框开始,来预测下一帧绿框移动的位置,即蓝框。如果预测框与真实框接近,那么他们就是同一个人。
当下一帧一个观众突然冲出来,遮挡住2号球员,那么预测值发现预测与真实的位置相差较远,那么就把真实框,设置为新的人,赋予新的id.
怎么从当前位置对下一个位置预测?
估计阶段
卡尔曼滤波的预测有两个部分,上面是对状态的更新。
下面是关系的更新。Q是噪音矩阵,关系中也有不可控的因素。比如今天跟女朋友好好的,明天就翻脸了,不知道为啥。
更新阶段
K是卡尔曼增益,也是权重项。
追踪问题中需要考虑的状态:
状态包括:位置,速度,协方差矩阵。
位置和速度
位置用 中心点坐标(cx,cy),r=h/w,h 表示。(cx,cy,r,h)
速度包括xywh四个方向的速度。(vx,vy,vr,vh)
(cx,cy,r,h,vx,vy,vr,vh)
协方差矩阵
描述多个变量的关系,此时每个变量跟自己和其它变量的关系。
补充:
协方差
协方差是衡量两个变量共同变化程度的一个值。
1.当协方差为正,表示两个变量变化一致。当一个变量增加,另一个也会增加。
2.当协方差为负,表示两个变量变化相反,一个增,一个会减。
3.当为0时,表示两个变量没有线性关系。
协方差矩阵与相关性分析
https://zhuanlan.zhihu.com/p/434086112
匈牙利算法
用于解决匹配问题,到底匹配到谁。
完成匹配的同时最小化代价矩阵。当前帧检测到的目标该匹配到前面哪个目标。
有时候并不是最优的,而是尽可能多的分配。
小例子
就是看怎么分配代价矩阵最小。
比如第一个分配第一个任务,第三个人分培第二个任务,第二个人分配第三个任务。
在目标追踪中
匹配的例子:
https://www.bilibili.com/video/BV1Ws4y1d7BL/?p=8&spm_id_from=pageDriver&vd_source=ebc47f36e62b223817b8e0edff181613
如何构建代价矩阵呢?
外观匹配是对框内的目标提取特征,与预测的框看是否匹配