阿里開源MNNKit:基於MNN的移動端深度學習SDK,支持安卓和iOS

2020-12-16 機器之心Pro

機器之心報導

參與:一鳴、Jamin

近來,有越來越多的深度學習框架開始面向移動端進行發展。近日,阿里也基於其 MNN 推理引擎開源了最新的 MNNKit 深度學習 SDK,安卓和 iOS 開發者都可以方便地進行調用。

近年來,很多企業都在研發麵向移動端的深度學習框架。在國內有 小米的 Mace、騰訊的 FeatherCNN(騰訊 AI)和 ncnn(騰訊優圖)、百度的 Paddle-moblie 等。而阿里也開發了自己的移動端深度學習框架 MNN。近日,阿里開源了基於 MNN 引擎的項目 MNNKit,面向安卓和 iOS,以 SDK 的方式提供 AI 端側推理能力。開發者不需要了解算法細節就可以直接使用。項目地址:https://github.com/alibaba/MNNKit目前,MNNKit 已經有人臉檢測、手勢識別、人像分割等,後續可能有更多 API 接入。MNNKit:基於 MNN 的深度學習工具MNN 是基於阿里的 MNN 端上推理引擎所開發的應用解決方案,主要面向安卓和 iOS 系統,幫助將 AI 能力應用在實際的移動端場景中。MNNKit 架構MNNKit 提供了一個 SDK 供開發者使用,以下為 SDK 的架構。

從圖中可以看出,MNNKit 可以分為三層結構,從底向上分別為:

MNN 引擎層,是 MNN (https://github.com/alibaba/MNN) 庫在 Android/iOS 上編譯好的包的二進位 Release 版本,提供端側運行環境。Core 基礎層,這主要抽象和封裝與 MNN c++接口調用粒度基本一致的上層 API,iOS 通過 OC 接口提供,Android 通過 Java 接口提供(TODO)。這一層同時也為上層 SDK 提供一些公共服務類或結構定義。業務 Kit 層,包括了人臉檢測、手勢識別封裝的 API。據項目介紹,之後的業務 Kit 層會不斷擴展。內部原理因為 MNNKit 主要提供阿里的端側 AI 能力,因此封裝了很多相關應用的 API。調用如下:

例如,當用戶需要調用 API 的時候,需要首先創建實例,然後將圖像、視頻或其他結構化數據輸入,進行 AI 模型的推理工作。工作完成後釋放實例即可。目前 MNNKit 已支持的 API 有:

人臉檢測 API手勢識別 API人像分割 API以人臉檢測為例,檢測內容主要分為三大板塊:

人臉基本信息人臉位置的矩形坐標106 個關鍵點坐標(區分被遮擋的和未被遮擋的)置信度

106 個關鍵點的分布(來自官方開源 github)

人臉各區域關鍵點分布對應表

歐拉角度

搖頭(Yaw)、點頭(Pitch)、歪頭(Roll)三個角度值

人臉動作(包含 5 個人臉的動作)眨眼張嘴搖頭點頭揚眉處理過程我們知道了人臉檢測需要檢測的數據後,接下來看看處理過程:

如圖所示,該流程是 iOS 和安卓設備後置攝像頭正向拍攝後,在移動端上的整體處理過程。首先,系統從攝像頭獲取數據,作為 SDK 的輸入。接著,SDK 會進行如下操作:

在 MNN 引擎執行推理之前,對原始的輸入進行預處理,保證輸入數據中的人臉為正向使用 AI 模型進行推理;推理後,產生基於輸入圖像(預處理之後的)坐標系的關鍵點結果;。把關鍵點坐標變換到和屏幕渲染坐標系相同的方向,方便渲染。程應用中,最後的結果關鍵點要顯示在用戶屏幕上,前端會使用一個用來渲染的"畫布"。畫布的坐標系被稱為渲染坐標系,在 SDK 檢測的最後一步,我們將關鍵點變換到和渲染坐標系相同的方向,然後等比例映射關鍵點坐標到渲染坐標系的坐標即可。映射後可以直接渲染到畫布上代碼示例MNNKit 提供了包括人臉檢測、手勢識別等方面的示例代碼。接下來我們以人臉檢測為例,看看怎樣可以在安卓或 iOS 中調用 API 進行推理工作。安卓代碼前文提到,調用 API 需要首先創建一個實例,以下為異步創建 FaceDetector 實例,主線程中回調的代碼。

publicstaticvoidcreateInstanceAsync(Contextcontext,FaceDetectorCreateConfigcreateConfig,InstanceCreatedListener<FaceDetector>listener)

在這裡,人臉檢測 API 會進行檢測和跟蹤兩個動作。檢測會遭到人臉位置和關鍵點,而跟蹤是在人臉移動時重新定位關鍵點的位置。在視頻模式下,系統默認每 20 幀檢測一次,其餘幀只跟蹤。圖片模式下則每一次調用都檢測。創建實例後,可以將數據輸入模型進行推理。MNNKit 現在已支持多種數據格式輸入。在視頻流檢測場景中,我們可以使用攝像頭的回調數據作為接口的輸入。輸入數據的代碼如下:

publicsynchronizedFaceDetectionReport[]inference(byte[]data,intwidth,intheight,MNNCVImageFormatformat,longdetectConfig,intinAngle,intoutAngle,MNNFlipTypeoutputFlip)

使用輸入數據為 bitmap 的推理代碼如下:

publicsynchronizedFaceDetectionReport[]inference(Bitmapbitmap,longdetectConfig,intinAngle,intoutAngle,MNNFlipTypeoutputFlip)

當 FaceDetector 實例用完之後,我們需要手動釋放實例,否則會產生 native 的內存洩露。

publicsynchronizedvoidrelease()

iOS 代碼和安卓代碼類似,首先需要創建人臉檢測實例:

+(void)createInstanceAsync:(MNNFaceDetectorCreateConfig*)configCallback:(void(^)(NSError*error,MNNFaceDetector*faceDetector))blockCallbackQueue:(dispatch_queue_t)callbackQueue;

默認主線程回調:

+(void)createInstanceAsync:(MNNFaceDetectorCreateConfig*)configCallback:(void(^)(NSError*error,MNNFaceDetector*faceDetector))block;

PixelBuffer 輸入進行推理的代碼如下:

-(NSArray<MNNFaceDetectionReport*>*)inference:(CVPixelBufferRef)pixelBufferConfig:(MNNFaceDetectConfig)detectConfigAngle:(float)inAngleOutAngle:(float)outAngleFlipType:(MNNFlipType)flipTypeerror:(NSError*__autoreleasing*)error;

UIImage 輸入進行推理的代碼如下:

-(NSArray<MNNFaceDetectionReport*>*)inferenceImage:(UIImage*)imageConfig:(MNNFaceDetectConfig)detectConfigAngle:(float)inAngleOutAngle:(float)outAngleFlipType:(MNNFlipType)flipTypeerror:(NSError*__autoreleasing*)error;

使用通用 buffer 數組輸入的代碼如下:

-(NSArray<MNNFaceDetectionReport*>*)inference:(unsignedchar*)dataWidth:(float)wHeight:(float)hFormat:(MNNCVImageFormat)formatConfig:(MNNFaceDetectConfig)detectConfigAngle:(float)inAngleOutAngle:(float)outAngleFlipType:(MNNFlipType)flipTypeerror:(NSError*__autoreleasing*)error;

實例生命周期結束後,會自動觸發相關內存的釋放,無需調用方手動釋放。據悉,MNNKit 是 MNN 團隊在阿里系應用大規模業務實踐後的成熟解決方案,歷經雙十一等項目考驗,在不依賴於後端的情況下進行高性能推理,使用起來穩定方便。

相關焦點

  • 阿里正式開源輕量級深度學習端側推理引擎「MNN」
    阿里近日正式開源了輕量級深度學習端側推理引擎「MNN」。與 Tensorflow、Caffe2 等同時覆蓋訓練和推理的通用框架相比,MNN 更注重在推理時的加速和優化,在大規模機器學習應用中具有優勢。本文詳細闡述了MNN背後的技術框架和規劃。 近日,阿里正式開源輕量級深度學習端側推理引擎「MNN」。
  • 百度開源移動端深度學習框架mobile-deep-learning(MDL)
    2017 年 9 月 25 日,百度在 GitHub 開源了移動端深度學習框架 mobile-deep-learning(MDL)的全部代碼以及腳本,希望這個項目在社區的帶動下能夠更好地發展。寫在前面深度學習技術已經在網際網路的諸多方向產生影響,每天科技新聞中關於深度學習和神經網絡的討論越來越多。
  • 騰訊優圖開源神經網絡框架 ncnn ,主打移動端
    ncnn 是騰訊優圖實驗室首個開源項目,是一個為手機端極致優化的高性能神經網絡前向計算框架,於今日正式開源。ncnn 從設計之初深刻考慮手機端的部署和使用。
  • 阿里宣布開源 Weex,用 Web 方式開發 Native 性能體驗應用
    Weex能夠完美兼顧性能與動態性,讓移動開發者通過簡捷的前端語法寫出Native級別的性能體驗,並支持iOS、安卓、YunOS及Web等多端部署。對於移動開發者來說,Weex主要解決了頻繁發版和多端研發兩大痛點,同時解決了前端語言性能差和顯示效果受限的問題。開發者可通過Weex官網申請內測。(http://alibaba.github.io/weex/)
  • 輕量級部署,騰訊優圖開源深度學習推理框架TNN
    機器之心發布機器之心編輯部6 月 10 日,騰訊優圖實驗室宣布正式開源新一代移動端深度學習推理框架 TNN。從學界到工業界,「開源」已經成為 AI 領域的關鍵詞。6 月 10 日,騰訊優圖實驗室宣布正式開源新一代移動端深度學習推理框架 TNN,通過底層技術優化實現在多個不同平臺的輕量級部署落地。該框架性能優異、簡單易用。基於 TNN,開發者能夠將深度學習算法輕鬆移植到手機端並高效執行,開發人工智慧 APP,真正將 AI 帶到指尖。
  • 杭州學習軟體開發公司排名_杭州app開發
    一、android平臺app開發安卓平臺的app俗稱apk,一般是基於java語言進行的開發,當然也有的大牛直接用c++來進行開發,但是對於剛入門的小菜鳥來說java語言是我們進軍apk開發的首選。它對要求java的水平不是很高,基本我們在學校學的java基礎掌握牢固就可以進軍apk開發。
  • 小米再開源!這次是移動端神經網絡框架基準測試項目MobileAIBench
    繼小米在6月宣布自研的移動端深度學習框架Mobile AI Compute Engine (MACE:https://github.com/xiaomi/mace)開源以來,小米近日又宣布開源移動端神經網絡框架基準測試項目
  • MLSys 2020 | 支撐億級終端設備,阿里淘系端上開源推理引擎MNN解讀
    機器之心機器之心發布機器之心編輯部阿里巴巴有諸多的複雜端智能業務場景,對於深度學習引擎的性能、包大小、普適性都要很高的要求。在這樣的背景下,阿里巴巴自研的端上推理引擎 MNN 應運而生。
  • 繼XDL 之後,阿里媽媽開源大規模分布式圖表徵學習框架 Euler
    圖學習與深度學習的結合支持基於深度學習樣本的 mini-batch 訓練,把圖表徵直接輸入到深度學習網絡中聯合訓練。阿里媽媽團隊表示,近年來隨著在圖深度學習技術的突破,有希望通過圖引入知識結構和推理能力,與深度學習的結合,進一步提升模型能力。2017 年 3 月,阿里媽媽團隊在探索使用深度學習來刻畫用戶與廣告的連接關係時,他們意識到圖深度學習是一個非常重要的技術方向,且業界沒有成熟的解決方案。
  • 乾貨 | 支付寶如何優化移動端深度學習引擎?(含代碼)
    考慮到移動端資源的限制,深度學習引擎的落地面臨著性能、機型覆蓋、SDK尺寸、內存使用、模型尺寸等多個方面的嚴峻挑戰。本文介紹如何從模型壓縮和引擎實現兩個方面的聯合優化,應對上述挑戰,最終實現技術落地,希望對大家有所啟發。
  • 2016移動端Android新技術綜合預覽--好文不多,這一篇就足夠
    縱觀移動開發,新技術出現層出不窮,除了第三方開源個人的一些技術分享,主要還是谷歌,FaceBook,Square這種驅動型技術公司的技術驅動引領,也有國內阿里,百度,攜程的基於國外框架拓展的一些主流框架推出,其實看看最近幾年,從最初的圖片加載框架ImageLoader到React Native的出現,最終到目前響應式編程的廣泛推崇。
  • 支撐億級終端設備,阿里淘系端上開源推理引擎MNN解讀
    機器之心發布 機器之心編輯部 阿里巴巴有諸多的複雜端智能業務場景,對於深度學習引擎的性能、包大小、普適性都要很高的要求。在這樣的背景下,阿里巴巴自研的端上推理引擎 MNN 應運而生。
  • 阿里巴巴深度學習框架X-Deep Learning,要開源了
    阿里巴巴內部透露將開源內部深度學習框架 X-DeepLearning的計劃,這是業界首個面向廣告、推薦、搜索等高維稀疏數據場景的深度學習開源框架,可以與TensorFlow、PyTorch 和 MXNet 等現有框架形成互補。
  • MLSys 2020|支撐億級終端設備,阿里淘系端上開源推理引擎MNN解讀
    機器之心發布機器之心編輯部阿里巴巴有諸多的複雜端智能業務場景,對於深度學習引擎的性能、包大小、普適性都要很高的要求。在這樣的背景下,阿里巴巴自研的端上推理引擎 MNN 應運而生。深度學習領域中大部分算子具有通道可拆分特性基於以上兩點原因,MNN 大範圍地採用了 NC4HW4 的格式。
  • Immersion 助攻安卓開發者,發布新版TouchSense SDK
    原標題:Immersion 助攻安卓開發者,發布新版TouchSense SDK    美國加州聖何塞,2016年9月26日:領先的觸覺反饋技術開發商和授權商Immersion 公司(納斯達克股票交易代碼:IMMR)今日宣布為移動APP開發者推出全新的TouchSense SDK,這項新的解決方案將原有的移動遊戲
  • 基於OpenGL ES的深度學習框架編寫
    背景項目組基於深度學習實現了視頻風格化和人像摳圖的功能,但這是在PC/服務端上跑的,現在需要移植到移動端,因此需要一個移動端的深度學習的計算框架
  • 《英雄聯盟手遊》安卓和IOS可以一起玩嗎 手機版和端遊數據互通介紹
    導 讀 英雄聯盟手遊今日曝出將上線消息,已經有很多玩家已經預約了,這款手遊可謂是承載了我們的青春,如今出手遊版了,自然有很多玩家想要和小夥伴們一起開黑
  • AI for everyone,阿里淘系MNN工作檯正式公測!
    阿里巴巴淘系技術開源輕量級深度學習推理引擎 MNN 以來,得到了業界的普遍認可 —— 數十家企業成為 MNN 的用戶,不乏有一線科技企業;此外,MNN 還與上海交大等一線院校展開合作
  • 阿里開源首個移動AI項目,淘寶同款推理引擎
    剛剛,阿里巴巴宣布,開源自家輕量級的深度神經網絡推理引擎MNN(Mobile Neural Network),用於在智慧型手機、IoT設備等端側加載深度神經網絡模型,進行推理預測。這是阿里開源的首個移動AI項目,已經用於阿里手機淘寶、手機天貓、優酷等20多個應用之中。
  • 伯克利開源端到端深度強化學習方案,無需獎勵工程即可高效學習
    但在另一方面,為機器人指定任務以進行強化學習則需要投入大量精力。大多數原有項目已經在嘗試引導物理機器人進行深度強化學習,這要求我們使用專門的傳感器建立獎勵或者研究任務,而機器人則利用其內部傳感器對獎勵指標進行測量。例如,機器人可以使用熱成像儀跟蹤液體運動,或者使用專門的計算機視覺系統跟蹤物體軌跡。