こんにちは。
コンピュータビジョン(『ロボットの眼』開発)が専門の”はやぶさ”@Cpp_Learningです。
前回『ONNX RuntimeとYoloV3でリアルタイム物体検出』について書きました。

今回は『ONNX RuntimeとSSDでリアルタイム物体検出』を実践します。
Contents
本記事を書くモチベーション
というのが気になるフクロウのくるるちゃん@kururu_owl のために、本記事を書くモチベーションを少し説明しておきます。

各深層学習フレームワークがONNX形式を採用することで、学習済みモデルの交換を簡単に実現することができます。
しかし、前回はONNX Model Zooを使用したので、モデルの交換を実践していません。
また、ONNXモデルのInput/Outputが異なる(特にOutput)が異なる場合、同じ”物体検出”でもOutputに合わせてソースコードを作成する必要があります。
そのため、本記事を書くモチベーションは以下の通りです。
- ONNX形式を使うメリット”学習済みモデルの交換”を実践したい
- Input/Outputが異なるモデルのONNXRuntimeによる推論を実践したい
前回の記事では書き切れなかったONNXの魅力を本記事で補間したいと思います!
演習問題やソースコード写経などは、ある程度の数をこなさないと”見えてこない”ものもあります。前回と今回はどちらもONNX Runtimeがメインの記事ですが、ぜひ見比べて”差分”を感じ取ってほしいです。
ONNXおよびONNXRuntimeとは
ONNXやONNX Runtimeの概要ついては、以下の記事で説明済みなので、本記事では割愛します。

この記事でインストール方法なども説明しているので、先に読んでから、以降を読み進めることをオススメします!
深層学習のフェーズ -学習と推論-
深層学習を実践する場合、【学習フェーズ】・【推論フェーズ】があります。
【学習フェーズ】
- ニューラルネットワーク設計
- 学習(ニューラルネットワークの”重み”を調整)
- 学習済みモデルを保存
【推論フェーズ】
- 学習済みモデルを読込む
- 学習済みモデルへの入力値(センサ値など)を取得
- 推論(入力値に対する推論値を取得)
- 推論値を使って”ごにょごにょ”する(制御とか)
ケースバイケースですが【学習フェーズ】・【推論フェーズ】各々で専用マシンを使うことが多いです。
例えば、【学習フェーズ】にAWSやAzureなどのクラウドサービスを利用し、【推論フェーズ】に組込み機器などのエッジディバイスを使います。
深層学習の実践フロー
今回、学習は行いませんが『TensorFlowの学習済みモデルをONNXモデルに変換』を実践します。
ONNXモデルをエクスポートできる深層学習フレームワークは複数ありますが、
SSD系の学習済みモデルについては、 Tensorflow detection model zooが非常に充実してます。
なので、TensorFlowモデルをONNXモデルに変換して、最終的にはONNX Runtimeで物体検出(推論)するところまで実践します。
TensorFlowモデルをONNXに変換
ONNXモデルへの変換は【学習フェーズ】に含まれない気もしますが、【推論フェーズ】よりも前に実施すべき処理なので…
今回は、無料で使えるクラウドサービスColaboratoryとtensorflow-onnxを使って『TensorFlowの学習済みモデルをONNXモデルに変換』を実践しました。
実践した内容は、以下の『技術ノート』にまとめました(*・ω・)ノ♪
個人的に、リアルタイム物体検出が好きなので、”軽快に動作する”ssdlite_mobilenet_v2_cocoを採用し、ONNXモデルに変換しています。
Colaboratory使い方で困ったときは、以下の記事が非常に参考になります!
ONNXRuntimeとSSDモデルで物体検出
取得したONNXモデルを使って物体検出を行う”ONNXRuntime_SSD.py”を作成しました。
以下のコマンドで動作確認できます。
python ONNXRuntime_SSD.py
出力画像はPyTorchでMobileNet SSDによるリアルタイム物体検出を意識した表示にしました。

人間用の椅子に座ってる猫のくるるちゃん@kururu_owl のが今日も可愛い…ん?
ソースコードのパス設定を任意に変更してください
- 120行目:画像パス
- 132行目:ONNXモデルパス
まとめ
本記事は、以下のモチベーションで書き上げました。
- ONNX形式を使うメリット”学習済みモデルの交換”を実践したい
- Input/Outputが異なるモデルのONNXRuntimeによる推論を実践したい
前回書いた記事と本記事を読んで、ONNXやONNX Runtimeに興味を持ってくれたら、とれも嬉しいです。
また「組込みAIを実践したい!」という人が現れたら、最高に嬉しいです(*・ω・)ノ♪
楽しく実践してくれたら嬉しいです!笑



