ビデオ分類

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

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

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

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

始めましょう

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

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

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

アンドロイド

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

Androidの例

ラズベリーパイ

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

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

ラズベリーパイの例

モデルの説明

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

TensorFlow LiteのMoviNetモデルには、 MoviNet-A0MoviNet-A1 、およびMoviNet-A2の3つのバリエーションがあります。これらのバリアントは、600の異なる人間の行動を認識するためにKinetics-600データセットでトレーニングされました。 MoviNet-A0は、最小、最速、および最も精度の低いものです。 MoviNet-A2は、最も大きく、最も遅く、最も正確です。 MoviNet-A1は、A0とA2の間の妥協点です。

使い方

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

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

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

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

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

モデル入力

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

  • MoviNet-A0 :5fpsで172x 172
  • MoviNet-A1 :5fpsで172x 172
  • MoviNet-A1 :5fpsで224x 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.1 MB 65% Pixel 4 5ミリ秒
Pixel 3 11ミリ秒
MoviNet-A1(整数量子化) 4.5 MB 70% Pixel 4 8ミリ秒
Pixel 3 19ミリ秒
MoviNet-A2(整数量子化) 5.1 MB 72% Pixel 4 15ミリ秒
Pixel 3 36ミリ秒

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

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

モデルのカスタマイズ

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

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

さらなる読み物とリソース

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