Caffe 反卷积

最近在设计多尺度的网络用于更好的提取图像特征,需要先对特征图进行下采样之后再进行上采样恢复特征图分辨率以便于融合,因此使用到了Caffe中的反卷积,反卷积的资料并不多,在这里叙述一下反卷积的使用


Prototxt网络配置

Deconvolution

layer {
  name: "upsample"
  type: "Deconvolution"
  bottom: "{{bottom_name}}" 
  top: "{{top_name}}"
  convolution_param {
    kernel_size: {{2 * factor - factor % 2}}     # factor为放大倍数,2即为放大一倍
    stride: {{factor}}
    num_output: {{C}} 
    group: {{C}}
    pad: {{ceil((factor - 1) / 2.)}}
    weight_filler: { type: "bilinear" } 
    bias_term: false
  }
  param { 
    lr_mult: 0 
    decay_mult: 0 
  }
}

下面是我实际使用中设计的反卷积层,首先特征图输入为 [48,36] ,经过最大池化的下采样过程之后降为 [24,18] ,然后使用反卷积层恢复至 [48,36]

layer {
  name: "stage1_deconv1"
  type: "Deconvolution"
  bottom: "stage1_conv1"
  top: "stage1_deconv1"
  param: {
    lr_mult: 0
    decay_mult: 0
  }
  convolution_param {
    num_output: 64
    stride: 2
    pad: 1
    kernel_size: 4
    bias_term: False
    weight_filler {       # weight_filler使用caffe.proto中的 message FillerParameter 来定义
      type: "bilinear"    # caffe提供的填充算法有: constant、 gaussian、 positive_unitball (让每一个神经元的输入的权值和为 1,例如:一个神经元有100个输入,让这100个输入的权值和为1.  首先给这100个权值赋值为在(0,1)之间的均匀分布,然后,每一个权值再除以它们的和就可以啦。)
                          # uniform、 xavier、 msra、 bilinear
    }
  }
}

更详细讲解可以参见:https://www.zhihu.com/question/63890195?sort=created


Dilated Convolution(空洞卷积)

计算公式



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

你可能感兴趣的:(Caffe 反卷积)