上池化(unpooling),上采样(unsampling)和反卷积(deconvolution)的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上池化(unpooling),上采样(unsampling)和反卷积(deconvolution)的区别相关的知识,希望对你有一定的参考价值。

参考技术A

池化也叫下采样(down-sampling), 操作与普通卷积基本相同, 不过根据取最大值或平均值可分为最大池化和平均池化, 同时无反向传播过程(无需学习参数).

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

参考文章
https://blog.csdn.net/fate_fjh/article/details/52882134
反卷积=转置卷积
卷积计算和对应的反卷积操作,输入输出关系正好相反。如果不考虑通道,以卷积运算的反向运算来计算反卷积运算的话,我们甚至可以通过离散卷积的方法来求反卷积(这里只是为了说明,实际工作中不会这么做)。

图中蓝色为原图像,白色为对应卷积所增加的padding,通常全部为0,绿色是卷积后图片。图中的卷积的滑动是从卷积核右下角与图片左上角重叠开始进行卷积,滑动步长为1,卷积核的中心元素对应卷积后图像的像素点。可以看到卷积后的图像是4X4,比原图2X2大了,我们还记1维卷积大小是n1+n2-1,这里原图是2X2,卷积核3X3,卷积后结果是4X4,与一维完全对应起来了(通过普通卷积后,新图像的大小跟原来一样,或者变小, 但一维卷积后是变大的)。其实这才是完整的卷积计算,其他比它小的卷积结果都是省去了部分像素的卷积。

这里,我们可以总结出full,same,valid三种卷积后图像大小的计算公式:
1. full : 滑动步长为1,图片大小为Input x Input,卷积核大小为KxK,卷积后图像大小:(Input+K-1) x (Input+K-1)
如上图, 滑动步长为1,图片大小为2x2,卷积核大小为3x3,卷积后图像大小:4x4
2. same : 滑动步长为1,图片大小为Input x Input,卷积核大小为KxK,卷积后图像大小:Input x Input
SAME时卷及前后图片大小不变, padding补0
3. valid :滑动步长为S,图片大小为Input x Input,卷积核大小为KxK,卷积后图像大小:((Input-K)/S+1) x ((Input-K)/S+1)
VALID时padding=0, 卷积核左上角和图片左上角对齐, 舍弃边缘部分的信息.

空洞卷积是针对图像语义分割问题中下采样(即池化操作)会降低图像分辨率,丢失信息而提出的一种卷积思路。空洞卷积通过对卷积核添加空洞来扩大感受野,感受野是指数级增长的。
空洞卷积并不增加参数量,多出的点给出的权值就是0,无需训练。

进而,假定输入空洞卷积的大小为 i,步长 为 s ,空洞卷积后特征图大小 o 的计算公式为:

消融实验,上采样,下采样,池化是什么

以上是关于上池化(unpooling),上采样(unsampling)和反卷积(deconvolution)的区别的主要内容,如果未能解决你的问题,请参考以下文章

消融实验,上采样,下采样,池化是什么

消融实验,上采样,下采样,池化是什么

PyTorch 的 Pooling 和 UnPooling函数中的 indices 参数:nn.MaxPool2d/nn.MaxUnpool2dF.max_pool2d/F.max_unpool2d

DeConvNet 中的 unpooling 和 deconvolution 是如何工作的

Netty源码_UnpooledDirectByteBuf详解

Netty源码_UnpooledHeapByteBuf详解