avatar
tkat0.dev
Published on

GoogleのMediaPipeでMLアプリ開発が楽になる

Google が MediaPipe を公開。 エッジもサーバーも、ML を組み込んだアプリケーションを作るのが楽になりそうだ。

https://twitter.com/_tkato_/status/1141028951734677504

たとえば顔検出のアプリケーションを作る上でも、画像の前処理、モデルでの推論、結果の後処理、描画、など複数のコンポーネントに分かれる。 さらにモバイルデバイスのセンサなど活用したアプリを作ろうとすると ML 以外のところでデータの同期やら諸々が大変になってくる。 MediaPipe は、これを各機能のノードからなるグラフとして扱い、各コンポーネントの組み合わせや切り替えでアルゴリズムのパイプラインを開発できるようにしている。

最も特徴的なのは、グラフを DSL(pbtxt)で記述すること。コードはほとんど書かなくていい。

顔検出のサンプルがわかりやすい。 mediapipe/face_detection_android_gpu.md at 3730fa08ab226aab00d8c30c1c6ea591da6f85e8 · google/mediapipe · GitHub

  • ビデオ入力から前処理、tflite での推論、後処理、描画までがグラフになってる
  • グラフのノードが Calculator で、in/out の stream に接続
  • オプションもここで指定できるようなので、汎用的な Calculator を作っておけばコードに触らずにアプリ用の設定ができる

グラフのデバッグのために、オンラインで使える Visualizer がある。 これで Calculator 間の接続が期待通りかなど確認。

Visualizing MediaPipe Graphs — MediaPipe v0.5 documentation

ノード間を流れるデータは Packet といい、タイムスタンプと任意のデータへのポインタ(ref count みたい)からなる。 タイムスタンプで複数のセンサデータを sync したりするみたい。

MainActivity が色々含めて 159 行。パイプラインは DSL で書いているのでこれを読み込むお決まりのコードを書くだけのようだ。 https://github.com/google/mediapipe/blob/d68f5e416903e3d756ebe07d08c4a3b911741a91/mediapipe/examples/android/src/java/com/google/mediapipe/apps/objectdetectiongpu/MainActivity.java

サンプルは、Android や PC 向けがある。iOS は今後サポートされるようだ。 Examples — MediaPipe v0.5 documentation

プロファイリングの API も実装はされており、今後プロファイラのツールがでるらしい。 Measuring Performance — MediaPipe v0.5 documentation

MediaPipe Calculator Registory 的なものが登場して、学習済みの各種モデルや画像処理等が使えるようになるのではないかと期待している。 再利用可能な形で ML それに関連するコンポーネントを作成/提供できると非常に嬉しいので、MediaPipe は Watch。

まさに以下の Abstract で言ってる課題感がある。

Google Research Perception - CV4AR/VR - MediaPipe

過去に公開された様々なアプリケーションも MediaPipe 使ってるんですね。アプリケーション開発の課題からそれをフレームワークにしちゃうの相変わらず強い。 MediaPipe は特にモバイルでの AR 系のアプリ開発に fit してるが、サーバーサイドでの ML パイプライン(ワークフローエンジンで構築するレベルでなく、1 プロセスに閉じたようなアプリの中のパイプライン)構築で便利そう。 いや、他に最適なフレームワーク有るのかな。面白いもの知っている方は教えてください。

使ってみつつ、以下を読んでいきたい