coremltools 3.3の環境構築(2020年3月版)


Kerasでつくった自作モデルを環境構築したばかりのcoremltoolsで変換しようとするとエラーに次ぐエラーで前進しているのか後退しているのかさえわからない状態になったので、まずはcoremltoolsリポジトリにあるexamplesが実行できるよう環境構築をやり直したメモ。

ちなみに2020.3.1現在でcoremltoolsの最新リリースは3.3

README通りに環境構築(結果的にはNG)

(2020年3月追記:以下は3.1の頃に書いた手順)

前提:仮想環境を利用。筆者はAnacondaを利用してPython 3.7の環境を用意した。

  • coremltoolsをインストール
$ pip install -U coremltools
  • KerasとTensorFlowをインストール
$ pip install keras tensorflow
  • 確認
$ pip freeze

...
coremltools==3.1
...
h5py==2.10.0
...
Keras==2.3.1
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.0
...
tensorboard==2.0.1
tensorflow==2.0.0
tensorflow-estimator==2.0.1
...

  • jupyterもインストール
$ conda install jupyter

公式exampleを試す

Jupyter Notebookを起動して、

を順番に実行していく。

OperatorNotAllowedInGraphError: using a tf.Tensor as a Python bool is not allowed in Graph execution. Use Eager execution or decorate this function with @tf.function.

というエラーで止まるのだが、気になったのが以下のwarning。

WARNING:root:TensorFlow version 2.0.0 detected. Last version known to be fully compatible is 1.14.0 .
WARNING:root:Keras version 2.3.1 detected. Last version known to be fully compatible of Keras is 2.2.4 .

coremltools 3.1のリリースノートではTF 2.xもサポートしてそうに読めたのだが素人なので素直にメッセージに従って環境構築しなおすことにする。

環境構築やり直し(成功)

(2020年3月追記:以下は3.3でも同様の手順で確認済み)

仮想環境のPythonバージョンは先程と同様に3.7coremltoolsのインストールも同じ。

$ pip install -U coremltools

KerasとTFは、先程のwarningに書いてあったcompatibleなバージョンを指定してインストール。

$ pip install keras==2.2.4 tensorflow==1.14.0

jupyterもインストール(この手順はスキップできるかも)

$ conda install jupyter

Jupyter Notebookを起動して、先ほどと同様にUpdatableなMNISTモデルを生成する公式exampleを実行していくと・・・(FutureWarningはたくさん出るものの)最後まで実行成功!🎉Updatableな手書き数字認識の.mlmodelが生成される。

Xcode 11で.mlmodelファイルをプレビューすると、「Update」の欄が追加されていることがわかる。