我们可以用这篇文章来理解一下空洞卷积在分割中的作用。
本文目录:
- 奇怪,为什么空洞卷积的感受野偏大?那是因为空洞卷积串行组团起来后,感受野变大很多。
- 论文对膨胀卷积构成的卷积模块的描述。
- 在不降低特征图分辨率的情况下,指数级的实现感受也增长。
- 论文中关于膨胀卷积的公式比较难理解,我们来挑战一下。
- 我们发现了一种与语义相关的更有效的初始化方式
- 训练
- 膨胀卷积意义总结
- 但是空洞卷积的使用时是有风险的:栅格效应
关于感受野:
奇怪,为什么空洞卷积的感受野偏大?那是因为空洞卷积串行组团起来后,感受野变大很多。
这也是空洞卷积设计的核心思路。
图b所示卷积的感受也必须与图a所示卷积的相连,它的感受野才是7x7.
同理:图c所示卷积的感受也必须跟在图b和图a卷积之后,同时,图b必须在图a之后。
论文对膨胀卷积构成的卷积模块的描述
我们的膨胀卷积模块:集成多尺度纹理信息,没有降低分辨率,不需要对图片缩小再放大。
模块可以即插即用到任意分辨率的feature map里。
不像金字塔类型的结构主要为了实现图像分类,这个结构主要是为了实现密集预测。
可以代替pooling 代替subsampling,
这个模块是基于dilated convolutions的,
在不降低特征图分辨率的情况下,指数级的实现感受也增长。
这个指数是卷积核的kernel_size
第一层用dilated=1感受野是R1=kernel_size=3
第二层用dilated=2,感受野是R2=R1* kernel_size-(kernel_size-1)*(dilated-1)
=3*3-(3-1)*(2-1)=9-2=7
第三层用dilated=4,
感受野是R3= R2*kernel_size-(kernel_size-1)*(dialted-1)
=7*3-(3-1)*(4-1)=21-2*3=15
这个指数就是kernel_size了。
设计这个膨胀卷积的时候,要注意,这个膨胀系数的设计。
大的膨胀系数虽然会使感受野增大,但是过大,会造成采样不均匀。
小的膨胀系数就使感受也增大不多了,
所以,一般,膨胀系数就设置为上一层感受野的一半左右。
dilated-1 = 向下取整(上一层感受野/2)。
所以第四层用:
dilated-1= 向下取整(15/2)=7
第四层用dilated=8,
其感受野R4 = R3*kernel_size-(kersize-1)*(dilated-1)=15*3-2*7=45-14=31
论文中关于膨胀卷积的公式比较难理解,我们来挑战一下:
F:离散函数
k = (2r+1)*(2r+1)
-2,-1,0,1,2
在位置p处的卷积输出。
注意到,卷积的名字就是来源于此,对于位置p处的值,总是由相互位置关系约束为p的速有点相关计算而得到。
p的每个点都是由输入的两个向量的所有点相关计算而得到。
以及计算不同的p的结果时,两个输入向量的位置关系依次滑动,然后点积。整个过程我们形象化得称为“卷积"
以上是标准卷积。
膨胀卷积的话,两个输入向量之间的元素不再是一一对应的关系。卷积核不再点积向量中的所有值,而是间隔性地去点积。
s和t的关系不再是s+t=p
而是s+lt=p
卷积的过程即是:
...+F(1)k((p-1)/l)+F(2)k((p-2)/l)+F(3)k((p-3)/l)+F(4)k((p-4)/l)+...
由于k是离散函数,所以, 当(p-1)/l不能整除时,含有(p-1)/l的项将不存在,这就造成F(1)将不会被卷积到。
这就是论文中公式的理解:
论文中提出的网络结构:
膨胀系数为也是指数性增长的,
这种膨胀系数的指数性增长,也就造成了每一层的感受野指数性增长:
这就是论文multi-scale context aggregation by dilated convolutions基于膨胀卷积的多尺度纹理集成里面,感受野指数性增长的意思。
我们有个基本的模块basic 也有large模块,两个模块在channel维度上不一样
这样一个模型的初始化就不能用标注的方式了,标准的初始化方式训练不好。
标注的初始化方式通常是用Glorot,Krizhevsky等的方式。
但是我们发现这种随机的初始化方式不适合我们这种情况。
我们发现了一种与语义相关的更有效的初始化方式:
公式4中,a是 输入feature map的序号,b是输出feature map的序号。
也就是说,我们使用0,1初始化。
只有少数weights 会给1,其他给0值。
我们知道kernel的维度是a*k*k*b的。
也就是说我们有a*b个k*k,
当a=b 时,我们才给这个k*k的矩阵赋予1值。
并且还不是所有的k*k都给1,
只给这个k*k的矩阵的第一个值给1.
这种初始化方法把输入feature map直接就给输出 feature map 了。直接给,是个倒爷。
这是一种一致性初始化,其实是把输入直接给输出了。
有一种说法:反向传播不能在信息直接传播时进行显著提升。
但是,实验结果证明以上说法不靠谱。
反向传播可靠的利用纹理信息提升了分割的准确率。
我们提供的基本纹理模块中,每个层的通道数是一样的。
我们也提出了一个通道数比较多,层的通道数也相对变化的Larger 模块。
这个模型由于通道数不一样,我们原来的初始化方法就不适用了。
用以下初始化方法:
这次不再给0或者1了,把1换成了C/ci+1 ,把0换成了一个随机数。
当输出通道数是输入通道数的2倍时,我们把输入featuer map的值按照平均分配给输出通道上。
训练:
网络输入一个彩色图片,输入一个21通道的feature maps.
膨胀卷积意义总结:
pooling下采样的过程造成细节损失,上采样时,这些细节无法重建。
即使用了可学习的反卷积进行上采样。
像素分类问题需要更大的感受野,
因为对像素进行分类时,需要在空间上有更大的范围的信息来做决策。
这类问题空洞卷积可以很好地解决。
本文暂时没有评论,来添加一个吧(●'◡'●)