Core ML の基本部分を使ってみたので公開します。
Core ML とは
まず Core ML は WWDC 2017 で発表されたフレームワークです。
このフレームワークを使うことで、学習済みの機械学習モデルを macOS / iOS / watchOS / tvOS で簡単に利用できるようになります。
すでに学習済みのモデルを使用するためサーバーへのアクセスは不要で、デバイスのスタンドアロンで使えて、かつプライバシも守られるというのがメリットです。
対応している機械学習ライブラリも、 Caffe / Keras / XGBoost / scikit learn / turi / LIBSVM など様々です。
実装サンプル
Xcode9 beta が必要になりますので、インストールします。(要 Developer 登録)
Xcode9 でモデルを組み込みたいプロジェクトを開いて、すでにある学習済みモデル(.mlmodelファイル)を Xcode 上へのドラッグ&ドロップでプロジェクトに追加します。
(モデルのサンプルが開発者向けのサイトで4つ公開されています。いずれも画像解析用のモデルです。※2017/6/21時点)
この時点で、Xcode が .mlmodel ファイルを解釈して、モデルを使うためのクラスを自動生成してくれます。
あとはこのクラスを使うだけです。
使い方をコードで説明します。
let model = Resnet50() // モデルを使うためのクラスを生成
func prediction(image: UIImage) {
// モデルへの入力形式に変換
guard let buffer = buffer(from: image) else { return }
// image をモデルに入力して結果を受け取る
guard let scene = try? model.prediction(image: buffer) else {
fatalError("Unexpected runtime error.")
}
// ラベルに出力
resultLabel.text = scene.classLabel
}
まずは、モデルを使うためのクラスを生成、インスタンス化します。
このモデルが受け取る形式が CVPixelBuffer なので、UIImage をこの形式に変換します。
( buffer() は別途定義しているメソッド)
あとは、変換した CVPixelBuffer を model に食わせてあげると、結果が受け取れます。
最後に結果を出力します。
モデルによって出力と入力の型が違うので、多少実装に差は出てきますが、大まかな流れはこんな感じです。
本当に簡単に機械学習モデルを使うことができました。
.mlmodel ファイルの生成
.mlmodel ファイルを生成するために「Core ML Tools」というものが提供されています。
これは python 製のオープンソースソフトウェアで前記した機械学習ライブラリのファイルから、.mlmodel ファイルを生成するものです。
Appel のセッションでデモされていましたが、こちらも数行のコードを書くだけで動作していました。
所感
いままでも、iOSデバイスなどで機械学習モデルを利用することはできたのですが、
Core ML の発表で、iOS Developer にとっても機械学習がグッと身近なものになっていくと思います。
iOS11 以降で iPhone での体験がより良いものになっていく予感を感じました。