一、 动态演示
1. 卷积过程
N.B.: Blue maps are inputs, and cyan maps are outputs.
no_padding_no_strides | arbitrary_padding_no_strides | same_padding_no_strides | full_padding_no_strides | no_padding_no_strides |
---|---|---|---|---|
no_padding_no_strides.gif | arbitrary_padding_no_strides.gif | same_padding_no_strides.gif | full_padding_no_strides.gif | no_padding_no_strides.gif |
padding_strides | padding_strides_odd | |||
padding_strides.gif | padding_strides_odd.gif |
2. 反卷积过程
N.B.: Blue maps are inputs, and cyan maps are outputs.
no_padding_no_strides | arbitrary_padding_no_strides | same_padding_no_strides | full_padding_no_strides | no_padding_no_strides |
---|---|---|---|---|
no_padding_no_strides_transposed.gif | arbitrary_padding_no_strides_transposed.gif | same_padding_no_strides_transposed.gif | full_padding_no_strides_transposed.gif | no_padding_strides_transposed.gif |
padding_strides | padding_strides_odd | |||
padding_strides_transposed.gif | padding_strides_odd_transposed.gif |
3. 空洞卷积(微步卷积)
N.B.: Blue maps are inputs, and cyan maps are outputs.
dilation |
---|
dilation.gif |
二、反卷积过程
目前使用得最多的deconvolution有2种:
方法1:full卷积, 完整的卷积可以使得原来的定义域变大
方法2:记录pooling index,然后扩大空间,再用卷积填充(可以理解先空洞卷积在做卷积)
它主要用于增大图像尺寸,是upsampling的一种,而空洞卷积并没有做upsampling,空洞卷积是为了增大感受野,可以不改变图像的大小。对于反卷积简单理解就是在输入特征矩阵中插入空白点,再进行卷积,这样卷积后输出的特征矩阵就变大了。
三、 空洞卷积
图像输入到网络中经过CNN提取特征,在经过pooling降低图像尺度的同时增大感受野
。由于图像分割是pixel-wise预测输出,所以还需要upsampling将变小的图像恢复到原始大小。upsampling通常是通过deconv完成。因此图像分割FCN有两个关键步骤:池化操作增大感受野,upsampling操作扩大图像尺寸。
- conv+pooling 缺点:
一个重要的问题图像可以通过upsampling操作恢复图像大小,但是很多细节还是被池化操作丢失,池化层不可学 内部数据结构丢失,空间层级化信息丢失。小物体信息无法重建假设有四个pooling layer 则 任何小于 2^4 = 16 pixels 的物体信息将理论上无法重建。
- 利用diated conv替换conv+pooling优点
- 空洞卷积就有内部数据结构的保留和避免使用了
down_sampling
物理信息无法重建的缺点。 - 并且空洞卷积的发明就是为了即增大感受野也不会减小图像大小, 可以理解为空洞卷积的作用可以替代polling, 且在计算量相当的情况下,提供更大的感受野。(一方面感受野大了可以检测分割大目标,另一方面分辨率高了可以精确定位目标。)
- 捕获多尺度上下文信息:空洞卷积有一个参数可以设置为dilation rate, 具体含义就是在卷积核中填充dilation rate -1 个0,因此,当设置不同的dilation rate时,感受野就会不一样,也即获取了多尺度信息。多尺度信息在视觉任务重很重要。
-
空洞卷积原理
空洞卷积原理.png
注:
(a) 对应空洞卷积 dilation_rate = 1
(b) 对应空洞卷积 dilation_rate = 2
(c) 对应空洞卷积 dilation_rate = 4
其中红色点是拥有权重参数的,没有红色点方格权重是为0.(切记这里面是kernel(卷积核)非feature map
) -
空洞卷积感受野如何计算
这里可以参考这篇文章关于dilated convolution(空洞卷积)感受野的计算
所描述的就是反卷积,它的核心是在原来图像上插入空白数据。而空洞卷积就是在卷积核插入空白数据,或是说在卷积是跳过特征图的部分数据。
-
空洞卷积存在的问题
通过上面的空洞卷积会暴露出两个问题:
a. The Gridding Effect:当我们的dialiation rate为2的话,则我们的kernel是不连续的,也就是说我们的并不是那所有的pixel进行计算,因此这里会损失信息额连续性。
b. Long-ranged information might be not relevant: 我们通过增大卷积核大小,这样一来我们对大物体分割有效,对小物体分割就不准确了。 -
利用Hybrid Dilated Convolution(HDC)解决空洞卷积弊端。
对于上述问题有人提出了HDC策略。策略内容如下:
第一个特性是,叠加卷积的 dilation rate 不能有大于1的公约数。比如 [2, 4, 6] 则不是一个好的三层卷积,依然会出现 gridding effect。
第二个特性是,我们将 dilation rate 设计成锯齿状结构,例如 [1, 2, 5, 1, 2, 5] 循环结构。
第三个特性是,我们需要满足一下这个式子:
image
而这样的锯齿状本身的性质就比较好的来同时满足小物体大物体的分割要求(小 dilation rate 来关心近距离信息,大 dilation rate 来关心远距离信息)。其实可以理解为不同的卷积核通道数对应不同的空洞卷积率,小的空洞卷积率会倾向提取小物体特征,大的空洞卷积率会倾向提取大物体的特征。下面展示利用HDC情况下的效果。
image.png
四 、上采样
在FCN,U-net等网络结构中,涉及上采样。上采样的概念上采样指的是任何可以让图像变成更高分辨率的技术。我们一般可以采用采样或者插值,反卷机,反池化的方式,将输入图片进行rescale得到一个想要的尺寸,而且计算每个点的像素点,使用如双线性插值等插值方法对其余点进行插值来完成上采样过程。
五、上池化(目前keras不支持)
上池化其实就是池化逆向过程。
上池化
其实上池化与上采样的区别如下:
-
UnSampling阶段没有使用MaxPooling时的位置信息,而是直接将内容复制来扩充Feature Map。第一幅图中右边4*4矩阵,用了四种颜色的正方形框分割为四个区域,每一个区域内的内容是直接复制上采样前的对应信息。
-
UnPooling的过程,特点是在Maxpooling的时候保留最大值的位置信息,之后在unPooling阶段使用该信息扩充Feature Map,除最大值位置以外,其余补0。从图中即可看到两者结果的不同。
[1] 深度理解反卷积操作
[2] vdumoulin/conv_arithmetic
[3] Dilated/Atrous conv 空洞卷积/多孔卷积
[4] 空洞卷积
[5] 空洞卷积的改进
[6] dilated convolution(空洞卷积)感受野的计算
[7]空洞卷积(dilated convolution)理解
[8]上采样,反卷积,上池化概念区别
网友评论