乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MNN介紹、安裝和編譯

       beginnow1 2022-12-02 發(fā)布于廣東

      MNN是一個輕量級的深度神經(jīng)網(wǎng)絡(luò)推理引擎,在端側(cè)加載深度神經(jīng)網(wǎng)絡(luò)模型進(jìn)行推理預(yù)測。目前,MNN已經(jīng)在阿里巴巴的手機(jī)淘寶、手機(jī)天貓、優(yōu)酷等20多個App中使用,覆蓋直播、短視頻、搜索推薦、商品圖像搜索、互動營銷、權(quán)益發(fā)放、安全風(fēng)控等場景。此外,IoT等場景下也有若干應(yīng)用。

      整體特點

      輕量性
      · 針對端側(cè)設(shè)備特點深度定制和裁剪,無任何依賴,可以方便地部署到移動設(shè)備和各種嵌入式設(shè)備中。
      · iOS平臺:armv7+arm64靜態(tài)庫大小5MB左右,鏈接生成可執(zhí)行文件增加大小620KB左右,metallib文件600KB左右。
      · Android平臺:so大小500KB左右,OpenCL庫300KB左右,Vulkan庫300KB左右。

      通用性
      · 支持Tensorflow、Caffe、ONNX等主流模型文件格式,支持CNN、RNN、GAN等常用網(wǎng)絡(luò)。
      · 支持 149 個TensorflowOp、47 個CaffeOp、74 個 ONNX Op;各計算設(shè)備支持的MNN Op數(shù):CPU 110個,Metal 55個,OpenCL 29個,Vulkan 31個。
      · 支持iOS 8.0+、Android 4.3+和具有POSIX接口的嵌入式設(shè)備。
      · 支持異構(gòu)設(shè)備混合計算,目前支持CPU和GPU,可以動態(tài)導(dǎo)入GPU Op插件,替代CPU Op的實現(xiàn)。

      高性能
      · 不依賴任何第三方計算庫,依靠大量手寫匯編實現(xiàn)核心運算,充分發(fā)揮ARM CPU的算力。
      · iOS設(shè)備上可以開啟GPU加速(Metal),常用模型上快于蘋果原生的CoreML。
      · Android上提供了OpenCL、Vulkan、OpenGL三套方案,盡可能多地滿足設(shè)備需求,針對主流GPU(Adreno和Mali)做了深度調(diào)優(yōu)。
      · 卷積、轉(zhuǎn)置卷積算法高效穩(wěn)定,對于任意形狀的卷積均能高效運行,廣泛運用了 Winograd 卷積算法,對3x3 -> 7x7之類的對稱卷積有高效的實現(xiàn)。
      · 針對ARM v8.2的新架構(gòu)額外作了優(yōu)化,新設(shè)備可利用半精度計算的特性進(jìn)一步提速。

      易用性
      · 有高效的圖像處理模塊,覆蓋常見的形變、轉(zhuǎn)換等需求,一般情況下,無需額外引入libyuv或opencv庫處理圖像。
      · 支持回調(diào)機(jī)制,可以在網(wǎng)絡(luò)運行中插入回調(diào),提取數(shù)據(jù)或者控制運行走向。
      · 支持只運行網(wǎng)絡(luò)中的一部分,或者指定CPU和GPU間并行運行。



      安裝

      git clone https://github.com/alibaba/MNN.git

      推理框架編譯(Linux / macOS)

      環(huán)境要求

      · cmake(建議使用3.10或以上版本)、
      · protobuf(使用3.0或以上版本)
      · gcc(使用4.9或以上版本)

      編譯選項

      使用cmake編譯時,可以修改CMakeLists.txt中的選項:
      · MNN_DEBUG
      默認(rèn)關(guān)閉,關(guān)閉時,不保留符號,開啟優(yōu)化。
      · MNN_OPENMP
      默認(rèn)開啟,關(guān)閉后,禁用openmp多線程優(yōu)化。
      · MNN_OPENCL
      默認(rèn)關(guān)閉,開啟后,編譯OpenCL部分,可以通過指定MNN_FORWARD_OPENCL利用GPU進(jìn)行推理。
      · MNN_OPENGL
      默認(rèn)關(guān)閉,開啟后,編譯OpenGL部分,可以通過指定MNN_FORWARD_OPENGL利用GPU進(jìn)行推理。
      · MNN_VULKAN
      默認(rèn)關(guān)閉,開啟后,編譯Vulkan部分,可以通過指定MNN_FORWARD_VULKAN利用GPU進(jìn)行推理。
      · MNN_METAL
      默認(rèn)關(guān)閉,開啟后,編譯Metal部分,可以通過指定MNN_FORWARD_METAL利用GPU進(jìn)行推理,僅限iOS或macOS上開啟。
      · MNN_ARM82
      默認(rèn)關(guān)閉,開啟后,編譯Arm8.2部分,用Arm8.2+擴(kuò)展指令集實現(xiàn)半精度浮點計算(fp16)和int8(sdot)加速

      具體步驟

      cd /path/to/MNN
      ./schema/generate.sh
      ./tools/script/get_model.sh # 可選,模型僅demo工程需要
      mkdir build && cd build && cmake .. && make -j8

      編譯完成后MNN/build目錄下出現(xiàn)MNN的動態(tài)庫(libMNN.so)。



      推理框架Android編譯

      環(huán)境要求

      · cmake(建議使用3.10或以上版本)、
      · protobuf(使用3.0或以上版本)
      · gcc(使用4.9或以上版本)

      編譯選項

      使用cmake編譯時,可以修改CMakeLists.txt中的選項:
      · MNN_DEBUG
      默認(rèn)關(guān)閉,關(guān)閉時,不保留符號,開啟優(yōu)化。
      · MNN_USE_THREAD_POOL
      默認(rèn)開啟,使用 MNN 內(nèi)部的無鎖線程池實現(xiàn)多線程優(yōu)化。關(guān)閉后,視MNN_OPENMP開關(guān)選擇OpenMP或關(guān)閉多線程優(yōu)化。
      注:MNN 的無鎖線程池最多允許兩個實例同時使用,即最多供兩個模型同時推理使用。參考代碼 source/backend/cpu/ThreadPool.cpp 中 MNN_THREAD_POOL_MAX_TASKS 宏的定義。
      · MNN_OPENMP
      默認(rèn)開啟,在 MNN_USE_THREAD_POOL 關(guān)閉時生效,依賴OpenMP實現(xiàn)多線程優(yōu)化。關(guān)閉后,禁用OpenMP。
      · MNN_OPENCL
      默認(rèn)關(guān)閉,開啟后,編譯OpenCL部分,可以通過指定MNN_FORWARD_OPENCL利用GPU進(jìn)行推理。
      · MNN_OPENGL
      默認(rèn)關(guān)閉,開啟后,編譯OpenGL部分,可以通過指定MNN_FORWARD_OPENGL利用GPU進(jìn)行推理。
      需要android-21及以上,亦即腳本中指定 -DANDROID_NATIVE_API_LEVEL=android-21
      · MNN_VULKAN
      默認(rèn)關(guān)閉,開啟后,編譯Vulkan部分,可以通過指定MNN_FORWARD_VULKAN利用GPU進(jìn)行推理。
      · MNN_ARM82
      默認(rèn)關(guān)閉,開啟后,編譯Arm8.2部分,用Arm8.2+擴(kuò)展指令集實現(xiàn)半精度浮點計算(fp16)和int8(sdot)加速

      具體步驟

      在https://developer./ndk/downloads/下載安裝NDK,建議使用最新穩(wěn)定版本
      在 .bashrc 或者 .bash_profile 中設(shè)置 NDK 環(huán)境變量,例如:export ANDROID_NDK=/Users/username/path/to/android-ndk-r14b
      cd /path/to/MNN
      ./schema/generate.sh
      ./tools/script/get_model.sh(可選,模型僅demo工程需要)。注意get_model.sh需要事先編譯好模型轉(zhuǎn)換工具。
      cd project/android
      編譯armv7動態(tài)庫:mkdir build_32 && cd build_32 && ../build_32.sh
      編譯armv8動態(tài)庫:mkdir build_64 && cd build_64 && ../build_64.sh



      轉(zhuǎn)換工具Linux / macOS編譯,例程編譯

      cd MNN/
      ./schema/generate.sh
      mkdir build
      cd build
      cmake .. -DMNN_BUILD_CONVERTER=true && make -j4

      編譯產(chǎn)物包含模型轉(zhuǎn)換工具MNNConvert和模型輸出工具MNNDump2Json.out

      打開cmake的MNN_BUILD_DEMO(編譯例程)和DMNN_BUILD_CONVERTER(編譯模型轉(zhuǎn)換工具)開關(guān),進(jìn)行編譯

      mkdir build && cd build
      cmake .. -DMNN_BUILD_DEMO=ON -DMNN_BUILD_CONVERTER=true
      make -j4


      在build文件夾里面就有相應(yīng)工具啦,可以運行官方示例模型,注意用的圖片尺寸有要求的,跟著示例圖片大小來就是。


      aarch64交叉構(gòu)建編譯

      安裝aarch64工具鏈可參考:
      在MNN的目錄執(zhí)行以下操作,根據(jù)實際路徑修改,可以做成sh腳本

      export cross_compile_toolchain=/opt/gcc-aarch64-linux-gnu
      mkdir build && cd build
      sudo cmake .. -D CMAKE_SYSTEM_NAME=Linux -D CMAKE_SYSTEM_VERSION=1 -D CMAKE_SYSTEM_PROCESSOR=aarch64 -D CMAKE_C_COMPILER=/opt/gcc-aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc -D CMAKE_CXX_COMPILER=/opt/gcc-aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
      sudo make -j4

      如果編譯不成功,單獨執(zhí)行sudo make -j4會有以下錯誤提示:

      error: 'CPUINFO_ARM_LINUX_FEATURE_I8MM’ was not declared in this scope; did you mean 'CPUINFO_ARM_LINUX_FEATURE_FPHP’?

      按提示將該路徑的CPURuntime.cpp中第1559行 

       if (isa_features & CPUINFO_ARM_LINUX_FEATURE_I8MM)

      改為 if (isa_features & CPUINFO_ARM_LINUX_FEATURE_FPHP)

      References:

      1. MNN官方文檔

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多