NCNN - 适用于移动端的高性能神经网络前向计算框架

版权声明:转载请写明出处,谢谢! https://blog.csdn.net/wilson1068/article/details/88317985

NCNN - 适用于移动端的高性能神经网络前向计算框架

简述

ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。

ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。

基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。

ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天 P 图等。

功能

  • 支持卷积神经网络,支持多输入和多分支结构,可计算部分分支

  • 无任何第三方库依赖,不依赖 BLAS/NNPACK 等计算框架

  • 纯 C++ 实现,跨平台,支持 android ios 等

  • ARM NEON 汇编级良心优化,计算速度极快

  • 精细的内存管理和数据结构设计,内存占用极低

  • 支持多核并行计算加速,ARM big.LITTLE cpu 调度优化

  • 整体库体积小于 500K,并可轻松精简到小于 300K

  • 可扩展的模型设计,支持 8bit 量化和半精度浮点存储,可导入 caffe 模型

  • 支持直接内存零拷贝引用加载网络模型

  • 可注册自定义层实现并扩展

  • 恩,很强就是了,不怕被塞卷

NCNN 编译

先下载 NDK,安装 NDK。

可以通过 https://developer.android.com/ndk/downloads/index.html 下载 NDK 工具。

设置 ANDROID_NDK 环境变量路径:

# 设置 ndk 路径
export ANDROID_NDK=<your-ndk-root-path>

编译 armv7 库:

# 进入 ncnn 目录
cd <ncnn-root-dir>

# 创建 build-android-armv7 目录(区分不同的库版本)
mkdir -p build-android-armv7

# 进入 build-android-armv7 目录
cd build-android-armv7

# cmake 编译
#     -DCMAKE_TOOLCHAIN_FILE    cmake 文件
#     -DANDROID_ABI             库版本
#     -DANDROID_ARM_NEON        是否启用 NEON 加速
#     -DANDROID_PLATFORM        Android 平台版本
cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI="armeabi-v7a" \
    -DANDROID_ARM_NEON=ON \
    -DANDROID_PLATFORM=android-19 \
    ..

# 编译生成库文件
make -j4

# 安装
make install

安装完后,可以在 build-android-armv7/install/libs 目录下找到 libncnn.a 文件。

安装完后,可以在 build-android-armv7/install/include 目录下找到相关的头文件。

编译 aarch64 库:

# 进入 ncnn 目录
cd <ncnn-root-dir>

# 创建 build-android-aarch64 目录(区分不同的库版本)
mkdir -p build-android-aarch64

# 进入 build-android-aarch64 目录
cd build-android-aarch64

# cmake 编译
#     -DCMAKE_TOOLCHAIN_FILE    cmake 文件
#     -DANDROID_ABI             库版本
#     -DANDROID_ARM_NEON        是否启用 NEON 加速
#     -DANDROID_PLATFORM        Android 平台版本
cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI="armeabi-v7a" \
    -DANDROID_ARM_NEON=ON \
    -DANDROID_PLATFORM=android-19 \
    ..

# 编译生成库文件
make -j4

# 安装
make install

安装完后,可以在 build-android-aarch64/install/libs 目录下找到 libncnn.a 文件。

安装完后,可以在 build-android-aarch64/install/include 目录下找到相关的头文件。

其它错误

cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake ......

编译过程中,会发现 cmake 的步骤可能会出现如下错误:

CMake Error at /data/ndk/android-ndk-r16b/build/cmake/android.toolchain.cmake:40 (cmake_minimum_required):
  CMake 3.6.0 or higher is required.  You are running version 3.5.1
Call Stack (most recent call first):
  /usr/share/cmake-3.5/Modules/CMakeDetermineSystem.cmake:98 (include)
  CMakeLists.txt:24 (project)


-- Configuring incomplete, errors occurred!

什么意思?

就是你的 cmake 版本(3.5.1) 低于你编译 cmake 文件的版本(3.6.0)

可以使用 cmake --version 命令查看当前 cmake 的版本。

# cmake --version
cmake version 3.5.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).

尝试过

sudo apt-get upgrade cmake

或者

sudo apt-get remove cmake
sudo apt-get install cmake

都失败了。

不得已,采用以下方式:

  1. 下载 cmake 源代码:https://cmake.org/download/
  2. 执行以下命令。
# 生成 makefile 文件
./configure

# 编译生成 cmake 文件
Make

# 安装 cmake 到全局 bin 路径(方便调用)
make install

执行完后,使用 cmake --version 可以查看 cmake 版本已经高于 3.6.0.

# cmake --version
cmake version 3.14.0-rc3

CMake suite maintained and supported by Kitware (kitware.com/cmake).

接下来就可以继续处理了。

猜你喜欢

转载自blog.csdn.net/wilson1068/article/details/88317985
今日推荐