分類ベンチマーク C++ デモ¶
このデモでは、画像分類ニューラル・ネットワーク推論における OpenVINO のパフォーマンスを視覚化します。
どのように動作するか¶
起動時に、アプリケーションはコマンドライン・パラメーターを受け取り、分類モデルを OpenVINO™ ランタイムプラグインにロードします。デモではすべての入力画像を読み取るのに時間がかかる場合があります。次に、デモは推論を実行して画像を分類し、グリッド上に配置します。
デモは固定グリッドサイズの “テストモード” で開始されます。平均 FPS 結果を計算した後、通常モードに切り替わり、モデルのパフォーマンスに応じてグリッドが再調整されます。グリッドが大きいほど、パフォーマンスが高くなります。“スペース” または “R” ボタンを押すと、テストを繰り返すことができます。
“グラウンドトゥルース” データが適用されると、各画像の上に描画されたテキストのカラーが、分類が正しかったかどうかを示します。緑はクラス予測が正しいことを意味し、赤は誤っていることを意味します。
“Esc” または “Q” ボタンでデモを停止できます。その後、平均メトリック値がコンソールに出力されます。
注: デフォルトでは、Open Model Zoo のデモは BGR チャネル順序での入力を期待します。RGB 順序で動作するようにモデルをトレーニングした場合は、サンプルまたはデモ・アプリケーションでデフォルトのチャネル順序を手動で再配置するか、
--reverse_input_channels
引数を指定したモデル・オプティマイザー・ツールを使用してモデルを再変換する必要があります。引数の詳細については、[前処理計算の埋め込み](@ref openvino_docs_MO_DG_Additional_Optimization_Use_Cases) の入力チャネルを反転するセクションを参照してください。
実行の準備¶
デモでサポートされるモデルリストは、<omz_dir>/demos/classification_benchmark_demo/cpp/models.lst
ファイルにあります。このファイルは、モデル・ダウンローダーおよびコンバーターのパラメーターとして使用され、モデルをダウンロードし、必要に応じて OpenVINO IR 形式 (*.xml + *.bin) に変換できます。
モデル・ダウンローダーの使用例:
omz_downloader --list models.lst
モデル・コンバーターの使用例:
omz_converter --list models.lst
サポートされるモデル¶
convnext-tiny
densenet-121-tf
dla-34
efficientnet-b0
efficientnet-b0-pytorch
efficientnet-v2-b0
efficientnet-v2-s
googlenet-v1-tf
googlenet-v2-tf
googlenet-v3
googlenet-v3-pytorch
googlenet-v4-tf
hbonet-0.25
hbonet-1.0
inception-resnet-v2-tf
levit-128s
mixnet-l
mobilenet-v1-0.25-128
mobilenet-v1-1.0-224-tf
mobilenet-v2-1.0-224
mobilenet-v2-1.4-224
mobilenet-v2-pytorch
mobilenet-v3-large-1.0-224-tf
mobilenet-v3-small-1.0-224-tf
nfnet-f0
regnetx-3.2gf
repvgg-a0
repvgg-b1
repvgg-b3
resnest-50-pytorch
resnet-18-pytorch
resnet-34-pytorch
resnet-50-pytorch
resnet-50-tf
resnet18-xnor-binary-onnx-0001
resnet50-binary-0001
rexnet-v1-x1.0
shufflenet-v2-x1.0
swin-tiny-patch4-window7-224
t2t-vit-14
注: 各種デバイス向けのモデル推論サポートの詳細については、インテルの事前トレーニング・モデルのデバイスサポートとパブリックの事前トレーニング・モデルのデバイスサポートの表を参照してください。
必要なファイル¶
分類結果を表示したい場合は、“-gt” と “-labels” フラグを使用して、クラスとラベルのリストを含む 2 つの .txt ファイルを指定する必要があります。
“グラウンドトゥルース” ファイルは、画像ファイル名と正しいオブジェクト・クラスを照合するために使用されます。
次のような形式があります。
./ILSVRC2012_val_00000001.JPEG 65
./ILSVRC2012_val_00000002.JPEG 970
./ILSVRC2012_val_00000003.JPEG 230
...
クラス・インデックス値は 0 ~ 1000 の範囲である必要があります。一部のモデルでのみサポートされている “other” クラスを使用する場合は、-1 のインデックスを指定します。
“Labels” ファイルには、人間が判読できるラベルのリストがクラスごとに 1 行ずつ含まれています。
および <omz_dir>/data/dataset_classes/imagenet_2012.txt
ラベルファイルには、デモでサポートされているすべてのモデルが含まれます。
実行¶
-h
オプションを指定してデモを実行すると、ヘルプ・メッセージが表示されます。
classification_benchmark_demo [OPTION]
Options:
-h Print a usage message.
-i "<path>" Required. Path to a folder with images or path to an image file.
-m "<path>" Required. Path to an .xml file with a trained model.
-auto_resize Optional. Enables resizable input.
-labels "<path>" Required. Path to .txt file with labels.
-layout "<string>" Optional. Specify inputs layouts. Ex. NCHW or input0:NCHW,input1:NC in case of more than one input.
-gt "<path>" Optional. Path to ground truth .txt file.
-d "<device>" Optional. Specify the target device to infer on (the list of available devices is shown below). Default value is CPU. The demo will look for a suitable plugin for device specified.
-nthreads "<integer>" Optional. Specify count of threads.
-nstreams "<integer>" Optional. Specify count of streams.
-nireq "<integer>" Optional. Number of infer requests.
-nt "<integer>" Optional. Number of top results. Default value is 5. Must be >= 1.
-res "<WxH>" Optional. Set image grid resolution in format WxH. Default value is 1280x720.
-no_show Optional. Disable showing of processed images.
-time "<integer>" Optional. Time in seconds to execute program. Default is -1 (infinite time).
-u Optional. List of monitors to show initially.
-reverse_input_channels Optional. Switch the input channels order from BGR to RGB.
-mean_values Optional. Normalize input by subtracting the mean values per channel. Example: "255.0 255.0 255.0"
-scale_values Optional. Divide input by scale values per channel. Division is applied after mean values subtraction. Example: "255.0 255.0 255.0"
InferRequest
の数は -nireq フラグで指定します。各 InferRequest
は “バッファ” として機能します。画像が埋め込まれて推論に送信される前にキューで待機し、推論が完了した後、結果が処理されるまでキューで待機します。通常、InferRequest
の数を増やすとパフォーマンスが向上します。これは、デバイスが並列処理をサポートしている場合、複数の InferRequest
を同時に処理できるためです。ただし、InferRequest
の数が多すぎると、各イメージがキュー内で待機する必要があるため、レイテンシーが増加します。
FPS を高くするには、すべてのデバイスの -nstreams 値の合計をわずかに超える -nireq を使用することを推奨します。
例えば、次のコマンドライン・コマンドでアプリケーションを実行します。
./classification_benchmark_demo -m <path_to_classification_model> \
-i <path_to_folder_with_images> \
-labels <path_to_file_with_list_of_labels> \
-gt <path_to_ground_truth_data_file> \
-u CDM
デモの出力¶
このデモでは、OpenCV を使用して、結果の画像グリッドを表示し、分類結果が画像の上にテキストとして表示されます。
デモレポート:
FPS: ビデオフレーム処理の平均レート (1 秒あたりのフレーム数)。
レイテンシー: 1 フレームの処理 (フレームの読み取りから結果の表示まで) に必要な平均時間。
-
次の各パイプライン・ステージのレイテンシー:
デコード — 入力データをキャプチャー。
前処理 — 推論のためのデータの準備。
推論 — 入力データ (画像) を推論して結果を取得。
後処理 — 出力用の推論結果を準備。
レンダリング — 出力画像を生成。
これらのメトリックを使用して、アプリケーション・レベルのパフォーマンスを測定できます。