機械学習 PR

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

ONNX RuntimeとYoloV3でリアルタイム物体検出
記事内に商品プロモーションを含む場合があります

こんにちは。

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

『深層学習による物体検出』が好きで色んな記事を書いてます↓

PytorchでMobileNet SSDによるリアルタイム物体検出
PyTorchでMobileNet SSDによるリアルタイム物体検出深層学習フレームワークPytorchを使い、ディープラーニングによる物体検出の記事を書きました。物体検出手法にはいくつか種類がありますが、今回はMobileNetベースSSDによる『リアルタイム物体検出』を行いました。...
FCIS(インスタンス・セグメンテーション)
深層学習による画像処理の概要からChainerCVとFCISで『物体検出ソフト』を作るまで本記事ではChainerファミリーのChainerCVとFCIS(インスタンス・セグメンテーション)で『カメラ・動画対応!”高性能”物体検出ソフト』を作るための開発手順方法を「深層学習および画像処理の入門レベル」でも分かるように説明します。...
ChainerCVとLight_Head_R-CNNによる物体検出
ChainerCVとLight-Head R-CNNで『カメラ・動画対応!物体検出ソフト』を作るChainerファミリーのChainerCVとLight-Head R-CNNによる『カメラ・動画対応!リアルタイム物体検出ソフト』の開発手順を説明します。深層学習による物体検出の概要も説明しています。...

ChainerやPyTorchを使う機会が多いのですが、今回はMicrosoft社製OSSのONNX Runtimeを使って物体検出を実践します。

ONNXとは

ONNXとはOpen Neural Network Exchangeの略称で、深層学習フレームワークなどで生成された学習済みモデルのためのフォーマットです。

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

ONNX Runtime

例えば、Chainerでは「HDF5形式」と「NPZ形式」の2種類のフォーマットで学習済みモデルを保存できますが、onnx-chainerを使うことで、ONNX形式のモデルを出力することもできます。

一方、MXNetはONNX-MXNet APIがあり、ONNX形式のモデルの入出力ができます。

つまり、ONNXを使うことで、Chainerで学習したモデルをMXNetで使う!といったツール間の移動(モデルの交換)を簡単に実現することができます。

ONNXをサポートしているフレームワークについては、公式サイトなどで確認できます。

ONNX Runtimeとは

ONNX RuntimeとはONNXモデルに特化した推論エンジンです。推論専用という意味で、ChainerのMenohやNVIDIAのTensorRTの仲間です。

2019/07/08時点、ONNX Runtimeがサポートしている言語(API)は以下の通りです。

API Documentation
スポンサーリンク

環境構築

ONNX Runtime(Python API)を使うための環境構築について説明します。

今回はAnaconda for Windowsを採用しました。Anacondaのインストール方法や基本的な使い方については、下記記事をご参照ください。

WindowにAnacondaで機械学習の環境構築
【Chainer】WindowsにAnacondaで機械学習の環境構築WindowsにChainer/TensorFlow/Kerasなどの深層学習フレームをインスト―ルするには、Anacondaを使うのが簡単です。本記事ではChainerのインストールを例に機械学習の環境構築手順を説明します。...

最初に、以下のコマンドで仮想環境を生成後、アクティブにします。

conda create -n onnxruntime pip python
activate onnxruntime

続いて、以下のコマンドでONNX Runtimeをインストールします。

pip install onnxruntime

その他のモジュールもインストールします。

pip install numpy
pip install Pillow
pip install matplotlib

以降で説明するソースコードは以下のバージョンで動作確認しました。

  • Python==3.7
  • onnxruntime==0.4.0
  • numpy==1.16.4
  • Pillow==6.0.0
  • matplotlib==3.1.0

2019/07/08時点、onnxruntimeはPython3.5~Python3.7をサポートしています。

実践!ONNX RuntimeとYoloV3で物体検出

以降からONNX Runtimeの使い方を説明します。ONNX Model Zoo の中からChainerCVで実践したYoloV3モデルを見つけたので…

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

ChainerCVとYoloでリアルタイム物体検出
ChainerCVとYoloで『カメラ・動画対応!リアルタイム物体検出ソフト』を作るChainerファミリ一つChainerCVのYoloサンプルソースをカメラ・動画に対応できるよう改造した「リアルタイム物体検出ソフト」を開発した。その開発手順を紹介します。...

ONNXRuntime_YoloV3.py開発

ONNX Model ZooからダウンロードしたYoloV3モデルの説明がONNX_YoloV3にあります。これを参照しながら作成したソースコード”ONNXRuntime_YoloV3.pyが以下です。

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

python ONNXRuntime_YoloV3.py

出力画像はChainerCVを意識した表示にしました。

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

フクロウのくるるちゃん@kururu_owl をちゃんと検出できてますね…可愛い!!

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

  • 43行目:画像パス
  • 61行目:ONNXモデルパス

ONNXRuntime_YoloV3.pyの解説

”ONNXRuntime_YoloV3.pyを作成する前にJupyter Notebookで各種検討を実施した『技術ノート』があるので公開します。

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

資料としてはもちろん、チュートリアルとしても活用できると思うので、自由に使って下さい。

スポンサーリンク

まとめ

本記事は以下の文章構成で説明しました。

文章構成
  • 【前半】ONNXおよびONNX Runtimeの概要説明
  • 【後半】ONNX RuntimeとYoloV3による物体検出

深層学習や画像処理などを勉強している人が…

  • ONNXについて知りたい
  • 推論エンジンを使ったリアルタイム処理に興味がある
  • ONNX Runtimeで物体検出などを実践したい

などを想いながら本記事にたどり着き、”ONNXRuntime_YoloV3.py『技術ノート(Jupyter Notebook)』を参考にしてくれた最高に嬉しいです!

はやぶさ
はやぶさ
理系応援ブロガー”はやぶさ”@Cpp_Learningは頑張る理系を応援します!
ソーベルフィルタ
【深層学習入門】画像処理の基礎(画素操作)からCNN設計まで画像処理の基礎(画素操作)から深層学習のCNN設計までカバーした記事です。画像処理にはOpenCVとPythonを使用しました。画像処理入門、深層学習入門、どちらも取り組みたい人におすすめの記事です。...

PICK UP BOOKS

  • 数理モデル入門
    数理モデル
  • Jetoson Nano 超入門
    Jetoson Nano
  • 図解速習DEEP LEARNING
    DEEP LEARNING
  • Pythonによる因果分析
    Python