DeepSORT: Simple online and realtime tracking with a deep association metric 2017 IEEE ICIP
对SORT论文的解读可以参见我之前的博文。根据之前Survey中提到的MOT四步骤框架(detection-feature-affinity-association),其实DeepSORT是在affinity相似度计算这一步运用了CNN-based appearance深度特征,而在association匹配这一步没有使用深度方法。
摘要:
- 集成了appearance information来辅助匹配 -> 能够在目标被长期遮挡情况下保持追踪,有效减少id switch(45%).
- offline pre-training: 离线用大规模的person re-identification数据集对deep association metric作预训练,使最复杂的计算在线下完成
- online application: establish measurement-to-track associations using nearest neighbor queries(余弦距离) in visual appearance space
Keywords: Computer Vision, Multiple Object Tracking, Data Association
文章目录
1 Introduction
SORT算法是一个非常简单的框架,它采用了faster R-CNN检测bbox,并直接根据bbox的位置和大小 用卡尔曼滤波作运动估计,以bbox IOU作为相似度度量 用匈牙利算法进行detections和targets的匹配。
尽管SORT算法精度不错且速度很快,但它的缺点是ID switch数量较高(毕竟只有在运动估计的不确定性很低时,匹配才能比较精确,在遮挡情况前后特别容易出错)。
本文提出同时使用motion和appearance信息,来作为匹配的准则。这可以增强模型在misses和occlusions情况下的鲁棒性。
2 SORT with Deep Association Metric
2.1 Track Handling and State Estimation
与SORT算法基本一致,通过Kalman Filter来更新target state。超过预设最大年龄 A m a x A_{max} Amax帧没有匹配到detection的target将被从tracker池中删除;每个不能匹配到现有targets的detection会被立即初始化一个target添加到tracker池,但在最初的三帧中这些新tracker处于暂定状态,一旦没有成功匹配到detection就会被立即删除(这可以有效降低false positive)。
不同之处在于略微修改了target state的定义:
(
u
,
v
,
γ
,
h
,
x
˙
,
y
˙
,
γ
˙
,
h
˙
)
(u,v,\gamma,h,\dot{x},\dot{y},\dot{\gamma},\dot{h})
(u,v,γ,h,x˙,y˙,γ˙,h˙)
其中,
(
u
,
v
)
(u,v)
(u,v)是bbox的中心位置,
γ
\gamma
γ是aspect ratio宽高比,
h
h
h是bbox高度,最后四项是它们对应的速度。我们认为
(
u
,
v
,
γ
,
h
)
(u,v,\gamma,h)
(u,v,γ,h)是直接观测值,而通过上一时刻位置和速度的最优估计,我们还可以通过线性速度模型得到一个当前状态的经验估计值。与SORT的区别是,此处认为宽高比是可线性变化的,而SORT认为是固定常数。此外用高度
h
h
h来代替之前的scale。
2.2 Assignment Problem
相似度计算分为motion和appearance两部分,最终相似度是它们的gated加权和。
2.2.1 Motion
先简单介绍一下马氏距离。参考资料
马氏距离是一种有效的计算两个未知样本集的相似度的方法或者计算一个样本点与一个分布的距离。与欧氏距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度。
马氏距离可以衡量一个随机变量和一个分布之间的距离:对于一个均值为 μ = ( μ 1 , μ 2 , μ 3 , … , μ p ) T \mu=(\mu_1,\mu_2,\mu_3,\dots,\mu_p)^T μ=(μ1,μ2,μ3,…,μp)T,协方差矩阵为 Σ \Sigma Σ的多维随机变量:
x = ( x 1 , x 2 , x 3 , … , x p ) T x = (x_1,x_2,x_3,\dots,x_p)^T x=(x1,x2,x3,…,xp)T
马氏距离为:
D M ( x ) = ( x − μ ) T Σ − 1 ( x − μ ) D_M(x) = \sqrt{(x-\mu)^T\Sigma^{-1}(x-\mu)} DM(x)=(x−μ)TΣ−1(x−μ)
本模型使用 (squared) Mahalanobis distance马氏距离来度量【预测的卡尔曼状态】和【新检测到的bbox】之间的距离:
d
(
1
)
(
i
,
j
)
=
(
d
j
−
y
i
)
T
S
i
−
1
(
d
j
−
y
i
)
(1)
d^{(1)}(i,j)=(\boldsymbol{d}_j-\boldsymbol{y}_i)^T\boldsymbol{S}_i^{-1}(\boldsymbol{d}_j-\boldsymbol{y}_i) \tag{1}
d(1)(i,j)=(dj−yi)TSi−1(dj−yi)(1)
原文解释是“将第
i
i
i个track分布投影到度量空间,记为
(
y
i
,
S
i
)
(\boldsymbol{y}_i,\boldsymbol{S}_i)
(yi,Si);将第
j
j
j个检测到的bounding box记为
d
j
\boldsymbol{d}_j
dj”。根据我的理解,应该是用前一帧的target state对当前帧的bbox位置、大小
(
u
,
v
,
γ
,
h
)
(u,v,\gamma,h)
(u,v,γ,h)进行估计,这是一个多维高斯分布,有均值
y
i
\boldsymbol{y}_i
yi和方差
S
i
\boldsymbol{S}_i
Si。而通过detector可以直接得到当前的bbox观察值
(
u
,
v
,
γ
,
h
)
(u,v,\gamma,h)
(u,v,γ,h),这就是上面引言里所说的随机变量。因此,这个motion的距离度量,其实就是计算“detetor探测到的bbox随机变量
”与"通过卡尔曼滤波估计的bbox分布
"之间的距离。
马氏距离考虑了运动估计的不确定性,因为它将估计位置看作一个分布,计算随机变量和一个分布之间的距离;而不像SORT算法中直接看作准确的一个bbox,用IOU来度量距离。
此外,引入一个阈值来排除那些距离过大的匹配组合,这个决策用一个indicator来表示:
b
i
,
j
(
1
)
=
1
[
d
(
1
)
(
i
,
j
)
≤
t
(
1
)
]
(2)
b_{i,j}^{(1)} = \mathbf{1}\left[d^{(1)}(i,j) \leq t^{(1)}\right] \tag{2}
bi,j(1)=1[d(1)(i,j)≤t(1)](2)
其中
t
(
1
)
=
9.4877
t^{(1)}=9.4877
t(1)=9.4877,这一数值是对四维的变量空间
(
u
,
v
,
γ
,
h
)
(u,v,\gamma,h)
(u,v,γ,h)在逆卡方分布上要求能达到95%以上的置信度计算出的。这里我不深究原因,只简单当作一个距离度量的阈值,想了解背后原理的请自行学习。
2.2.2 Appearance
当运动估计的不确定性很低时,使用马氏距离作为匹配准则是合适的。但是我们没有考虑相机自身的运动和遮挡关系,这些都会使得运动估计的不确定性变高。因此,本论文新引入了appearance特征,作为另一个匹配准则。
提取appearance特征非常简单,我们直接离线预训练一个CNN,来计算bbox appearance descriptors(其实就是一个特征向量feature embedding),具体训练方式2.4节会讲。在线上使用时,对每个bounding box detection
d
j
\boldsymbol{d}_j
dj,都计算一个外观描述符
r
j
\boldsymbol{r}_j
rj,要求
∥
r
j
∥
=
1
\left\| \boldsymbol{r}_j \right\| = 1
∥rj∥=1. 此外,对每个track
i
i
i ,我们都保存它最后
L
k
L_k
Lk个匹配到的detection的外观描述符,记为
R
i
=
{
r
k
(
i
)
}
k
=
1
L
k
R_i=\left\{ \boldsymbol{r}_k^{(i)} \right\}_{k=1}^{L_k}
Ri={rk(i)}k=1Lk ,取
L
k
=
100
L_k=100
Lk=100. 那么, 第
i
i
i个track和第
j
j
j个detection在appearance空间的距离度量为它们的外观描述符的最小余弦距离:
d
(
2
)
(
i
,
j
)
=
m
i
n
{
1
−
r
j
T
r
k
(
i
)
∣
r
k
(
i
)
∈
R
i
}
(3)
d^{(2)}(i,j) = min\left\{ 1-\boldsymbol{r}_j^T\boldsymbol{r}_k^{(i)} | \boldsymbol{r}_k^{(i)} \in R_i \right\} \tag{3}
d(2)(i,j)=min{1−rjTrk(i)∣rk(i)∈Ri}(3)
同样引入一个阈值来排除在appearance space距离太大的匹配组合:
b
i
,
j
(
2
)
=
1
[
d
(
2
)
(
i
,
j
)
≤
t
(
2
)
]
(4)
b_{i,j}^{(2)} = \mathbf{1}\left[d^{(2)}(i,j) \leq t^{(2)}\right] \tag{4}
bi,j(2)=1[d(2)(i,j)≤t(2)](4)
t
(
2
)
t^{(2)}
t(2)的取值是在一个单独的训练集上实验选出的。
2.2.3 Combination of both
度量准则 | 效果 |
---|---|
motion | 短期预测,区分度更差 |
appearance | 长期预测,适用于目标在长时间遮挡后恢复匹配 re-identification |
用加权的方式融合上述两种度量方法:
c
i
,
j
=
λ
d
(
1
)
(
i
,
j
)
+
(
1
−
λ
)
d
(
2
)
(
i
,
j
)
(5)
c_{i,j} = \lambda d^{(1)}(i,j) + (1-\lambda)d^{(2)}(i,j) \tag{5}
ci,j=λd(1)(i,j)+(1−λ)d(2)(i,j)(5)
用
(
2
)
(
4
)
(2)(4)
(2)(4)两式共同gating:
b
i
,
j
=
∏
m
=
1
2
b
i
,
j
(
m
)
.
(6)
b_{i,j} = \prod_{m=1}^2b_{i,j} ^{(m)}.\tag{6}
bi,j=m=1∏2bi,j(m).(6)
λ
\lambda
λ是一个超参数,我们分发现相机自身运动很多时,设置
λ
=
0
\lambda=0
λ=0是一个合理的选择,即只考虑appearance信息。不过,即便是只使用appearance信息,也要保留
(
2
)
(2)
(2)式马氏距离的阈值gate,来丢弃一些不合适的匹配。
2.3 Matching Cascade
作者发现当目标被长时间遮挡时,卡尔曼滤波的估计值不确定性就很大(概率分散在很大的一个空间),此时我们期望detection与该目标计算的motion马氏距离偏大。然而恰恰相反,马氏距离更倾向于不确定的分布(对协方差大的分布,距离小),这会导致产生更多fragments和不稳定的追踪。因此,作者提出了级联式匹配,优先匹配那些更频繁看见(不确定性小)的目标。
从上图第5行可以看出,级联匹配算法优先匹配那些age小的目标。age是一个track距离上一次被成功检测间隔的帧数,age越小,说明它在越接近当前时间的帧中被检测到(匹配上)过。
这里第7行的min_cost_matching
我个人认为是指二部图的最小权匹配,且不要求完美匹配,可以通过略微修改的KM算法计算。如理解有不对,麻烦大家指出。KM算法参考
2.4 Deep Appearance Descriptor
作者想得到具有区分性的feature embedding,为此他们离线在大规模的person re-identification dataset上进行CNN预训练。CNN网络结构的最后一层加入了batch norm和
l
2
\mathscr{l}2
l2 norm,使最后得到的特征可以投影在单位超平面内(特征向量的模长为1),适用于appearance metric中用到的余弦距离。
预训练模型放在作者的Github 仓库上。
3 Experiments
采用超参数
λ
=
0
,
A
m
a
x
=
30
\lambda=0,A_{max}=30
λ=0,Amax=30进行实验。
正如摘要中所说,DeepSORT降低了ID switch的次数(显然是通过appearance feature的精确匹配)。此外,DeepSORT保持了至少30帧的“闲置”目标信息(SORT只要一帧不能匹配就会直接丢弃目标),而且还有外观特征辅助re-identification,更容易从长时间的遮挡中恢复原目标的识别。
【一些优化方向】
- FP比较高是一个值得注意的问题。detector间或性地会将一些静止背景中部分图案检测出bbox,而由于我们设置了一个较长的 A m a x A_{max} Amax,这些图案也会被认为是一段追踪轨迹,由此产生FP。如果提高对detector结果置信度的阈值,可能可以降低FP。
- 运行时间一半被花在appearance特征提取上,毕竟深度网络计算量大。