谷歌的一篇paper,主要是讲解码器的各种类型。最近在看上采样,顺着Decoders Matter for Semantic Segmentation:
Data-Dependent Decoding Enables Flexible Feature Aggregation找到这篇文章,感觉写的挺像个综述的,就此做点笔记吧,工作了之后,感觉还是tecnical paper来的实在,有些花里胡哨的论文,真的是不想吐槽什么(主要是自己也写不出来这么牛逼的会议论文,没有水论文的能力,所以柠檬精一下)
论文链接https://arxiv.org/pdf/1707.05847.pdf
现有的上采样方法:
1.transposed convolution 也就是传说中的反卷积(deconvolution)。把原有的特征图先进行resize,没有元素的地方补零。然后再用一个卷积核去卷积得到最后的特征图。
2.decomposed transposed convolution 算是反卷积的升级版。就是把2维的卷积变成两个1维的卷积,然后再计算,在inception里面用的。可以减少参数。
3.conv + depth_to_space 将深度方向的feature放到了空间维度。也叫作(subpixel convolution)但是会引入artifact。首先先来个1*1的卷积,深度是原来的4倍,然后把深度转到空间。
4.bilinear upsampling + conv 双线性插值加卷积 缺点是内存和计算量的占用, 在信息量不变的情况下,特征图变大了。
5.bilinear upsampling + separable conv 把上面的卷积变成可分离卷积来减少计算量。
本文提出来的
bilinear additive upsampling
在原有的双线性插值后面加了一个层,把相邻四个通道的特征图求均值,这样把通道数缩减为原来的四分之一。然后再接1*1卷积。感觉和depth_to_space有那么一丢丢的相似。
bilinear additive upsampling 的变种, residual connection。
其实也就是把其他上采样的方法和这个方法相加起来。
由于自己只做语义分割,所以就只看了语义分割的结果。
语义分割的话是在voc上面做的,encoder用的是resnet101,前面的77换成了三个33 stride 为16, 最后一个block的 atrous rate 为1,2,4.
根据结果来看,decoder的表现差距miou大概是一个点的样子。最好的还是depth_to_space,然后可能depth_to_space 的和本文提出的方法相加的方式最高,0.784
各个方式的计算量的话
所以说本文提出的方法可以试一下,不过简单粗暴的话还是depth_to_space