Ubuntu20.04环境下编译MNN

前言

MNN是一个轻量级的深度神经网络推理引擎,在端侧加载深度神经网络模型进行推理预测。目前,MNN已经在阿里巴巴的手机淘宝、手机天猫、优酷等20多个App中使用,覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、权益发放、安全风控等场景。此外,IoT等场景下也有若干应用。

下面介绍在 Ubuntu20.04 环境下编译 MNN 的过程。

编译环境准备

  • gcc(建议使用 4.9 或以上版本)
  • cmake(建议使用 3.10 或以上版本)
  • protobuf(建议使用 3.0 或以上版本)

1. gcc 安装

sudo apt update
sudo apt install build-essential

2. cmake 安装

  • 从官网下载 cmake 的 linux 版本
  • 在 cmake 源码所在文件夹打开命令终端,解压文件
tar -zxv -f cmake-3.24.1.tar.gz
  • 进入解压后的文件夹执行
./bootstrap

可能会报错

Ubuntu20.04环境下编译MNN_第1张图片

 需要安装 libssl-dev

sudo apt-get install libssl-dev

安装完成以后,再次执行 ./bootstrap

  • 编译构建 cmake
make
  • 安装 cmake
sudo make install
  • 安装完成后可以执行 cmake --version 验证是否安装成功、

3. protobuf 安装

  • 安装依赖
sudo apt-get install autoconf automake libtool curl make g++ unzip libffi-dev -y
  • 下载 protobuf 源码并解压
tar -zxv -f protobuf-cpp-3.20.0-rc-1.tar.gz
  • 进入解压后的文件夹,生成配置文件
cd protobuf-3.20.0-rc-1/
./autogen.sh
  • 配置环境
./configure
  • 编译源码
make
  • 安装
sudo make install
  • 刷新动态库
sudo ldconfig
  • 可以通过 protobuf --version 查看是否安装成功

Linux 本地编译 MNN

  • 下载 MNN 源码并解压
unzip MNN-master.zip
  • 进入解压后的文件夹执行
cd MNN-master
./schema/generate.sh
  • 本地编译
mkdir build 
cd build 
cmake .. 
make -j8
  • 编译完成后本地出现 MNN 的动态库

Ubuntu20.04环境下编译MNN_第2张图片

Android 编译 MNN

1. Linux 命令行方式

  • 在 https://developer.android.com/ndk/downloads/ 下载安装 NDK,建议使用最新版本
  • 在 .bashrc 或者 .bash_profile 中设置 NDK 环境变量,如
export ANDROID_NDK=/home/wkx/Downloads/android-ndk-r25
  • 进入 MNN 文件夹执行
cd /path/to/MNN-master

# 可选,更改 schema 文件后需要重新生成
./schema/generate.sh

# 可选,模型仅 demo 工程需要
./tools/script/get_model.sh
  • 进入 android 文件夹编译动态库
cd project/android

# 编译 armv7 动态库
mkdir build_32
cd build_32 
../build_32.sh

# 编译armv8动态库
mkdir build_64 
cd build_64 
../build_64.sh

下图为 armv8 动态库

Ubuntu20.04环境下编译MNN_第3张图片

2. Android Studio 方式

  • 使用 Android Studio 打开 MNN-master/project/android/demo ,然后编译 apk 
  • 用 zip 解压编译好的 apk ,lib 目录下包含 MNN 的动态库

下图为编译好的 apk

Ubuntu20.04环境下编译MNN_第4张图片

用 zip 解压,进入 lib 目录

Ubuntu20.04环境下编译MNN_第5张图片

arm64-v8a 目录下的动态库

Ubuntu20.04环境下编译MNN_第6张图片

MNN 模型转换

  • 进入 MNN 目录,执行
cd MNN-master
./schema/generate.sh
mkdir build
cd build
cmake .. -DMNN_BUILD_CONVERTER=true && make -j4

 下图为得到的模型转换工具

Ubuntu20.04环境下编译MNN_第7张图片

  • 将其它模型转换为 MNN 模型,例如将 model-mobilenet.pb 模型转换为 abc.mnn 模型
./MNNConvert -f TF --modelFile model-mobilenet.pb --MNNModel abc.mnn --bizCode biz

转换成功

Ubuntu20.04环境下编译MNN_第8张图片

 转换前的模型和转换后得到的 MNN 模型

Ubuntu20.04环境下编译MNN_第9张图片

你可能感兴趣的:(mnn)