Add ConvTranspose2d
ssdutHB opened this issue · comments
Could you please add nn.ConvTranspose2d into the transformation? Because the ConvTranspose2d operation is now very common in neural networks.
I think it's feasible and easy to convert torch.nn.ConvTransposed2d
to Deconvolution
since I already did that for UpsamplingBilinear2d
. But I don't have enough time to implement it now.
You can follow here to implement it. You need to
- convert the layer parameters of
ConvTransposed2d
to that ofDeconvolution
in caffe, - and check if weight and bias of
ConvTransposed2d
are saved properly for caffe: https://github.com/longcw/pytorch2caffe/blob/master/pytorch2caffe.py#L101
Hi, longcw. Thanks for your quick reply. Yesterday, I transferred "conv_transpose2d" from pytorch to caffe as what you said above. But I found that there is a parameter "output_padding" in "conv_transpose2d". That optional parameter will add specific padding to the result of deconvolution, so that the user can get a specific output shape. But the Decovolution layer in caffe has no such parameter. So it's a problem now for me.
Consider, if we want to convert a deconv layer from pytorch, which is "nn.ConvTranspose2d(128,128,kernel_size =3,stride=2,padding =1,output_padding = 1)",
How can we write a caffe layer?
The code above can convert a tensor with shape(batch,channel,width,height) to shape(batch,channel,widthx2,heightx2).
if we write a caffe layer with above parameter
layer {
name: "ConvNdBackward73"
type: "Deconvolution"
bottom: "AddBackward72"
top: "ConvNdBackward73"
convolution_param {
num_output: 128
pad: 1
kernel_size: 3
stride: 2
bias_term: false
}
}
we get (batch,channel,width,height) to (batch,channel,widthx2-1.heightx2-1)
In conclusion, I think the deconv operation in pytorch can't be perfectly converted to caffe. Am I right?
So the only difference is the output_padding
. If the output_padding is not zero then we will need an extra "padding layer" (?) in caffe. BTW, welcome to send pull requests for your improvement.