object_detection_demo_faceboxesの実行(windows編)

OpenVINO 2021.1に含まれている、object_detection_demo_faceboxesを実行してみましょう。

環境

Dell Inspiron 3593(Intel Core i5-1035G1 CPU、メモリ 8GB)

Windows 10 Pro / OpenVINO 2021.1 / Python 3.7.8

OpenVINO 2020.3 LTSが入っている環境でしたので、一旦アンインストールを行いました。

デモの場所

今回試してみるobject_detection_demo_faceboxesは以下の場所にあります。(OpenVINO2021.1からインストール先がIntelSWToolsからIntel配下に変わっています)

C:\Program Files (x86)\Intel\openvino_2021\inference_engine\demos\python_demos\object_detection_demo_faceboxes

モデルをダウンロード

まずはmodels.lstを確認します。

# This file can be used with the --list option of the model downloader.
faceboxes-pytorch

model_downloaderでモデルをダウンロードします。

cd C:\Program Files (x86)\Intel\openvino_2021\deployment_tools\tools\model_downloader
python downloader.py --list "C:\Program Files (x86)\Intel\openvino_2021\inference_engine\demos\python_demos\object_detection_demo_faceboxes\models.lst" --output_dir <格納先フォルダ>
################|| Downloading faceboxes-pytorch ||################

========== Downloading C:\Users\takto\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch\faceboxes.py
... 100%, 4 KB, 325 KB/s, 0 seconds passed

========== Downloading C:\Users\takto\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch\FaceBoxesProd.pth
... 100%, 3977 KB, 14153 KB/s, 0 seconds passed

モデルをIR形式にコンバート

ダウンロードしたモデルをIR形式にコンバートします。

python converter.py –name faceboxes-pytorch -d <格納先フォルダ>

========== Converting faceboxes-pytorch to ONNX
Conversion to ONNX command:<ユーザ>\AppData\Local\Programs\Python\Python37\python.exe "C:\Program Files (x86)\Intel\openvino_2021\deployment_tools\tools\model_downloader\pytorch_to_onnx.py" --model-path=<ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch --model-name=FaceBoxes --import-module=faceboxes --model-param=phase='test' --model-param=size=None --model-param=num_classes=2 --weights=<ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch/FaceBoxesProd.pth --input-shape=1,3,1024,1024 --input-names=input.1 --output-names=342,353 --output-file=<ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch/faceboxes-pytorch.onnx

ONNX check passed successfully.

========== Converting faceboxes-pytorch to IR (FP16)
Conversion command: <ユーザ>\AppData\Local\Programs\Python\Python37\python.exe -- "C:\Program Files (x86)\Intel\openvino_2021\deployment_tools\model_optimizer\mo.py" --framework=onnx --data_type=FP16 --output_dir=<ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch\FP16 --model_name=faceboxes-pytorch --input_shape=[1,3,1024,1024] --input=input.1 --input_model=<ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch/faceboxes-pytorch.onnx --mean_values=input.1[104.0,117.0,123.0] --output=342,353

Model Optimizer arguments:
Common parameters:
        - Path to the Input Model:      <ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch/faceboxes-pytorch.onnx
        - Path for generated IR:       <ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch\FP16
        - IR output name:       faceboxes-pytorch
        - Log level:    ERROR
        - Batch:        Not specified, inherited from the model
        - Input layers:         input.1
        - Output layers:        342,353
        - Input shapes:         [1,3,1024,1024]
        - Mean values:  input.1[104.0,117.0,123.0]
        - Scale values:         Not specified
        - Scale factor:         Not specified
        - Precision of IR:      FP16
        - Enable fusing:        True
        - Enable grouped convolutions fusing:   True
        - Move mean values to preprocess section:       None
        - Reverse input channels:       False
ONNX specific parameters:
Model Optimizer version:        2021.1.0-1237-bece22ac675-releases/2021/1

[ SUCCESS ] Generated IR version 10 model.
[ SUCCESS ] XML file:<ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch\FP16\faceboxes-pytorch.xml
[ SUCCESS ] BIN file:<ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch\FP16\faceboxes-pytorch.bin
[ SUCCESS ] Total execution time: 89.51 seconds.

========== Converting faceboxes-pytorch to IR (FP32)
Conversion command:<ユーザ>\AppData\Local\Programs\Python\Python37\python.exe -- "C:\Program Files (x86)\Intel\openvino_2021\deployment_tools\model_optimizer\mo.py" --framework=onnx --data_type=FP32 --output_dir=<ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch\FP32 --model_name=faceboxes-pytorch --input_shape=[1,3,1024,1024] --input=input.1 --input_model=<ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch/faceboxes-pytorch.onnx --mean_values=input.1[104.0,117.0,123.0] --output=342,353

Model Optimizer arguments:
Common parameters:
        - Path to the Input Model:     <ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch/faceboxes-pytorch.onnx
        - Path for generated IR:       <ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch\FP32
        - IR output name:       faceboxes-pytorch
        - Log level:    ERROR
        - Batch:        Not specified, inherited from the model
        - Input layers:         input.1
        - Output layers:        342,353
        - Input shapes:         [1,3,1024,1024]
        - Mean values:  input.1[104.0,117.0,123.0]
        - Scale values:         Not specified
        - Scale factor:         Not specified
        - Precision of IR:      FP32
        - Enable fusing:        True
        - Enable grouped convolutions fusing:   True
        - Move mean values to preprocess section:       None
        - Reverse input channels:       False
ONNX specific parameters:
Model Optimizer version:        2021.1.0-1237-bece22ac675-releases/2021/1

[ SUCCESS ] Generated IR version 10 model.
[ SUCCESS ] XML file:<ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch\FP32\faceboxes-pytorch.xml
[ SUCCESS ] BIN file:<ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch\FP32\faceboxes-pytorch.bin
[ SUCCESS ] Total execution time: 11.30 seconds.

実行する

実行前に引数を確認しましょう。

C:\Program Files (x86)\Intel\openvino_2021\inference_engine\demos\python_demos\object_detection_demo_faceboxes>python object_detection_demo_faceboxes.py -h
usage: object_detection_demo_faceboxes.py [-h] -m MODEL [-i INPUT [INPUT ...]]
                                          [-d DEVICE] [-pt PROB_THRESHOLD]
                                          [--no_show]
                                          [-u UTILIZATION_MONITORS]

Options:
  -h, --help            Show this help message and exit.
  -m MODEL, --model MODEL
                        Required. Path to an .xml file with a trained model.
  -i INPUT [INPUT ...], --input INPUT [INPUT ...]
                        path to video or image/images
  -d DEVICE, --device DEVICE
                        Optional. Specify the target device to infer on; CPU,
                        GPU, FPGA, HDDL or MYRIAD is acceptable. The demo will
                        look for a suitable plugin for device specified.
                        Default value is CPU
  -pt PROB_THRESHOLD, --prob_threshold PROB_THRESHOLD
                        Optional. Probability threshold for detections
                        filtering
  --no_show             Optional. Don't show output
  -u UTILIZATION_MONITORS, --utilization_monitors UTILIZATION_MONITORS
                        Optional. List of monitors to show initially.

利用した動画は以下から借用しました。

https://github.com/intel-iot-devkit/sample-videos

実行してみましょう。

C:\Program Files (x86)\Intel\openvino_2021\inference_engine\demos\python_demos\object_detection_demo_faceboxes>python object_detection_demo_faceboxes.py -m <ユーザ>\Documents\Intel\OpenVINO\openvino_models\public\faceboxes-pytorch\FP16\faceboxes-pytorch.xml -i <ユーザ>\Downloads\face-demographics-walking-and-pause.mp4

なお、-iに静止画像を指定して実行すると、すぐに終了してしまいます。
その場合は、
cv2.imshow(‘FaceBoxes Detection Demo’, frame)
key = cv2.waitKey(delay)
の箇所を
cv2.imshow(‘FaceBoxes Detection Demo’, frame)
key = cv2.waitKey(0)

にすると、入力があるまで待つようになります。

以上、object_detection_demo_faceboxesの実行でした。