移動端深度學習開源框架及部署


TensorFlow Lite

開源企業:谷歌   

GitHub地址:https://github.com/tensorflow/tflite-micro

  TensorFlow Lite for Microcontrollers 是TensorFlow Lite的實驗端口,旨在在只有千字節內存的微控制器和其他設備上運行機器學習模型。它不需要操作系統支持,任何標准C或C ++庫或動態內存分配。 Arm Cortex M3的核心運行時大小為16 KB,並且有足夠的運算符來運行語音關鍵字檢測模型,總共需要22 KB。有示例應用程序演示了如何將微控制器用於任務,包括喚醒字檢測,來自加速度計數據的手勢分類以及使用相機數據的圖像分類。輕量級的設計使得它在如Arduino Nano 33 BLE Sense的一些小芯片上也能夠部署。

NCNN

開源企業:騰訊

GitHub地址:https://github.com/Tencent/ncnn

  ncnn 是一個為手機端極致優化的高性能神經網絡前向計算框架。ncnn 從設計之初深刻考慮手機端的部署和使用。無第三方依賴,跨平台,手機端 cpu 的速度快於目前所有已知的開源框架。基於 ncnn,開發者能夠將深度學習算法輕松移植到手機端高效執行,開發出人工智能 APP,將 AI 帶到你的指尖。ncnn 目前已在騰訊多款應用中使用,如 QQ,Qzone,微信,天天P圖等。

功能概述

  • 支持卷積神經網絡,支持多輸入和多分支結構,可計算部分分支
  • 無任何第三方庫依賴,不依賴 BLAS/NNPACK 等計算框架
  • C++ 實現,跨平台,支持 android ios 等
  • ARM NEON 匯編級良心優化,計算速度極快
  • 精細的內存管理和數據結構設計,內存占用極低
  • 支持多核並行計算加速,ARM big.LITTLE cpu 調度優化
  • 支持基於全新低消耗的 vulkan api GPU 加速
  • 整體庫體積小於 700K,並可輕松精簡到小於 300K
  • 可擴展的模型設計,支持 8bit 量化和半精度浮點存儲,可導入 caffe pytorch mxnet onnx darknet keras tensorflow(mlir) 模型
  • 支持直接內存零拷貝引用加載網絡模型
  • 可注冊自定義層實現並擴展

MNN

開源企業:阿里巴巴

GitHub地址:https://github.com/PaddlePaddle/Paddle-Lite

  MNN(Mobile Nrural Network)是一個高效、輕量的深度學習框架。它支持深度模型推理與訓練,尤其在端側的推理與訓練性能在業界處於領先地位。目前,MNN已經在阿里巴巴的手機淘寶、手機天貓、優酷、釘釘、閑魚等20多個App中使用,覆蓋直播、短視頻、搜索推薦、商品圖像搜索、互動營銷、權益發放、安全風控等70多個場景。此外,IoT等場景下也有若干應用。

高性能

  • 不依賴任何第三方計算庫,依靠大量手寫匯編實現核心運算,充分發揮ARM CPU的算力。
  • iOS設備上可以開啟GPU加速(Metal),常用模型上快於蘋果原生的CoreML。
  • Android上提供了OpenCLVulkanOpenGL三套方案,盡可能多地滿足設備需求,針對主流GPU(AdrenoMali)做了深度調優。
  • 卷積、轉置卷積算法高效穩定,對於任意形狀的卷積均能高效運行,廣泛運用了 Winograd 卷積算法,對3x3 -> 7x7之類的對稱卷積有高效的實現。
  • 針對ARM v8.2的新架構額外作了優化,新設備可利用FP16半精度計算的特性獲得兩倍提速。

輕量性

  • 針對端側設備特點深度定制和裁剪,無任何依賴,可以方便地部署到移動設備和各種嵌入式設備中。
  • iOS平台:armv7+arm64靜態庫大小5MB左右,鏈接生成可執行文件增加大小620KB左右,metallib文件600KB左右。
  • Android平台:so大小400KB左右,OpenCL庫400KB左右,Vulkan庫400KB左右。

通用性

  • 支持TensorflowCaffeONNX等主流模型文件格式,支持CNNRNNGAN等常用網絡。
  • 轉換器支持149個TensorflowOP、58個TFLite OP、47個Caffe OP、74個ONNX OP;各計算設備后端支持的MNN OP數:CPU 111個,ARM V8.2 6個,Metal 55個,OpenCL 43個,Vulkan 32個。
  • 支持iOS 8.0+、Android 4.3+和具有POSIX接口的嵌入式設備。
  • 支持異構設備混合計算,目前支持CPU和GPU。

易用性

  • 有高效的圖像處理模塊,覆蓋常見的形變、轉換等需求,一般情況下,無需額外引入libyuv或opencv庫處理圖像。
  • 支持回調機制,可以在網絡運行中插入回調,提取數據或者控制運行走向。
  • 支持只運行網絡中的一部分,或者指定CPU和GPU間並行運行。
  • (BETA)MNN Python API,讓算法工程師可以輕松地使用MNN構圖、訓練、量化訓練,無需編寫C++。

TNN

開源企業:騰訊

GitHub地址:https://github.com/Tencent/TNN

  TNN:騰訊優圖實驗室開源的高性能、輕量級神經網絡推理框架。它還具有跨平台、高性能、模型壓縮、代碼裁剪等諸多突出優勢。TNN 框架在原有 Rapidnet 和 ncnn 框架的基礎上,進一步加強了對移動設備的支持和性能優化。同時借鑒業界主流開源框架的高性能和良好的擴展性特點,擴展了對X86和NV GPU的支持。在手機端,TNN已經被QQ、微視、Pitu等眾多應用使用。TNN作為騰訊雲AI的基礎加速框架,為眾多業務的落地提供了加速支持。

Paddle-Lite

開源企業:百度

GitHub地址:https://github.com/PaddlePaddle/Paddle-Lite

  Paddle Lite為Paddle-Mobile的升級版,定位支持包括手機移動端在內更多場景的輕量化高效預測,支持更廣泛的硬件和平台,是一個高性能、輕量級的深度學習預測引擎。在保持和PaddlePaddle無縫對接外,也兼容支持其他訓練框架產出的模型。支持ARM CPU、Mali GPU、Adreno GPU,還特別支持了華為 NPU,以及 FPGA 等邊緣設備廣泛使用的硬件。即將支持支持包括寒武紀、比特大陸等AI芯片,未來會增加對更多硬件的支持。

多硬件支持

  • Paddle Lite架構已經驗證和完整支持從 Mobile 到 Server 多種硬件平台,包括 ARM CPU、Mali GPU、Adreno GPU、英偉達 GPU、蘋果 GPU、華為 NPU,以及 FPGA 等,且正在不斷增加更多新硬件支持。
  • 各個硬件平台的 Kernel 在代碼層和執行層互不干擾,用戶不僅可以自由插拔任何硬件,還支持任意系統可見硬件之間的混合調度

輕量級部署

  • Paddle Lite在設計上對圖優化模塊和執行引擎實現了良好的解耦拆分,移動端可以直接部署執行階段,無任何第三方依賴。
  • 包含完整的80個 op+85個 Kernel 的動態庫,對於ARMV7只有800K,ARMV8下為1.3M,並可以通過裁剪預測庫進一步減小預測庫文件大小。

高性能

  • 極致的 ARM CPU 性能優化:針對不同微架構特點實現kernel的定制,最大發揮計算性能,在主流模型上展現出領先的速度優勢。
  • 支持 PaddleSlim模型壓縮工具:支持量化訓練、離線量化等多種量化方式,最優可在不損失精度的前提下進一步提升模型推理性能。性能數據請參考 benchmark

多模型多算子

  • Paddle Lite和PaddlePaddle訓練框架的OP對齊,提供廣泛的模型支持能力。
  • 目前已嚴格驗證24個模型200個OP的精度和性能,對視覺類模型做到了較為充分的支持,覆蓋分類、檢測和定位,包含了特色的OCR模型的支持,並在不斷豐富中。具體請參考支持OP

強大的圖分析和優化能力

  • 不同於常規的移動端預測引擎基於 Python 腳本工具轉化模型, Lite 架構上有完整基於 C++ 開發的 IR 及相應 Pass 集合,以支持操作融合,計算剪枝,存儲優化,量化計算等多類計算圖優化。更多的優化策略可以簡單通過 新增 Pass 的方式模塊化支持。

MegEngine

開源企業:曠世科技

GitHub地址:https://github.com/MegEngine/MegEngine

MegEngine 是一個快速、可擴展且用戶友好的深度學習框架,具有 3 個關鍵特性。

1、訓練和推理的統一框架

  • 量化、動態形狀/圖像預處理,甚至使用單個模型進行推導。
  • 訓練后,將所有內容放入您的模型中,以便在任何平台上快速准確地進行推理。在這里查看快速指南。

2、最低的硬件要求

  • 啟用DTR 算法后,GPU 的內存使用量可以減少到原始內存使用量的三分之一。
  • 通過利用我們的下推內存規划器,具有最低內存使用率的推理模型。

3、在所有平台上高效推理

  • 在 x86、Arm、CUDA 和 RoCM 上進行高速和高精度推理。
  • 支持Linux、Windows、iOS、Android、TEE等。
  • 利用我們的高級功能優化性能和內存使用。

ONNX

ONNX的規范及代碼主要由微軟,亞馬遜,Facebook(已退出)和IBM等公司共同開發,以開放源代碼的方式托管在Github上

GitHub地址:https://github.com/onnx/onnx

  開放式神經網絡交換(Open Neural Network Exchange,ONNX)是一個開放的生態系統,它使 AI 開發人員能夠隨着項目的發展選擇合適的工具。ONNX 是一種開放格式,用於表示機器學習模型。ONNX 定義了一組通用運算符、機器學習和深度學習模型的構建塊、以及一種通用文件格式,使 AI 開發人員能夠使用具有各種框架、工具、運行時和編譯器的模型。ONNX是一種AI神經網絡模型的通用中間文件保存方法(可以理解成AI世界的XML),各種AI框架都可以解析ONNX文件並生成特定平台和運行框架所支持的神經網絡模型。

我遇到了pytorch的GRU轉ONNX,但是ONNX轉Tensorflow model時失敗,等ONNX解決了這個問題我再來用它

Lite AI ToolKit

Github地址:https://github.com/DefTruth/lite.ai.toolkit

Lite.Ai.ToolKit: 一個輕量級的C++ AI模型工具箱,用戶友好(還行吧),開箱即用。已經包括 100+ 流行的開源模型。這是一個根據個人興趣整理的C++工具箱,, 涵蓋目標檢測、人臉檢測、人臉識別、語義分割、摳圖等領域。

MACE (Mobile AI Compute Engine)

開源企業:小米    

GitHub地址:https://github.com/XiaoMi/mace

  Mobile AI Compute Engine (MACE) 是一個專為移動端異構計算平台(支持Android, iOS, Linux, Windows)優化的神經網絡計算框架。 主要從以下的角度做了專門的優化:

  • 性能:代碼經過NEON指令,OpenCL以及Hexagon HVX專門優化,並且采用 Winograd算法來進行卷積操作的加速。 此外,還對啟動速度進行了專門的優化。
  • 功耗:支持芯片的功耗管理,例如ARM的big.LITTLE調度,以及高通Adreno GPU功耗選項。
  • 系統響應:支持自動拆解長時間的OpenCL計算任務,來保證UI渲染任務能夠做到較好的搶占調度, 從而保證系統UI的相應和用戶體驗。
  • 內存占用:通過運用內存依賴分析技術,以及內存復用,減少內存的占用。另外,保持盡量少的外部 依賴,保證代碼尺寸精簡。
  • 模型加密與保護:模型保護是重要設計目標之一。支持將模型轉換成C++代碼,以及關鍵常量字符混淆,增加逆向的難度。
  • 硬件支持范圍:支持高通,聯發科,以及松果等系列芯片的CPU,GPU與DSP(目前僅支持Hexagon)計算加速。CPU模式支持Android, iOS, Linux等系統。
  • 模型格式支持:支持TensorFlow, CaffeONNX等模型格式。

TensorRT

開源企業:NVIDIA

GitHub地址:https://github.com/NVIDIA/TensorRT

  TensorRT 是NVIDIA的開源AI神經網絡Inference引擎,它可以解析和轉換ONNX格式的神經網絡模型並部署到支持CUDA的GPU上運行。目前TensorRT支持支持的平台有配置在CUDA 9.0以上的顯卡和他們的Jetson系列平台。

Tengine

Github地址:https://github.com/OAID/Tengine

TengineOPEN人工智能實驗室主導開發,項目該實現了深度學習神經網絡模型在嵌入式設備上的快速高效部署需求。為實現在眾多AIoT應用中的跨平台部署,本項目使用ç語言進行核心模塊開發,針對嵌入式設備有限的特點進行了深度的深度移植。采用了完全分離的前期設計,有嵌入式CPU、CPU、NPU等多種方法同時計算GPU的快速移植資源和開發,降低評估、遷移成本。

ELL

開源企業:微軟

GitHub地址:https://github.com/Microsoft/ELL

  嵌入式學習庫 (ELL) 允許您設計智能機器學習模型並將其部署到資源受限的平台和小型單板計算機上,例如 Raspberry Pi、Arduino 和 micro:bit。部署的模型在本地運行,無需網絡連接,也無需依賴雲中的服務器。ELL 是 Microsoft Research 開發的嵌入式 AI 和機器學習技術的早期預覽。

TVM

GitHub地址:https://github.com/apache/tvm

  Apache TVM 是用於深度學習系統的編譯器堆棧。它旨在縮小以生產力為中心的深度學習框架與以性能和效率為中心的硬件后端之間的差距。TVM 與深度學習框架配合使用,為不同的后端提供端到端編譯。

ARM NN

開源企業:ARM

GitHub地址:https://github.com/ARM-software/armnn

  Arm NN SDK 是一組開源軟件和工具,可在節能設備上實現機器學習工作負載。它在現有神經網絡框架和節能 Cortex-A CPU、Arm Mali GPU 和 Arm Ethos NPU 之間架起了一座橋梁。

  最新版本支持使用TensorFlow Lite (TfLite) 和ONNX創建的模型

 

FeatherCNN

開源企業:騰訊

GitHub地址:https://github.com/Tencent/FeatherCNN(停止更新)

  FeatherCNN是騰訊人工智能平台部開發的高性能輕量級CNN推理庫。FeatureCNN 起源於我們為王者榮耀(中文:王者榮耀)設計的游戲 AI 項目,我們旨在為 MOBA 游戲 AI 構建神經模型並在移動設備上運行它。FeatherCNN 目前針對 ARM CPU。我們將在不久的將來擴展它以涵蓋其他架構。

與其他庫相比,FeatherCNN 具有以下特點:

  • 高性能:在各種設備上提供最先進的推理計算性能,包括手機 (iOS/Android)、嵌入式設備 (Linux) 以及基於 ARM 的服務器 (Linux)。

  • 輕松部署:將所有內容打包在一個代碼庫中,以擺脫第三方依賴。因此,它有助於在移動平台上進行部署。

  • 輕量模型:Feather weight 編譯后的 FeatherCNN 庫是小型的(數百 KB)。

PocketFlow

開源用戶:騰訊   

GitHub地址:https://github.com/Tencent/PocketFlow(停止更新)

語言:python

  一款面向移動端AI開發者的自動模型壓縮框架,集成了當前主流的模型壓縮與訓練算法,結合自研超參數優化組件實現了全程自動化托管式的模型壓縮與加速。開發者無需了解具體算法細節,即可快速地將AI技術部署到移動端產品上,實現了自動托管式模型壓縮與加速,實現用戶數據的本地高效處理。

QNNPACK

全稱:Quantized Neural Network PACKage(量化神經網絡包)    

開源企業:Facebook

GitHub地址:https://github.com/pytorch/QNNPACK(停止更新)

特點:   

  • 1)低密度卷積優化函數庫;   
  • 2)可在手機上實時運行Mask R-CNN 和 DensePose;
  • 3) 能在性能受限的移動設備中用 100ms 以內的時間實施圖像分類 

MDL

開源企業:百度    

GitHub地址:https://github.com/allonli/mobile-deep-learning(停止更新)

  免費開源移動深度學習框架,由百度部署。mobile-deep-learning 旨在簡單地在移動設備上部署 CNN,復雜度低,速度快。支持iOS GPU計算,已被百度APP采用。

Prestissimo

開源企業:九言科技    

GitHub地址:https://github.com/in66-dev/In-Prestissimo(停止更新)

特點: 

基礎功能

  • 支持卷積神經網絡,支持多輸入和多分支結構
  • 精煉簡潔的API設計,使用方便
  • 提供調試接口,支持打印各個層的數據以及耗時
  • 不依賴任何第三方計算框架,整體庫體積 500K 左右(32位 約400k,64位 約600k)
  • 純 C++ 實現,跨平台,支持 android 和 ios
  • 模型為純二進制文件,不暴露開發者設計的網絡結構

MDL、NCNN和 TFLite比較

百度-MDL框架、騰訊-NCNN框架和谷歌TFLite框架比較。

  MDL NCNN TFLite
代碼質量 很高
跨平台
支持caffe模型 ×
支持TensorFlow模型 × ×
CPU NEON指令優化
GPU加速 × ×

相同點:

  • 只含推理(inference)功能,使用的模型文件需要通過離線的方式訓練得到。
  • 最終生成的庫尺寸較小,均小於500kB。
  • 為了提升執行速度,都使用了ARM NEON指令進行加速。
  • 跨平台,iOS和Android系統都支持。

不同點:

  • MDL和NCNN均是只支持Caffe框架生成的模型文件,而TfLite則毫無意外的只支持自家大哥TensorFlow框架生成的模型文件。
  • MDL支持利用iOS系統的Matal框架進行GPU加速,能夠顯著提升在iPhone上的運行速度,達到准實時的效果。而NCNN和TFLite還沒有這個功能。

nnom

github地址:https://github.com/majianjia/nnom

編程語音:純C

支持框架:Keras

NNoM 的初衷只是為了簡化ARM這套CMSIS-NN的使用,針對10~100kB RAM的單片機做的。不考慮支持現有的各種模型文件或者protobuf因為他們太大,並且需要文件系統的支持。

libonnx

作者:xboot

github地址:https://github.com/xboot/libonnx

編程語言:純C

支持框架:ONNX

優點:可以支持硬件加速接口,開發環境依賴少,有較強的通用性,特別是在低端嵌入式芯片上,程序文件可以復制到各種工程,保證最小依賴。C++內存很容易爆炸。

各大框架趨於穩定,功能開始雷同,變現需求越來越迫切,大家都想在部署在低端設備上。作者研究了一大圈,現在各種框架基本都是Python和C++等大型框架,基本不適合低端嵌入式設備,那種無操作系統的設備,更是無從談起,翻遍整個了網絡,也沒有找到純C的,低端嵌入式設備友好的微型推理框架。特別是ONNX標准的流行,讓我覺得有必要自己開發一個微型推理框架,不為別的,就只為能在低端嵌入式設備上運行各種開源的預訓練模型,且不要對模型動刀,況且訓練模型,吃力不討好,還不如用現成的,本來,好用的深度學習模型,就那么些,大家基本都差不多。

MNIST手寫數字識別demo,這里還有更多的體驗:https://microsoft.github.io/onnxjs-demo/,作者主要實現C版的ONNX推理引擎。ONNX模型別人都訓練好了,直接下載推理就行。https://github.com/onnx/models

 

https://github.com/daquexian/onnx-simplifier

https://github.com/Shuep418Slw/OSlw_Code

 

參考

【Github】深度學習500問題

 【機器之心】從TensorFlow到PyTorch:九大深度學習框架哪款最適合你?

【CSDN】支持移動端深度學習的幾種開源框架


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM