搭建caffe平台:
先在Linux系统下搭建caffe环境,安装依赖包:
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install libblas-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libopenblas-dev
sudo apt-get install python-skimage
sudo apt-get install python-protobuf
pip install easydict
(1)在linux环境下首先按下ctrl+alt+t打开一个新的terminal, 选定一个目录(还是建议不要在根目录下操作,尽量在用户目录下操作)输入命令mkdir Github; cd Github新建一个目录,并进入目录。
(2)输入git clone https://github.com/BVLC/caffe.git把远端仓库拉到本地目录。
(3)进入caffe目录,cp Makefile.config.example Makefile.config; 复制一份Makefile。
(4)该步骤为修改Makefile.config与Makefile文件,注意进行区分。
Makefile.config文件:
vim Makefile.config进入编辑模式;按住shift+:输入set number显示行号。
*第8行:如果没有CUDA的话就取消这一行的注释,编译CPU版本caffe,如果有显卡的话,注意需要安装CUDA,CUDA的搭建我们在先前教程已完成;
*第39行:根据代码注释,结合CUDA版本注释或接注释:
*第70行:将 /usr/lib/python2.7/dist-packages/numpy/core/include gaicheng修改为/usr/lib/local/python2.7/dist-packages/numpy/core/include
*第97行添加/usr/include/hdf5/serial 到 INCLUDE_DIRS。
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
*第98行进行修改,添加/usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial到LIBRARY_DIRS:
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
Makefile文件:
*第181行,添加hdf5_hl hdf5。
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
1)输入 :
make –j12
进行编译。
2)make通过后输入:
make test –j12
make runtest –j12
测试编译正确性。通过后输入:
make pycaffe,编译通过后就可以在python下调用caffe。(也可以进入python环境下输入import caffe,若无报错则caffe环境搭建成功)
3)将caffe添加至环境变量:
gedit ~/.bashrc
export PYTHONPATH=$PYTHONPATH:{your local caffe path}/python
source ~/.bashrc
至此caffe环境搭建完成。
Pytorch转caffe模型:
首先将远端的Pytorch转Caffe模型工具git到本地路径下,进入../Github路径下(为了方便使用,同一将文件放入../Github路径下):
git clone https://github.com/tuvia0213/brocolli.git
(1)进入到../Github/brocolli/tests/pytorch_model文件目录下,将之前训练好的pytorch模型(pnet_epoch_9.pt、pnet_epoch_10.pt,后缀数字越大模型越精确,P、R、Onet相同)放入该目录。
(2)打开../Github/brocolli/tests目录,将../DFace/dface/core下的models.py与models.pyc文件放入../Github/brocolli下,运行../brocolli/tests下的pytorch_model_converter.py脚本。
(3)在转换Pnet、Rnet、Onet三种模型时需要对该脚本进行修改,三者类似,只以Pnet为例修改:
1)19行改为from models import PNet;
2)21行改为model_file = “pytorch_model/pnet_epoch_9.pt”;
3)25行改为PNet;
4)27行改为model_weights = torch.load(‘pytorch_model/pnet_epoch_10.pt’);
5)42、49、51行中,分别对红字进行修改:
dummy_input = torch.ones([1, 3, 24, 24])
summary(net, (3, 24, 24), device='cpu')
pytorch_parser = PytorchParser(model_file, [3, 24, 24])
在(1,3,24,24)中,1是batch size,3是channel(RGB),24为input size,只需要修改24,修改方法分别参考教程《深度学习之DFACE模型pytorch训练(二) 》三个网络的input_size,只需改成input size的整数倍即可;
(4)修改完后进入../brocoll/tests路径下进行模型转换:
python pytorch_model_converter.py
完成模型Pytorch转Caffe的模型转换,转换完后生成.caffemodel和.prototxt格式文件,进行Caffe转NCNN模型的转换。
Caffe转NCNN模型:
ncnn是腾讯推出的一款嵌入式端推理框架,它可以完美兼容caffe环境,将caffe模型转换成ncnn框架支持的格式,然后就可以进行推理了。
在这里感谢腾讯。
(1)cd ../Github;git clone https://github.com/Tencent/ncnn.git;
(2)cd ncnn; mkdir –p build; cd build; cmake ..; make –j4;编译生成pc端的工具;
(3)将caffe模型转换到ncnn可使用的模型;
(4)切换到目录ncnn/build/tools/caffe,运行
./caffe2ncnn pnet_epoch_10.pt.prototxt pnet_epoch_10.pt.caffemodel det1.param det1.bin
即可得到NCNN模型,Pnet、Rnet、Onet分别对应det1、det2、det3。
至此,模型转换完毕。