coremltools 4.0でPyTorchモデルを直接Core MLモデルに変換する
WWDC 2020に合わせてcoremltools 4.0b1がリリースされ、つい最近(7/28)4.0b2がリリースされた。coremltools 4.0の目玉となるアップデートが、PyTorchモデルがONNXを経由することなく直接Core MLモデルに変換できるようになった点。
New converter path to directly convert PyTorch models without going through ONNX.
(coremltools 4.0b1のWhat's New)
ドキュメントも一新され、Examplesのページに"Converting a PyTorch Segmentation Model to Core ML"というセグメンテーションモデルを変換するチュートリアルがあったので、そちらで変換を試してみた。
こんな感じでセグメンテーションを行える。
(ちなみにDeepLabV3のCore MLモデルは公式配布のものが既にある)
Unified Conversion API
新しくなったAPIリファレンスを見ると、
https://coremltools.readme.io/reference/convertersconvert
CONVERTERSの項目に、convertes.keras.convertやconverters.caffe.convertはあるが、PyTorch用のは見当たらない。
どうやらconverters.convertがTensorFlowモデル(1.x, 2.xどちらも)とPyTorchモデルの変換を担うらしく、
Convert TensorFlow or Pytorch models to Core ML model format. Whether a parameter is required may differ between frameworks (see below). Note that this function is aliased as ct.convert in the tutorials.
こちらはUnified Conversion APIと呼ばれている。
https://coremltools.readme.io/docs/unified-conversion-api
このUnified Conversion APIがサポートするフォーマットは以下:
coremltools 4.0b2へのアップデート
betaリリースなので、--preをつける。
$ pip install -U --pre coremltools
実行結果:
Successfully installed attr-0.3.1 coremltools-4.0b2
バージョン確認
import coremltools as ct
ct.__version__
実行結果:
'4.0b2'
PyTorchモデルをCore MLモデルに変換する・・・ための前提知識
基本的にこちらのコード/手順通りにやればできるのだが、
このチュートリアル、そもそもPyTorchのことをよくわかってないまま読むと「なぜその手順が必要なのか」といったことがわかりづらい。まずはこの手順を理解するために必要な前提知識について解説してから、変換の最小実装を示す。
coremltools.converters.convert
新しいUnifiedなコンバータのリファレンスを見ると、convertメソッドの定義は次のようになっていて、
coremltools.converters.convert(model, source='auto', inputs=None, outputs=None, classifier_config=None, minimum_deployment_target=None, **kwargs)
第1引数`model`の説明によると、Pytorch向けには、以下の2種類をモデルを示す値として受け取るようだ。
- A TorchScript object
- Path to a .pt file
TorchScriptとtorch.jit.trace
ここから先は
#WWDC2020 の勉強メモ
堤がWWDC 2020およびiOS 14についてセッションやサンプルを見つつ勉強したことを記事にしていくマガジンです。NDAの都合上、Ap…
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/