1. 程式人生 > 實用技巧 >MediaPipe 新示例:靈活穩定的目標檢測和追蹤

MediaPipe 新示例:靈活穩定的目標檢測和追蹤

文 / MediaPipe 產品經理 Ming Guang Yong

MediaPipe 概覽

MediaPipe(https://mediapipe.dev/) 可用於構建跨平臺、多模態的 ML 流水線框架,由快速 ML 推理、傳統計算機視覺和媒體處理(如視訊解碼)組成。2019 年 6 月,MediaPipe 在計算機視覺與模式識別大會 (CVPR) 上正式開放原始碼,版本為 v0.5.0。自第一個開源版本以來,我們釋出了各種 ML 流水線示例,如:

  • 目標檢測
    https://google.github.io/mediapipe/solutions/object_detection

  • 人臉檢測
    https://google.github.io/mediapipe/solutions/face_detection

  • 手部追蹤
    https://google.github.io/mediapipe/solutions/hands

  • 多個手部目標追蹤
    https://google.github.io/mediapipe/solutions/hands

  • 頭髮分割
    https://google.github.io/mediapipe/solutions/hair_segmentation

在本文中,我們將介紹一個 MediaPipe 新示例:目標檢測和追蹤。我們將先介紹檢測框追蹤解決方案 (Box Tracking),然後解釋如何將其與“目標檢測”系統整合以提供目標檢測和追蹤。

  • 目標檢測和追蹤
    https://google.github.io/mediapipe/solutions/box_tracking

MediaPipe 檢測框追蹤

我們推出了一種檢測框追蹤解決方案,它利用了傳統的計算機視覺方法,已為 Motion Stills、YouTube 隱私模糊處理和 Google 智慧鏡頭提供數年的實時追蹤支援。將追蹤與 ML 推理配對,可以得到價值與效率兼具的流水線。在我們將檢測框追蹤與目標檢測配對,建立了目標檢測和追蹤流水線。與每幀執行檢測相比,擁有追蹤功能的流水線具有多項優勢:

  1. 提供基於例項的追蹤,即跨幀維持目標 ID。

  2. 無需每幀執行檢測。這些優點讓我們可以執行負載更高但更為精確的檢測模型,同時在移動裝置上保持流水線的輕量級和實時性。

  3. 有了追蹤功能,目標的位置在時間上就可以保持一致,這意味著在不同幀中我們所觀察到的目標的抖動將更小。

  • Motion Stills
    https://ai.googleblog.com/2016/12/get-moving-with-new-motion-stills.html

  • YouTube 隱私模糊處理
    https://youtube-creators.googleblog.com/2016/02/blur-moving-objects-in-your-video-with.html

通用的檢測框追蹤解決方案可以利用視訊或攝像頭視訊流中的影象幀,為檢測框的起始位置提供時間戳,並指示要追蹤的 2D 關注區域,然後計算所追蹤的檢測框在每幀中的位置。

在本文所述的特定用例中,檢測框的起始位置源於目標檢測,但也可以由使用者或其他系統手動輸入。解決方案中包含三個主要元件:運動分析 (MotionAnalysis) 元件,流程打包 (FlowPackager) 元件,以及檢測框追蹤 (Box Tracking) 元件。每個元件都被封裝成了 MediaPipe 計算器,而檢測框追蹤解決方案整體則表示為 MediaPipe 子計算圖,具體如下所示:

MediaPipe 檢測框追蹤子計算圖

MotionAnalysis 計算器將提取整個影象的特徵(如高梯度邊角),並隨時間追蹤這些特徵,將其分類為前景特徵和背景特徵,然後預估區域性運動向量和全域性運動模型。FlowPackager 計算器將預估得到的運動元資料打包成有效格式。BoxTracker 計算器從 FlowPackager 計算器獲取運動元資料和起始檢測框的位置,並追蹤檢測框框隨時間推移的變化。BoxTracker 計算器僅使用由 MotionAnalysis 計算器生成的運動資料(不需要 RGB 幀)來追蹤單個目標或區域,因此可以將其與其他目標或區域進行區分。

為追蹤輸入區域,我們首先使用與該區域相對應的運動資料,然後運用迭代重加權最小二乘法 (IRLS) 將引數模型與該區域的加權運動向量擬合。每個區域都擁有一個追蹤狀態,其中包括先前的速度、平均速度、一組正常特徵和異常特徵 ID,以及區域的形心。追蹤狀態的視覺化效果如下圖所示,綠色箭頭表示正常特徵的運動向量,紅色箭頭是異常特徵的運動向量。請注意,每個特徵的色塊強度隨時間推移大體保持不變,因此我們僅僅依靠特徵 ID 便間接地捕獲了該區域的外觀。另外,通過將區域的運動分解為攝像頭運動和單個目標的運動,我們甚至可以追蹤無特徵區域。

每個檢測框追蹤狀態的視覺化效果

我們架構的優勢在於,通過將運動分析分離到專用的 MediaPipe 計算器中並追蹤整個影象的特徵,可以實現極大的靈活性和不受追蹤區域數量限制的穩定計算能力!由於在追蹤過程中不需要依賴 RGB 幀,可以靈活地在多幀之間快取元資料。通過快取元資料,您可以按時間正向和反向追蹤區域,甚至也可以直接同步到指定的時間戳,以隨機訪問的方式進行追蹤。

目標檢測和追蹤

下方顯示的是目標檢測與追蹤的 MediaPipe 示例圖。它由 4 個計算節點組成:PacketResampler 計算器、之前在 MediaPipe 目標檢測示例中推出的 ObjectDetection 子計算圖、用於打包上文中的 BoxTracking 子計算圖的 ObjectTracking 子計算圖,以及用於繪製視覺化效果的 Renderer 子計算圖。

  • MediaPipe 目標檢測示例
    https://google.github.io/mediapipe/solutions/object_detection

目標檢測與追蹤的 MediaPipe 示例圖。紫色方框是子計算圖

通常情況下,ObjectDetection 子計算圖(在內部執行 ML 模型推理)僅在收到請求時執行,例如,視訊幀以任意幀速率傳入或觸發特定訊號時。更具體地講,在此示例中,在將傳入的視訊幀傳遞進 ObjectDetection 之前,PacketResampler 在時間上將其下抽樣為 0.5 fps。您可以在 PacketResampler 中配置為其他幀速率。

ObjectTracking 子計算圖在每個傳入幀上實時執行以追蹤檢測到的目標。該子計算圖對上面的 BoxTracking 子計算圖進行了擴充套件:當收到新的檢測目標時,它會使用 IoU (Interp over Union) 將當前追蹤的目標/檢測框與新的檢測目標相關聯,以移除過時或重複的檢測框。

下方顯示了此目標檢測與追蹤示例的示例結果。左圖是逐幀執行目標檢測的結果。右圖是執行目標檢測與追蹤的結果。請注意,我們的方案不僅追蹤的結果更穩定,隨時間變化的抖動更少,而且可以跨幀維持目標 ID。

逐幀執行目標檢測與目標檢測和追蹤方案的對比

關注 MediaPipe

這是我們撰寫的又一篇關於 MediaPipe 的 谷歌開發者文章。我們期待發布與全新 MediaPipe ML 流水線示例和功能相關的內容。請關注谷歌開發者公眾號上的 MediaPipe 話題標籤和 Google 開發者的 Weibo(@Google開發者)

致謝

感謝 Fan Zhang、Genzhi Ye、Jiuqiang Tang、Jianing Wei、Chuo-Ling Chang、Ming Guang Yong 和 Matthias Grundman 在 MediaPipe 中為構建目標檢測和追蹤解決方案所付出的努力,以及為該博文所做的貢獻。

更多 AI 相關閱讀: