airpocket が 2023年12月01日14時53分57秒 に編集
初版
タイトルの変更
onnx2tfでtfliteモデルを作ってみる
タグの変更
tensorflow
ONNX
tflite
RaspberryPi
ANACONDA
記事種類の変更
セットアップや使用方法
本文の変更
# はじめに GOLD_YOLOの凄いモデルをRaspberry Pi 5上のtfliteで動かしたいという衝動に見舞われたもののモデルがonnxだったので何とかしたいと思って苦しんだ記録です。 この記事では、こちらの"魂を削って作られた" GOLD_YOLOのスペシャルバージョンのモデルをWindows PCでtfliteモデルに変換します。 できればPi5上でモデル変換を行いたかったのですが、onnx-graphsurgeonというライブラリがRaspberry Pi OS上で動いてくれなかったので妥協してWinPCで変換しました。(Bullseye 64bitとBookworm 64bitでは動かなかったので早々にあきらめました) 魂を削って作られる様子はこちら。 @[twitter]https://twitter.com/PINTO03091/status/1729103898424885397 # 環境 ANACONDAでpython 3.10の仮想環境を作って変換しました。他のバージョンは確認していません。 Windowsは 10,11で確認しています。 ## ANACONDAのインストール ANACONDAはGUIベースでpythonなどの仮想環境を管理できる便利ツールです。[こちらのサイト](https://www.anaconda.com/download)からダウンロードしてインストールします。 ## python 3.11環境を作る ANACONDAを起動するとこんな画面が開きます。 ![キャプションを入力できます](https://camo.elchika.com/7ec959c5c278939b164e9b6767e622f3c7b119dd/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666662353561372d373433312d346234382d383832642d3565323665663534343465652f39623862636561392d663662392d346634382d396434372d663338343730623036303661/) 新しい環境を作るには、画面左の「Environments」を選択します。 ![キャプションを入力できます](https://camo.elchika.com/144f5be46e4cd65d649832461752881068ec4a37/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666662353561372d373433312d346234382d383832642d3565323665663534343465652f36373336373735352d663166342d343235612d393964392d333836393139323735396139/) 環境制作用の画面が開いたら、画面したの「Create」をクリックするとダイアログが開きます。 ![キャプションを入力できます](https://camo.elchika.com/2912f6d26d22e71a06e9271d2c7bcc255031e4fd/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666662353561372d373433312d346234382d383832642d3565323665663534343465652f32343539623733342d303461312d346265372d616130372d653136303933623963316335/) Nameからこれから作る環境に名前を付けられます。推奨環境が見当たらなかったので実行環境は、Python 3.11.5としました。 しばらく待つと環境が構築されてリストに追加されます。 ![キャプションを入力できます](https://camo.elchika.com/5c50decf784ac9da9f8e5045b0dee08ee7f55392/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38666662353561372d373433312d346234382d383832642d3565323665663534343465652f33616136646362662d323266612d346139392d386136382d326464626130356337366139/) 動作を確認しておきます「▶」から「Open Terminal」を選択してTerminalを開きます。プロンプトの前に仮想環境名が表示されています。pythonを実行すると、Python 3.11.5のREPLが起動しました。 ``` (onnx2tf) C:\Users\user>python Python 3.11.5 | packaged by Anaconda, Inc. | (main, Sep 11 2023, 13:26:23) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> ``` # onnx2rtをインストール onnx2rtは[PINTさんのリポジトリ](https://github.com/PINTO0309/onnx2tf)通りに操作すればインストール可能です。いくつか方法がありますが、ここでは地道にコマンドを実行していきます。 ``` pip install onnx==1.14.1 pip install nvidia-pyindex pip install onnx-graphsurgeon U pip install onnxruntime==1.16.0 pip install onnxsim==0.4.33 pip install simple_onnx_processing_tools pip install onnx2tf pip install h5py==3.8.0 pip install psutil==5.9.5 pip install ml_dtypes==0.2.0 pip install tensorflow==2.15.0 ``` h5pyはversion 3.7.0が指定されていますが、今回の環境ではインストールできませんでした。python自体のバージョンを下げる必要があるかもしれませんが、python 3.11.5でもh5py==3.8.0で動いたため今回はこのまま進みます。 # Gold YOLOのモデルをダウンロード "魂を削って作られた"モデルは[こちら](https://github.com/PINTO0309/PINTO_model_zoo/tree/main/425_Gold-YOLO-Body-Head-Hand)にあります。 ダウンロードしたファイルを解凍するとファイルが多数つくられますので、適宜作業用フォルダを作ってその中でダウンロード、解凍しましょう。 ``` curl "https://s3.ap-northeast-2.wasabisys.com/pinto-model-zoo/425_Gold-YOLO-Body-Head-Hand/resources_n.tar.gz" -o resources.tar.gz tar -zxvf resources.tar.gz del resources.tar.gz ``` # モデルを変換 ``` onnx2tf -i gold_yolo_n_body_head_hand_post_0461_0.4428_1x3x128x160.onnx -oiqt -coion -cotof ``` -iで変換モデルのpath指定、-oiqtで量子化変換した出力を追加、-coionと-cotofは変換時のOP名の一致など(よくわかりません(TT) 変換の対象としたモデルは最も小さいモデルです。変換されたファイルは作業フォルダ下のsaved_model内に保存されています。 出来たモデルをraspberry pi 5に移動して実行すると gold_yolo_n_body_head_hand_0461_0.4428_1x3x128x160_float32.tflite を使って推論時間最短10msという爆速で動作しました。 ここでは -oiqtを付けて量子化モデルも作成しましたが、私の試した限りではうまく動きませんでした。