我是靠谱客的博主 耍酷香水,最近开发中收集的这篇文章主要介绍Centos7 NCNN 编译安装【亲测】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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++的主要区别

  1. 对于 .c和.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)

  2. 对于 .c和.cpp文件,g++则统一当做cpp文件编译

  3. 使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL

  4. gcc在编译C文件时,可使用的预定义宏是比较少的

  5. 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

  1.    在用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 编译安装【亲测】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(90)

评论列表共有 0 条评论

立即
投稿
返回
顶部