ベスト プラクティス

このページでは、データの準備、モデルの評価、モデルの性能向上に関するベスト プラクティスについて説明します。

データの準備

  • トレーニングに使用するデータは、予測を行うデータにできる限り近いものにします。たとえば、低解像度のぼやけた動画(防犯カメラの映像など)で予測を行う場合は、トレーニング用のデータも低解像度のぼやけた動画にする必要があります。一般に、視点、解像度、背景が異なる動画をトレーニング用に準備することも検討する必要があります。
  • トレーニング データは、以下のような特定の最小要件を満たしている必要があります。

    • すべてのデータにラベルが付いている。
    • ラベルは有効な文字列(カンマなし)である。
    • すべての動画セグメントに有効なタイムスタンプが付いている。セグメントには開始時間と終了時間があり、終了時間は 0:00 より後の合計再生時間内に収まっている必要がある。さらに、開始時間は終了時間より前にする。
    • CSV 内のすべての動画 URI が、アクセス可能な Cloud Storage バケットに保存されている。
    • データには少なくとも 2 つの異なるクラスが含まれていて、各クラスに属する項目が最低 10 個ある。
  • トレーニング データとテストデータが多いほど、予測結果は向上し、モデルが強力であるほど、そのデータ消費量は増加します。

  • 良好なモデルのトレーニングに必要なデータ量は、以下のようなさまざまな要因によって異なります。

    • クラスの数。クラスの種類が多いほど、クラスあたりに必要なサンプル数も多くなります。
    • クラスの複雑さ、または多様性。ランニングと水泳の動画はすぐに判別できるニューラル ネットワークでも、30 通りのダンススタイルを分類するにはより多くのサンプルを必要とすることでしょう。
    • マルチラベル モデルであるかどうか。このモデルのトレーニングは、マルチクラス モデルの場合よりも難易度が高くなります。ほとんどのケースでサンプルあたりのラベル数が 1 つだけの場合は、マルチラベルではなくマルチクラスのモデル トレーニングを実施することを検討してください。
  • 目安として、クラスの数と種類が少ない場合は、最低でもクラスあたり 200 個のトレーニング サンプルを用意します。それぞれの見分けがつきにくい、50 種類以上のクラスが存在する場合は、1,000 個以上のトレーニング サンプルを用意します。

  • 不均衡なデータでモデルをトレーニングすることは避けてください。クラスあたりのサンプル数が同じになるとは限りませんが、差が大きくなければそれほど問題ではありません。しかし、たとえば一部のクラスに属するサンプル数が他のクラスより 10 倍以上多いというような大きな不均衡がある場合、これは問題になります。AutoML Video はクラスの不均衡を是正しようとしますが、それはモデルのトレーニングにとって理想的な構成ではありません。

詳細については、データの準備をご覧ください。

データの分割

機械学習では通常、データセットを 3 つのサブセット(トレーニング データセット、検証データセット、テスト データセット)に分割します。モデルの構築にはトレーニング データセットが使用されます。モデルは複数のアルゴリズムとパラメータを試行してトレーニング データのパターンを探します。パターンを識別すると、検証データセットを使用してアルゴリズムとパターンをテストします。その後、トレーニング ステージで特定されたアルゴリズムとパターンの中から最も優良なものを選択します。

最適なアルゴリズムとパターンは、テスト データセットを使用してエラー率、品質、精度がテストされます。この際に、モデルの独立したテストに使用できるテスト データセットを別途用意する必要があります。

モデルのバイアスを避けるために、検証データセットとテスト データセットの両方が使用されます。検証ステージでは最適なモデル パラメータが使用されますが、その結果、指標に偏りが生じる可能性があります。検証ステージの後にテスト データセットを使用してモデルの品質を評価することにより、モデル品質を偏りなく評価できます。

データを分割するときは、以下のベスト プラクティスに従ってください。

  • すべてのデータセット(「データセット分割」とも呼ばれます)が同じ母集団を表し、ラベルが同じように分布した類似する動画を含むようにします。

    AutoML Video にデータを提供すると、それがトレーニング、検証、テスト用のデータセットに自動的に分割されます。トレーニング分割ラベルを自分で割り当てることもできます。サンプルの取得元を単一の動画にするか、多数の動画にするか決定します。多様な動画が存在する場合や、動画間でラベル分布が異なる場合、動画の数が少ないと有効性が損なわれる可能性があります。データセットをトレーニング用、検証用、テスト用に分割する処理は、動画レベルで行われるためです。

    たとえば、アノテーション付きの動画セグメントを内部に数千個含む動画が 3 つだけあり、一部のクラスが特定の動画にのみ存在する場合は、そのラベルがトレーニングから除外される可能性があります。そうなると、予測時にそのラベルが考慮されないこともあります。

  • データ漏洩を避けます。データ漏洩は、モデルのトレーニング中にアルゴリズムが使用すべきでない情報を使用でき、かつその情報が後で予測を行うときには使用できない場合に起こります。この場合、トレーニング データセット、検証データセット、テスト データセットでは過度に楽観的な結果が生成される可能性があるため、将来の見えないデータの予測時には同様の結果は見込めないでしょう。

    漏洩の例としては、カメラの視野角や光条件(朝 / 夕方)に基づくバイアス、解説者がいる動画とそうでない動画に関するバイアス、ある種のラベルが特定の地域、言語集団、解説者の動画に関連付けられるバイアス、同じロゴを含む動画が選ばれるバイアスなどが挙げられます。

    データ漏洩を防ぐため、以下のことに留意してください。

    • 多様な動画と動画セグメント サンプルを用意します。
    • 動画をチェックし、隠れたヒントがないことを確認します(たとえば、陽性サンプルを含む動画は午後に撮影されたもので、陰性サンプルを含む動画は午前中に撮影されたものであった、など)。

詳細については、データの準備をご覧ください。

データソースの例

データソースの例については、以下の一般公開されている動画データセットをご覧ください。

  • UCF-101: 動作認識データセット(101 クラス、マルチクラス、13,320 点の短い動画 / サンプル)
  • HMDB-51: 人間動作データベース(51 クラス、マルチクラス、6,849 点の短い動画 / サンプル)
  • Kinetics: 大規模な動作認識データセット(400 / 600 / 800 クラス、マルチクラス、400,000 点以上の短い動画 / サンプル)
  • Something-Something: 物を使った人間の動作(174 クラス、220,847 点の動画 / サンプル)
  • AVA: 多数のアノテーションが付けられた Atomic Visual Action(最小単位の視覚的行動)(80 クラス、マルチラベル、15 分の動画クリップ 430 本に 158 万点のアノテーション)

モデルのトレーニング

必要に応じて、同じデータを使用して異なるモデルのトレーニングや異なる予測タイプの生成を行うことができます。同様に、同じデータで同じモデルをトレーニングしても多少異なる結果になる場合もあります。さらに、ニューラル ネットワーク モデルのトレーニングにはランダム化されたオペレーションが伴うため、同じ入力を用いてまったく同じモデルをトレーニングできるとは限らず、予測結果が若干異なるものになる可能性があります。

詳細については、モデルの管理をご覧ください。

モデルの評価

モデルのトレーニングが終了したら、検証データセットとテスト データセット、または独自の新しいデータセットを使用して性能を評価できます。

一般的な分類指標は以下のとおりです。

  • 曲線下面積(AUC)。「受信者動作特性曲線下面積」とも呼ばれます。この曲線は、誤警報の確率に対する再現率をさまざまなスコアしきい値でプロットします。AUC 値の範囲は 0.5〜1.0 です。この指標は主にバイナリ分類問題に使用されます。
  • 適合率 / 再現率曲線下面積(AuPRC)。「平均適合率」(AP)とも呼ばれます。これは再現率値の範囲にわたる適合率値の積分です。バイナリ問題に最も適した指標です。
  • 平均適合率の平均(mAP または MAP)は、複数のクラスまたはラベルにわたる平均適合率(AP)指標の平均とみなすことができます。mAP と AP は同義で使用されることがあります。
  • 精度(正解率)は、正しく分類されたサンプルの比率を表します。
  • バイナリ問題やマルチクラス問題の場合は、適合率と再現率をさまざまな信頼スコアしきい値で別々に調べることもできます。
  • マルチクラス ラベルがそれほど多くない場合は、どのラベルがどの予測で誤分類されたかを示す混同行列を調べることができます。あるいは、混同行列での誤分類が多いクラスを UI で確認することもできます。

動画分類問題によっては特定の指標が適用できないことがあります。たとえば、適合率と再現率は、バイナリ分類においては直感的に把握できても、複数のクラスを対象とするケース(マルチクラス問題)や、サンプルごとに複数の有効なラベルを考慮するケース(マルチラベル問題)ではわかりにくくなります。特に後者の場合、広く受け入れられている単一の指標はありません。ただし、平均適合率を評価に使用できる場合があります。

ただし、モデルの性能を単一の数値または指標に基づいて評価することは、過度に単純化した処理であるといえます。各種指標に加えて、たとえば適合率-再現率曲線のプロットや、混同行列などで誤分類されたサンプルの分布を調べることを検討してください。

モデルを評価するときに役立つその他のヒントを以下に示します。

  • トレーニング データセットとテスト データセットのラベルの分布に注意してください。これらのデータセット間のバランスが取れていないと、指標の精度が高い場合に解釈を誤る可能性があります。デフォルトでは、評価中はすべてのサンプルが同じ重みを持つため、頻度の高いラベルの重みが高くなる可能性があります。たとえば、陽性ラベルが陰性よりも 10 倍多い場合は、ニューラル ネットワークがすべてのサンプルを陽性ラベルに割り当てただけでも 91% の精度を達成できますが、だからといってトレーニング済みモデルがそれだけ有効であるわけではありません。

  • たとえば scikit-learn を使用した Python スクリプトで、グラウンド トゥルース ラベルと予測ラベルの分析を試みることもできます。そこでは、評価中にさまざまなラベル重み付け方法を調べることができます。一般的な方法には、マクロ平均化(クラスごとに指標を計算した後、平均化する)、加重(クラスごとに指標を計算した後、個々のクラスの頻度に応じた重みに基づいて平均化する)、ミクロ(潜在的な不均衡にかかわらず、各サンプルの重みを同じにする)などがあります。

  • モデルのデバッグは、モデル自体よりもデータを重点的にデバッグする作業です。本番環境への移行前や移行後の性能評価中にモデルが予期しない動作を見せ始めた場合は、いったん立ち戻ってデータを確認し、改善の余地がある箇所を探してください。

詳細については、モデルの評価をご覧ください。

Google Cloud Platform Console でモデルを評価する

AutoML Video UI の [評価] タブで、テストサンプルに対するモデルの出力と一般的な機械学習指標を使用してカスタムモデルの性能を評価できます。このタブには、モデルに関する以下の情報が表示されます。

  • モデルの出力
  • スコアしきい値
  • 真陽性、真陰性、偽陽性、偽陰性
  • 適合率と再現率
  • 適合率 / 再現率曲線
  • 平均適合率

Google Cloud Platform Console でモデル評価データを解釈するときは、以下の点に注意してください。

  • AutoML Video はテストデータからサンプル動画セグメントを取り出し、まったく新しい課題をモデルに提示します。モデルはそれぞれのサンプルについて、各ラベルがそのサンプルにどれくらい強く関連付けられているかを示す一連の数値を出力します。数値が高い場合は、モデルが高い信頼度でそのラベルをドキュメントに適用できると判断したことを示します。

  • スコアしきい値を設定することで、信頼度の数値を「オン」または「オフ」の 2 値に変換できます。スコアしきい値とは、あるカテゴリをテスト項目に割り当てるために必要な信頼度を意味します。UI のスコアしきい値スライダーは、しきい値を変更したときにデータセット内のすべてのカテゴリと個々のカテゴリがどのような影響を受けるかを視覚的に調べるツールです。スコアしきい値が低い場合、モデルによって分類される動画セグメントの数は多くなりますが、多少の動画セグメントが誤分類されるリスクがあります(偽陰性は少なくなるが、偽陽性は多くなる)。スコアしきい値が高い場合、モデルによって分類される動画セグメントの数は少なくなりますが、動画セグメントが誤分類されるリスクは低くなります(偽陽性は少なくなるが、偽陰性は多くなる)。カテゴリごとのしきい値を UI で微調整してテストできます。ただし、本番環境でモデルを使用するときは、自分で最適と判断したしきい値を適用する必要があります。

  • スコアしきい値を適用すると、モデルによる予測は次の 4 つのカテゴリのいずれかになります。

    • 真陽性: ラベルを正しく予測した。
    • 真陰性: このラベルを正しく予測しなかった。
    • 偽陽性: 動画セグメントのラベルを誤って予測した。
    • 偽陰性: 真のラベルを予測しなかった。

    これらのカテゴリを使用して、モデルの有効性の評価に役立つ適合率と再現率を計算できます。

  • 適合率と再現率は、モデルがどの程度適切に情報を捕捉しているか、そしてどれだけの情報を除外しているかを把握するのに役立ちます。適合率スコアは、あるラベルが割り当てられたすべてのテストサンプルのうち、実際にそのラベルに分類されなければならないものの数を測定します。再現率スコアは、あるラベルが割り当てられなければならないすべてのテストサンプルのうち、実際にそのラベルが割り当てられたものの数を測定します。

  • 混同行列を使用して、各ラベルに対するモデルの性能を比較できます。理想的なモデルでは、対角線上のすべての値が高くなり、他の値はすべて低くなります。これは目的のカテゴリが正しく識別されていることを示します。他の値が高い場合は、モデルがテスト画像をどのように誤分類しているかを知るための手がかりとなります。

  • スコアしきい値ツールを使用して、特定のスコアしきい値が適合率と再現率にどのように影響するかを調べることができます。スコアしきい値バーのスライダーをドラッグすると、そのしきい値が適合率-再現率トレードオフ曲線のどこに位置するかが示され、そのしきい値が適合率と再現率のそれぞれにどのように影響するかを確認できます。マルチクラス モデルの場合、これらのグラフに表示される適合率と再現率は、返されたラベルのセットの中で最も高いスコアを持つラベルのみを使用して計算された数値を示します。これは偽陽性と偽陰性のバランスを取るのに役立ちます。

    モデル全体で許容できるしきい値を選択したら、個々のラベルをクリックし、そのしきい値が各ラベルの適合率-再現率曲線のどこに位置するかを確認できます。場合によっては、いくつかのラベルで誤った予測が多くなることがあります。その場合は、これらのラベルに合わせてカスタマイズしたクラス単位のしきい値を選択できます。

  • モデルの精度については、適合率-再現率曲線下面積が有用な指標となります。これは、モデルがすべてのスコアしきい値にわたってどの程度良好に機能しているかを測定します。AutoML Video では、この指標は「平均適合率」と呼ばれます。このスコアが 1.0 に近いほど、モデルはテストセットに対して良好に機能しています。各ラベルについてランダムに推測するモデルの場合、平均適合率はおよそ 0.5 になります。

モデルのテスト

AutoML Video は、自動的にデータの 30% を使用して(または、ユーザー自身がデータ分割を指定した場合は選択された任意の割合を使用して)モデルをテストします。AutoML Video UI の [評価] タブには、テストデータに対するモデルの成果が表示されます。また、モデルのサニティ チェックを行う場合のために、サニティ チェックの方法もいくつか用意されています。その 1 つが、[テストと使用] タブでテスト用の動画データを含む CSV ファイルを提供し、それらの動画に対してモデルが予測したラベルを確認する方法です。モデルの性能が良ければ、これで期待に沿った結果が得られるはずです。

さらに、予測の可視化のしきい値を調整できるほか、予測結果を 1 秒間隔、ショット境界自動検出後のビデオカメラ ショット、動画セグメント全体といった 3 つの時間スケールで調べることもできます。

モデル性能の向上

モデルの初期性能が得られた後、引き続きモデルの性能を向上させる場合は、以下のようないくつかの方法を試すことができます。

  • ラベル付けされたサンプルの数を増やします(特に、比率の少ないクラスのサンプル)。
  • モデルの性能が良くない箇所を詳しく調べます。

    • クラスの対象範囲が広すぎる可能性について考え、そのクラスを複数のクラスに分割すると有効か検討します。
    • クラスの対象範囲が狭すぎる場合は、プロジェクトの最終目標に影響を与えずに複数のクラスを統合できないか検討します。
    • 特に性能が悪いクラスについては、より多くのサンプルにラベルを付けることを検討します。
  • 該当する場合は、マルチクラス問題からマルチラベル問題に切り替えます。ニューラル ネットワーク モデルをトレーニングする際には、通常、各サンプルで未知の長さのラベルのセットを予測するよりも、サンプルをまったく共通点のない個々のクラスに分類するほうが簡単です。

  • データの不均衡を減らします。特に、たとえば 1 対 100 を超えるような大きな不均衡がある場合は、サンプルの数を増やすか、頻度の高いクラスのサンプル数を減らします。

  • 潜在的なデータ漏洩がないか入念に確認し、その発生を回避します。

  • 少数の重要なクラスに集中するため、重要度の低いクラスを削除します。

  • その他の方法について確認するには、サポートページをご覧ください。