博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CNN概念之上采样,反卷积,Unpooling概念解释
阅读量:2032 次
发布时间:2019-04-28

本文共 1880 字,大约阅读时间需要 6 分钟。

前言

本文译自quora上对的回答。个人觉得这位老哥的回答很简洁干练。所以转到这里。

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就行:

[ 1 2 3 4 5 6 7 8 9 ] − > ( m a x p o o l i n g ) [ 5 6 8 9 ] − > ( u n p o o l i n g ) [ 0 0 0 0 5 6 0 8 9 ] \left[ \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{matrix} \right] ->(max pooling) \left[ \begin{matrix} 5 & 6 \\ 8 & 9 \end{matrix} \right] ->(unpooling) \left[ \begin{matrix} 0 & 0 & 0 \\ 0 & 5 & 6 \\ 0 & 8 & 9 \end{matrix} \right] 147258369>(maxpooling)[5869]>(unpooling)000058069

Deconvolution(反卷积)

Deconvolution(反卷积)在CNN中常用于表示一种反向卷积 ,但它并不是一个符合严格数学定义的反卷积操作。与Unpooling不同,使用反卷积来对图像进行上采样是可以习得的。通常用来对卷积层的结果进行上采样,使其回到原始图片的分辨率。

反卷积也被称为分数步长卷积()或者转置卷积()或者后向卷积(backwards strided convolution)。作者认为应该称之为转置卷积

真正的反卷积如()里面所说,但是我不认为有人在实际的CNN中会使用它。

前面提到,反卷积也被称为分数步长卷积或者转置卷积或者后向卷积。在我看来,这些术语不会让人真正的理解到底发生了什么,而实际上这些东西还是挺简单的。

常规的卷积操作(valid模式):滑动步长为S,图片大小为N1xN1,卷积核大小为N2xN2(示意图假设为3x3),卷积后图像大小:(N1-N2)/S+1 x (N1-N2)/S+1如下图:

这里写图片描述

为了要让经过卷积的结果回到卷积前的模样。如图这个2x2的的结果,如何回到4x4呢?其实这种也算一种卷积的操作,只不过进行了padding操作:
这里写图片描述

或者,通常大家会选择更大的dilation(等价于小于1的stride)来增强上采样的效果(可以理解成分数步长卷积,下图显示的是stride=1/2的示意图,感谢评论区荶枫大帝的提示。)

这里写图片描述

上面这种图的地址:上采样的kernel的学习与正常的卷积核类似

FCN(U-net)中的low-level和high-level特征的融合

在FCN论文中,作者采用了combine网络的low-level和high-level特征的方式。这是因为:

网络比较深的时候,特征图通常比较小,对这种特征图进行上采样——有很好的语义信息,但分辨率很差。

网络比较浅的时候,特征图通常比较大(接近input image),对这种特征图进行上采样——有很好的细节,但语义信息很差。

因此,对两者进行combine,我们可以在得到很好的细节基础上,也能获得尽可能强的图像语义信息


你可能感兴趣的文章
guava学习--AsyncFunction
查看>>
guava学习--monitor
查看>>
guava学习--FutureCallback
查看>>
golang的数据类型之布尔类型
查看>>
golang的数据类型之字符类型
查看>>
安装MySQL
查看>>
golang简介
查看>>
golang的数据类型之整型类型
查看>>
安装go版本
查看>>
golang的数据类型之基本数据类型的默认值和转换
查看>>
golang的数据类型之浮点类型
查看>>
golang的数据类型之字符串类型
查看>>
标识符
查看>>
scala函数
查看>>
Scala集合
查看>>
defer
查看>>
init函数和匿名函数
查看>>
函数参数的传递方式和变量作用域
查看>>
字符串函数
查看>>
时间和日期相关函数
查看>>