[深度学习]ncnn安装和调⽤基础教程
⽬录
1 介绍
ncnn是腾讯开发的⼀个为⼿机端极致优化的⾼性能神经⽹络前向计算框架,⽆第三⽅依赖,跨平台,但是通常都需要protobuf和opencv。ncnn⽬前已在腾讯多款应⽤中使⽤,如 QQ,Qzone,,天天P图等。ncnn主要基于C++和caffe,ncnn项⽬地址见:
本⽂主要介绍ncnn在Ubuntu 18和Windows10下安装和使⽤。ncnn实测win10和Ubuntu18下C++调⽤squeezenet进⾏分类越⽐opencv dnn模块调⽤squeeznet到5倍。
ncnn常见的主流系统平台和常见硬件平台都⽀持,包括树莓派。
其他平台安装教程见:
2 Ubuntu 18下ncnn安装和使⽤
2.1 Ubuntu 18下ncnn编译安装
ncnn在linux平台需要protobuf和较低的gcc版本⽀持(根据评论区的回复,最新ncnn版本在gcc/g++ 7.5环境,不需要降级为4.8.5,就可以编译安装protobuf 2.6.1和ncnn,2020年7⽉7⽇更新),如果你的系统可以运⾏caffe,可以跳过第⼀第⼆步,直接第三步。第⼀第⼆步具体安装protobuf见:
(1)将gcc、g++降级为4.8.5版本(最新版本ncnn可以跳过该阶段)。
(2)安装protobuf
(3)编译源码
先下载源码
git clone github/Tencent/ncnn
然后进⼊ncnn安装即可
cd ncnn
mkdir build
cd build
cmake ..
make –j12
make install
2.2 Ubuntu 18下ncnn使⽤
(1) 模型更新
ncnn对caffe模型⽀持度⽐其他平台模型⽀持度更⾼。所以⼀般都是将caffe的模型转为ncnn格式。对于⽐较⽼的caffe模型需要将其转换为最新的caffe模型(相对来说),不过⼀般都不需要。以alexnet为例
alexnet 的 deploy.prototxt 可以在这⾥下载:
alexnet 的 caffemodel 可以在这⾥下载 :
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⽂件了。注意完成之后打开你的ubuntu使用入门教程
new_deploy.prototxt⽂件看⼀下,因为⼀般每次只需要做⼀个数据样本的识别,所以如果第⼀个 dim 不为1,要将其设为
layer {
name: "data"
type: "Input"
top: "data"
input_param { shape: { dim: 1 dim: 3 dim: 227 dim: 227 } }
}
(2)模型转换
模型转换具体使⽤见:
当你获得new_deploy.prototxt和new.caffemodel⽂件后,需要将prototxt转换为ncnn⽀持的param⽂件,caffemodel转换为bin⽂件。Ncnn中使⽤ caffe2ncnn ⼯具转换为ncnn的⽹络描述和模型。将上⾯转化的new_deploy.prototxt和new.caffemodel放到
ncnn/build/tools/caffe下。然后命令⾏输⼊以下命令:
./caffe2ncnn new_deploy.prototxt new.caffemodel ncnn.param ncnn.bin
或者在以下⽹站转换模型:
(3)运⽤模型分类
上⾯提到的是alexnet,在实际本⽂使⽤的是squeezenet。ncnn调⽤模型的⼀般过程都是参考ncnn/exa
mples/下各个⽰例cpp⽂件,选择⾃⼰的模型,然后根据该⽬录下的⽂件修改参数。本⽂就不修改参数了,直接选⽤squeezenet.cpp使⽤。
然后打开ncnn根⽬录下的⽂件,将编译examples语句的注释打开(默认是被注释掉的),如图:
终端进⼊ncnn/build后执⾏:
make
然后把所获得ncnn参数和模型⽂件复制到ncnn/build/examples⽬录下,本⽂所⽤的squeezenet的ncnn⽂件在ncnn/examples中有提供。将模型.param和.bin⽂件复制到ncnn/build/examples⽬录下,然后终端cd到ncnn/build/examples,执⾏:
./squeezenet imagepath
Imagepath为图像路径。就可以得到结果。
具体调⽤代码直接参考ncnn/examples中的⽰例cpp⽂件,但是使⽤时最好使⽤examples所提到的模型。
(4)ncnn⼯程使⽤
如果想建⽴⼯程,需要⾃⼰新建⼀个⽬录然后编写你⾃⼰的cpp⽂件。⽐如使⽤ncnn/examples/squeezenet.cpp,将其放⼊本机任意路径新的⽂件夹。对于ncnn编译,需要添加opencv和openmp,编写如下进⾏编译,然后cmake .就可以在当前⽬录运⾏⽣成的可执⾏⽂件ncnnTest。
# 设置cmake版本
cmake_minimum_required(VERSION 3.2)
# ncnn⼯程
project(ncnnTest)
# 调⽤opencv
find_package(OpenCV REQUIRED)
# 调⽤openmp
FIND_PACKAGE( OpenMP REQUIRED)
if(OPENMP_FOUND)
message("OPENMP FOUND")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()
# 包含ncnn的头⽂件
include_directories(/home/user/ncnn/build/install/include/ncnn)
# 包含ncnn的链接⽂件
link_directories(/home/user/ncnn/build/install/lib)
# ⽣成可执⾏⽂件
add_executable(ncnnTest squeezenet.cpp)
# 链接ncnn静态链接库
target_link_libraries(ncnnTest ncnn ${OpenCV_LIBS} /home/user/ncnn/build/install/lib/libncnn.a)
3 Windows 10下ncnn安装和使⽤
Win10下安装和ncnn最好都基于visual studio2015以上平台,本⽂⽤的vs2017。
3.1 Windows 10下ncnn编译安装
(1)protobuf编译
然后选择vs2017⾃带的命令提⽰符⼯具,对于命令提⽰符⼯具选择,⽤于后期可能会⽤到opencv或者
其他软件包。需要确定是x86还是x64平台,本⽂由于⽤的x64平台,选择适⽤于vs2017的x64本机⼯具。如下所⽰:
特别要注意的在编译⽂件前,⼀定要确定命令⼯具所使⽤的是x64还是x86。
protobuf编译步骤为:
cd <protobuf-root-dir>
mkdir build-vs2017
cd build-vs2017
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_ nmake
nmake install
上⾯protobuf-root-dir为你的protobuf⽂件路径,⽐如我的是D:/packages/protobuf-3.4.0,⽂件路径最好纯英⽂,protobuf设置的
release格式。
(2)ncnn编译
cd <ncnn-root-dir>
mkdir build-vs2017
cd build-vs2017
cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -DProtobuf_INCLUDE_DIR=<protobuf-root-dir>/build-nmake
nmake install
注意<protobuf-root-dir>要替换为你的protobuf⽂件绝对路径,⽐如我的是D:/packages/protobuf-3.4.0。
DCMAKE_BUILD_TYPE=Release确定编译的是release⽂件。
3.2 Windows 10下ncnn使⽤
ncnn使⽤类似opencv在windows下的使⽤。打开vs2017建⽴⼯程⽂件。项⽬-属性-VC++⽬录。设置配置⽂件,VC++⽬录在包含⽬录
下输⼊以下路径,调⽤opencv,ncnn,protobuf头⽂件。
d:\opencv\build\include\opencv
d:\opencv\build\include
d:\opencv\build\include\opencv2
d:\packages\ncnn\build-vs2017\install\include
d:\packages\ncnn\build-vs2017\install\include\ncnn
d:\packages\protobuf-3.4.0\build-vs2017\install\include
d:\packages\protobuf-3.4.0\build-vs2017\install\include\google
具体如图所⽰:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。