見出し画像

MediaPipeを使用したオブジェクトの検出と追跡

以下の記事を参考に書いてます。

Object Detection and Tracking using MediaPipe

1. 2019年のMediaPipe

MediaPipe」は、クロスプラットフォームでマルチモーダルなMLパイプラインを構築するためのフレームワークです。「高速ML推論」「コンピュータービジョン」「メディア処理」(ビデオデコードなど)で構成されます。「MediaPipe」は2019年6月のCVPRで「v0.5.0」としてオープンソース化されました。最初のバージョン以来、次のようなサンプルをリリースしています。

物体検出
顔検出
ハンドトラッキング
マルチハンドトラッキング
ヘアセグメンテーション

この記事では、別のサンプルとして「オブジェクトの検出と追跡」を紹介します。はじめに、新しくリリースされた「ボックス追跡」について説明し、次にそれを「オブジェクト検出」と接続して「オブジェクト検出と追跡」を作成します。

2. MediaPipeでのボックス追跡

「MediaPipe v0.6.7.1」では、「ボックス追跡」をリリースします。これは、「モーションスチル」「YouTubeのプライバシーブラー」「Googleレンズのリアルタイムトラッキング」を数年にわたって推進した、従来のコンピュータービジョンアプローチを活用しています。

この記事では、「ボックス追跡」と「オブジェクト検出」を組み合わせて、「オブジェクト検出と追跡」を作成します。このパイプラインはフレームごとに検出を実行するよりも、様々な利点があります。

・インスタンスベースの追跡を提供します。つまり、オブジェクトIDはフレーム間で維持されます。

・検出はフレームごとに実行する必要はありません。これにより、モバイルデバイスでパイプラインを軽量かつリアルタイムに保ちながら、より正確な重い検出モデルを実行できます。

・オブジェクトのローカライズは、追跡の助けを借りて、時間的に一貫しています。つまり、フレーム間で観察できるジッターが少なくなります。

一般的な「ボックス追跡」は、ビデオまたはカメラストリームから、各フレームのボックス位置を計算します。この特定のユースケースでは、開始ボックス位置は「オブジェクト検出」から取得しますが、ユーザーまたは別のシステムによって手動で指定することもできます。当社のソリューションは、「モーション解析コンポーネント」「フローパッケージャーコンポーネント」「ボックストラッキングコンポーネント」の3つの主要コンポーネントで構成されています。各コンポーネントは「MediaPipeカリキュレータ」としてカプセル化され、「ボックス追跡」全体は、以下に示すMediaPipeサブグラフとして表されます。

画像1

「MotionAnalysisカリキュレータ」は、画像全体の特徴(例:高勾配コーナー)を抽出し、それらの特徴を経時的に追跡し、それらを前景と背景の特徴に分類し、ローカルモーションベクトルとグローバルモーションモデルの両方を推定します。「FlowPackagerカリキュレータ」は、推定されたモーションメタデータを効率的な形式にパックします。「BoxTrackerカリキュレータ」は、「FlowPackagerカリキュレータ」と開始ボックス位置からこのモーションメタデータを取得し、経時的にボックスを追跡します。「MotionAnalysisカリキュレータ」によって生成されたモーションデータのみ(RGBフレームは不要)を使用して、「BoxTrackerカリキュレータ」は個々のオブジェクトまたは領域を追跡しながら、他と区別します。入力領域を追跡するには、まずこの領域に対応するモーションデータを使用し、領域の重み付けされたモーションベクトルにパラメトリックモデルを適合させる反復再重み付け最小二乗法(IRLS)を使用します。各領域には、その前の平均速度、一連のインライアーおよびアウトライアー特徴ID、および領域の重心を含む追跡状態があります。追跡状態の視覚化については、下図を参照してください。緑の矢印はインラアーの動きベクトルを示し、赤い矢印はアウトライアーの動きベクトルを示しています。特徴IDのみに依存することで、各機能のパッチ強度は時間とともにほぼ一定のままであるため、領域の外観を暗黙的にキャプチャすることに注意してください。さらに、領域の動きをカメラの動きと個々のオブジェクトの動きに分解することにより、特徴のない領域を追跡することもできます。

画像2

このアーキテクチャの利点は、モーション分析を専用の「MediaPipeカリキュレータ」に分離し、画像全体で追跡機能を使用することで、追跡する領域の数に関係なく、柔軟性と絶え間ない計算が可能になることです。追跡中にRGBフレームに依存する必要がないため、追跡はフレームのバッチ全体でメタデータをキャッシュする柔軟性を提供します。キャッシュを使用すると、時間的に前後にリージョンを追跡できます。または、ランダムアクセスで追跡するために、指定されたタイムスタンプに直接同期することもできます。

3. オブジェクトの検出と追跡

「オブジェクトの検出と追跡」のMediaPipeのサンプルグラフを以下に示します。「PacketResamplerカリキュレータ」、MediaPipeオブジェクト検出の例で以前にリリースされた「ObjectDetectionサブグラフ」、上記の「BoxTrackingサブグラフ」を囲む、および視覚化を描画する「Rendererサブグラフ」の4つの計算ノードで構成されます。

画像3

一般に、「ObjectDetectionサブグラフ」(MLモデルの推論を内部的に実行します)は、要求時にのみ実行されます。任意のフレームレートで、または特定の信号によってトリガーされます。より具体的には、この例のPacketResamplerは、ObjectDetectionに渡される前に、着信ビデオフレームを一時的に0.5 fpsにサブサンプリングします。このフレームレートは、PacketResamplerのオプションとして異なる方法で構成できます。

「ObjectTrackingサブグラフ」は、着信フレームごとにリアルタイムで実行され、検出されたオブジェクトを追跡します。上記の「BoxTrackingサブグラフ」を追加機能で拡張します。新しい検出が到着すると、IoU(Union over Union)を使用して、現在の追跡オブジェクト/ボックスを新しい検出に関連付け、古いボックスまたは重複ボックスを削除します。

このオブジェクトの検出と追跡の結果の例を以下に示します。左の画像は、フレームごとにオブジェクト検出を実行した結果です。右の画像は、実行中のオブジェクトの検出と追跡の結果です。追跡の結果は、一時的なジッターが少なく、はるかに安定していることに注意してください。また、フレーム全体でオブジェクトIDを維持します。

※ 動画は情報源参照

画像4




この記事が気に入ったらサポートをしてみませんか?