onnxモデルをfloat32からfloat16へ変換する
2022-10-27 2022-10-27
onnx
はじめに
作ったonnxモデルのファイルサイズが大きかったので小さくできないかと思い、 パラメータをfloat(float32)からfloat16にすればモデルサイズが半分くらいになると思い 変換方法を探していました。 onnxmltoolsというライブラリを使うことで簡単に変換できました。
変換方法
まずは、必要なライブラリをインストールします。
使うライブラリは、onnxmltoolsになります。
pip install onnxmltools
使ったときのバージョンは、 1.11.1
でした。
インストール後に、変換を行います。 以下は、変換のpythonコードです。
# ライブラリのimport
import onnxmltools
# 変換したいonnxモデルへのパス
input_model="./model_float32.onnx"
# 変換後のonnxモデルの出力パス
output_model="./model_float16.onnx"
# 変換したいモデルを読み込む
model=onnxmltools.utils.load_model(input_model)
# onnxモデルをfloat32からfloat16に変換
model_f16=onnxmltools.utils.float16_converter.convert_float_to_float16(model)
# 変換したモデルを保存する
onnxmltools.utils.save_model(model_f16,output_model)
実際に、torchvisionのalexnetを変換した後のファイルサイズは、 変換前は、234MBで 変換後は、117MBとなりました。 だいたい半分ぐらいのサイズになりました。 精度などは、下がってしまうかもしれませんが、 モデルサイズが大きすぎるものだとサイズが小さくなるのはうれしいです。