前回の投稿の続きです。今回は学習済みモデルとして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)という処理を行っているようです。
コメント