天天看點

阿裡又出新玩法|開箱即用的算法集 MNN KitMNN Kit是什麼?MNN Kit的模型簡介極簡的接入流程未來使用者協定

阿裡又出新玩法|開箱即用的算法集 MNN KitMNN Kit是什麼?MNN Kit的模型簡介極簡的接入流程未來使用者協定

作者|MNN團隊

出品|阿裡巴巴新零售淘系技術部

端智能(On-Device AI)近年來已經從移動開發中的有意思的嘗試,慢慢發展成為移動開發工程師核心的工具。今天的移動開發,AI随處可見:從手機淘寶裡的拍立淘,到淘寶直播裡的商品識别,到頭條的個性化推薦,到抖音直播裡的人臉識别,人工智能在移動app裡發揮的作用越來越大。它也逐漸從Snapchat那些社交軟體的一些比較好玩的屬性(如人臉貼紙),慢慢發展到了淘寶裡面那些能夠真正為商業賦能的應用場景。

在這樣的背景下,阿裡巴巴淘系技術的MNN團隊,近日釋出了開箱即用的工具集MNN Kit。

MNN Kit是什麼?

MNN Kit是阿裡巴巴把經過多次戰役實戰考驗的常用業務場景的模型進行封裝,得到的一系列簡單易用的SDK。它底層的技術基石是推理引擎是2019年5月開源的MNN(

https://github.com/alibaba/MNN

)。

急于嘗試的同學們:MNN Kit 使用文檔與開源的Demo工程的GitHub位址在此:

https://github.com/alibaba/MNNKit

這些模型的背後,是淘系内部算法團隊多年的技術沉澱。比如,MNN Kit 的人臉檢測所使用的一系列模型,是由淘系專注于用戶端深度學習視覺算法的 PixelAI 團隊提供。

MNN Kit的模型簡介

MNN Kit目前開放了以下三種場景的SDK:

人臉檢測;

【使用文檔】

人像分割;

手勢識别;

▐ 人臉檢測

人臉檢測是 MNNKit 提供的 AI 解決方案 SDK ,在端上提供了高精度、實時、功能豐富的人臉檢測能力,能滿足各種基于人臉檢測的業務場景。

它提供了人臉基本資訊(人臉的矩形坐标,106個關鍵點坐标,置信度),人臉三個次元(Yaw, Pitch, Roll)的歐拉角度,以及人臉在視訊流中的動作(眨眼,點頭等)。

106 個關鍵點的效果圖如下:

阿裡又出新玩法|開箱即用的算法集 MNN KitMNN Kit是什麼?MNN Kit的模型簡介極簡的接入流程未來使用者協定

下面的視訊是 MNN Kit Demo 中實際展示的效果:

https://ucc-vod.alicdn.com/sv/1967515e-1707c240053/1967515e-1707c240053.mp4

人臉檢測模型是一個非常通用的能力。在它的基礎上,我們可以做出各種有意思的玩法,比如美顔,人臉貼紙,換臉,人臉老化效果等。2018 年雙十一晚會現場的“笑臉大作戰”互動節目,讓明星互動 PK 笑臉數。它的背後是用人臉檢測結合笑臉檢測模型,實時識别出視訊流中的笑臉,并與 emoji 進行比對。

▐ 手勢識别

手勢檢測是 MNNKit 提供的移動端 AI 解決方案 SDK,在端上提供了實時的手勢檢測和識别能力,基于它應用可以拓展豐富的業務場景和玩法。比如,你可以基于手勢檢測的模型,開發出猜拳的遊戲;或者你可以基于它開發一款用受手勢控制 App ,可以讓使用者在手指不友善接觸螢幕的時候(比如吃飯時),可以遠端刷手機。你的腦洞是玩法應用的邊界。

手勢識别的 Demo 見下面的視訊:

▐ 人像分割

人像分割是 MNNKit 提供的移動端 AI 解決方案 SDK ,在端上提供了實時的人像分割能力。它也是一個基礎的模型能力,可以應用到比如證件照自動摳圖,協助PS等場景。

效果圖如下:

阿裡又出新玩法|開箱即用的算法集 MNN KitMNN Kit是什麼?MNN Kit的模型簡介極簡的接入流程未來使用者協定

極簡的接入流程

MNN Kit 誕生于阿裡巴巴淘系,一個需要針對諸如雙 11,雙 12 ,年貨節等大促活動快速上線業務的環境。簡單快速将模型整合到 app 裡,是 MNN Kit 的必備的特性。

MNN Kit 的基本 API 隻有三個:建立執行個體、推理、釋放執行個體。使用流程如下圖所示:

阿裡又出新玩法|開箱即用的算法集 MNN KitMNN Kit是什麼?MNN Kit的模型簡介極簡的接入流程未來使用者協定

下面以Android中的人臉檢測為例,簡要介紹一下接入的代碼。

▐ 建立執行個體

我們異步建立FaceDetector執行個體,它會在主線程中回調onSucceeded:

void createKitInstance() {
    // 定義Detector Config
    FaceDetector.FaceDetectorCreateConfig createConfig = new FaceDetector.FaceDetectorCreateConfig();
    createConfig.mode = FaceDetector.FaceDetectMode.MOBILE_DETECT_MODE_VIDEO;
    FaceDetector.createInstanceAsync(this, createConfig, new InstanceCreatedListener<FaceDetector>() {
        @Override
        public void onSucceeded(FaceDetector faceDetector) {
            // 擷取回調執行個體
            mFaceDetector = faceDetector;
        }

        @Override
        public void onFailed(int i, Error error) {
            Log.e(Common.TAG, "create face detetector failed: " + error);
        }
    });
}           

▐ 推理

我們從Android Camera API的onPreviewFrame callback中,可以獲得相機幀的資料data。定義好需要在視訊流中的人臉動作(如眨眼,張嘴等),即可在目前幀進行人臉檢測。

// 從相機API回調中擷取視訊流的一幀
byte[] data = ....;

// 定義哪些人臉的動作需要在視訊流中進行檢測
long detectConfig =
        FaceDetectConfig.ACTIONTYPE_EYE_BLINK |
                FaceDetectConfig.ACTIONTYPE_MOUTH_AH |
                FaceDetectConfig.ACTIONTYPE_HEAD_YAW |
                FaceDetectConfig.ACTIONTYPE_HEAD_PITCH |
                FaceDetectConfig.ACTIONTYPE_BROW_JUMP;

// 進行推理
FaceDetectionReport[] results = mFaceDetector.inference(data, width, height,
        MNNCVImageFormat.YUV_NV21, detectConfig, inAngle, outAngle,
        mCameraView.isFrontCamera() ? MNNFlipType.FLIP_Y : MNNFlipType.FLIP_NONE);           

▐ 釋放執行個體

App 需要根據自己應用場景,主動釋放模型所占用的記憶體。以我們的 Demo 為例,在 Activity 的 onDestroy ,釋放掉模型占用的記憶體。你可以根據自己 app 的流程,來決定在什麼時間節點進行釋放。

protected void onDestroy() {
    super.onDestroy();

    if (mFaceDetector!=null) {
        mFaceDetector.release();
    }
}           

▐ 前後處理最佳實踐

在一個真正的落地場景中,除了以上三步以外,還有一些針對相機視訊流的前後處理。這些處理,在很多時候都是類似的。比如前處理方面,如何正确地處理相機幀,需要考慮攝像頭是前置還是後置,相機的旋轉;後處理方面,需要把模型輸出的結果(例如人臉關鍵點坐标)映射到原圖進行渲染。MNN Kit 把這些最佳工程實踐作為參考實作放在了 Demo 裡面。這 Demo 的代碼在

MNN Kit的GitHub

開源。

未來

MNN Kit 目前極大的簡化了移動開發流程中使用通用模型能力的流程。如果你的應用場景不是完全契合這個通用的場景呢?很多情況下,以一個優秀的基礎模型為起點,進行遷移學習,就可以得到适合你自己應有場景的模型。MNN 團隊會後續釋出産品來幫助大家更加輕松高效地進行遷移學習。

另外,MNN Kit 會逐漸覆寫到其他的通用場景的模型。請大家拭目以待!

使用者協定

MNN Kit 有它自己的使用者協定

【使用者協定】

有幾個重點強調一下:

  1. MNN Kit 本身不開源,模型不單獨提供。使用這些模型的能力需要通過 MNN Kit 的 API 。使用者協定中禁止了針對MNN Kit進行逆向工程。
  2. 不允許以商業或者盈利的目的對MNN Kit進行二次封裝。比如,将 MNN Kit 進行封裝為其他的 SDK,從事商業或者盈利的目的。
  3. 遵守 MNN Kit License 的前提下,允許應用內建 MNNKit SDK ,并是以産生商業價值或利益。

貼心的小橙也為大家準備了一場直播

MNN Kit 最新解讀

阿裡又出新玩法|開箱即用的算法集 MNN KitMNN Kit是什麼?MNN Kit的模型簡介極簡的接入流程未來使用者協定

We are hiring

淘寶基礎平台部-端智能團隊歡迎移動端計算優化工程師和推理引擎架構師的加入。對新技術感興趣,善于創新突破,渴望用新技術給使用者帶來創新體驗的同學請聯系我們。履歷投遞至呂行:[email protected]

阿裡又出新玩法|開箱即用的算法集 MNN KitMNN Kit是什麼?MNN Kit的模型簡介極簡的接入流程未來使用者協定

更多技術幹貨,關注「淘系技術」微信公衆号!

阿裡又出新玩法|開箱即用的算法集 MNN KitMNN Kit是什麼?MNN Kit的模型簡介極簡的接入流程未來使用者協定

繼續閱讀