Learning What to Learn for Video Object Segmentation
Abstract
通过meta-learning的思想完成one-shot VOS任务
3 Method
3.1节介绍few-shot learning的公式;3.2节介绍few-shot learner如何去学习的方法;3.3节介绍target module和internal few-shot learner的细节;3.4节介绍我们的分割架构;3.5和3.6节介绍推理和训练过程;3.7介绍我们的方法如何迁移到bounding box initialization的VOS任务上。
3.1 Video Object Segmentation as Few-shot Learning
本文提出的VOS架构可表示为 S θ ( I , T τ ( I ) ) S_{\theta}(I,T_{\tau}(I)) Sθ(I,Tτ(I)), θ \theta θ是可学习的参数,网络 S θ S_{\theta} Sθ获取当前图像 I I I和target module T τ T_{\tau} Tτ的输出。 S θ S_{\theta} Sθ本身和目标无关,但是它利用encode了目标信息的 τ \tau τ参数, τ \tau τ生成目标感知输出, S θ S_{\theta} Sθ使用该输出来预测最终分割结果。 τ \tau τ是通过第一帧图像 I 0 I_0 I0和它的mask y 0 y_0 y0得到的。我们把这个函数形容成 τ = A θ ( I 0 , y 0 ) \tau =A_{\theta}(I_0,y_0) τ=Aθ(I0,y0)。问题在于我们如何设计 T τ T_{\tau} Tτ和 A θ A_{\theta} Aθ。
小结一下, T τ T_{\tau} Tτ负责做分割推理,其中的 τ \tau τ是通过 A θ A_{\theta} Aθ在第一帧图像和GT中学习到的。
我们的目标就是找到一个
τ
\tau
τ能够最小化分割模型
T
τ
T_{\tau}
Tτ在第一帧图像和GT第loss:
τ
=
A
θ
(
x
0
,
y
0
)
=
arg min
τ
′
l
(
T
τ
′
(
x
0
)
,
y
0
)
(1)
\tau =A_{\theta}(x_0,y_0)=\argmin_{\tau^{'}}l(T_{\tau^{'}}(x_0),y_0) \tag 1
τ=Aθ(x0,y0)=τ′argminl(Tτ′(x0),y0)(1)
T
τ
T_{\tau}
Tτ在新的frame上生成分割结果后,由
S
θ
S_{\theta}
Sθ进行细化,
S
θ
S_{\theta}
Sθ集成了来自大型 VOS 数据集的强大的预学习知识。
本文挑战有两个,一个就是上面的方程的学习过程得是高效的;另外为了实现端到端的训练,
A
θ
A_{\theta}
Aθ得是可微的。下一节会讲到如何解决上面这个方程的一个基本限制。
3.2 Learning What to Learn
这个限制就是single-channel包含的信息太少了,理想情况下,target model应该为当前帧的目标预测出丰富的语义表达,以减轻
S
θ
S_{\theta}
Sθ的任务量。所以作者要用多channel的信息,让few-shot learner
A
θ
A_{\theta}
Aθ学习到what
A
θ
A_{\theta}
Aθ should learn。
τ
=
A
θ
(
x
0
,
y
0
)
=
arg min
τ
′
l
(
T
r
′
(
x
0
)
,
E
θ
(
y
0
)
)
(2)
\tau =A_{\theta}(x_0,y_0)=\argmin_{\tau^{'}}l(T_{r^{'}}(x_0),E_{\theta}(y_0)) \tag 2
τ=Aθ(x0,y0)=τ′argminl(Tr′(x0),Eθ(y0))(2)
为了解决样本不平衡问题(比如目标边界的pixels数量很少),作者还设计了一个权重模型,输入是GT mask,输出是和
E
θ
(
y
0
)
E_{\theta}(y_0)
Eθ(y0)同样维度的权重
W
θ
W_{\theta}
Wθ。
3.3 Internal Learner
target module
T
r
:
R
H
×
W
×
C
→
R
H
×
W
×
D
T_r: \mathbb R^{H\times W\times C}\rightarrow \mathbb R^{H\times W\times D}
Tr:RH×W×C→RH×W×D
为了让
T
r
T_r
Tr是高效且可微的,我们使用linear target medule
T
r
(
x
)
=
x
∗
τ
T_r(x)=x*\tau
Tr(x)=x∗τ,
τ
∈
R
K
×
K
×
C
×
D
\tau\in\mathbb R^{K\times K\times C\times D}
τ∈RK×K×C×D构成kernel size大小为K的卷积层的权重。
这样一来,internal learner的任务就是最小化target module和带有权重的处理后多维GT的差别,让target module输出包含target mask的激活项。
L
(
τ
)
=
1
2
∑
(
x
i
,
y
i
)
∈
D
∣
∣
W
θ
(
y
t
)
⋅
(
T
r
(
x
t
)
−
E
θ
(
y
t
)
)
∣
∣
2
+
λ
2
∣
∣
τ
∣
∣
2
(3)
L(\tau)=\frac{1}{2}\sum_{(x_i,y_i)\in D}||W_{\theta}(y_t)\cdot (T_r(x_t)-E_{\theta}(y_t))||^2+\frac{\lambda}{2}||\tau||^2 \tag 3
L(τ)=21(xi,yi)∈D∑∣∣Wθ(yt)⋅(Tr(xt)−Eθ(yt))∣∣2+2λ∣∣τ∣∣2(3)
D是support set,也就是第一帧图像和mask。
下一步是,我们怎么优化上面这一公式呢,并且这种优化方法要高效且可微,也就是说计算量不能太大,且可以完成端到端训练,坐着的方法是设计了一种steepest descent iteration。
steepest descent iteration
对于当前预测的
τ
i
\tau^i
τi,它找到能够最快在梯度方向最小化损失的步长
α
i
\alpha^i
αi,
α
i
=
arg min
α
L
(
τ
i
−
α
g
i
)
\alpha^i=\argmin_{\alpha}L(\tau^i-\alpha g^i)
αi=αargminL(τi−αgi),这里
g
i
=
∇
L
(
τ
i
)
g^i=\nabla L(\tau^i)
gi=∇L(τi)是上式关于
τ
i
\tau^i
τi的梯度。
关于 α i \alpha^i αi为什么长这样,在附录A中有详细推导,我没有完全看懂,但我目前的理解是: α \alpha α的目的是在一步内最快速地找到能把 L ( τ i + 1 ) L(\tau^{i+1}) L(τi+1)最小化接近0的 α \alpha α的值,那么怎么找到这个 α \alpha α呢?因为L是关于alpha的函数,而且是凸函数(为啥是凸函数?),所以我们找到 d L ( τ i + 1 ) d α = 0 \frac{dL(\tau^{i+1})}{d\alpha}=0 dαdL(τi+1)=0时,alpha的值,那么这个步长就可以让internal learner只迭代一次就能找到最合适的 τ \tau τ。 α \alpha α改变后,相应 τ \tau τ发生变化,那么再下一次迭代找到新的 d L ( τ i + 1 ) d α = 0 \frac{dL(\tau^{i+1})}{d\alpha}=0 dαdL(τi+1)=0的点,用新的步长去更新就能快速地使式(3)收敛。
3.4 Video Object Segmentation Architecture
Feature extractor
F
θ
F_{\theta}
Fθ:backbone为ResNet-50,其输出的特征同时输出给decoder module
D
θ
D_{\theta}
Dθ和target module
T
τ
T_\tau
Tτ。第三层的residual block通过一个卷积层将channel减少到512然后送入
T
τ
T_{\tau}
Tτ。
Few-shot label generator
E
θ
E_{\theta}
Eθ:输入是GT mask,输出是D通道的label feature,D就是target module输出的feature的维度(通道数)。
Weight predictor
W
θ
W_{\theta}
Wθ:输入是GT mask,其实就是
E
θ
E_{\theta}
Eθ提取的特征额外加一个卷积层,输出大小也是
H
×
W
×
D
H\times W\times D
H×W×D。
Target module
T
τ
T_{\tau}
Tτ and few-shot learner
A
θ
A_{\theta}
Aθ:
T
τ
T_{\tau}
Tτ是一个卷积核,大小为3,D被设置成16。
A
θ
A_{\theta}
Aθ为
T
τ
T_{\tau}
Tτ生成参数
τ
\tau
τ。
Segmentation decoder
D
θ
D_{\theta}
Dθ:接收
T
τ
T_{\tau}
Tτ和backbone特征的输出得到最终分割结果。
3.5 Inference
3.6 Training
在推理的时候,我们送入第一帧图像和GT mask,然后经过N次迭代得到
τ
\tau
τ,然后用新的
τ
\tau
τ得到新的一帧的分割结果,然后把新的分割结果添加到support set中进行学习。在训练的时候,这个过程和推理过程是一样的,但是生成的分割结果会和真值求loss再添加到support set中,以此来更新
θ
\theta
θ。