基于NCNN框架的MTCNN&移植

基于NCNN框架的MTCNN

1 地址

https://www.cnblogs.com/cpuimage/p/8995600.html
git:https://github.com/cpuimage/MTCNN 其中包含了ncnn的地址

2 编译

1 注意ncnn目录,需要从腾讯的ncnn git下来
2 mtcnn有转换好的模型文件,也可以自己搭建matlab+caffe的训练环境自己训练模型。
mkdir build
cd build
cmake …/
make ncnn
make
make可能会报错,把browse.h中的#if linux || FreeBSD || __sun&&__SVR4 改成 #if 1

3 交叉编译

1 修改ncnn/CMakeList.txt文件
倒数第二行注释:
#add_subdirectory(tools)
2 修改ncnn/toolchains
注释最后三行:
#add_definitions(-D__ARM_NEON)
#add_definitions(-D__ANDROID__)
#SET ( ANDROID true)
3 编译
mkdir build_armhi
cd build_armhi
cmake -DCMAKE_TOOLCHAIN_FILE=…/ncnn/toolchains/hisiv500.toolchain.cmake …/
make ncnn
make
这样就生成了 mtcnn执行程序,但是我在我的海思板子上执行报错:
./mtcnn: can’t load library ‘libgomp.so.1’
ncnn需要OpenMP的支持,本来我们可以通过修改CMakeList.txt和ncnn/CMakeList.txt来去掉OpenMP的支持,但是实验证明,带有OpenMP的计算速度提升很多,比如在我的8700cpu下,检测一张有4张人脸的图形,不带OpenMP需要147ms,带上就是65ms。相同的图片,不带OpenMP在hi3531d上执行需要37s,带上需要20s
所以我们需要在arm板上安装OpenMP:
1 git clone https://github.com/lapesd/libgomp.git
2 cd libgomp/src/libgomp && mkdir build && cd build
3 …/configure --host=arm-hisiv500-linux CC=arm-hisiv500-linux-gcc CXX=arm-hisiv500-linux-g++ --disable-multilib CFLAGS=-std=gnu11
两种配置方法生成的动态库是相同的,但是加上–disable-multilib参数编译时间快很多
…/configure --host=arm-hisiv500-linux CC=arm-hisiv500-linux-gcc CXX=arm-hisiv500-linux-g++ CFLAGS=-std=gnu11
4 make -j6
5 cp -d .libs/libgomp.so* 指定目录
可是安装OpenMP还不够,时间还是太长了,我们需要想办法降低时间
这个时候我发现了NENO这个功能,通过修改…/ncnn/toolchains/hisiv500.toolchain.cmake文件,增加浮点运算和NEON,本来加上这个报错我给去掉了,现在修改成:
SET ( CMAKE_CXX_FLAGS “-std=c++11 -mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=neon -mno-unaligned-access -fno-aggressive-loop-optimizations ${CMAKE_CXX_FLAGS}” )
带有OpenMP和NEON的执行结果:784ms,比之前的20s提升了非常多,但是还是不行,时间太长了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值