分類 Python* デモ

このデモでは、Python* モデル API と非同期パイプラインを使用した分類ネットワークの推論を紹介します。

どのように動作するか

起動時に、アプリケーションはコマンドライン・パラメーターを受け取り、分類モデルを OpenVINO™ ランタイムプラグインにロードします。OpenCV VideoCapture からフレームを取得すると、推論を実行して結果を表示します。

“Esc” または “Q” ボタンでデモを停止できます。その後、平均メトリック値がコンソールに出力されます。

注: デフォルトでは、Open Model Zoo のデモは BGR チャネル順序での入力を期待します。RGB 順序で動作するようにモデルをトレーニングした場合は、サンプルまたはデモ・アプリケーションでデフォルトのチャネル順序を手動で再配置するか、--reverse_input_channels 引数を指定したモデル・オプティマイザー・ツールを使用してモデルを再変換する必要があります。引数の詳細については、[前処理計算の埋め込み](@ref openvino_docs_MO_DG_Additional_Optimization_Use_Cases) の入力チャネルを反転するセクションを参照してください。

モデル API

このデモでは、Python* モデル API のモデルラッパー、アダプター、パイプラインを利用します。

統一された結果表現を備えたラッパーの汎用インターフェイスにより、1 つのデモで複数の異なる分類モデルのトポロジーがサポートされます。

実行の準備

デモでサポートされるモデルリストは、<omz_dir>/demos/classification_demo/python/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

注: 各種デバイス向けのモデル推論サポートの詳細については、インテルの事前トレーニング・モデルのデバイスサポートパブリックの事前トレーニング・モデルのデバイスサポートの表を参照してください。

必要なファイル

分類結果を表示する場合 “-labels” フラグを使用して、クラスとラベルのリストを含む .txt ファイルを指定する必要があります。

および <omz_dir>/data/dataset_classes/imagenet_2012.txt ラベルファイルには、デモでサポートされているすべてのモデルが含まれます。

実行

-h オプションを指定してアプリケーションを実行すると、使用方法が表示されます。

usage: classification_demo.py [-h] -m MODEL [--adapter {openvino,ovms}] -i INPUT [-d DEVICE] [--labels LABELS] [-topk {1,2,3,4,5,6,7,8,9,10}] [--layout LAYOUT] [-nireq NUM_INFER_REQUESTS] [-nstreams NUM_STREAMS] [-nthreads NUM_THREADS]
                                    [--loop] [-o OUTPUT] [-limit OUTPUT_LIMIT] [--no_show] [--output_resolution OUTPUT_RESOLUTION] [-u UTILIZATION_MONITORS] [--reverse_input_channels] [--mean_values MEAN_VALUES MEAN_VALUES MEAN_VALUES]
                                    [--scale_values SCALE_VALUES SCALE_VALUES SCALE_VALUES] [-r]

Options:
                                    -h, --help            Show this help message and exit.
                                    -m MODEL, --model MODEL
                                    Required. Path to an .xml file with a trained model or address of model inference service if using OVMS adapter.
                                    --adapter {openvino,ovms}
                                    Optional. Specify the model adapter. Default is openvino.
                                    -i INPUT, --input INPUT
                                    Required. An input to process. The input must be a single image, a folder of images, video file or camera id.
                                    -d DEVICE, --device DEVICE
                                    Optional. Specify a device to infer on (the list of available devices is shown below). Use '-d HETERO:<comma-separated_devices_list>' format to specify HETERO plugin. Use '-d MULTI:<comma-separated_devices_list>'
                                    format to specify MULTI plugin. Default is CPU

Common model options:
                                    --labels LABELS       Optional. Labels mapping file.
                                    -topk {1,2,3,4,5,6,7,8,9,10}
                                    Optional. Number of top results. Default value is 5. Must be from 1 to 10.
                                    --layout LAYOUT       Optional. Model inputs layouts. Ex. NCHW or input0:NCHW,input1:NC in case of more than one input.

Inference options:
                                    -nireq NUM_INFER_REQUESTS, --num_infer_requests NUM_INFER_REQUESTS
                                    Optional. Number of infer requests
                                    -nstreams NUM_STREAMS, --num_streams NUM_STREAMS
                                    Optional. Number of streams to use for inference on the CPU or/and GPU in throughput mode (for HETERO and MULTI device cases use format <device1>:<nstreams1>,<device2>:<nstreams2> or just <nstreams>).
                                    -nthreads NUM_THREADS, --num_threads NUM_THREADS
                                    Optional. Number of threads to use for inference on CPU (including HETERO cases).

Input/output options:
                                    --loop                Optional. Enable reading the input in a loop.
                                    -o OUTPUT, --output OUTPUT
                                    Optional. Name of the output file(s) to save. Frames of odd width or height can be truncated. See https://github.com/opencv/opencv/pull/24086
                                    -limit OUTPUT_LIMIT, --output_limit OUTPUT_LIMIT
                                    Optional. Number of frames to store in output. If 0 is set, all frames are stored.
                                    --no_show             Optional. Don't show output.
                                    --output_resolution OUTPUT_RESOLUTION
                                    Optional. Specify the maximum output window resolution in (width x height) format. Example: 1280x720. Input frame size used by default.
                                    -u UTILIZATION_MONITORS, --utilization_monitors UTILIZATION_MONITORS
                                    Optional. List of monitors to show initially.

Input transform options:
                                    --reverse_input_channels
                                    Optional. Switch the input channels order from BGR to RGB.
                                    --mean_values MEAN_VALUES MEAN_VALUES MEAN_VALUES
                                    Optional. Normalize input by subtracting the mean values per channel. Example: 255.0 255.0 255.0
                                    --scale_values SCALE_VALUES SCALE_VALUES SCALE_VALUES
                                    Optional. Divide input by scale values per channel. Division is applied after mean values subtraction. Example: 255.0 255.0 255.0

Debug options:
                                    -r, --raw_output_message
                                    Optional. Output inference results raw values showing.

オプションのリストを空にしてアプリケーションを実行すると、エラーメッセージが表示されます。

例えば、次のコマンドライン・コマンドでアプリケーションを実行します。

python3 classification_demo.py -m <path_to_classification_model> \
                               -i <path_to_folder_with_images> \
                                --labels <path_to_file_with_list_of_labels>

OpenVINO モデルサーバーの実行

OpenVINO モデルサーバーで提供されるモデルを使用してデモを実行することもできます。OVMS を使用したデモの実行については、OVMSAdapter を参照してください。

コマンド例:

python3 classification_demo.py -m localhost:9000/models/classification \
                               -i <path_to_folder_with_images> \
                                --labels <path_to_file_with_list_of_labels> \
                                --adapter ovms

デモの出力

このデモでは、OpenCV を使用して、分類結果をテキストで表示された画像を出力します。
デモレポート:

  • FPS: ビデオフレーム処理の平均レート (1 秒あたりのフレーム数)。

  • レイテンシー: 1 フレームの処理 (フレームの読み取りから結果の表示まで) に必要な平均時間。

  • 次の各パイプライン・ステージのレイテンシー:

    • デコード — 入力データをキャプチャー。

    • 前処理 — 推論のためのデータの準備。

    • 推論 — 入力データ (画像) を推論して結果を取得。

    • 後処理 — 出力用の推論結果を準備。

    • レンダリング — 出力画像を生成。

これらのメトリックを使用して、アプリケーション・レベルのパフォーマンスを測定できます。