由CenterNet伸展过来,通过在原CenterNet模型上,输入增加4通道(上一帧图像和检测结果),输出增加2通道(位置偏移)。通过位置偏移和上一帧的对象关联起来,实现多目标跟踪
CenterNet
一个Anchor free的目标检测模型,把目标视为一个点。其输出为位置+Size,通过位置和Size恢复bounding Box。
当训练时的位置label为以物体中心为均值的高斯分布(方差与物体大小有关)。当存在多个对象时,高斯分布交集部分,其label取较大值的那个。因此其label
Y
∈
[
0
,
1
]
W
R
×
H
R
×
C
Y\in [0,1]^{{W\over R} \times {H \over R}\times C}
Y∈[0,1]RW×RH×C,其中
R
R
R为下采样倍率,
C
C
C为类别数,即COCO中为80。其训练loss即为Focal loss(无类别平衡系数,而是通过指数
α
=
2
\alpha=2
α=2 和
β
=
4
\beta=4
β=4 来平衡类别权重):
L
k
=
1
N
∑
x
y
c
{
(
1
−
Y
^
x
y
c
)
α
log
(
Y
^
x
y
c
)
if
Y
x
y
c
=
1
(
1
−
Y
x
y
c
)
β
(
Y
^
x
y
c
)
α
log
(
1
−
Y
^
x
y
c
)
otherwise
L_{k}=\frac{1}{N} \sum_{x y c}\left\{\begin{array}{ll} \left(1-\hat{Y}_{x y c}\right)^{\alpha} \log \left(\hat{Y}_{x y c}\right) & \text { if } Y_{x y c}=1 \\ \left(1-Y_{x y c}\right)^{\beta}\left(\hat{Y}_{x y c}\right)^{\alpha} \log \left(1-\hat{Y}_{x y c}\right) & \text { otherwise } \end{array}\right.
Lk=N1xyc∑⎩⎨⎧(1−Y^xyc)αlog(Y^xyc)(1−Yxyc)β(Y^xyc)αlog(1−Y^xyc) if Yxyc=1 otherwise
当测试时,predicate的局部最大值(且大于阈值)即为检测对象所在位置(局部最大值仅与周围8个点的值对比)。同时其值即为置信度Confidence。
同时还有个双通道的输出
S
^
∈
R
W
R
×
H
R
×
2
\hat{S} \in \mathbb{R}^{\frac{W}{R}\times \frac{H}{R} \times 2}
S^∈RRW×RH×2用于size尺度回归。这部分仅对物体的中心点计算L1 Loss
L
size
=
1
N
∑
i
=
1
N
∣
S
^
p
i
−
s
i
∣
L_{\text {size}}=\frac{1}{N} \sum_{i=1}^{N}\left|\hat{S}_{\mathbf{p}_{i}}-\mathbf{s}_{i}\right|
Lsize=N1i=1∑N∣∣∣S^pi−si∣∣∣
CenterTrack
模型输入为当前帧
I
m
a
g
e
I
t
Image \ I^t
Image It,上一帧
I
m
a
g
e
I
t
−
1
Image \ I^{t-1}
Image It−1和上一帧所有跟踪对象
T
r
a
c
k
s
T
t
−
1
Tracks \ T^{t-1}
Tracks Tt−1。其中
T
r
a
c
k
s
T
t
−
1
Tracks \ T^{t-1}
Tracks Tt−1是把上一帧的所有检测到的对象,把每个对象(大于阈值)转为一个高斯分布,然后叠在一个heatmap里。与CenterNet里生成label方式不同的是,CenterNet里是考虑类别的,不同类别的物体在不同的channel里。而这里不考虑类别,所以只有一个通道。
模型输出结果除了CenterNet的检测结果( Detections Y ^ ( t ) size S ^ ( t ) \text { Detections } \hat{Y}^{(t)} \quad \text { size } \hat{S}^{(t)} Detections Y^(t) size S^(t))外,多加了个2通道的 Offset O ^ ( t ) \text {Offset} \ \hat O^{(t)} Offset O^(t),用于得到跟踪对象的偏移量,训练Loss也是L1,也是只对物体的中心点计算损失。这部门就类似于光流预测(中心点的光流)
得到偏移量后,就可以将两帧关联起来了,然后根据当前帧的检测结果的置信度 w w w从高到低,按最近匹配去关联上一帧的未匹配对象。若在半径 k k k内没匹配到对象,则认为是新目标。
Training on video data
在infer时,输入的 T r a c k s T t − 1 Tracks \ T^{t-1} Tracks Tt−1可能存在很多干扰,假正例,误差,漏检等。因此在训练时也加入一些抖动模拟误差(Tips:有点奇怪为什么还要在输入加上 T r a c k s T t − 1 Tracks \ T^{t-1} Tracks Tt−1)