shu223
coremltools 4.0でPyTorchモデルを直接Core MLモデルに変換する
見出し画像

coremltools 4.0でPyTorchモデルを直接Core MLモデルに変換する

shu223

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)

画像1

ドキュメントも一新され、Examplesのページに"Converting a PyTorch Segmentation Model to Core ML"というセグメンテーションモデルを変換するチュートリアルがあったので、そちらで変換を試してみた。

https://coremltools.readme.io/docs/pytorch-conversion-examples#converting-a-pytorch-segmentation-model-to-core-ml

こんな感じでセグメンテーションを行える。

画像4

(ちなみにDeepLabV3のCore MLモデルは公式配布のものが既にある)

Unified Conversion API

新しくなったAPIリファレンスを見ると、

https://coremltools.readme.io/reference/convertersconvert

CONVERTERSの項目に、convertes.keras.convertやconverters.caffe.convertはあるが、PyTorch用のは見当たらない。

画像2

どうやら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がサポートするフォーマットは以下:

画像3

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モデルに変換する・・・ための前提知識

基本的にこちらのコード/手順通りにやればできるのだが、

https://coremltools.readme.io/docs/pytorch-conversion-examples#converting-a-pytorch-segmentation-model-to-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

この続きをみるには

この続き: 3,539文字 / 画像1枚
この記事が含まれているマガジンを購入する
昨年は書籍という形にまとめましたが、今年はこのマガジンに集約することにしました。 最初は記事が少ないので格安から開始して、充実してくるごとに本来あるべき価格に戻していく予定です。というわけで早いうちに買うと非常にお得です。 昨年の書籍は約80ページ+本に載せなかった事項もたくさん、ということで最終的にはそれなりの量になるのではと思います。

堤がWWDC 2020およびiOS 14についてセッションやサンプルを見つつ勉強したことを記事にしていくマガジンです。NDAの都合上、Ap…

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

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

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