【第7回】YOLOX:ONNXRuntimeによる推論
はじめに
近年、AI(Artificial Intelligence:人工知能)の急速な発展に伴い、それらを用いた技術が活用され始めています。例えば、AIによる画像認識技術として物体検出などがあります。物体検出は「画像の中から特定の物体の位置、種類、個数などの情報を認識する技術」であり、AIを用いて比較的高速に画像内の物体情報を取得することができます。この技術を用いて製造業では品質評価、外観検査、異常検知などに活用されています。
リアルタイムに物体検出を行うアルゴリズムにYOLO(You Only Look Onse)と呼ばれるものがあり、CNN(Convolutional Neural Network:畳み込みニューラルネットワーク)を用いたアルゴリズムとなっています。2021年8月に公開された最新の物体検出モデルにYOLOXがあり、これはYOLOv5を超える性能と、使いやすいライセンス(Apache License)を両立しています。
YOLOXのデモではpytorchというライブラリを用いて推論していますが、pytorchは学習に最適化されていることから、推論速度は速くありません。その課題を解決するのがONNX(Open Neural Network eXchange)です。pytochモデル(.pth)からonnxモデル(.onnx)に変換して推論に特化したエンジンONNXRuntimeを用いることえで、推論速度を向上させることができます。
本記事では、YOLOXのpthモデルをonnxモデルに変換し、ONNXRuntimeを用いた推論デモを実施する方法を紹介します。
YOLOXの完全攻略マニュアルも以下のnote記事で紹介しています。
1. YOLOX
以下リンクのYOLOXのONNXRuntimeのREADME.mdにonnxモデルへの変換、onnxruntimeによる推論コマンドについて記載されています。
2. YOLOXの動作環境の構築
YOLOXの動作環境の構築については、以下の記事をご覧ください。
3. pthモデルをonnxモデルへ変換
まず最初の例は、学習済みモデルであるyolox_tiny.pthをyolox_tiny.onnxに変換します。yolox_tiny.pthはmodelフォルダ内にあるとします。変換コードはtoolsのexport_onnx.pyであり、以下のコマンドでyolox_tiny.pthをyolox_tiny.onnxに変換します。
また、ご自身で追加学習をしたモデルbest_ckpt.pthをonnxモデルに変換するには以下のコマンドを実行します。以下の例では-cに追加学習モデルbest_ckpt.pth、-fに学習時に使用した定義ファイルyolox_person.pyを指定します。
4. onnxrunimeによる推論
YOLOX/demo/ONNXRuntmeにonnx_inference.pyという推論コードが用意されているので、このファイルを用いて推論を実行します。以下の例では、yolox_tiny.onnxモデルを-mの引数に指定して推論を実行します。
推論結果例は以下のようになります。
オススメ書籍
物体・画像認識と時系列データ処理入門
現場で使える!PyTorch開発入門 深層学習モデルの作成とアプリケーションへの実装
PyTorchで作る!深層学習モデル・AIアプリ開発入門
スキル修得&転職
近年、DXの進展に伴うデジタル人材の需要の高まりに追いついていない状況が続いていると経済産業省がホームページで記載している通り、DX人材、IT人材が不足しているのが現状です。さらにコンピュータの性能向上やAI技術の発展により、よりDX人材、IT人材の需要が高まってきます。さらには、今後の長期間安定して職がある業種とも考えられます。
以下の求人では、IT業界の転職や、IT未経験だけどIT人材を志望する就活を支援してくれます。無料で会員登録もできるので、まずは登録だけでもして様子を見てみてはいかがでしょうか?
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
おわりに
本記事では、YOLOXのpthモデルをonnxモデルに変換し、ONNXRuntimeを用いた推論デモを実施する方法を紹介しました。onnxモデルはpthモデルよりも高速に推論することができるので、システムにAI機能を導入するにはonnxモデルに変換したほうが良いですね。