ncnn
git@github.com:Ewenwan/MVision.git
https://github.com/hjchen2/paddle-mobile-benchmark.git
MobilenetV2 Caffe model 转换成NCNN model 并基于NCNN推理测试 - 简书
RK3399上Tengine平台搭建
利用tengine在树莓派上跑深度学习网络
Macos 编译NCNN
git clone https://github.com/OAID/tengine/
git clone https://github.com/Tencent/ncnn.git
sudo apt-get install -y gfortran
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev libatlas-base-dev
————————————————
版权声明:本文为CSDN博主「la_fe_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/la_fe_/article/details/85759013
- 编译
cd ncnn && mkdir -p build && cd build
(2) 在ncnn根目录下CMakeLists.txt中编译examples语句的注释去掉
##############################################
# add_subdirectory(examples)
# add_subdirectory(benchmark)
add_subdirectory(src)
if(NOT ANDROID AND NOT IOS)
add_subdirectory(tools)
endif()
- 关闭OPENMP:
OPENMP会导致模型推理的速度不稳定,可以修改ncnn-master/CMakeLists.txt ,关闭OPENMP
option(NCNN_OPENMP "openmp support" OFF)
- 准备caffe模型文件(alexnet)
caffe 的网络和模型通常是搞深度学习的研究者训练出来的,一般来说训练完会有
train.prototxt
deploy.prototxt
snapshot_10000.caffemodel
alexnet 的 deploy.prototxt 可以在这里下载 https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet
alexnet 的 caffemodel 可以在这里下载 http://dl.caffe.berkeleyvision.org/bvlc_alexnet.caffemodel
转换ncnn网络和模型
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 } }
}
- caffe2ncnn.exe 工具转换为 ncnn 的网络描述和模型
caffe2ncnn deploy.prototxt bvlc_alexnet.caffemodel alexnet.param alexnet.bin
build/tools/caffe/caffe2ncnn deploy.prototxt new_alexnet.caffemodel alexnet.param alexnet.bin
- 测试
1.安装git
sudo apt-get install git
2.用git下载源码
git clone https://github.com/OAID/tengine/
3.安装支持库
libprotobuf: for load caffemodel
sudo apt install libprotobuf-dev protobuf-compiler libboost-all-dev libgoogle-glog-dev
libopencv: for image preprocessing in test samples
sudo apt install libopencv-dev
由于树莓派自带的系统为armv7,不支持Tengine现有的官方计算库,因此需要使用BLAS库进行运算,安装命令为:
sudo apt-get install libopenblas-dev
如果要使用Caffe库,可以参考 http://caffe.berkeleyvision.org/installation.html 进行配置。
参考文档
NCNN在RK3288 Linux系统的原生编译问题解决
本文档涉及到的目标硬件为英伟达JetsonTX1(4核Cortex-A53,Armv8.0架构),但是对其他Arm芯片也有一定的借鉴意义,只需要更换交叉编译链即可。
开发环境介绍
主机操作系统:Ubuntu14.04 64位
目标平台:JetsonTX1 TegraX1 rk3399
交叉工具链:aarch64-unknown-linux-gnu,gcc4.9.2
设置交叉编译链
在/etc/bash.bashrc的最后增加如下指令
# Tegra X1 cross compiler
export ARCH=arm
export PATH=/opt/toolchain/aarch64-unknown-linux-gnu/bin/:$PATH
export CROSS_COMPILE=aarch64-unknown-linux-gnu-
export CC=/opt/toolchain/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gcc
export CXX=/opt/toolchain/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-g++
export LD=/opt/toolchain/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-ld
export AR=/opt/toolchain/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-ar
export AS=/opt/toolchain/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-as
export RANLIB=/opt/toolchain/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-ranlib
# 修改完成之后需要重启命令行才能生效
# 你可以通过如下指令来确认交叉编译链是否已经设置好
echo $CC
# 当显示/opt/toolchain/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gcc时表示交叉编译链已经设置好
# 当需要更换为本机编译时屏蔽上面的指令即可
下载依赖库
依赖库 版本 下载地址
opencv 3.2.0 https://github.com/opencv/opencv
protobuf 3.2.0 https://github.com/google/protobuf
编译Opencv
新建cmake Build目录
cd opencv-3.2.0
mkdir _install
使用cmake-gui进行配置
选择Specify options for cross-compiling,进入交叉编译链设置界面
设置交叉编译相关参数
本文使用的是NVIDIA提供的交叉工具链,存放位置为/opt/toolchain/aarch64-unknown-linux-gnu/(更改为你正在使用的目录)
设置Operating System 为 arm-linux
设置C编译器为 /opt/toolchain/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-gcc(更改为你正在使用的gcc)
设置C++编译器为 /opt/toolchain/aarch64-unknown-linux-gnu/bin/aarch64-unknown-linux-gnu-g++
设置System Root 为 /opt/toolchain/aarch64-unknown-linux-gnu/aarch64-unknown-linux-gnu/sysroot
点击Configure生成配置选项,并且打开Advancd选项
修改设置选项:
# 去掉勾选为FLASE 勾选为TRUE
BUILD_SHARED_LIBS # FLASE为编译静态库 TRUE为编译动态库
CMAKE_BUILD_TYPE # Release
CMAKE_CXX_FLAGS # -fPIC
CMAKE_C_FLAGS # -fPIC
CMAKE_EXE_LINKER_FLAGS # -lrt -lpthread
CMAKE_INSTALL_PREFIX # 自定义安装目录
WITH_CUDA # FLASE 禁用CUDA
WITH_CUFFT # FLASE 禁用CUFFT
WITH_EIGEN # FLASE 禁用EIGEN
WITH_FFMPEG # FLASE 禁用FFMPEG
WITH_OPENCL # FLASE 禁用OPENCL
WITH_OPENCLAMDBLAS # FLASE 禁用OPENCLAMDBLAS
WITH_OPENCLAMDFFT # FLASE 禁用OPENCLAMDFFT
WITH_OPENCL_SVM # FLASE 禁用OPENCL_SVM
# 可选配置(根据需要进行配置)
WITH_TIFF
WITH_1394
WITH_GSTREAMER
WITH_JASPER
WITH_LAPACK
WITH_MATLAB
WITH_WEBP
点击Generate生成Makefile
进入_install目录&编译
cd _install
make -j8
make install
编译Protobuf
安装软件
sudo apt-get install curl libtool
生成PC版本protoc可执行文件,供编译ARM版本库时使用
修改/etc/bash.bashrc 设置为CC/CXX/LD为普通gcc编译器
cd protobuf-3.2.0
./autoconf.sh
./configure --prefix=/usr/local/PC/protobuf-3.2.0
编译ARM版本
修改/etc/bash.bashrc 设置为CC/CXX/LD为交叉编译器
cd protobuf-3.2.0
./autoconf.sh
./configure --build=i686-pc-linux --host=arm-linux \
--with-protoc=/usr/local/PC/protobuf-3.2.0/bin/protoc \
--prefix=/usr/local/TegraX1/protobuf-3.2.0 CFLAGS="-fPIC" CXXFLAGS="-fPIC -DNDEBUG"
编译&安装
make -j8
make install
编译NCNN
修改CmakeLists.txt
此处的修改只适用于Armv7的设备,Armv8设备已经默认开启neon指令,所以不需要额外指定
添加行
add_definitions("-mfpu=neon")
修改src/CmakeLists.txt
if((ANDROID AND ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7-a"))
修改为if(TRUE OR (ANDROID AND ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7-a"))
这里会强制进入ARM平台编译,否则会编译成X86的版本在测试时会出现计算性能非常低的问题
新建cmake Build目录
cd ncnn-20171225
mkdir _install
打开cmake-gui进行交叉编译链配置,参考编译Opencv时的操作
点击Configure生成配置选项,并且打开Advancd选项
如果Cmake找不到Protobuf的位置会报错,暂时先不用管,后面修改设置后错误会消失
修改设置选项:
去掉勾选为FLASE 勾选为TRUE
CMAKE_BUILD_TYPE # Release
CMAKE_INSTALL_PREFIX # 自定义安装目录
指定protobuf头文件和库文件路径(填写之前交叉编译Protobuf的安装目录)
PROTOBUF_INCLUDE_DIR /usr/local/TegraX1/protobuf-3.2.0/include
PROTOBUF_LIBRARY /usr/local/TegraX1/protobuf-3.2.0/lib/libprotobuf.a
PROTOBUF_LITE_LIBRARY /usr/local/TegraX1/protobuf-3.2.0/lib/libprotobuf-lite.so
PROTOBUF_PROTOC_EXECUTABLE /usr/local/PC/protobuf-3.2.0/bin/protoc
点击Generate生成Makefile
进入_install目录&编译
cd _install
make -j8
make install