Core MLモデルのサイズを小さくする(LUT利用)
この記事の続き:
先の記事では、quantization_modeとして`linear`しか用いていない。LUT(ルックアップテーブル)を利用する場合はLUTを自前で用意しないといけないと思いこんでいたので、「今はそこまでしなくていいか」と判断した。
が、その後気付いたが、`linear_lut`と`kmeans_lut`は自分でLUTを用意する必要はなく、関数の中で勝手にやってくれるようだ。つまり引数に指定するだけでOK。それほどお手軽なら試さない手はない。(ちなみにカスタムLUTを指定する用には`custom_lut`というモードが用意されている)
というわけでこういう関数を用意して、
from coremltools.models.neural_network import quantization_utils
def quantize_model(nbits, output_model_path, mode='linear'):
quantized_model = quantization_utils.quantize_weights(model,
nbits,
mode)
spec = quantized_model.get_spec()
coremltools.utils.save_spec(spec, output_model_path)
8ビットよりも小さい4, 2, 1ビットでの量子化を、`linear`, `linear_lut`, `kmeans_lut`の3種類のquantization_modeを用いてクォンタイズを行ってみた。
linearの4, 2, 1ビット
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/