论文地址:https://arxiv.org/abs/2108.02759 代码:https://github.com/OliverRensu/GLSTR 发表于:Arxiv 2021.08
Abstract
全卷积网络(FCN)在很长一段时间内一直主导着显著目标检测。然而,CNN的局部性要求模型足够深,以拥有一个全局的感受野,而这样一个深的模型总是会导致局部细节的丢失。在本文中,我们将一个新的基于注意力的编码器–vision transformer引入到显著目标检测中,以确保从浅层到深层表征的全局化。由于在浅层中就能具有全局性,transformer编码器保留了更多的局部特征,以恢复最终显著图中的空间细节。此外,由于每一层都能捕捉到其上一层的全局视图,相邻层可以隐含地将表征差异最大化,并将冗余特征最小化,使得transformer层的每一个输出特征都能为最终预测做出独特的贡献。为了对transformer的特征进行解码,我们提出了一个简单而有效的深度转换解码器(deeply-transformed decoder)。该解码器对transformer的特征进行密集解码和上采样,生成最终的显著图,并减少噪声注入。实验结果表明,我们的方法在五项基准测试中明显优于其他基于FCN和基于transformer的方法,在平均绝对误差(MAE)方面平均提高了12.17%。代码将在https://github.com/OliverRensu/GLSTR公开。
I. Motivation
CNN本身是一种"局部"的模型,因此如果想获得全局表征,就需要对卷积层进行堆叠,以获得更大的感受野,但是这样就会损失局部细节,即全局表征与局部细节难以兼得。因此,本文的想法是,有没有办法在每一层都能同时学习全局特征与局部特征。
II. Network Architecture
本文所提出的GLSTR(Global-Local Saliency TRansfromer)网络结构如下所示: 不过本文似乎没有提所用的transformer backbone是哪个(疑似ViT)。接下来,我们将讨论几种可能的transformer decoder实现。
III. Naive Decoder
naive decoder就是下面这个东西: 这里的Transformer Layer 12th 指的是Encoder中的最后一个transformer层。也就是说,既然要预测saliency map,就首先将transformer得到的token seq给reshape为feature map的形式,然后走三个Conv-Bn-Relu进行特征的处理,再上采样回原尺寸(16x),最后接一个分类层(原文此处可能表述有误,应该不是分类层)。形式化地表述如下:
Z
=
U
p
(
C
B
R
(
F
12
′
;
θ
z
)
;
16
)
S
′
=
σ
(
Conv
?
(
Z
;
θ
s
)
)
\begin{gathered} Z=U p\left(C B R\left(F_{12}^{\prime} ; \theta_{z}\right) ; 16\right) \\ S^{\prime}=\sigma\left(\operatorname{Conv}\left(Z ; \theta_{s}\right)\right) \end{gathered}
Z=Up(CBR(F12′?;θz?);16)S′=σ(Conv(Z;θs?))? 其中,CBR表示Conv+BN+Relu,Up(x, s)表示对x使用双线性上采样s倍,
σ
\sigma
σ为sigmoid函数,S’为预测显著图。
个人认为这个decoder过于naive了,哪怕是基于CNN的方法也不会直接上采样16倍去拿结果,空间细节会基本丢没。不过,文中放个这玩意的目的似乎是为了证明不是说Transformer随便插个decoder进去效果都能很好。
IV. Stage-by-Stage Decoder
这个东西就是CNN里用的非常多的decoder,每次经过若干个Conv,然后上采样2x(这里图似乎画的有点问题),逐步上采样回原始尺寸。形式化定义如下:
Z
0
=
C
B
R
(
F
12
′
;
θ
0
)
Z
i
=
C
B
R
(
U
p
(
Z
i
?
1
;
2
)
;
θ
i
)
S
′
=
σ
(
Conv
?
(
Z
4
;
θ
s
)
)
\begin{aligned} Z_{0} &=C B R\left(F_{12}^{\prime} ; \theta_{0}\right) \\ Z_{i} &=C B R\left(U p\left(Z_{i-1} ; 2\right) ; \theta_{i}\right) \\ S^{\prime} &=\sigma\left(\operatorname{Conv}\left(Z_{4} ; \theta_{s}\right)\right) \end{aligned}
Z0?Zi?S′?=CBR(F12′?;θ0?)=CBR(Up(Zi?1?;2);θi?)=σ(Conv(Z4?;θs?))?
V. Multi-Level Feature Aggregation
这个东西单纯是文[1]提出的,其结构如下所示: 可以发现是一种金字塔结构…在CNN SOD中也是讨论的比较多的(实际上这也确实是一个卷积金字塔)。
VI. Deeply-Transformed Decoder
这个东西就是本文提出来的decoder,如下所示: 对于三层不同的Encoder Transformer Block,首先分别对其进行8x,4x,2x的上采样至同一尺寸,这里的上采样用的是pixel shuffle & bilinear upsampling。形式化的定义如下:
Z
i
,
j
=
{
C
B
R
(
Z
i
,
j
?
1
⊕
U
p
(
F
i
?
4
+
j
′
;
2
i
)
;
θ
i
,
j
)
j
=
1
,
2
,
3
C
B
R
(
U
p
(
Z
i
?
1
,
j
;
2
)
⊕
U
p
(
F
i
?
4
+
j
′
;
2
i
)
;
θ
i
,
j
)
j
=
4
Z_{i, j}=\left\{\begin{array}{l} C B R\left(Z_{i, j-1} \oplus U p\left(F_{i * 4+j}^{\prime} ; 2^{i}\right) ; \theta_{i, j}\right) \quad j=1,2,3 \\ C B R\left(U p\left(Z_{i-1, j} ; 2\right) \oplus U p\left(F_{i * 4+j}^{\prime} ; 2^{i}\right) ; \theta_{i, j}\right) \quad j=4 \end{array}\right.
Zi,j?={CBR(Zi,j?1?⊕Up(Fi?4+j′?;2i);θi,j?)j=1,2,3CBR(Up(Zi?1,j?;2)⊕Up(Fi?4+j′?;2i);θi,j?)j=4?
S
i
,
j
′
=
σ
(
Conv
?
(
U
p
(
Z
i
,
j
;
2
)
;
θ
s
i
,
j
)
)
S_{i, j}^{\prime}=\sigma\left(\operatorname{Conv}\left(U p\left(Z_{i, j} ; 2\right) ; \theta_{s_{i, j}}\right)\right)
Si,j′?=σ(Conv(Up(Zi,j?;2);θsi,j??))
VII. Experiment
input 384×384 optimizer SGD momentum 0.9 weight decay 0.0005 learing rate 0.001 ~ 1e-5 batch size 8 max epoch 40 data augmentation vertical & horizontal flipping
VIII. Summary
单纯从内容的角度讲…本文大体上只提出了一个decoder,大概占文中四分之一页不到…不过胜在结果好看。
Ref
[1] Sixiao Zheng, Jiachen Lu, Hengshuang Zhao, Xiatian Zhu, Zekun Luo, Yabiao Wang, Yanwei Fu, Jianfeng Feng, Tao Xiang, Philip HS Torr, et al. Rethinking semantic segmentation from a sequence-to-sequence perspective with transformers. arXiv preprint arXiv:2012.15840, 2020. 3, 4, 5, 7, 8
|