SORT+DeepSORT
Posted Arrow
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SORT+DeepSORT相关的知识,希望对你有一定的参考价值。
SORT+DeepSORT
1. 简介
- SORT: Simple Online and Realtime Tracking
- MOT:Multiple Object Tracking (是一个数据关联问题)
- BBox:Bounding Box
- ReID:Re-Identification
- MOTA:Multi-object tracking accuracy
- MOTP:Multi-object tracking precision
- FP:number of false detections (误检数)
- FN:number of missed detections (漏检数)
- 奥卡姆剃刀定律(Occam’s Razor) :“如无必要,勿增实体”,即“简单有效原理”
1.1 评价指标
- ( o i , h j ) (o_i, h_j) (oi,hj):是对象 o i o_i oi与跟踪假设 ( h j ) (h_j) (hj)间的一个映射(匹配),且它们的距离不超过阈值 T T T,所有的映射应当确保所有的距离和最小
- c t c_t ct:在时间 t t t ,找到的匹配数量
- d t i d_t^i dti:在时间 t t t,对象 o i o_i oi与它的跟踪假设间的距离 (距离计算方法:区域(框)跟踪器,距离可用两者的重叠区域来度量;点跟踪器,距离可用两者中心点的欧氏距离来度量)
- f p t fp_t fpt:在时间 t t t,未被匹配的跟踪假设数量(false positive)
- m t m_t mt:在时间 t t t,未被匹配的对象数量(missed objects)
- g t g_t gt:在时间 t t t,找到的对象数量
- m m e t mme_t mmet:在时间 t t t,ID跳变数量
- MOTP:跟踪定位精度指标
M O T P = Σ i , t d t i Σ t c t MOTP = \\frac\\Sigma_i,t d_t^i\\Sigma_t c_t MOTP=ΣtctΣi,tdti - MOTA:综合了漏检率,误检率,以及 ID 跳变率
M O T A = 1 − Σ t ( m t + f p t + m m e t ) Σ t g t MOTA = 1 - \\frac\\Sigma_t(m_t + fp_t + mme_t)\\Sigma_t g_t MOTA=1−ΣtgtΣt(mt+fpt+mmet)
1.2 SORT功能
- 仅使用Kalman Filter和Hungarian algorithm获得较好的准确率和实时性
- 在图像空间执行卡尔曼滤波
- 使用匈牙利算法进行相邻帧间的数据关联
- 遵循奥卡姆剃刀定律,未考虑以下因素:
- 外观特征
- 短期和长期的遮挡
- 其速度模型仅考虑相邻帧间的预测,而未考虑对象重识别(ReID)
- 不足之外
- 仅状态估计不确定性低时效果才比较好 (由所使用的关联指标决定的)
1.3 DeepSORT功能
- 方法:
- 在SORT的基础上,集成了外观信息(appearance information)以改善SORT的性能
- 在可视的外观空间中,通过最近邻查询方法(nearest neighbor queries)来建立测量到跟踪的关联(measurement-to-track associations)
- 效果:
- 可跟踪长时间遮挡的对象
- 有效地减少了ID跳变
1.4 实现方案
- 视频中不同时刻的同一个人,位置发生了变化,那么是如何关联上的呢? 答案就是:
- 匈牙利算法
- 卡尔曼滤波。
- 卡尔曼滤波可以基于目标前一时刻的位置,来预测当前时刻的位置,并且可以比传感器(在目标跟踪中即目标检测器,比如Yolo等)更准确的估计目标的位置。
- 匈牙利算法可以告诉我们当前帧的某个目标,是否与前一帧的某个目标相同。
2. 卡尔曼滤波(Kalman Filter: 运动预测)
- 作用:基于传感器的测量值来更新预测值,以达到更精确的估计。
- 举例说明:假设我们要跟踪小车的位置变化,如下图所示,蓝色的分布是卡尔曼滤波预测值,棕色的分布是传感器的测量值,灰色的分布就是基于测量值更新后的最优估计值。
- 在目标跟踪中,需要估计track的以下两个状态:
- 均值(Mean):表示目标的位置信息,由BBox的中心坐标 ( c x , c y ) (c_x, c_y) (cx,cy),宽高比r,高h,以及各自的速度变化值组成,由8维向量表示为 x = [ c x , c y , r , h , v x , v y , v r , v h ] x = [c_x, c_y, r, h, v_x, v_y, v_r, v_h] x=[cx,cy,r,h,vx,vy,vr,vh],各个速度值初始化为0。
- 协方差(Covariance ):表示目标位置信息的不确定性,由8x8的对角矩阵表示,矩阵中数字越大则表明不确定性越大,可以以任意值初始化。
- 卡尔曼滤波分为两个阶段:
- (1) 预测track在下一时刻的位置
- (2) 基于detection来更新预测的位置。
3. 匈牙利算法(Hungarian Algorithm:数据关联)
4. SORT
- 目标:相邻帧间的预测和关联 (frame-to-frame prediction and association)
- 速度和准确度同时提高
4.1 估计模型
- 使用独立于其他对象和相机运动的线性恒速模型来近似每个对象的帧间位移。 每个目标的状态建模为:
X = [ u , v , s , r , u ˙ , v ˙ , s ˙ ] T X= [u, v, s, r, \\dot u, \\dot v, \\dot s]^T X=[u,v,s,r,u˙,v˙,s˙]T - u u u:对象中心的水平像素坐标
- v v v:对象中心的垂直像素坐标
- s s s:对象BBox的尺度/面积
- r r r:对象BBox的宽高比
- u ˙ , v ˙ , s ˙ \\dot u, \\dot v, \\dot s u˙,v˙,s˙:分别表示u,v,s的速度,通过Kalman Filter求解
- 若一个当前帧中的检测对象与已有的一个目标相关联,则此检测到的BBox用于更新此目标的状态
4.2 数据关联
- 若一个检测BBox与已有目标的 I O U IOU IOU小于 I O U m i n IOU_min IOUmin时,则拒绝把此检测BBox分配给此目标
- 分配成本矩阵:每个检测BBox与来自现有目标的所有预测BBox之间的 I O U IOU IOU 距离。
- 最终分配通过匈牙利算法(Hungarian algorithm.)进行求解
5. DeepSORT
- 在SORT的基础上,集成了外观信息(appearance information)以改善SORT的性能
5.1 跟踪处理和状态估计
- 每个目标的状态建模为:
X = [ u , v , γ , h , x ˙ , y ˙ , γ ˙ , h ˙ ] X=[u, v, \\gamma, h, \\dot x, \\dot y, \\dot \\gamma, \\dot h ] X=[u,v,γ,h,x˙,y˙,γ˙,h˙] - ( u , v ) (u, v) (u,v):BBox中心的像素坐标
- γ \\gamma γ:宽高比
- h h h:BBox的高度
- ( x ˙ , y ˙ , γ ˙ , h ˙ ) (\\dot x, \\dot y, \\dot \\gamma, \\dot h) (x˙,y˙,γ˙,h˙):各个分量在图像坐标中的速度
- 为未找到关联的检测BBox新建一个轨迹(track),若开始的连续3帧中有一帧未被关联,则删除此track
- 对于一个成功建立的track,若连续未被关联的帧数达到预定义的 A m a x A_max Amax,则删除此track
5.2 分配问题
- 解决预测的卡尔曼状态与新到达的测量值BBox之间的关联的传统方法是构建一个可以使用匈牙利算法求解的分配问题。
- 在分配问题求解时,集成了运动和外观信息,而SORT中只使用了 I O U IOU IOU距离
5.2.1 运动信息(motion information)
- 运动信息:使用预测的卡尔曼状态与新到达的测量值之间的马氏距离
d ( 1 ) ( i , j ) = ( d以上是关于SORT+DeepSORT的主要内容,如果未能解决你的问题,请参考以下文章