每日一问
- MOT最常被引述的方法是什么?
- 这些方法可以分成哪些主要派别?
- 每个派别的主要特色(优点和缺点)是什么?
- 这个领域大家认为重要的关键问题有哪些?
- 这些优点与缺点通常在哪些应用场合会比较被重视?
- 在哪些场景下不会被重视?
精读一篇论文应该的收获
- 这篇论文的主要假设是什么,这些假设在现实条件下容易成立吗?
- 这篇论文的主要好处?
- 这些好处主要表现在哪些公式上,哪些模型上?
- 这一派的主要缺点是什么?
Abstract
对于tracking-by-detection的方法, 检测追踪是分两步走: 1.检测模型用来定位目标, 2.追踪模型用来对数据建立联系. 那么一个直观的感受就是运行时间是这两个模块的简单叠加.
作者提出了一个模型,它能够同时输出检测结果和对应的embeddings. 那么这个模型是一个multi-task learning.作者论文中说达到了实时.
Introduction
之前主流的工作将MOT分解成两个步骤: 1.检测步骤,单个视频帧中的目标已经本地化(localized); 2. 关联步骤, 分配被检测的目标分配给已经存在的轨迹中.
总的推理时间是两个分量的和,并且随着目标数量的增加而增加.(这个应该主要体现在步骤二的时间增加上).
为了节省计算, 一个可行(fesible)的方法是继承检测器和embedding模型到一个网络中. 目的是共享同一组低级特征,避免了重新计算.
Joint Learning of Detection and Embedding Problem Settings
JDE的目的是在单次前向传播中同时输出目标的位置和外观嵌入。 假定有一个数据集{I,B,Y},I表示图像帧,B表示此帧中k个目标的边界框注释,y表示部分身份标签标注,其中-1表示目标没有身份标签。JDE的目的是暑促预测的边界框B和外观嵌入
F
^
∈
R
k
∗
D
\hat{F}\in \mathbb{R}^{k*D}
F^∈Rk∗D,其中D标识embedding的维度. JDE应该满足以下两个目标:
第一个目标要求模型能够准确度检测目标;
第二个目标是要求外观嵌入具有以下特性. 连续帧中相同身份的检测框之间的距离应小于不同身份之间的距离. 距离度量d可以是欧式距离或者余弦距离.
从技术上讲,如果两个目标都得到满足,那么即使是简单的关联策略,如匈牙利算法,也会产生良好的跟踪效果.
Architecture Overview
使用特征金字塔(FPN)的体系结构, FPN从多个尺度进行预测,从而在目标尺度变化很大的检测中带来了改进.
输入的视频帧首先经过骨干网络分别获得三个尺度的特征图(1/32, 1/16, 1/8的下采样),然后通过 skip connection将多个特征图融合. Predicion Head 由几个堆叠的卷基层组成, 并输出一个大小为(6A+D) * H *W的密集预测图. A是分配给该比例anchor template的数量,D是嵌入的维度.
密集预测图的三个任务:
- 检测框的分类结果: 2AHW
- 检测狂的坐标 4AHW
- embedding map DHW
接下来是分模块的讨论
检测用什么检测,嵌入用什么嵌入.
Learning to Detect
检测分支类似于RPN. 两点修改: 1. 根据数量,比例,长宽比重新设计锚; 2. 为前景/背景分配的双重阈值非常重要.
分类loss: 交叉熵损失函数:
L
C
r
o
s
s
E
n
t
r
o
p
y
=
−
1
n
−
1
∑
i
=
1
n
[
y
l
n
y
^
+
(
1
−
y
)
l
n
(
1
−
y
^
)
L_{CrossEntropy} = -\frac{1}{n-1}\sum _{i=1}^n[yln\hat{y} + (1-y)ln(1-\hat{y})
LCrossEntropy=−n−11i=1∑n[ylny^+(1−y)ln(1−y^)
pytorch中的交叉熵loss描述如下,其实没有看太懂
l
o
s
s
(
x
,
c
l
a
s
s
)
=
−
l
o
g
e
x
p
(
x
[
c
l
a
s
s
]
)
∑
j
e
x
p
(
x
[
j
]
)
=
−
x
[
c
l
a
s
s
]
+
l
o
g
(
∑
j
e
x
p
(
x
[
j
]
)
loss(x, class) = -log\frac{exp(x[class])}{\sum_j exp(x[j])} = -x[class] + log(\sum _{j}exp(x[j])
loss(x,class)=−log∑jexp(x[j])exp(x[class])=−x[class]+log(j∑exp(x[j])
回归loss: smooth-L1 loss:
l
o
s
s
(
x
,
y
)
=
1
n
∑
i
z
i
loss(x, y) = \frac{1}{n}\sum _i z_i
loss(x,y)=n1i∑zi
Learning Appearance Embeddings
外观嵌入问题作者并没有给出一个具体的模型, 只是说这是一个度量学习问题, 即学习一个嵌入空间, 其中相同身份的实例彼此靠近, 而不同身份的实例相距甚远. 这不禁让我想到了学习pytorch时使用的tensorboard, embedding.
FPN网络输出的高维embedding应该是无序的底层特征, 需要使用一个算法来对它进行类似聚类的操作?
作者借鉴了triplet loss的工作,将其和cross-entropy loss类比,最后选择了交叉熵损失函数作为embedding loss.
Automatic Loss Balancing
关于三个loss的权重问题,作者借鉴了独立任务不确定性的概念 . 总的losss可以写为:
Online Association
对于给定的视频,JDE模型处理每个帧并输出边框和相应的外观嵌入。我们计算观测值的嵌入(当前帧embedding的输出) 与之前存在的轨迹池中的嵌入之间的关联矩阵(affinity matrix).
使用Hungarian 算法将观测值(当前帧的检测结果)分配给轨迹(之前帧); kalman滤波器用于平滑轨迹并预测先前轨迹在当前帧的位置. 如果分配的observation embedding 在空间上与卡尔曼滤波器预测的位置太远, 那么该分配将被拒绝. 然后, 对一个跟踪器的embedding 进行如下更新:
如果没有任何观察值分配给Tracklet, 则将该 Tracklet标记为丢失,如果丢失的时间大于给定的阈值, 则标记为已丢失的跟踪,从当前的跟踪池中删除; 或者在分配步骤中重新找到.
Experiments
又需要再进一步更新.