axinc-ai / ailia-models-tflite

Quantized version of model library
21 stars 1 forks source link

ADD SRResNet #45

Closed kyakuno closed 8 months ago

kyakuno commented 1 year ago

srresnetをonnxからtfliteに変換する。 https://github.com/axinc-ai/ailia-models/tree/master/super_resolution/srresnet

kyakuno commented 1 year ago

作業手順は下記を参考にしてください。 https://github.com/axinc-ai/ailia-models-tflite/issues/30

craft-c commented 1 year ago

作業内容 ・.onnx → .tflite (float32) (int8) 変換作業 ・ailia-models-tflite版 SRResNetサンプル 作成

craft-c commented 1 year ago

モデル読み込み時のエラーについて

・公式tflite interpreter = tf.lite.Interpreter(model_path=MODEL_PATH) pip で tensowflowのバージョンを 2.12.0 まで上げれば解決

・ailia tflite runtime interpreter = ailia_tflite.Interpreter(model_path=MODEL_PATH) 未解決 ※とりあえず保留 エラー内容↓ ailia_tflite.AiliaTFLiteError: ailia tflite runtime error (Currentry supports 1 to 4 dim shape.) code:-5`

craft-c commented 1 year ago

.onnx → .tflite (float) の変換について

・openvino2tensorflow で変換したモデル を用いて推論した結果がよくありません ・onnx2tfをで変換したモデル を用いて推論した結果は良好でした  変換コマンド: onnx2tf -i srresnet.opt.onnx -dgc -oiqt

image

craft-c commented 1 year ago

.onnx → .tflite (float32) (int8) の変換について、 上手に変換できたフロー以下に示します。

なお、quantize.pyは こちら のスクリプトを参考にしました。

image

craft-c commented 1 year ago

@kyakuno

ailia-tflite runtime でモデルを読み込む部分↓ でエラーが出ます。 interpreter = ailia_tflite.Interpreter(model_path=MODEL_PATH)

エラー内容

(.ailia-tf-1.1.7.1) PS C:\~~~\ailia-models-tflite\super_resolution\srresnet> python srresnet.py
 INFO utils.py (13) : Start!
TFLite file is prepared!
Traceback (most recent call last):
  File "srresnet.py", line 282, in <module>
    main()
  File "srresnet.py", line 265, in main
    interpreter = ailia_tflite.Interpreter(model_path=MODEL_PATH)
  File "C:\Users\tanikubo\Programs\_Pkges\venvs\.ailia-tf-1.1.7.1\lib\site-packages\ailia_tflite\__init__.py", line 303, in __init__
    self.__check(self.dll.Create(self.instance, self.tflite_cdata, self.tflite_clength, ctypes.c_int32(env_id), ctypes.c_int32(memory_mode), flags))
  File "C:\Users\tanikubo\Programs\_Pkges\venvs\.ailia-tf-1.1.7.1\lib\site-packages\ailia_tflite\__init__.py", line 321, in __check
    raise AiliaTFLiteError(f"ailia tflite runtime error "+detail, status)
ailia_tflite.AiliaTFLiteError: ailia tflite runtime error (Currentry supports 1 to 4 dim shape.) code:-5

AILIA-TFLITE 評価版 を再度インストールして確認しましたが、結果は同じでした。 解決方法が分からず詰まっています。ご教示お願いしたいです。

なお、公式のTFlite では上手く動作します。 また、(float32) 及び(int8) モデル の変換も完了し、良好な推論結果を得られました。 AILIA-TFLITEで上手く動作することを確認できれば、サンプルは完成です。

kyakuno commented 1 year ago

現在、ailia tflite runtimeがサポートしているテンソルの次元数は4までとなっています。 どこかでテンソルが5次元になっているのが原因と考えていまして、tfliteをいただくことは可能でしょうか。

kyakuno commented 1 year ago

ONNXモデル的には4次元で走りそうではあるのですが、変換の過程か何かで5次元になっていそうな気がします。 https://netron.app/?url=https://storage.googleapis.com/ailia-models/srresnet/srresnet.opt.onnx.prototxt

craft-c commented 1 year ago

@kyakuno

確認したところ、私が変換した.tfliteファイル (float32) において、 入出力が 6次元になっている箇所が見つかりました。

変換したファイルはこちら↓ https://drive.google.com/drive/folders/1MtyCiLaKY2jmQRkudwZCcDWRQfgX0OUY?usp=sharing

image

craft-c commented 1 year ago

@kyakuno

6次元になっている部分のみ修正する方法はあるのでしょうか? それとも、4次元を超えないように、再び変換方法を見直した方が良いのでしょうか?

craft-c commented 1 year ago

オプションなど見直して、再度変換を実行しましたが、 6次元の部分が必ず発生してしまいます。

kyakuno commented 1 year ago

最後のPixelShuffleが、TransposeとReshapeで実装されているみたいですね。 ailia側で対応しますので、一旦、モデルはこのままで、PRをいただけますでしょうか。 公式のtensorflowで動けば問題ありません。

craft-c commented 1 year ago

@kyakuno PRしました。

https://github.com/axinc-ai/ailia-models-tflite/pull/60