- tensorflow 之tf.nn.depthwise_conv2d and separable_conv2d实现及原理
- https://github.com/tensorflow/tensorflow/issues/3332
- 这里暂时看各种框架api实现,相比于普通卷积(卷积操作详解)的高效实现,分组卷积怎么高效实现待研究!
tensorflow实现:
pytorch实现:
- torch.nn.
Conv2d
(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
- groups
controls the connections between inputs and outputs. in_channels
and out_channels
must both be divisible by groups
. For example,
At groups=1, all inputs are convolved to all outputs.
At groups=2, the operation becomes equivalent to having two conv layers side by side, each seeing half the input channels, and producing half the output channels, and both subsequently concatenated.
At groups=
in_channels
, each input channel is convolved with its own set of filters, of size: \left\lfloor\frac{out\_channels}{in\_channels}\right\rfloor⌊in_channelsout_channels⌋.
caffe实现:
layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" # learning rate and decay multipliers for the filters param { lr_mult: 1 decay_mult: 1 } # learning rate and decay multipliers for the biases param { lr_mult: 2 decay_mult: 0 } convolution_param { num_output: 96 # learn 96 filters kernel_size: 11 # each filter is 11x11 stride: 4 # step 4 pixels between each filter application weight_filler { type: "gaussian" # initialize the filters from a Gaussian std: 0.01 # distribution with stdev 0.01 (default mean: 0) } bias_filler { type: "constant" # initialize the biases to zero (0) value: 0 } } }
Optional
bias_term
[defaulttrue
]: specifies whether to learn and apply a set of additive biases to the filter outputspad
(orpad_h
andpad_w
) [default 0]: specifies the number of pixels to (implicitly) add to each side of the inputstride
(orstride_h
andstride_w
) [default 1]: specifies the intervals at which to apply the filters to the inputgroup
(g) [default 1]: If g > 1, we restrict the connectivity of each filter to a subset of the input. Specifically, the input and output channels are separated into g groups, and the iith output group channels will be only connected to the iith input group channels.