Mac
WWDC
Swift
coreML
CreateML

Create MLで簡単に機械学習を体験する

実施環境

  • macOS 10.14+
  • Xcode 10.0+

まだ正式リリースされていない情報なので変更の可能性があります。

Image Classification

画像の分類ができる学習モデルの作成方法です。画像に映ったものに対してそれが何なのかラベリングしてくれるモデルです。ドキュメント

データセットの準備

学習させたいクラスの画像データを用意して、9:1とかでトレーニング用とテスト用に分けます。データは少なくとも10枚、それぞれのクラスで同じ枚数分用意してください。(クロスバリデーションとか機械学習ど素人の私は気にしないのでスルーです)

Use at least 10 images per label for the training set, but more is always better. Also, balance the number of images for each label.

また、画像は小さくても299x299pxのもので、実際のユースケースに近い様々な場面の画像にした方がいいです。(回転やノイズを入れるのはできるのでそこまで意識しなくて良さそうだけど)

The images don’t have to be the same size as each other, nor do they have to be any particular size, although it’s best to use images that are at least 299x299 pixels.

画像の名前は何でもよくて、画像を入れているディレクトリ名をクラス名にしておけば大丈夫です。

├── dataset
│   ├── test
│   │   ├── apple
│   │   │   ├ ...
│   │   │   └── 53089209_7eaa21ab1c.jpg
│   │   ├── banana
│   │   │   ├ ...
│   │   │   └── 67485060_673dc47824.jpg
│   │   └── orange
│   │   │   ├ ...
│   │       └── 81014064_ff7a1ca6c0.jpg
│   └── train
│       ├── apple
│       │   ├ ...
│       │   └── 455149905_9cec4da2e5.jpg
│       ├── banana
│       │   ├ ...
│       │   └── 925720160_7005c05f7d.jpg
│       └── orange
│           ├ ...
│           └── 543810773_4ca350eeb5.jpg

こんな感じで配置します。画像集めるのがダルい人は、個人利用であればImageNetからスクリプトなりを書いてまとめて落とせばいいと思います。

トレーニング開始

macOSターゲットのPlaygroundファイルを作成、下記のコードをペッて貼ってExecute Playgroundで実行、Assistant Editorを開きます。

import CreateMLUI

let builder = MLImageClassifierBuilder()
builder.showInLiveView()

fe6997f8-5507-4afd-9d16-d88f4ed8522b.png

こんな画面が出るので、イテレートの回数(各クラスのデータセットを何回処理するか)や、Flip, Rotate, Expose, Shearなどで画像に変化を与えるパラメータの設定ができます。ここに軽く説明が書いてありました。

b5e271a7-9041-463b-8a43-3fdb7395c221.png

あとは先ほど用意したトレーニングデータとテストデータのディレクトリを選んでTrainボタンを押すだけです。画像がピョコピョコ変わっていくのを見ていれば終わります。

77ba7e4d-8d95-4c8e-b81b-03429b7f0ae1.png

Extracting image features from full data set.
Analyzing and extracting image features.
+------------------+--------------+------------------+
| Images Processed | Elapsed Time | Percent Complete |
+------------------+--------------+------------------+
| 1                | 1.57s        | 2%               |
| 2                | 1.87s        | 4%               |
| 3                | 2.05s        | 6.25%            |
| 4                | 2.23s        | 8.25%            |
| 5                | 2.39s        | 10.25%           |
| 10               | 3.18s        | 20.75%           |
| 25               | 5.80s        | 52%              |
| 48               | 9.48s        | 100%             |
+------------------+--------------+------------------+

めっちゃPCが重くなりますが、デフォルトの設定で3クラスの画像20枚を学習させたら数十秒で学習が終わりました。すごい早いです。サイズも33KBという小ささです。

Create ML leverages the machine learning infrastructure built in to Apple products like Photos and Siri. This means your image classification and natural language models are smaller and take much less time to train.

SiriとかPhotosの学習基盤を使用しているからだとか。ブラックボックス過ぎてよくわからないけどすごい。転移学習させてるってことなんですかね。

******CONFUSION MATRIX******
----------------------------------
True¥Pred apple   banana  orange  
apple     4       0       0       
banana    0       4       0       
orange    0       0       4       

******PRECISION RECALL******
----------------------------------
Class  Precision(%)   Recall(%)      
apple  100.00         100.00         
banana 100.00         100.00         
orange 100.00         100.00    

結構異なる場面のテスト画像を与えてみたのですが、100%の正答率です。本当にしゅごい。

MLModelの書き出し

4eaa95da-421f-4812-8938-2bada720444e.png

この画面が出ればMLModeファイルの出力先や名前などを指定して保存ができます。または既に/var/folders/mh/foo/bar/baz.mlmodelに出力したってログに出ているのでコピってくれば良いです。

実機で試すのであればこのサンプルのMLModelを入れ替えてビルドすればいいです。下の画像はサンプルアプリの画面です。

-            let model = try VNCoreMLModel(for: MobileNet().model)
+            let model = try VNCoreMLModel(for: Fruits().model)

UNADJUSTEDNONRAW_thumb_1217.jpg

上記はMLImageClassifierBuilderでPlayground上で行なっていますが、本格的に導入する場合はBuilderが内部で使用しているMLImageClassifierを使ってmacOSアプリで運用するのがいいのかなと思いました。

Text Classification

自然言語テキストを分類できる学習モデルの作成方法です。文章のようなテキストが何を表しているのかラベリングしてくれるモデルです。

眠くなっちゃったので後日書きます。

Categorization and Quantity Estimation

データの分類や量の推定ができる学習モデルの作成方法です。上記のふたつは画像と自然言語に特化してますが、それ以外のゲームの勝ち負けや価格の推定などを行う汎用的なモデルです。

おなかが空いちゃったので後日書きます。