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となりました。 だいたい半分ぐらいのサイズになりました。 精度などは、下がってしまうかもしれませんが、 モデルサイズが大きすぎるものだとサイズが小さくなるのはうれしいです。