shu223
Core MLモデルのサイズを小さくする(LUT利用)

Core MLモデルのサイズを小さくする(LUT利用)

shu223

この記事の続き:

先の記事では、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ビット

この続きをみるには

この続き: 1,169文字
この記事が含まれているマガジンを購読する
文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
shu223

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/

shu223
フリーランスiOSエンジニア。エンジニアと人生コミュニティ運営。YouTube・Podcastパーソナリティ。著書「iOS×BLE」「Metal入門」「実践ARKit」「iOSデプス詳解」他。GitHubでさまざまなOSSを公開。