So far I have used the pytorch-caffe-darknet-convert repository. After overcoming numerous problems (concat and eltwise layers not convertible) I got something similar to the darknet configuration file:
python caffe2darknet.py my_prototxt.txt my_caffemodel.caffemodel new_net_file.cfg new_model.weights
Does anyone know how to convert the output of new_net_file.cfg to pytorch? Alternatively, is there another way to convert caffe prototype files to pytorch?
I would like to have the same behavior as caffe-tensorflow I will post both my caffe prototype and the new_net_file.cfg output below as a reference.
my_prototxt:
input: "data" input_shape { dim: 1 dim: 240 dim: 144 dim: 240 } layer { name: "conv1_1" type: "Convolution" bottom: "data" top: "conv1_1" convolution_param { num_output: 16 pad: 3 pad: 3 pad: 3 kernel_size: 7 kernel_size: 7 kernel_size: 7 stride: 2 weight_filler { type: "xavier" } bias_filler { type: "constant" } engine: CUDNN axis: 1 } } layer { name: "relu1_1" type: "ReLU" bottom: "conv1_1" top: "conv1_1" } layer { name: "reduction2_1" type: "Convolution" bottom: "conv1_1" top: "reduction2_1" convolution_param { num_output: 32 bias_term: false pad: 0 kernel_size: 1 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } } } layer { name: "conv2_1" type: "Convolution" bottom: "conv1_1" top: "conv2_1" convolution_param { num_output: 32 pad: 1 pad: 1 pad: 1 kernel_size: 3 kernel_size: 3 kernel_size: 3 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } engine: CUDNN axis: 1 } } layer { name: "relu2_1" type: "ReLU" bottom: "conv2_1" top: "conv2_1" } layer { name: "conv2_2" type: "Convolution" bottom: "conv2_1" top: "conv2_2" convolution_param { num_output: 32 pad: 1 pad: 1 pad: 1 kernel_size: 3 kernel_size: 3 kernel_size: 3 stride: 1 weight_filler { type: "xavier" } bias_filler { type: "constant" } axis: 1 } } layer { name: "res2_2" type: "Eltwise" bottom: "reduction2_1" bottom: "conv2_2" top: "res2_2" eltwise_param { operation: SUM } } layer { name: "add2_2" type: "ReLU" bottom: "res2_2" top: "res2_2" } layer { name: "pool2" type: "Pooling" bottom: "res2_2" top: "pool2" pooling_param { pool: MAX kernel_size: 2 stride: 2 engine: CUDNN } } [...] # I cropped it here, since file is too lengthy
configuration file (darknet):
[net] batch=1 channels=240 height=144 width=240 [convolutional] filters=16 size=['7', '7', '7'] stride=2 pad=1 activation=relu [convolutional] filters=32 size=1 stride=1 pad=1 activation=linear [route] layers=-2 [convolutional] filters=32 size=['3', '3', '3'] stride=1 pad=1 activation=relu [convolutional] filters=32 size=['3', '3', '3'] stride=1 pad=1 activation=linear [shortcut] from=-4 activation=relu [maxpool] size=2 stride=2 [...] # I cropped it here, since file is too lengthy
source share