機械学習

TensorFlowの学習済みモデルを変換してONNXRuntimeで物体検出

ONNX RuntimeとSSDでリアルタイム物体検出

こんにちは。

コンピュータビジョン(『ロボットの眼』開発)が専門の”はやぶさ”@Cpp_Learningです。

前回『ONNX RuntimeとYoloV3でリアルタイム物体検出』について書きました。

ONNX RuntimeとYoloV3でリアルタイム物体検出
ONNX RuntimeとYoloV3でリアルタイム物体検出Microsoft社製OSS”ONNX Runtime”の入門から実践まで学べる記事です。ONNXおよびONNX Runtimeの概要から、YoloV3モデルによる物体検出(ソースコード付)まで説明します。深層学習や画像処理に興味のある人にオススメの内容です。...

今回は『ONNX RuntimeとSSDでリアルタイム物体検出』を実践します。

本記事を書くモチベーション

くるる
くるる
既にONNX Runtimeに関する記事を公開しているのに、なぜ本記事を書くの?

というのが気になるフクロウのくるるちゃん@kururu_owl のために、本記事を書くモチベーションを少し説明しておきます。

ONNX Runtime

各深層学習フレームワークがONNX形式を採用することで、学習済みモデルの交換を簡単に実現することができます。

しかし、前回はONNX Model Zooを使用したので、モデルの交換を実践していません。

また、ONNXモデルのInput/Outputが異なる(特にOutput)が異なる場合、同じ”物体検出”でもOutputに合わせてソースコードを作成する必要があります。

そのため、本記事を書くモチベーションは以下の通りです。

本記事を書くモチベーション
  • ONNX形式を使うメリット”学習済みモデルの交換”を実践したい
  • Input/Outputが異なるモデルのONNXRuntimeによる推論を実践したい

前回の記事では書き切れなかったONNXの魅力を本記事で補間したいと思います!

演習問題やソースコード写経などは、ある程度の数をこなさないと”見えてこない”ものもあります。前回と今回はどちらもONNX Runtimeがメインの記事ですが、ぜひ見比べて”差分”を感じ取ってほしいです。

ONNXおよびONNXRuntimeとは

ONNXONNX Runtimeの概要ついては、以下の記事で説明済みなので、本記事では割愛します。

ONNX RuntimeとYoloV3でリアルタイム物体検出
ONNX RuntimeとYoloV3でリアルタイム物体検出Microsoft社製OSS”ONNX Runtime”の入門から実践まで学べる記事です。ONNXおよびONNX Runtimeの概要から、YoloV3モデルによる物体検出(ソースコード付)まで説明します。深層学習や画像処理に興味のある人にオススメの内容です。...

この記事でインストール方法なども説明しているので、先に読んでから、以降を読み進めることをオススメします!

スポンサーリンク

深層学習のフェーズ -学習と推論-

深層学習を実践する場合、【学習フェーズ】・【推論フェーズ】があります。

【学習フェーズ】

  1. ニューラルネットワーク設計
  2. 学習(ニューラルネットワークの”重み”を調整)
  3. 学習済みモデルを保存

【推論フェーズ】

  1. 学習済みモデルを読込む
  2. 学習済みモデルへの入力値(センサ値など)を取得
  3. 推論(入力値に対する推論値を取得)
  4. 推論値を使って”ごにょごにょ”する(制御とか)

ケースバイケースですが【学習フェーズ】・【推論フェーズ】各々で専用マシンを使うことが多いです。

例えば、【学習フェーズ】AWSAzureなどのクラウドサービスを利用し、【推論フェーズ】に組込み機器などのエッジディバイスを使います。

組込みAI向けエッジディバイスJetsonシリーズ

深層学習の実践フロー

今回、学習は行いませんが『TensorFlowの学習済みモデルをONNXモデルに変換』を実践します。

TensorFlowモデルをONNXモデルに変換ONNXモデルをエクスポートできる深層学習フレームワークは複数ありますが、
SSD系の学習済みモデルについては、 Tensorflow detection model zooが非常に充実してます。

なので、TensorFlowモデルをONNXモデルに変換して、最終的にはONNX Runtimeで物体検出(推論)するところまで実践します。

TensorFlowモデルをONNXに変換

ONNXモデルへの変換は【学習フェーズ】に含まれない気もしますが、【推論フェーズ】よりも前に実施すべき処理なので…

今回は、無料で使えるクラウドサービスColaboratorytensorflow-onnxを使って『TensorFlowの学習済みモデルをONNXモデルに変換』を実践しました。

実践した内容は、以下の『技術ノート』にまとめました(*・ω・)ノ♪

はやぶさの技術ノート:tf2onnx

個人的に、リアルタイム物体検出が好きなので、”軽快に動作する”ssdlite_mobilenet_v2_cocoを採用し、ONNXモデルに変換しています。

Colaboratory使い方で困ったときは、以下の記事が非常に参考になります!

【秒速で無料GPUを使う】深層学習実践Tips on Colaboratory|Qiita

スポンサーリンク

ONNXRuntimeとSSDモデルで物体検出

取得したONNXモデルを使って物体検出を行う”ONNXRuntime_SSD.py”を作成しました。

以下のコマンドで動作確認できます。

python ONNXRuntime_SSD.py

出力画像はPyTorchでMobileNet SSDによるリアルタイム物体検出を意識した表示にしました。

ONNX RuntimeとSSDでリアルタイム物体検出

人間用の椅子に座ってる猫のくるるちゃん@kururu_owl のが今日も可愛い…ん?

くるる
くるる
にゃーん♪

ソースコードのパス設定を任意に変更してください

  • 120行目:画像パス
  • 132行目:ONNXモデルパス

まとめ

本記事は、以下のモチベーションで書き上げました。

本記事を書くモチベーション
  • ONNX形式を使うメリット”学習済みモデルの交換”を実践したい
  • Input/Outputが異なるモデルのONNXRuntimeによる推論を実践したい

前回書いた記事と本記事を読んで、ONNXONNX Runtimeに興味を持ってくれたら、とれも嬉しいです。

また「組込みAIを実践したい!」という人が現れたら、最高に嬉しいです(*・ω・)ノ♪

くるる
くるる
くるるはラズベリーパイ食べながらJetson Nanoで”でぃーぷらーにんぐ”したい♪

楽しく実践してくれたら嬉しいです!笑

はやぶさ
はやぶさ
理系応援ブロガー”はやぶさ”@Cpp_Learningは頑張る理系を応援します!
組込みAI向けエッジディバイスJetsonシリーズ
PytorchでMobileNet SSDによるリアルタイム物体検出
PyTorchでMobileNet SSDによるリアルタイム物体検出深層学習フレームワークPytorchを使い、ディープラーニングによる物体検出の記事を書きました。物体検出手法にはいくつか種類がありますが、今回はMobileNetベースSSDによる『リアルタイム物体検出』を行いました。...
MXnetとGluonで物体検出ソフトを作る
MXNetで『カメラ・動画対応!物体検出ソフト』を作った -Yolo, SSD, Faster-RCNNモデル対応-こんにちは。 コンピュータビジョン(『ロボットの眼』開発)が専門の”はやぶさ”@Cpp_Learningです。 『深層学習に...
NNablaのまとめ記事
【NNabla】Neural Network Librariesの使い方まとめこんにちは。 ディープラーニングお兄さんの”はやぶさ”@Cpp_Learningです。 仕事・プライベートどちらでも”深層学...
ONNX RuntimeとYoloV3でリアルタイム物体検出
ONNX RuntimeとYoloV3でリアルタイム物体検出Microsoft社製OSS”ONNX Runtime”の入門から実践まで学べる記事です。ONNXおよびONNX Runtimeの概要から、YoloV3モデルによる物体検出(ソースコード付)まで説明します。深層学習や画像処理に興味のある人にオススメの内容です。...

 

LINEスタンプ配信中!

フクロウのLINEスタンプ

当サイトのマスコットキャラクター

「フクロウのくるる」が

LINEスタンプになりました!

勉強で疲れたあなたに癒しをお届け☆

お迎え待ってます(*・ω・)ノ♪

今すぐお迎えする

40個セットがたったの50コインとお得です