Caffe学习系列(十三):空洞卷积及Caffe实现

Caffe学习系列(十三):空洞卷积及Caffe实现

1.空洞卷积的理解

空洞卷积
1.空洞卷积
Dilated Convolutions,翻译为扩张卷积或空洞卷积。扩张卷积与普通的卷积相比,除了卷积核的大小以外,还有一个扩张率(dilation rate)参数,主要用来表示扩张的大小。扩张卷积与普通卷积的相同点在于,卷积核的大小是一样的,在神经网络中即参数数量不变,区别在于扩张卷积具有更大的感受野。感受野是卷积核在图像上看到的大小,例如3×3卷积核的感受野大小为9。

2.卷积计算对比

扩张卷积核尺寸 = 膨胀系数 * (原始卷积核尺寸 + 1) - 1

a) 普通卷积,1-dilated convolution,卷积核的感受野为3×3=9。
b) 扩张卷积,2-dilated convolution,卷积核的感受野为7×7=49。
c) 扩张卷积,4-dilated convolution,卷积核的感受野为15×15=225。
在这里插入图片描述
在空洞卷积中有个重要的参数叫rate,这个参数代表了空洞的大小。
要理解空洞概念和如何操作可以从两个角度去看。
1)从原图角度,所谓空洞就是在原图上做采样。采样的频率是根据rate参数来设置的,当rate为1时候,就是原图不丢失任何信息采样,此时卷积操作就是标准的卷积操作,当rate>1,比如2的时候,就是在原图上每隔一(rate-1)个像素采样,如图b,可以把红色的点想象成在原图上的采样点,然后将采样后的图像与kernel做卷积,这样做其实变相增大了感受野。
2)从kernel角度去看空洞的话就是扩大kernel的尺寸,在kernel中,相邻点之间插入rate-1个零,然后将扩大的kernel和原图做卷积 ,这样还是增大了感受野。

**在VGG网络中就证明了使用小卷积核叠加来取代大卷积核可以起到减少参数同时达到大卷积核同样大小感受野的功效。**但是通过叠加小卷积核来扩大感受野只能线性增长,公式为(kernelSize−1)∗layers+1 (kernelSize-1)*layers+1(kernelSize−1)∗layers+1,,也就是线性增长,而空洞卷积可以以指数级增长感受野。

标准卷积的感受野
在这里插入图片描述
空洞卷积的感受野
在这里插入图片描述

2.Caffe的实现

caffe卷积层延伸:卷积核膨胀详细解析
在conv_layer.cpp中有一个卷积核膨胀操作,在conv_layer.cpp的第17行有如下代码

const int kernel_extent = dilation_data[i] * (kernel_shape_data[i] - 1) + 1;

膨胀的卷积核尺寸 = 膨胀系数 * (原始卷积核尺寸 - 1) + 1
本节的计算公式与上一节有差异,求解答

上面的代码描述了卷积核的膨胀操作,我们不妨来做个假设,卷积核为33的,膨胀系数为2,那么,卷积核膨胀之后,卷积核的单边尺寸就变成了2(3-1)+1,即卷积核的尺寸变成了55,笔者在最初看到这一行代码的时候相当疑惑,不太明白卷积核由33变成5*5是怎么操作的,这个时候,caffe.proto就起了作用,我们打开caffe.proto,找到卷积层的参数定义,在message ConvolutionParameter中,找到关于dilation的定义如下

  // Factor used to dilate the kernel, (implicitly) zero-filling the resulting
  // holes. (Kernel dilation is sometimes referred to by its use in the
  // algorithme à trous from Holschneider et al. 1987.)
  repeated uint32 dilation = 18; // The dilation; defaults to 1

在编写网络时

layer {
  name: "conv5_1"
  type: "Convolution"
  bottom: "conv4_3"
  top: "conv5_1"
  convolution_param {
    num_output: 512
    kernel_size: 3
    dilation: 2   # 设置膨胀系数
  }
}
3.注意细节

使用了dilated convolution以后,要想保持输出的尺寸不变,那么padding应该按照膨胀后的卷积核大小来计算。比如说原卷积核大小为3*3,膨胀指数为2,那么padding应该设为2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

la_fe_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值