Google I/O にご注目いただきありがとうございます。すべてのセッションをオンデマンドで表示オンデマンドで見る

ビデオ分類

ビデオ分類は、ビデオが何を表しているかを識別する機械学習タスクです。ビデオ分類モデルは、一連の一意のクラス (さまざまなアクションや動きなど) を含むビデオ データセットでトレーニングされます。このモデルはビデオ フレームを入力として受け取り、各クラスがビデオで表現される確率を出力します。

ビデオ分類モデルと画像分類モデルはどちらも、画像を入力として使用して、事前定義されたクラスに属する画像の確率を予測します。ただし、ビデオ分類モデルは、隣接するフレーム間の時空間関係も処理して、ビデオ内のアクションを認識します。

たとえば、ビデオ アクション認識モデルをトレーニングして、走る、拍手する、手を振るなどの人間のアクションを識別することができます。次の画像は、Android でのビデオ分類モデルの出力を示しています。

Android の例のスクリーンショット

始めましょう

Android または Raspberry Pi 以外のプラットフォームを使用している場合、またはTensorFlow Lite APIに既に精通している場合は、スターター ビデオ分類モデルとサポート ファイルをダウンロードしてください。 TensorFlow Lite サポート ライブラリを使用して、独自のカスタム推論パイプラインを構築することもできます。

メタデータを含むスターター モデルをダウンロードする

TensorFlow Lite を初めて使用し、Android または Raspberry Pi を使用している場合は、次のサンプル アプリケーションを参照して作業を開始してください。

アンドロイド

Android アプリケーションは、デバイスの背面カメラを使用して連続ビデオ分類を行います。推論は、 TensorFlow Lite Java APIを使用して実行されます。デモ アプリはフレームを分類し、予測された分類をリアルタイムで表示します。

Android の例

ラズベリーパイ

Raspberry Pi の例では、TensorFlow Lite と Python を使用して、連続的なビデオ分類を実行します。 Raspberry Pi を Pi Camera などのカメラに接続して、リアルタイムのビデオ分類を実行します。カメラからの結果を表示するには、モニターを Raspberry Pi に接続し、SSH を使用して Pi シェルにアクセスします (キーボードを Pi に接続しないようにするため)。

開始する前に、Raspberry Pi OS (できれば Buster に更新) で Raspberry Pi をセットアップします。

ラズベリーパイの例

モデルの説明

モバイル ビデオ ネットワーク ( MoViNets ) は、モバイル デバイス用に最適化された効率的なビデオ分類モデルのファミリです。 MoViNets は、いくつかの大規模なビデオ アクション認識データセットで最先端の精度と効率を実証しており、ビデオ アクション認識タスクに適しています。

TensorFlow Lite のMoviNetモデルには、 MoviNet-A0MoviNet-A1 、およびMoviNet-A2の 3 つのバリアントがあります。これらのバリアントは、 Kinetics-600データセットを使用してトレーニングされ、600 の異なる人間の行動を認識しました。 MoviNet-A0は、最も小さく、最も速く、最も正確ではありません。 MoviNet-A2は、最も大きく、最も遅く、最も正確です。 MoviNet-A1は、A0 と A2 の間の折衷案です。

使い方

トレーニング中に、動画分類モデルに動画とそれに関連付けられたラベルが提供されます。各ラベルは、モデルが認識することを学習する個別の概念またはクラスの名前です。ビデオ アクション認識の場合、ビデオは人間のアクションであり、ラベルは関連付けられたアクションになります。

ビデオ分類モデルは、トレーニング中に提供されたクラスのいずれかに新しいビデオが属するかどうかを予測することを学習できます。このプロセスは推論と呼ばれます。転移学習を使用して、既存のモデルを使用して新しいクラスのビデオを識別することもできます。

モデルは連続動画を受信し、リアルタイムで応答するストリーミング モデルです。モデルがビデオ ストリームを受信すると、トレーニング データセットのいずれかのクラスがビデオで表現されているかどうかを識別します。フレームごとに、モデルはこれらのクラスと、ビデオがそのクラスを表す確率を返します。特定の時点での出力例は次のようになります。

アクション確率
スクエアダンス0.02
糸通し針0.08
指をいじる0.23
手を振る0.67

出力の各アクションは、トレーニング データのラベルに対応します。確率は、アクションがビデオに表示される可能性を示します。

モデル入力

このモデルは、RGB ビデオ フレームのストリームを入力として受け入れます。入力ビデオのサイズは柔軟ですが、モデルのトレーニング解像度とフレームレートに一致するのが理想的です。

  • MoviNet-A0 : 5 fps で 172 x 172
  • MoviNet-A1 : 5 fps で 172 x 172
  • MoviNet-A1 : 5 fps で 224 x 224

入力ビデオは、一般的な画像入力規則に従って、0 から 1 の範囲内のカラー値を持つことが期待されます。

内部的には、モデルは前のフレームで収集された情報を使用して、各フレームのコンテキストも分析します。これは、モデル出力から内部状態を取得し、それを次のフレームのモデルにフィードバックすることによって実現されます。

モデル出力

モデルは、一連のラベルとそれに対応するスコアを返します。スコアは、各クラスの予測を表すロジット値です。これらのスコアは、softmax 関数 ( tf.nn.softmax ) を使用して確率に変換できます。

    exp_logits = np.exp(np.squeeze(logits, axis=0))
    probabilities = exp_logits / np.sum(exp_logits)

内部的には、モデル出力にはモデルからの内部状態も含まれ、次のフレームのモデルにフィードバックされます。

パフォーマンス ベンチマーク

パフォーマンス ベンチマークの数値は、ベンチマーク ツールで生成されます。 MoviNet は CPU のみをサポートします。

モデルのパフォーマンスは、モデルが特定のハードウェアで推論を実行するのにかかる時間によって測定されます。時間が短いほど、モデルが高速であることを意味します。精度は、モデルがビデオ内のクラスを正しく分類する頻度によって測定されます。

モデル名サイズ正確さ *デバイスCPU **
MoviNet-A0 (整数量子化) 3.1MB 65%ピクセル 4 5ミリ秒
ピクセル 3 11ミリ秒
MoviNet-A1 (整数量子化) 4.5MB 70%ピクセル 4 8ミリ秒
ピクセル 3 19ミリ秒
MoviNet-A2 (整数量子化) 5.1MB 72%ピクセル 4 15ミリ秒
ピクセル 3 36ミリ秒

* Kinetics-600データセットで測定されたトップ 1 の精度。

** 1 スレッドの CPU で実行したときに測定されたレイテンシ。

モデルのカスタマイズ

事前トレーニング済みのモデルは、 Kinetics-600データセットから 600 の人間の行動を認識するようにトレーニングされています。また、転移学習を使用してモデルを再トレーニングし、元のセットにない人間の行動を認識することもできます。これを行うには、モデルに組み込む新しいアクションごとに一連のトレーニング ビデオが必要です。

カスタム データのモデルの微調整の詳細については、 MoViNets リポジトリMoViNets チュートリアルを参照してください。

参考資料とリソース

このページで説明されている概念の詳細については、次のリソースを使用してください。