caffe转ncnn:protobuf+cmake https://blog.csdn.net/u012477435/article/details/80765005
caffe转ncnn:cmake https://blog.csdn.net/soralaro/article/details/81131615
protobuf安装错误:https://blog.csdn.net/legend18/article/details/49840607
1、安装protobuf, cmake
(1)protobuf安装配置及出错处理
见我的博客:https://blog.csdn.net/weixin_41770169/article/details/85768593
(2)cmake安装配置
见我的博客:https://blog.csdn.net/weixin_41770169/article/details/85758091
2、编译ncnn
ncnn代码下载和cmake编译
git clone https://github.com/Tencent/ncnn
cd ncnn
mkdir build && cd build
cmake ..
make -j
make install
3、caffe模型准备,更新
.caffemodel, .prototxt
ncnn只支持最新版本的caffe模型,caffe 自带了工具可以把老版本的 caffe 网络和模型转换为新版(ncnn的工具只认识新版),这里介绍一种比较笨但是比较快捷的方法:
首先将你需要转换的prototxt和caffemodel放在你电脑的caffe/build/tools目录下,然后终端进入caffe/build/tools,执行命令:
./upgrade_net_proto_text old_deploy.prototxt new_deploy.prototxt
./upgrade_net_proto_binary old.caffemodel new.caffemodel
执行完成之后你就可以在caffe/build/tools下找到你的new_deploy.prototxt和new.caffemodel文件了。
注意完成之后打开你的new_deploy.prototxt文件看一下,因为一般每次只需要做一个数据样本的识别,所以如果第一个 dim 不为1,要将其设为 1,类似于这样:
layer {
name: "data"
type: "Input"
top: "data"
input_param { shape: { dim: 1 dim: 3 dim: 227 dim: 227 } }
}
4、caffe转ncnn
在第一步生成的ncnn/build/tools目录下用caffe2ncnn来转换新版的mobileNet模型。
$./caffe2ncnn mobilenet_deploy_new.prototxt mobilenet_new.caffemodel mobilenet.param mobilenet.bin
注意生成的ncnn格式的模型中,.param可以理解为网络的配置文件,.bin可以理解为网络的参数(各种权重)文件。
若需要对模型进行加密,可用如下命令
$./ncnn2mem mobilenet.param mobilenet.bin mobilenet.id.h mobilenet.mem.h
最后可生成 mobilenet.param.bin 这样的二进制加密文件。ncnn对加密和非加密两种文件的读取方式不一样。
//load非加密的ncnn模型
ncnn::Net net;
net.load_param("mobilenet.param");
net.load_model("mobilenet.bin");
//load加密的ncnn模型
ncnn::Net net;
net.load_param_bin("mobilenet.param.bin");
net.load_model("mobilenet.bin");