ディープラーニングの精度検証フレームワーク

精度チェッカーは、拡張可能で柔軟かつ構成可能なディープラーニングの精度検証フレームワークです。このツールはモジュラー構造を備えており、検証パイプラインを再現し、ソース・フレームワークのネットワークと OpenVINO™ でサポートされている形式の両方の一般的なデータセットの集約された品質指標を収集できます。

インストール

必要条件

最初に必要条件をインストールします。

1. Python

精度チェッカーPython 3 を使用します。最初にインストールします。

sudo apt-get install python3 python3-dev python3-setuptools python3-pip

Python* セットアップツールおよび Python* パッケージ・マネージャー (pip) は、デフォルトでパッケージをシステム・ディレクトリーにインストールします。精度チェッカーのインストールは仮想環境経由でのみテストされています。

仮想環境のインストール:

python3 -m pip install virtualenv
python3 -m virtualenv -p `which python3` <directory_for_environment>

仮想環境のアクティブ化:

source <directory_for_environment>/bin/activate

仮想環境の非アクティブ化:

deactivate

2. フレームワーク

次のステップでは、精度チェッカーのバックエンド・フレームワークをインストールします。

一部のモデルを評価するには、必要なフレームワークをインストールします。精度チェッカーは以下のフレームワークをサポートしています。

いずれかを使用することも、一度に複数を使用することもできます。正しく動作するには、精度チェッカーは少なくとも 1 つを必要とします。他のフレームワークのインストールを延期し、必要になったときにインストールすることもできます。

精度チェッカーのインストール

前提条件がすべてインストールされている場合、精度チェッカーをインストールする準備が整っています。

python3 -m pip install .

精度チェッカーはモジュラー形式のツールであり、タスクに固有の依存関係がいくつかあります。必要なすべてのモジュールは、requirements-extra.in ファイルにあります。標準のインストール手順には基本部分のみが含まれており、追加のモジュールを取得するには、次のコマンドを実行します。

python3 -m pip install .[extra]

インストールのトラブルシューティング

  1. 以前のバージョンのツールがすでに環境にインストールされている場合、新しいインストールが中断される可能性があります。ディレクトリー/ファイルが見つからないエラーが発生した場合は、以前のツールバージョンを環境から手動で削除するか、setup.py に代わって次のコマンドで精度チェッカーのディレクトリーにツールをインストールしてください。

    python3 -m pip install --upgrade --force-reinstall .
    
  2. accuracy_check コマンドが次のエラーで失敗した場合:

    from .cv2 import *
    ImportError: libGL.so.1: cannot open shared object file: No such file or directory
    

    opencv-python をアンインストールして、opencv-python-headless パッケージをインストールしてみてください。エラーと修正方法の詳細については、こちらをご覧ください。

開発目的で IDE 内でツールを実行

精度チェッカーツールには CLI で実行するエントリーポイントがありますが、一般的なコードエディターや統合開発環境 (IDE) のほとんどは、アプリケーションの開始点としてスクリプトを想定しています。新しいモデルをデバッグしたり有効にするスクリプトとしてツールを実行すると便利な場合があります。IDE 内で精度チェッカーを使用するには、次のコードを使用して、accuracy_checker のルート・ディレクトリー (例えば、<open_model_zoo>/tools/accuracy_checker/main.py) にスクリプトを作成します。

from accuracy_checker.main import main

if __name__ == '__main__':
    main()

このスクリプトを使用して IDE で精度チェッカーを実行できるようになります。

使用法

サンプルを実行してインストールをテストし、精度チェッカーを習熟できます。

Open Model Zoo の各モデルは、構成ファイルを使用して評価できます。事前定義された構成ファイルの使用方法については、こちらを参照してください。

精度チェッカーをインストールしたら、以下を使用して構成を評価できます。

accuracy_check -c path/to/configuration_file -m /path/to/models -s /path/to/source/data -a /path/to/annotation

-h--help を使用して、すべてのコマンドライン・オプションを表示できます。いくつかの引数を以下に示します。

  • -c--config 設定ファイルへのパス。

  • -m--models 設定ファイルで宣言されたモデルと重みが検索されるディレクトリーを指定します。異なるディレクトリーにあるモデルで同じ構成を複数回実行する場合、または複数のモデルを含むパイプラインがある場合は、スペースで区切ったディレクトリーのリストを指定することもできます。

  • -s--source 入力画像を検索するディレクトリーを指定します。

  • -a--annotations アノテーションとメタファイルを検索するディレクトリーを指定します。

  • -d--definitions グローバル設定ファイルへのパス。

  • -e--extensions InferenceEngine 拡張機能を含むディレクトリー。

  • -C'--converted_models モデル・オプティマイザーで変換されたモデルを保存するディレクトリー (DLSDK ランチャーのみに使用)。

  • -tf--target_framework 推論のフレームワーク。

  • -td--target_devices 推論のデバイス。スペースで区切って複数のデバイスを指定できます。

  • --async_mode ランチャーがサポートしている場合、非同期モードでツールを実行できます。

  • --num_requests 非同期実行の要求数。構成情報で指定されたオーバーライドを許可します。デフォルトは AUTO です。

  • --model_attributes 追加のモデル属性を含むディレクトリー。

  • --subsample_size データセットのサブサンプル・サイズ。

  • --shuffle subsample_size 引数のサブセットが提供されると、作成中にアノテーションのシャッフルが可能になります。デフォルトは True です。

  • --intermediate_metrics_results 中間メトリック結果の印刷を有効にします。デフォルトは False です。

  • --metrics_interval --intermediate_metrics_results フラグが有効な場合、更新されたメトリック結果をプリントする反復回数。デフォルトは 1000 です。

  • --sub_evaluation 事前定義された subset_metrics を使用してデータセットのサブセットを評価できるようにします。デフォルトは False です。サブセットメトリックによる部分評価をご覧ください。

一部のコマンドライン引数を、パスのプリフィクスとして環境変数に置き換えることもできます。サポートされている変数のリストには以下があります。

  • DEFINITIONS_FILE - -d-definitions と同等。

  • DATA_DIR - -s--source と同等。

  • MODELS_DIR - -m--models と同等。

  • EXTENSIONS - -e--extensions と同等。

  • ANNOTATIONS_DIR - -a--annotations と同等。

  • MODEL_ATTRIBUTES_DIR - --model_attributes と同等。

構成

検証プロセスを宣言する構成ファイルがあります。検証されたすべてのモデルは、以下で説明する個別の名前とその他のプロパティーを持つモデルリストにエントリーを含める必要があります。

すべてのモデルで共有されるグローバルオプションを宣言する定義ファイルもあります。設定ファイルは定義ファイルよりも優先されます。

例:

models:
- name: densenet-121-tf
  launchers:
    - framework: openvino
      adapter: classification

  datasets:
    - name: imagenet_1000_classes
      preprocessing:
        - type: resize
          size: 256
        - type: crop
          size: 224
      metrics:
        - name: accuracy@top1
          type: accuracy
          top_k: 1
          reference: 0.7446
        - name: accuracy@top5
          type: accuracy
          top_k: 5
          reference: 0.9213

オプションで、グローバル構成を使用できます。同じデータセット上で実行するモデルが複数ある場合、重複を避けるのに役立ちます。グローバル定義ファイルの例は、<omz_dir>/data/dataset_definitions.yml にあります。グローバル定義は、データセット名によってランタイムの評価構成とマージされます。グローバル設定のパラメーターはローカル設定によって上書きできます (例えば、定義でデスティネーション・サイズ 224 でサイズ変更を指定し、ローカル構成でサイズ 227 でサイズ変更を使用する場合、設定 227 の値がサイズ変更パラメーターとして使用されます)。global_definitions フィールドを使用して、モデル構成内で直接、またはコマンドライン引数 (-d--definitions) でグローバル定義へのパスを指定できます。

ランチャー

ランチャーは、モデルをどのように実行するかを記述します。各ランチャーの設定は、framework 名の設定から始まります。現在、caffedlsdkmxnettftf2tf_liteopencvonnx_runtimepytorchpaddlepaddle がサポートされています。ランチャーの説明は相違する可能性があります。

データセット

データセットのエントリーには、モデルを評価する必要があるデータ、必要なすべての前処理および後処理/フィルター処理手順、および評価に使用されるメトリックが記述されます。

データセットのデータが競合問題 (COCO、Pascal VOC など) である場合、または他のモデルに再利用できる可能性がある場合は、グローバル構成ファイル (<omz_dir>/data/dataset_definitions.yml) でそれを宣言するのが合理的です。この方法では、ローカル設定ファイルに名前のみを指定すると、必要なすべてのステップがグローバル設定ファイルから選択されます。このグローバル設定にパスを渡すには、CLI の --definition 引数を使用します。

準備された構成ファイルと既知のデータセットを使用してモデルを評価したい場合、検証データセットを含むフォルダーを特定の方法で整理する必要があります。データセットの準備に関する詳細については、データセット準備ガイドを参照してください。

各データセットには以下が必要です。

  • name - モデル/トポロジーの一意の識別子。

  • data_source - 入力データが保存されるディレクトリーへのパス。

  • metrics -計算する必要があるメトリックのリスト。

以下はオプションで指定できます。

  • preprocessing - 入力データに適用される前処理ステップのリスト。計算されたメトリックを報告されたものと一致させるには、トポロジーの正規化文書から前処理を再現するか、必要な手順についてトポロジーの作成者に問い合わせる必要があります。

  • postprocessing - 後処理ステップのリスト。

  • reader - データ読み取りのアプローチ。デフォルトのリーダーは opencv_imread です。

  • segmentation_masks_source - セマンティックのセグメント化タスクの gt マスクが保存されているディレクトリーへのパス。

また、アノテーションに関連するデータも含まれている必要があります。以下を使用して、アノテーションをすぐに変換できます。

  • annotation_conversion - アノテーション変換用のパラメーター

または、既存のアノテーション・ファイルとデータセットのメタを使用します。

  • annotation - アノテーション・ファイルへのパスを指定するには、最初にアノテーションをデータセットの問題の表現に変換する必要があります。データセットのコンバーターがすでに存在する場合は、アノテーション・コンバーターからコンバーターの 1 つを選択するか、独自のコンバーターを作成できます。

  • dataset_meta - メタデータファイルへのパス (コンバーターが生成)。アノテーション変換の詳細については、アノテーション変換ガイドを参照してください。

  • subset_metrics - --sub_evaluation フラグが有効な場合に計算される、一意のサイズとメトリックを持つデータセットのサブセットのリスト。subsample_size が定義されている場合、一致する subset_size を持つサブセットのみが評価されます。それ以外は、デフォルトで最初のサブセットが検証されます。サブセットのメトリックによるサブ評価を参照してください。

    • subset_size - 評価するデータセットのサブセットのサイズ。その値は subsample_size と比較され、評価に必要なサブセットが選択されます。

    • metrics - 定義されたサブセットのサイズに固有のメトリックのリスト

データセットの定義例:

- name: dataset_name
  annotation: annotation.pickle
  data_source: images_folder

  preprocessing:
    - type: resize
      dst_width: 256
      dst_height: 256

    - type: normalization
      mean: imagenet

    - type: crop
      dst_width: 227
      dst_height: 227

  metrics:
    - type: accuracy

前処理、メトリック、後処理

前処理、メトリック、後処理の各エントリーには、タイプに固有のその他のオプションを含む type フィールドが必要です。他のオプションを指定しない場合は、定義ファイルから選択されます。

次の手順を使用できます。

計算されたメトリックを特定の値 (つまり、正規に報告されたもの) に対してテストしたい場合は、オプションでメトリックの reference フィールドを指定できます。

一部のメトリックはベクトル結果の提供をサポートしています。例えば、mAP は各検出クラスの平均精度を返すことができます。presenter (print_vectorprint_scalar など) を使用して、メトリック結果の表示モードを変更できます。

例:

metrics:
- type: accuracy
  top_k: 5
  reference: 86.43
  threshold: 0.005

サブセットメトリックによる部分評価

オプションで sub_evaluation フラグを有効にして、大きなデータセットのサブセットの結果を迅速に取得できます。subset_metrics は、異なる subset_sizemetrics を持つサブセットを提供する必要があります。subset_metrics が複数のエントリーで構成されている場合は、subsample_size 値を使用して目的の subset_size を選択できます。それ以外の場合は、最初に定義された subset_size が使用されます。

注: 精度の設定に subset_metrics が定義されていない場合、sub_evaluation フラグを有効にしても効果はありません。

例:

metrics:
- type: accuracy
  top_k: 5
  reference: 86.43
subset_metrics:
  - subset_size: "10%"
    metrics:
      - type: accuracy
        top_k: 5
        reference: 86.13
  - subset_size: "20%"
    metrics:
      - type: accuracy
        top_k: 5
        reference: 86.23
        top_k: 1
        reference: 76.42

新しいモデルをテスト

新しいモデルをテストする一般的なワークフローには次のものが含まれます。

  1. データセットのアノテーションを変換します。annotation-converters のコンバーターのいずれかを使用するか、データセットのコンバーターがない場合は独自のコンバーターを作成します。コンバーターの使い方の詳細については、アノテーション変換ガイドを参照してください。

  2. いずれかのアダプターを選択するか、独自のアダプターを作成します。アダプターは、フレームワークによって生成された生の出力を、高レベルの問題固有の表現 (例えば、ClassificationPredictionDetectionPrediction など) に変換します。

  3. 正規の文書から前処理、メトリック、後処理を再現します。

  4. 設定ファイルにエントリーを作成して実行します。

評価をカスタマイズ

標準精度チェッカーの検証パイプライン: アノテーションの読み取り -> データの読み取り -> 前処理 -> 推論 -> 後処理 -> メトリック。状況によっては、例えば一連のモデルがある場合など、この検証パイプラインが不適切であることがあります。独自の評価を使用して検証パイプラインをカスタマイズできます。カスタム評価の詳細については、関連セクションを参照してください。