MediaPipe 0.8 : フレームワーク概念 : 概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/08/2021 (0.8.3)
* 本ページは、MediaPipe の以下のドキュメントを翻訳した上で適宜、補足説明したものです:
- Framework Concepts : Framework Concepts
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
- Windows PC のブラウザからご参加が可能です。スマートデバイスもご利用可能です。
人工知能研究開発支援 | 人工知能研修サービス | テレワーク & オンライン授業を支援 |
PoC(概念実証)を失敗させないための支援 (本支援はセミナーに参加しアンケートに回答した方を対象としています。) |
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション |
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/ |
Facebook: https://www.facebook.com/ClassCatJP/ |
MediaPipe 0.8 : フレームワーク概念 : 概要
基本
パケット
基本的なデータフロー・ユニットです。パケットは数値のタイムスタンプと immutable なペイロード (データ本体) への共有ポインタから成ります。ペイロードは任意の C++ 型であり得て、そしてペイロードの型はまたパケットの型としても参照されます。パケットは value クラスで安価にコピーできます。各コピーはペイロードの所有権を共有し、参照カウント・セマンティクスを持ちます。各コピーはそれ自身のタイムスタンプを持ちます。Packet も見てください。
グラフ
MediaPipe 処理はグラフ内で発生します、これはノード間のパケットフローパスを定義します。グラフは任意の数の入力と出力を持つことができて、データフローは分岐して統合 (= merge) できます。一般にデータは前向きに流れますが、後方ループも可能です。詳細は グラフ を見てください。
ノード
ノードはパケットを生成 and/or 消費し、そしてそれらはグラフの作業の大部分が発生するところです。それらはまた歴史的な理由で、“calculators” としても知られています。各ノードのインターフェイスは (タグ and/or インデックスで識別される) 幾つかの入力と出力ポートを定義します。詳細は Calculators を見てください。
ストリーム
ストリームはパケットのシークエンスを運搬する 2 つのノード間の接続で、そのタイムスタンプは単調に増加していなければなりません。
サイド・パケット
ノード間のサイド・パケット接続は (未指定のタイムスタンプを持つ) 単一パケットを運搬します。それは定常的に残るあるデータを提供するために使用できます、一方でストリームは時間とともに変化するデータのフローを表します。
パケット・ポート
ポートは関連付けられた型を持ちます ; ポートを通過するパケットはその型でなければなりません。出力ストリーム・ポートは同じ型の任意の数の入力ストリーム・ポートに接続できます ; 各消費者は出力パケットの別々のコピーを受け取り、そしてそれ自身のキューを持ちますので、それはそれ自身の空間でそれらを消費できます。同様に、サイド・パケット出力ポートは望まれるだけの数のサイド/パケット入力ポートに接続できます。
ポートは必須であり得ます、接続はグラフが妥当であるために作成されなければならないことを意味します、あるいはオプションで、それが接続されないままでも良いです。
Note: ストリーム接続が必要とされる場合でさえも、ストリームは総てのタイムスタンプのためにはパケットを運搬しないかもしれません。
入力と出力
データフローは、入力ストリームを持たずそしてパケットを自発的に (= spontaneously) 生成する (e.g. ファイルから読むことにより) ソース・ノード ; あるいはアプリケーションにパケットをグラフに供給させる グラフ入力ストリーム を源とすることができます。
同様に、データを受け取りそれを様々な送り先 (e.g. フアイル、メモリバッファ等) に書く sink ノードがあります、そしてアプリケーションはまたコールバックを使用してグラフから出力を受け取ることもできます。
ランタイム動作
グラフ lifetime
ひとたびグラフが初期化されれば、それはデータを処理し始めるために開始できて、各ストリームがクローズされるかグラフがキャンセルされるまでパケットのストリームを処理できます。それからグラフは破壊して再度開始することができます。
ノード lifetime
ノード上でフレームワークが呼び出す、3 つの主要な lifetime メソッドがあります :
- Open: 他のメソッドの前に一度呼び出されます。それが呼び出されるとき、ノードにより必要とされる総ての入力サイド・パケットはが利用可能になります。
- Process: 入力の新しいセットが利用可能であるとき、ノードの入力ポリシーに従って、複数回呼び出されます。
- Close: 最後に、一度呼び出されます。
加えて、各 calculator はコンストラクタとデストラクタを定義できます、これらは処理データから独立なリソースを作成して割当てを解除するために有用です。
入力ポリシー
デフォルト入力ポリシーはタイムスタンプによるパケットの決定論的な照合 (= collation) です。ノードは、Process メソッドの起動において、同じ時間に同じタイムスタンプのための総ての入力を受け取ります ; そして連続的な入力セットはタイムスタンプ順に受け取られます。これは総ての入力ストリーム上で同じタイムスタンプを持つパケットが受け取られるまで、あるいはそのタイムスタンプを持つパケットがそれを受け取っていないストリーム上で到着していないことが保証できるまで、幾つかのパケットの処理を遅延させることを必要とすることがあり得ます。
他のポリシーもまた利用可能で、InputStreamHandler として知られる個別のコンポーネントの一種を使用して実装されています。
より詳細については Synchronization を見てください。
以上