概述
NCNN是什么
ncnn 是腾讯开源的,一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行。
简单概括就是将 使用 GPU 训练好的模型 转为 手机移动端可以使用的模型。
NCNN安装前的准备
1) g++ 这个Centeos 一般都会默认装上,这里说一些题外话:
什么是gcc / g++
首先说明:gcc 和 GCC 是两个不同的东西
GCC:GNU Compiler Collection(GUN
编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。gcc是GCC中的GUN C Compiler(C 编译器)
g++是GCC中的GUN C++ Compiler(C++编译器)
一个有趣的事实就是,就本质而言,gcc和g++并不是编译器,也不是编译器的集合,它们只是一种驱动器,根据参数中要编译的文件的类型,调用对应的GUN编译器而已,比如,用gcc编译一个c文件的话,会有以下几个步骤:Step1:Call a preprocessor, like cpp.
Step2:Call an actual compiler, like cc or cc1.
Step3:Call an assembler, like as.
Step4:Call a linker, like ld
由于编译器是可以更换的,所以gcc不仅仅可以编译C文件
所以,更准确的说法是:gcc调用了C compiler,而g++调用了C++ compiler
gcc和g++的主要区别
对于 .c和.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)
对于 .c和.cpp文件,g++则统一当做cpp文件编译
使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL
gcc在编译C文件时,可使用的预定义宏是比较少的
gcc在编译cpp文件时/g++在编译c文件和cpp文件时(这时候gcc和g++调用的都是cpp文件的编译器),会加入一些额外的宏,这些宏如下:
#define GXX_WEAK 1
#define __cplusplus 1
#define __DEPRECATED 1
#define GNUG 4
#define __EXCEPTIONS 1
#define private_extern extern
在用gcc编译c++文件时,为了能够使用STL,需要加参数 –lstdc++ ,但这并不代表 gcc –lstdc++ 和 g++等价,它们的区别不仅仅是这个
主要参数
-g - turn on debugging (so GDB gives morefriendly output)
-Wall - turns on most warnings
-O or -O2 - turn on optimizations
-o - name of the output file
-c - output an object file (.o)
-I - specify an includedirectory
-L - specify a libdirectory
-l - link with librarylib.a
使用示例:g++ -ohelloworld -I/homes/me/randomplace/include helloworld.C
2) cmake 需要升级到 3.0 版本以上,Centos 7 默认为 cmke 2.8…所以需要自行升级,网络上有很多编译升级的,前提是你首先 在 root 权限下 yum remove cmake,然后编译安装新的,这个其实不是很建议,因为源码编译会有各种问题,主要是最后的环境配置问题,比较麻烦,所以这里建议大家 直接使用 yum install cmake3,直接进行安装,然后编译过程中使用 cmake3 进行就行了。
3) 安装 opencv ,这个可以在网上查找相应的教程,建议大家装 opencv 3 的版本,太新的版本可能 NCNN 不是很支持 ,一定要在编译安装opencv后配置好环境,然后在编译NCNN时候才能用到,Opencv 主要在编译 NCNN过程中 负责 examples 模块 和 quantize 模块,我这一步目前没有装对,不知道是不是opencv影响了最终 NCNN 转化的模型精度,opencv 安装可以参考 点击进入
4) 安装google protobuf,是一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,可以用于网络通信和数据存储。由于我们最终转化的是模型,所以需要这样一个序列化工具。项目地址点击 项目目录中也有相关的安装步骤,这里介绍我的安装过程
我装的是protobuf-3.6.1
下载地址 https://github.com/protocolbuffers/protobuf/releases
我下载的是protobuf-all-3.6.1.tar.gz 包
新版本不需要执行autogen.sh脚本,直接./configure就行
安装过程如下:
安装成功可以用 protoc –version #查看版本
我先安装了 autoconf和automake 这两个(yum install autoconf /automake.),因为他需要的其他包我都安装过了,然后进行下面的命令
wget https://github.com/google/protobuf/releases/download/v3.6.1/protobuf-all-3.6.1.tar.gz
tar zxvf protobuf-all-3.6.1.tar.gz
./autogen.sh
./configure
make
make install
如果上一步有错误:./autogen.sh执行报错./autogen.sh: line 38: autoreconf: command not found
需要先
安装autoconf和automake(一般只安装这两个模块就行了,不用操作 gcc libtool等)
yum -y install gcc automake autoconf libtool make
安装g++:
yum install gcc gcc-c++
NCNN的安装编译过程,具体也可以参看 github 的安装建议点击,其实我比较建议大家在 Windows 下编译,因为 NCNN的编译在Centos7下太多坑了!!
git clone https://github.com/Tencent/ncnn.git
cd ncnn
git submodule update --init
mkdir build
cd build
cmake .. (本步如果您 yum install cmake3,可以使用 cmake3 .. )
make -j8
make install
如果没有抱任何异常,那就是你编译安装成功了,我的是Opencv的原因,下去我还要进行配置Opencv,相关的配置信息我会继续更新。但是Opencv 似乎不影响生成 onnx2ncnn 这个文件,这个文件在后来的模型转换过程中有很大作用!!!!但是我不太清楚我转化的模型精度不高是否是 opencv的原因,我想我还要测试下才有结论。
最后
以上就是耍酷香水为你收集整理的Centos7 NCNN 编译安装【亲测】的全部内容,希望文章能够帮你解决Centos7 NCNN 编译安装【亲测】所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复