NVIDIAのSSD300モデルを調べる

前回の投稿の続きです。今回は学習済みモデルとしてNVIDIAがPyTorchで学習させたSSD300のモデルを利用を検討してみます。検討にあたり、NVIDIAがPyTorchで学習させたSSD300のモデルの特徴を分析してみます。

NVIDIAがPyTorchで学習させたSSD300のモデルでは、SSD: Single Shot MultiBox Detector の論文をもとに、バックボーンのモデルをVGGの代わりにResNet-50を採用して学習を行っています。

前回の投稿のモデルの定義は、OpenVINOのperson-detection-retail-0013を使用しています。

以下の設定で、ワークスペース直下の.vscode/launch.jsonを定義し、モデルの出力が得られた箇所にブレークポイントを置いて、出力のtensor情報を読み取ってみました。引数の設定や、Pipeへの渡し方がわからなかったので、試行錯誤しています。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python: Current File",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "args": ["-i", "resources/Pedestrain_Detect_2_1_1.mp4",
                     "-m", "/home/hajime/git/people-counter-python/model/nvidia_ssd.xml",
                     "-d", "GPU",
                    "-pt", "0.6"]
        },
        "pipeTransport": {
            "pipeCwd": "",
            "pipeProgram": "ffmpeg",
            "pipeArgs": [
                "-v", "warning",
                "-f", "rawvideo",
                "-pixel_format", "bgr24",
                "-video_size", "768x432"
                "-framerate", "24",
                "-i",  "-",
                "http://localhost:8090/fac.ffm"
            ],
            "debuggerPath": "/usr/bin/gdb"
        }
    ]
}

下記の、実行コマンドを実行しようとしています。

$ python main.py -i resources/Pedestrain_Detect_2_1_1.mp4 -m /opt/intel/openvino_2020.2.120/deployment_tools/open_model_zoo/tools/downloader/intel/person-detection-retail-0013/FP16/person-detection-retail-0013.xml -d GPU -pt 0.6 | ffmpeg -v warning -f rawvideo -pixel_format bgr24 -video_size 768x432 -framerate 24 -i - http://localhost:8090/fac.ffm

実行して、適当なBreakpointで止めたところ、下記の出力となりました。1x4x8732となっています。

NVIDIAがPyTorchで学習させたSSD300のモデルを見ると、
"By default, raw output from SSD network per input image contains 8732 boxes with localization and class probability distribution."
(訳: デフォルトでは、入力画像ごとのSSDネットワークからの生の出力には、ローカリゼーションとクラス確率分布を持つ8732ボックスが含まれます。)

もともとのNVIDIAがPyTorchで学習させたSSD300のモデルを見ると

utils = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_ssd_processing_utils')

のutilsを用いて結果を抜き出すことができるようです。

utilsの中でNMS (Non-Maximum Suppression)という処理を行っているようです。

コメント

タイトルとURLをコピーしました