概述
transunet是transformer与unet的强强联合,transformer将CNN的特征图处理成sequence,借助self-attention操作捕捉全局的信息,将这部分信息上采样之后与高分辨率特征图融合,有效的提高了分割任务的效果,实现精准定位。 为什么要强强联合? 因为unet是优秀的分割网络,但是由于卷积操作天然的一些问题,比如平移不变性和捕捉长期依赖能力的不足等等,而transformer能够很好地解决这两个问题,但是它的处理缺乏一些细粒度信息,导致定位不够精确,所以两者的结合可能能够产生更好的效果。
细节
网络结构
首先将输入图片经过resnet50进行特征提取,其中的三个stage的输出将保留,用于之后的skip-connection。接着对于resnet50输出的特征图,将其进行序列化,送入transformer中进行序列预测,输出一个序列。然后将这个序列合并、reshape成一个新的特征图。接下来的过程和unet一样,就是不断上采样并和之前的resnet50的输出做skip-connection,最后还原回全分辨率的结果。
transformer中的部分细节
序列化操作 一个直观的序列化操作就是,对于一个HxWxC的图片,将每个像素作为一个vector,那么就会得到长度为一个HxW的sequence,但是这样的话,长度就有点大了。因此,一个新的做法就是,对于一个HxWxC的图片,选取N个patch或者说是N个小图,得到长度为N的sequence。假设patch的长度是p,那么
N
=
H
?
W
p
?
p
N=\frac{H*W}{p*p}
N=p?pH?W?,每个vector中元素的个数就是
p
?
p
?
C
p*p*C
p?p?C。 transformer encoder的输出 然后这里用的是transformer的encoder部分,所以输入和输出的一样长度的,因此输出是N个
p
?
p
?
C
p*p*C
p?p?C的vector,我们将输出拼接起来能够得到一个
H
?
W
p
?
p
?
(
p
?
p
?
C
)
\frac{H*W}{p*p}*(p*p*C)
p?pH?W??(p?p?C)的矩阵,我们将它reshape成
H
p
?
W
p
?
(
p
?
p
?
C
)
\frac{H}{p}*\frac{W}{p}*(p*p*C)
pH??pW??(p?p?C)的tensor,接着使用1x1的卷积对通道数进行变换,那么就相当于得到了encoder最后一层的输出。
CNN-Transformer混合的结构
作者提了两种思路,一种是Transformer直接对原图做处理,然后将encoder的结果直接上采样到全分辨率,但是效果并不出色,可能的原因是
H
p
?
W
p
\frac{H}{p}*\frac{W}{p}
pH??pW?的尺寸相对于
H
?
W
H*W
H?W是有点小了,那么直接上采样的话,缺少很多的细粒度信息。 因此作者提出了第二种思路,就是论文中讲的这种,一方面Transformer不直接对原图做处理,而是对特征图做处理,另一方面将一些细粒度信息通过skip-connection融合过来。
级联上采样
在对transformer encoder部分的输出做处理之后,将其不断上采样的过程中,并不是常规的上采样步骤而是级联的上采样,每个上采样块是常规的上采样、3x3卷积还有relu。
|