Core MLモデルのサイズを小さくする(LUT利用)
スキ
4
この記事の続き:
先の記事では、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ビット
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。
フリーランスiOSエンジニア。エンジニアと人生コミュニティ運営。YouTube・Podcastパーソナリティ。著書「iOS×BLE」「Metal入門」「実践ARKit」「iOSデプス詳解」他。GitHubでさまざまなOSSを公開。