NCNN是腾迅公司为手机开发的高性能神经网络前向计算框架。 不使用GPU,跨平台好,小巧,占资源少,在嵌入式领域有着广泛的应用,我开发ADAS车门预警用到了NCNN。NCNN的交叉编译是算法移植的第一步,详细步骤如下:
- github上下载ncnn源码
- 解压, 生成ncnn-master目录
- 检查交叉编译器的配置,输入arm-linux-gnueabihf-gcc –v 可以打印出编译器的信息
- 进入ncnn-master目录,编辑CMakeLists.txt,在
cmake_minimum_required(VERSION 2.8.12)行之后添加下面四行:
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
add_definitions(-D__ARM_NEON)
add_definitions("-mfpu=neon")
5. 进入ncnn-master下的src目录,编辑CMakeLists.txt,在“include_directories("${CMAKE_CURRENT_SOURCE_DIR}/layer/${NCNN_TARGET_ARCH}")”之后,
添加set(NCNN_TARGET_ARCH "arm")
6. 在ncnn-master目录下创建build目录,cd build,然后cmake ..
7. make
8.sudo make install DESTDIR=/home/yangkm/Studio/test/ncnn-master/target
在target目录可以搜索到libncnn.a
9. ncnn-master目录下的CMakeLists.txt有一项配置:option(NCNN_SHARED_LIB "shared library support" OFF),把OFF改为ON可以生成动态库。嵌入式系统更适合动态库。