スターターパックIoTをはじめるために必要最低限なものをパッケージ化デバイスゲートウェイPLCやデータロガー内の値を一定間隔でクラウドに送信し、蓄積します。CurrenTIAアナログセンサーのデータを可視化。設備等の保守などに必要なデータを遠隔で監視できます。スターターパックIoTをはじめるために必要最低限なものをパッケージ化デバイスゲートウェイPLCやデータロガー内の値を一定間隔でクラウドに送信し、蓄積します。CurrenTIAアナログセンサーのデータを可視化。設備等の保守などに必要なデータを遠隔で監視できます。研究開発シェアツイートブックマークYOLOXってなにYOLOXは2021年に登場したYOLOシリーズの新モデルです。アンカーボックスを使用しないシンプルなモデルですが様々な工夫により推論速度や精度が向上しているそうです。https://github.com/Megvii-BaseDetection/YOLOX)そこで今回はYOLOXで独自モデルを作ってみようと思います!また、作成したモデルをVieurekaカメラで動かしてYOLOv4とパフォーマンスを比較します。2021で使用したものです。ちなみに、コンテストの様子はシリーズ化してブログ公開していますのでもしご興味があればそちらも併せてご覧ください。headといったYOLOXのモデル解説やソースコード解説は行いません。2021]やソースコード[Megvii-BaseDetection/YOLOX]を参照ください。エッジデバイスでのAI活用IoT.kyotoではエッジデバイスでのAI活用に力を入れておりエッジデバイスの一つとしてPanasonic様のVieurekaを採用しています。Vieurekaを活用した導入事例についてはこちらをご覧ください。https://tech.panasonic.com/jp/bi/vieureka/camera.html)Vieurekaでは開発環境があらかじめ用意されているのでクラウド技術と組み合わせることで自由度の高いAIアプリを作成することが可能です。GPUといったリソースに制限があります。そのため推論速度がボトルネックにならないよう適切なモデルを選定する必要があります。YOLOXには高い精度で推論できる巨大なモデルだけでなくエッジデバイスを考慮した軽量なモデルが用意されています。YOLOX-NanoはYOLOXのなかで最も軽量なモデルなのですがYOLOv4-Tinyより高いパフォーマンスが出ることが報告されています。https://arxiv.org/abs/2107.08430)今回はYOLOX-Nanoを使って独自モデルを作成して同条件で作成したYOLOv4-TinyとVieureka上で推論速度を比較してみようと思います。今回作成するモデルと検証環境です。ワイヤーケーブルの4つモデル作成の流れラベリングモデル作成の最初の作業は集めてきた画像のラベリングです。今回はデータセットの数が多くないので問題ありませんでしたが何百枚も画像がある場合は途方もない時間がかかります。この作業が一番大変です。データセットラベリングが終わったら学習用のデータと検証用のデータに分けたりしてモデル学習ができるよう準備します。イメージはこんな感じです。validation用の画像セットconfigファイルの設定YOLOX/exps/example/custom配下に各種モデルのconfigファイルがあるので必要に応じて修正します。今回はYOLOX-Nanoを使用するのでnano.pyを修正する必要があります。71クラスの分類self.num_classesは最終的に分類されるクラスの数なのでデフォルトのままだとエラーになります。今回であれば4分類なので4に修正しないといけません。他にもデータセットのパスも修正する必要があります。学習済みパラメータのダウンロード学習済みパラメータをダウンロードします。https://github.com/Megvii-BaseDetection/storage/releases/download/0.0.1/yolox_nano.pthモデルの学習モデルの学習はtools/train.pyから簡単に実行できます。yolox_nano.pthモデル学習時に選択しているオプションの内容は下記のようになっています。チェックポイントファイルの指定モデルの結果モデルの推論もtools/demo.pyで簡単にできます。88.3%高い精度で推論できていることがわかります。Lite(以下、TF-Lite)に変換します。今回はONNX>Tensorflow>TF-Liteの順に変換していきます。ONNX出力ONNXへの出力はYOLOXに用意されているのでそちらを利用します。{MODEL_PATH}ちなみにONNXでの推論はdemo/ONNXRuntime/onnx_inference.pyを利用することで簡単に行えます。ONNXのモデルファイルサイズは3.6MBでした。416,416ONNX>>TensorFlowONNXからTensorFlowへの変換はonnx-tfを利用します。TensorFlowのモデルファイルのサイズ4.4MBでした。yolox_nano_pbTensorFlow>>TF-Lite最後にTensorFlowからTF-Liteへの変換はtf-nightlyを利用します。'wb').write(tflite_quantized_model)TF-Liteで推論してみます。ソースコードはdemo/ONNXRuntime/onnx_inference.pyを元にTF-Liteでも動くよう修正しています。同じ推論結果が得られましたので無事変換することができました。YOLOv4-TinyのTF-Liteのファイルサイズと比較すると8分の1以下になっていることがわかります。変換したTF-Liteモデルを使ってVieureka上で推論速度を検証してみました。検証方法は各モデルで推論するアプリを作成して10回分の推論時間の平均を計測しました。推論画像はここまでの推論で使用した画像を一定間隔で送るよう設定しています。1.042secYOLOv4-Tinyの半分の時間で推論することができていますね。まとめ今回はYOLOXを使って独自モデルを作成しました。作成したモデルはVieureka上で動かすことができ、YOLOv4-Tinyの半分の時間で推論できることがわかりました。今回はPyTorchで学習したモデルをTFLiteに変換しましたがVRK-C301の新ファームでPyTorchを直接動かすことができるようになりました。モデルを異なるフレームワークに変換すると推論の精度が落ちたり、予期せぬエラーに繋がったりすることがありますのでこのアップデートはとても嬉しいですね。(詳細はこちらを参照ください。UG京都を開催いたします。若手メンバーも「物体検出モデルYOLOXとIoTの役に立つかもしれない話〜そもそもYOLOってなんですかという方へ〜」のタイトルで登壇いたします。詳細や参加申込みについてはお知らせ記事をご覧ください。IoT.kyotoでは、日々、よりニーズにあったサービスを提供できるように開発を進めております。GWの便利機能をご紹介します。「お問い合わせ」フォームより、お気軽にご連絡ください。