• Ubuntu20.04环境下编译MNN


    前言

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

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

    编译环境准备

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

    1. gcc 安装

    1. sudo apt update
    2. sudo apt install build-essential

    2. cmake 安装

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

    可能会报错

    在这里插入图片描述

     需要安装 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
    tar -zxv -f protobuf-cpp-3.20.0-rc-1.tar.gz
    • 进入解压后的文件夹,生成配置文件
    1. cd protobuf-3.20.0-rc-1/
    2. ./autogen.sh
    • 配置环境
    ./configure
    • 编译源码
    make
    • 安装
    sudo make install
    • 刷新动态库
    sudo ldconfig
    • 可以通过 protobuf --version 查看是否安装成功

    Linux 本地编译 MNN

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

    Android 编译 MNN

    1. Linux 命令行方式

    export ANDROID_NDK=/home/wkx/Downloads/android-ndk-r25
    • 进入 MNN 文件夹执行
    1. cd /path/to/MNN-master
    2. # 可选,更改 schema 文件后需要重新生成
    3. ./schema/generate.sh
    4. # 可选,模型仅 demo 工程需要
    5. ./tools/script/get_model.sh
    • 进入 android 文件夹编译动态库
    1. cd project/android
    2. # 编译 armv7 动态库
    3. mkdir build_32
    4. cd build_32
    5. ../build_32.sh
    6. # 编译armv8动态库
    7. mkdir build_64
    8. cd build_64
    9. ../build_64.sh

    下图为 armv8 动态库

    2. Android Studio 方式

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

    下图为编译好的 apk

    用 zip 解压,进入 lib 目录

    arm64-v8a 目录下的动态库

    MNN 模型转换

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

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

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

    转换成功

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

  • 相关阅读:
    【重走 java 路】数组
    k8s分布式图床(k8s,metricsapi,vue3+ts)
    Linux_Docker修改Docker Root Dir
    【宋红康 MySQL数据库 】【高级篇】【20】其他数据库日志
    leetcode:801. 使序列递增的最小交换次数【线性dp + 考虑当前和前一位 + java】
    SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?
    【Linux】adduser命令使用
    IDEA导入和删除第三方jar包
    【论文精读】Diffusion Transformer(DiT)
    刘亦菲生日当天,引发了我对正则的思考
  • 原文地址:https://blog.csdn.net/qq_40206924/article/details/126570574