前言
ncnn是腾讯优图在七月份开源的,一款手机端极致优化的前向计算框架;开源有几个月了,仍然是开源里的扛把子(给nihui大佬递茶)。之前也测试移植过,这次主要做个整理,鉴于很多人只想在window下搭建并调试,本次主要基于MTCNN的人脸检测例子,进行一次该框架的搭建,构建流程主要采用脚本编写,主要简单演示下流程操作;附:项目地址链接
主要环境:
- git
- cmake
- vs2015
- android studio
PC端调试:
使用windows的pc端调试,繁琐的是依赖库的生成和引用。依赖库中Protobuf是caffe的模型序列化存储的规则库,将caffe框架转ncnn框架模型用到,另外opencv库主要用于范例的图像读取操作,可自己配置,或直接使用个人在3rdparty文件夹下编译好的库;
- 下载源码并更新子模块,protobuf源码库比较大,更新会比较慢
git clone https://github.com/moli232777144/mtcnn_ncnn.git
git submodule update --ini
- 编译protobuf
调用tools下的protobuf脚本编译:
cd ../3rdparty/src/protobuf/cmake
mkdir build
cd build
cmake .. -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_MSVC_STATIC_RUNTIME=OFF -G "Visual Studio 14 2015 Win64"
pause
vs2015打开./3rdparty/src/protobuf/cmake/build下的protobuf.sln工程,编译Debug及Release版本;
调用tools下的copyProtobuf脚本,生成protobuf的依赖库到第三方公共文件夹3rdparty下。
- 编译ncnn
修改./3rdparty/src/ncnn目录下的CMakeLists.txt中的add_definitions相关注释,修改后结果如下:
add_definitions(-D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE)
#add_definitions(-Wall -Wextra)
#add_definitions(-fPIC)
#add_definitions(-Ofast)
#add_definitions(-ffast-math)
#add_definitions(-march=native)
#add_definitions(-flto)
#add_definitions(-fvisibility=hidden -fvisibility-inlines-hidden)
因为 VS2015 只支持 openmp 2.0,所以修改 src/layer/convolution_depthwise.cpp
#pragma omp parallel for collapse(2)
去掉 collapse(2)