caffe是目前的使用较多的深度学习框架之一。
目前在计算机视觉的相关任务中,反卷积被广泛用于各种场合,本部分主要介绍反卷积的原理以及在caffe中的使用
一,基本原理
可参考https://blog.csdn.net/q295684174/article/details/79064580
二、caffe中的使用
在g当前的caffe版本中,已经包含了DeconvolutionLayer。见src/caffe/layers/deconv_layer.cpp,deconv_layer.cu和 include/caffe/layers/deconv_layer.hpp。
其参数输入和卷积层一样,但是对于output_shape的计算和卷积层是不同的。
对于convolution: output = (input + 2 * p - k) / s + 1;
对于deconvolution: output = (input - 1) * s + k - 2 * p (1)
input代表输入的大小
p=pad
k=kernel_size
s=stride
- Parameters (
ConvolutionParameter convolution_param
) - From
./src/caffe/proto/caffe.proto
):
使用Python中的NetSpec生成network prototxt的时候
对于ConvlutionLayer:
conv = L.Convolution(relu, kernel_size=ks, stride=stride,
num_output=nout, pad=pad, bias_term=False, weight_filler=dict(type='xavier'),
bias_filler=dict(type='constant'))
对于deconvlutionLayer:首先通过公式1计算参数
conv = L.Deconvolution(relu, convolution_param=dict(kernel_size=ks, stride=stride,
num_output=nout, pad=pad, bias_term=False, weight_filler=dict(type='xavier'),
bias_filler=dict(type='constant')))
如;conv3 as input :64x64; conv4 as output:128x128
conv4 = L.Deconvolution(conv3, convolution_param=dict(kernel_size=10, stride=2,
num_output=256, pad=4),
param=[dict(lr_mult = 0)])