文章目录
- 前言
- 1. 图示理解
- 2. 概念详解
- 2.1 Upsampling(上采样)
- 2.2 Unpooling(上池化)
- 2.3 Deconvolution(反卷积)
- 2.4 FCN(U-net)中的low-level和high-level特征的融合
- 2.5 上采样/下采样
- 3.参考文献
前言
在看图像语义分割方面的论文时,发现在网络解码器结构中有的时候使用反卷积、而有的时候使用unpooling
或或者unsampling
,查了下资料,发现三者还是有不同的。这里记录一下。
1. 图示理解
使用三张图进行说明:
图(a)表示UnPooling
的过程,特点是在Maxpooling
的时候保留最大值的位置信息,之后在unPooling
阶段使用该信息扩充Feature Map
,除最大值位置以外,其余补0。与之相对的是图(b),两者的区别在于UnSampling
阶段没有使用MaxPooling
时的位置信息,而是直接将内容复制来扩充Feature Map
。从图中即可看到两者结果的不同。图?为反卷积的过程,反卷积是卷积的逆过程,又称作转置卷积。最大的区别在于反卷积过程是有参数要进行学习的(类似卷积过程),理论是反卷积可以实现UnPooling
和unSampling
,只要卷积核的参数设置的合理。
反卷积与UnPooling的可视化
对网络层进行可视化的结果:
图(a)是输入层;
图(b)是14*14
反卷积的结果;
图?是28*28
的UnPooling
结果;
图(d)是28*28
的反卷积结果;
图(e)是56*56
的Unpooling
结果;
图(f)是56*56
反卷积的结果;
图(g)是112*112
的UnPooling
的结果;
图(h)是112*112
的反卷积的结果;
图(i)和图(j)分别是224*224
的UnPooling
和反卷积的结果。
两者各有特点。
图像来自论文《Learning Deconvolution Network for Semantic Segmentation》
2. 概念详解
2.1 Upsampling(上采样)
在FCN
、U-net
等网络结构中,我们见识到了上采样这个东西。那么,什么是上采样呢?简单来说:上采样指的是任何可以让你的图像变成更高分辨率的技术。
最简单的方式是重采样和插值:将输入图片进行rescale
到一个想要的尺寸,而且计算每个点的像素点,使用如***双线性插值***等插值方法对其余点进行插值来完成上采样过程。
2.2 Unpooling(上池化)
Unpooling是在CNN
中常用的来表示max pooling
的逆操作。这是从2013年纽约大学Matthew D. Zeiler
和Rob Fergus
发表的《Visualizing and Understanding Convolutional Networks》中产生的idea
:
鉴于max pooling不可逆,因此使用近似的方式来反转得到max pooling操作之前的原始情况
简单来说,记住做max pooling
的时候的最大item
的位置,比如一个3x3
的矩阵,max pooling
的size
为2x2
,stride
为1,反卷积记住其位置,其余位置至为0就行:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dxOVmuYg-1576046776946)(C:\Users\mi\AppData\Roaming\Typora\typora-user-images\image-20191211141508522.png)]
2.3 Deconvolution(反卷积)
Deconvolution(反卷积)在CNN
中常用于表示一种反向卷积 ,但它并不是一个符合严格数学定义的反卷积操作。与Unpooling不同,使用反卷积来对图像进行上采样是可以习得的。通常用来对卷积层的结果进行上采样,使其回到原始图片的分辨率。
反卷积也被称为分数步长卷积(convolution with fractional strides)或者转置卷积(transpose convolution)或者后向卷积(backwards strided convolution)。作者认为应该称之为转置卷积。
真正的反卷积如(Deconvolution - Wikipedia)里面所说,但是我不认为有人在实际的CNN
中会使用它。
前面提到,反卷积也被称为分数步长卷积或者转置卷积或者后向卷积。在我看来,这些术语不会让人真正的理解到底发生了什么,而实际上这些东西还是挺简单的。
常规的卷积操作(valid
模式):滑动步长为S
,图片大小为N1xN1
,卷积核大小为N2xN2
(示意图假设为3x3
),卷积后图像大小:(N1-N2)/S+1 x (N1-N2)/S+1
如下图:
为了要让经过卷积的结果回到卷积前的模样。如图这个2x2
的的结果,如何回到4x4
呢?其实这种也算一种卷积的操作,只不过进行了padding
操作:
或者,通常大家会选择更大的dilation
(等价于小于1的stride
)来增强上采样的效果(可以理解成分数步长卷积,下图显示的是stride=1/2
的示意图)
上面这种图的地址:https://github.com/vdumoulin/conv_arithmetic,需要注意的是:上采样的kernel的学习与正常的卷积核类似。
2.4 FCN(U-net)中的low-level和high-level特征的融合
在FCN
论文中,作者采用了combine
网络的low-level
和high-level
特征的方式。这是因为:
① 网络比较深的时候,特征图通常比较小,对这种特征图进行上采样——有很好的语义信息,但分辨率很差。
② 网络比较浅的时候,特征图通常比较大(接近input image
),对这种特征图进行上采样——有很好的细节,但语义信息很差。
因此,对两者进行combine
,我们可以在得到很好的细节基础上,也能获得尽可能强的图像语义信息。
2.5 上采样/下采样
缩小图像(或称为下采样(subsampled
)或降采样(downsampled
))的主要目的有两个:1.使得图像符合显示区域的大小;2.生成对应图像的缩略图。
放大图像(或称为上采样(upsampling
)或图像插值(interpolating
))的主要目的是放大原图像,从而可以显示在更高分辨率的显示设备上。对图像的缩放操作并不能带来更多关于该图像的信息, 因此图像的质量将不可避免地受到影响。
下采样原理:对于一幅图像I
尺寸为MN
,对其进行s
倍下采样,即得到(M/s)(N/s)
尺寸的得分辨率图像,当然s
应该是M
和N
的公约数才行,如果考虑的是矩阵形式的图像,就是把原始图像s*s
窗口内的图像变成一个像素,这个像素点的值就是窗口内所有像素的均值。
上采样原理:图像放大几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素。
应用:高斯金字塔、卷积神经网络
3.参考文献
https://blog.csdn.net/g11d111/article/details/82350563
https://blog.csdn.net/A_a_ron/article/details/79181108