This is a personal caffe implementation of mobile convolution layer. For details, please read the original paper:
- Merge the caffe folder in the repo with your own caffe. $ cp -r $REPO/caffe/* $YOURCAFFE/
- Then make. $ cd $YOURCAFFE && make
Replacing the type of mobile convolution layer with "DepthwiseConvolution" is all. Please refer to the example/Withdw_MN_train_128_1_train.prototxt, which is altered from
| GPUPerformance | Origin1 | Mine |
|---|---|---|
| forward_batch1 | 41 ms | 8 ms |
| backward_batch1 | 51 ms | 11 ms |
| forward_batch16 | 532 ms | 36 ms |
| backward_batch16 | 695 ms | 96 ms |
- Add the funtion of depth_multiplier(e.g. Now you can set the input channel = 32, group = 32 and output channel = 64. It mean the depth_multiplier = 2)
I write a script [transfer2Mobilenet.py] to convert normal net to mobilenet format. You may try too.
usage: python ./transfer2Mobilenet.py sourceprototxt targetprototxt [--midbn nobn --weight_filler msra --activation ReLU] ["--origin_type" means the depthwise convolution layer's type will be "Convolution" instead of "DepthwiseConvolution"]
The "transferTypeToDepthwiseConvolution.py" will be used for changing the depthwise convolution layer's type from "Convolution" to "DepthwiseConvolution".
Footnotes
When turn on cudnn, the memory consuming of mobilenet would increase to unbelievable level. You may try. ↩