Google Research開源跨平臺多媒體機器學習模型應用框架MediaPipe


Google Research開源跨平臺多媒體機器學習模型應用框架MediaPipe


作者 | MediaPipe 團隊

來源 | TensorFlow(ID:tensorflowers)

【導讀】我愛計算機視覺(aicvml)CV君推薦道:“雖然它是出自Google Research,但不是一個實驗品,而是已經應用於谷歌多款產品中,還在開發中,將來也許會成為一款重要的專注於媒體的機器學習應用框架,非常值得做計算機視覺相關工程開發的朋友參考。”

MediaPipe 是一款由 Google Research 開發並開源的多媒體機器學習模型應用框架。在谷歌,一系列重要產品,如 YouTube、Google Lens、ARCore、Google Home 以及 Nest,都已深度整合了 MediaPipe。

注:MediaPipe GitHub 鏈接

https://github.com/google/mediapipe

作為一款跨平臺框架,MediaPipe 不僅可以被部署在服務器端,更可以在多個移動端 (安卓和蘋果 iOS)和嵌入式平臺(Google Coral 和樹莓派)中作為設備端機器學習推理 (On-device Machine Learning Inference)框架。

為什麼需要 MediaPipe?

一款多媒體機器學習應用的成敗除了依賴於模型本身的好壞,還取決於設備資源的有效調配、多個輸入流之間的高效同步、跨平臺部署上的便捷程度、以及應用搭建的快速與否。

基於這些需求,谷歌開發並開源了 MediaPipe 項目。除了上述的特性,MediaPipe 還支持 TensorFlow 和 TF Lite 的推理引擎(Inference Engine),任何 TensorFlow 和 TF Lite 的模型都可以在 MediaPipe 上使用。同時,在移動端和嵌入式平臺,MediaPipe 也支持設備本身的 GPU 加速。

MediaPipe 演示案例

在今年六月舉行的 CVPR 會議上,Google Research 開源了 MediaPipe 的預覽版。為方便開發者學習和使用,我們提供了多個桌面系統和移動端的示例。作為一款應用於多媒體的框架,現已開源的安卓和蘋果 iOS 示例包括:

  • 3D 手部標誌追蹤(3D Hand Tracking)
  • BlazeFace 人臉檢測(Face Detection)
  • 改換髮色(Hair Segmentation)
  • 物體檢測(Object Detection)

3D 手部標誌追蹤

Google Research開源跨平臺多媒體機器學習模型應用框架MediaPipe


人臉檢測

Google Research開源跨平臺多媒體機器學習模型應用框架MediaPipe

改換髮色

Google Research開源跨平臺多媒體機器學習模型應用框架MediaPipe

物體檢測

Google Research開源跨平臺多媒體機器學習模型應用框架MediaPipe

MediaPipe 主要概念

MediaPipe 的核心框架由 C++ 實現,並提供 Java 以及 Objective C 等語言的支持。MediaPipe 的主要概念包括數據包(Packet)、數據流(Stream)、計算單元(Calculator)、圖(Graph)以及子圖(Subgraph)。數據包是最基礎的數據單位,一個數據包代表了在某一特定時間節點的數據,例如一幀圖像或一小段音頻信號;數據流是由按時間順序升序排列的多個數據包組成,一個數據流的某一特定時間戳(Timestamp)只允許至多一個數據包的存在;而數據流則是在多個計算單元構成的圖中流動。MediaPipe 的圖是有向的——數據包從數據源(Source Calculator或者 Graph Input Stream)流入圖直至在匯聚結點(Sink Calculator 或者 Graph Output Stream) 離開。

Google Research開源跨平臺多媒體機器學習模型應用框架MediaPipe

MediaPipe 在開源了多個由谷歌內部團隊實現的計算單元(Calculator)的同時,也向用戶提供定製新計算單元的接口。創建一個新的 Calculator,需要用戶實現 Open(),Process(),Close() 去分別定義 Calculator 的初始化,針對數據流的處理方法,以及 Calculator 在完成所有運算後的關閉步驟。為了方便用戶在多個圖中複用已有的通用組件,例如圖像數據的預處理、模型的推理以及圖像的渲染等, MediaPipe 引入了子圖(Subgraph)的概念。因此,一個 MediaPipe 圖中的節點既可以是計算單元,亦可以是子圖。子圖在不同圖內的複用,方便了大規模模塊化的應用搭建。

注:計算單元 鏈接

https://github.com/google/mediapipe/tree/master/mediapipe/calculators

想了解更多 MediaPipe 的概念和使用方法,請移步我們的 GitHub 文檔。同時,我們也提供了MediaPipe 移動端的使用教程及示例代碼:

  • MediaPipe 蘋果 iOS Hello World! 教程和代碼
  • MediaPipe 安卓 Hello World! 教程和代碼

機器感知實例 —— 手部關鍵點追蹤

一個使用 MediaPipe 的實例是在圖片或視頻中檢測手部關鍵點。我們最近在 谷歌 AI 博客上發表了一篇相關文章: “使用 MediaPipe 實現設備端實時手部追蹤”介紹了我們如何使用 MediaPipe 來搭建這個應用。

手部關鍵點追蹤解決方案有兩部分:手掌檢測(Hand Detection)及手部關鍵點回歸 (Hand Landmark Regression)。

本文將詳細講解第一部分:手掌檢測。詳解第二部分手部關鍵點檢測的文章,將於近期在谷歌 TensorFlow 的微信公眾號發表。請從 MediaPipe 下載手部關鍵點追蹤的模型和圖。手掌檢測應用的輸出結果如下圖所示:

Google Research開源跨平臺多媒體機器學習模型應用框架MediaPipe

手掌模型檢測教程

我們訓練了基於SSD 架構的 BlazePalm 模型來進行手掌檢測,並對移動端進行了優化。手部檢測相較人臉檢測來說,是一個更加困難的問題,例如:手的大小角度會有較大範圍的變動,手沒有顯著的紋理結構,以及存在更多遮擋的情景。因此,我們的解決方案採取了不同的思路。我們訓練的模型只對手掌區域進行檢測,其好處體現在以下幾點:首先,手掌相對於整個手而言是一個較為受限的目標,並且由於手掌的區域較小,我們的非極大抑制(Non-Maximum Suppression)算法也會有更好的效果,例如,在兩隻手相握的情況下,即使手的大部分區域重疊在一起,兩隻手掌的區域依然可以被區分開;其次,手掌的邊框可以用正方形來描述,這樣可以減少 3-5 倍數量的錨定位(Anchor),從而最大化模型的容量;最後,經過實驗,我們發現使用focal loss可以獲得最好的檢測結果。該模型在我們的測試數據集上可以達到 95.7% 的平均準確率。

注:MediaPipe BlazePlam 手掌檢測應用 鏈接

https://github.com/google/mediapipe/blob/master/mediapipe/docs/hand_detection_mobile_gpu.md

我們使用 MediaPipe 來做移動端模型推理的框架,如下圖所示,input_video 為輸入圖像,output_video 為輸出圖像。為了保證整個應用的實時運算,我們使用 FlowLimiterCalculator 來篩選進行運算的輸入幀數,只有當前一幀的運算完成後,才會將下一幀圖像送入模型。當模型推理完成後,我們使用 MediaPipe 提供的一系列計算單元來進行輸出的渲染和展示——結合使用 DetectionsToRenderDataCalculator, RectToRenderDataCalculator 及AnnotationOverlayCalculator 將檢測結果渲染在輸出圖像上。

Google Research開源跨平臺多媒體機器學習模型應用框架MediaPipe

手掌檢測應用的核心部分為上圖中的藍紫色模塊(HandDetection子圖)。如下圖所示,HandDetection 子圖包含了一系列圖像處理的計算單元和機器學習模型推理的模塊。ImageTransformationCalculator 將輸入的圖像調整到模型可以接受的尺寸,用以送入 TF Lite 模型的推理模塊;使用 TfLiteTensorsToDetectionsCalculator,將模型輸出的 Tensor 轉換成檢測結果;運用 NonMaxSuppressionCalculator 等計算單元做後處理;最終從HandDetection子圖輸出檢測結果給主圖。

Google Research開源跨平臺多媒體機器學習模型應用框架MediaPipe

致謝:感謝唐久強,張颿,楊民光, 張倬領及其他 MediaPipe 團隊成員。

如果您想詳細瞭解 MediaPipe 的相關內容,請參閱以下文檔:

  • MediaPipe GitHub & 聯繫我們
  • https://github.com/google/mediapipe
  • [email protected]
  • MediaPipe ReadtheDocs 文檔
  • https://mediapipe.readthedocs.io/en/latest/
  • MediaPipe BlazeFace 人臉檢測應用
  • https://github.com/google/mediapipe/blob/master/mediapipe/docs/face_detection_mobile_gpu.md
  • MediaPipe 手部標誌追蹤應用
  • https://github.com/google/mediapipe/blob/master/mediapipe/docs/hand_tracking_mobile_gpu.md
  • MediaPipe 改換髮色應用
  • https://sites.google.com/corp/view/perception-cv4arvr/hair-segmentation
  • MediaPipe 示例
  • https://github.com/google/mediapipe/blob/master/mediapipe/docs/examples.md
  • MediaPipe 蘋果 iOS Hello World! 教程和代碼
  • https://github.com/google/mediapipe/blob/master/mediapipe/docs/hello_world_ios.md
  • MediaPipe 安卓 Hello World! 教程和代碼
  • https://github.com/google/mediapipe/blob/master/mediapipe/docs/hello_world_android.md
  • MediaPipe Visualizer
  • https://viz.mediapipe.dev
  • MediaPipe Third Workshop on Computer Vision for AR/VR 論文
  • https://sites.google.com/corp/view/perception-cv4arvr/mediapipe

(*本文為AI科技大本營轉載文章,轉載請聯繫原作者)

"


分享到:


相關文章: