反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)

反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)相关代码和可视化代码在附录

反卷积(Deconvolution)

反卷积(转置卷积、空洞卷积(微步卷积))近几年用得较多,可以概括为:反卷积=上采样=(转置卷积+微步卷积)⊆ 空洞卷积=一般意义上的广义卷积(包含上采样和下采样)。
反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)_第1张图片
这是空洞卷积(微步卷积)的例子,其中下面的图是输入,上面的图是输出,显然这是一个upsampling的过程,我们也称为反卷积。

Upsampling(上采样)

在FCN、U-net等网络结构中,我们见识到了上采样这个东西。那么,什么是上采样呢?简单来说:上采样指的是任何可以让你的图像变成更高分辨率的技术。

最简单的方式是重采样和插值:将输入图片进行rescale到一个想要的尺寸,而且计算每个点的像素点,使用如***双线性插值***等插值方法对其余点进行插值来完成上采样过程。

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就行:
反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)_第2张图片

图像理解

使用三张图进行说明:

反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)_第3张图片

图(a)表示UnPooling的过程,特点是在Maxpooling的时候保留最大值的位置信息,之后在unPooling阶段使用该信息扩充Feature Map,除最大值位置以外,其余补0。与之相对的是图(b),两者的区别在于UnSampling阶段没有使用MaxPooling时的位置信息,而是直接将内容复制来扩充Feature Map。从图中即可看到两者结果的不同。图(c)为反卷积的过程,反卷积是卷积的逆过程,又称作转置卷积。最大的区别在于反卷积过程是有参数要进行学习的(类似卷积过程),理论是反卷积可以实现UnPooling和unSampling,只要卷积核的参数设置的合理。

反卷积与UnPooling的可视化

对网络层进行可视化的结果:

反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)_第4张图片
图(a)是输入层;图(b)是1414反卷积的结果;图(c)是2828的UnPooling结果;图(d)是2828的反卷积结果;图(e)是5656的Unpooling结果;图(f)是5656反卷积的结果;图(g)是112112 UnPooling的结果;图(h)是112112的反卷积的结果;图(i)和图(j)分别是224224的UnPooling和反卷积的结果。两者各有特点。

附录

反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)、可视化代码:
https://github.com/heuritech/convnets-keras
https://github.com/kvfrans/feature-visualization
https://github.com/FHainzl/Visualizing_Understanding_CNN_Implementation

你可能感兴趣的:(CNN,深度学习,机器学习,反卷积,上采样,上池化,可视化,代码)