本博记录为卤煮使用时的记录,属于事后回忆记录,如有疏漏,请指正。
卤煮:非文艺小燕儿
本博地址:腾讯开源ncnn:caffemodel转化为.param和.bin文件
感谢开源共享的各位大牛们,让我们能够站在巨人的肩膀上前行。
ncnn Git:https://github.com/Tencent/ncnn
ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。
腾讯开源的ncnn中不能直接加载我们自己训练好的caffemodel和deploy文件,而是加载其自己定义的param和bin模型文件。
不过其提供了将caffemodel文件转化为param和bin文件的工具。在\ncnn-master\tools下的caffe2ncnn.cpp文件就是用来实现该转换。
首先创建一个VS工程(我的命名是caffe2ncnn),添加caffe2ncnn文件作为主文件。
然后进行工程配置:
(1)将工程配置为x64 release(我配置成win32出现了一些奇怪的问题(相关lib并没用错版本),后来转成x64就好了)
(2)包含目录
(3)库目录
(3)链接器输入
配置完成后,生成项目,在x64\Release下得到caffe2ncnn.exe,将依赖的库文件也放到该Release文件夹下。
接下来以alexnet为例,实施caffemodel的转换。
caffe 的网络和模型通常是搞深度学习的研究者训练出来的,一般来说训练完会有
train.prototxt
deploy.prototxt
snapshot_10000.caffemodel
部署的时候只需要 TEST 过程,所以有 deploy.prototxt 和 caffemodel 就足够了
alexnet 的 deploy.prototxt 可以在这里下载https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet
alexnet 的 caffemodel 可以在这里下载 http://dl.caffe.berkeleyvision.org/bvlc_alexnet.caffemodel
caffe 自带了工具可以把老版本的 caffe 网络和模型转换为新版(ncnn的工具只认识新版
upgrade_net_proto_text [老prototxt] [新prototxt]
upgrade_net_proto_binary [老caffemodel] [新caffemodel]
输入层改用 Input,因为每次只需要做一个图片,所以第一个 dim 设为 1
layer {
name: "data"
type: "Input"
top: "data"
input_param { shape: { dim: 1 dim: 3 dim: 227 dim: 227 } }
}
将deploy.prototxt 和 caffemodel 文件放入刚才的Release文件夹下。
使用 caffe2ncnn.exe 工具转换为 ncnn 的网络描述和模型
caffe2ncnn deploy.prototxt bvlc_alexnet.caffemodel alexnet.param alexnet.bin