WonderPlanet Tech Blog

アドバンストテクノロジー部やCTO室のメンバーを中心に最新の技術情報を発信しています。

iOS11 Core ML用モデルをAzureでサクッとつくる方法

こんにちはアドバンストテクノロジー部の@y-matsushitaです。
ついにiPhoneXが発売されましたね!ユーザは新しい体験にワクワクし開発者は未知のUIにドキドキしていることでしょう。
さて、今回はそんなiOSで使えるCore ML用の機械学習モデルをMicorsoft Azureで簡単につくる方法についてご紹介したいと思います。

Core MLについて

過去のブログでも取り上げていますが、iOS11から新たに追加されたアプリ上で機械学習モデルが読み込める機能です。
詳しくは先日のテックブログにまとめておりますので、「まだ読んでないよ」という方は是非そちらもご確認ください!

tech.wonderpla.net

問題点

Core ML用の機械学習モデルを自前で作るのは簡単ではありません。
(学習モデルの生成 & coremltoolsでの変換が必要)
多くの開発者は機械学習を始めようとしても必要な専門知識の量に苦労していることでしょう。

→そんな中Microsoft AzureでCore ML書き出しができるというので実際に試してみました。
 なんとコードを一切書く事なく短時間でCore MLモデルを作成することができます。


Microsoft Azure Custom Vision Service

利用にはアカウント登録が必要です。(要クレジットカード&電話番号)
お持ちでない方は以下のリンクからAzureのアカウントを取得しましょう。
azure.microsoft.com

アカウントが取得できたら、管理パネルにログインしてください。
f:id:y-matsushita:20171031190453j:plain:w600

Projectの作成

CustomVisionの管理パネルを開いたら、「New Project」から新規プロジェクトを作成します。
f:id:y-matsushita:20171031192101j:plain:w600

プロジェクトの情報を入力

f:id:y-matsushita:20171031192140j:plain:w600
Name : プロジェクト名
Description : 説明(省略可)
Domains : Core ML用に作る場合はGeneral(compact)のみ

機械学習用の画像をアップロード

サンプルとして犬と猫の画像を各30枚ほど用意しました。
30枚という枚数は非常に少ないのですが、公式によると30枚程度でも精度はでるとのことです。
f:id:y-matsushita:20171031192315j:plain:w600

これを以下の画面からアップロードします。
f:id:y-matsushita:20171031192349j:plain:w600

アップロード投稿はまとめて行うことができます。
f:id:y-matsushita:20171031192400j:plain:w600

画像にタグ付け

画像にこの画像が何なのか識別するためのタグを付けます。
今回は犬の画像をアップロードするので「dog」とタグをつけておきます。
f:id:y-matsushita:20171031192422j:plain:w750

アップロードが完了すると以下のような見た目になります。
f:id:y-matsushita:20171031192439j:plain:w750

犬の画像のアップロードが完了したら、
猫の画像も犬と同様にアップロードして「cat」とタグを付けておきます。

学習

画面右上の「Train」から学習を開始します。
f:id:y-matsushita:20171031192500j:plain:w750

しばらく待つと学習が完了します。
f:id:y-matsushita:20171031192517j:plain:w750

Core ML用のモデルのエクスポート

PERFORMANCE画面の「Export」から書き出しを行います。
もしここにExportのボタンが存在しない場合、プロジェクト作成時に設定したDomainsが「General(compact)」以外になっている恐れがあるので確認してください。
f:id:y-matsushita:20171031192535j:plain:w750

学習させたモデルがダウンロードできます。
f:id:y-matsushita:20171031192557j:plain:w300

「Export」をクリックすると「Download」ボタンが出てきます。
f:id:y-matsushita:20171031192613p:plain:w750

Core ML用の機械学習モデルを生成するだけでしたら、以上で作業完了です。
ダウンロードしたモデルをXcodeに持っていけばCore MLを活用した画像認識を試すことができます。
Core MLのモデルをアプリに組み込む方法については過去記事内の「学習モデルの取り込み」以降をご参考ください。
Core MLを利用した機械学習とVisionでの画像認識 - WonderPlanet Tech Blog

Core MLのアプリ上での動作結果

実際にアプリに組み込んだ結果は以下の通りです。
f:id:y-matsushita:20171101161524p:plain
iOSアプリに組み込んでも問題なく犬と猫の識別が出来ているようです。
(学習に用いた画像と背景やポーズが違いすぎると画像認識が上手くいかないことがあるようです)
また、Core ML書き出し以外にもAPIから呼び出すことが可能なので、
共通のモデルとして新たに別途作る必要なくWEBサービスなどに組み込む事も可能です。


学習させたモデルのテスト

もし作成したモデルのテストがしたい場合は、Core MLに書き出してXcodeに持っていかなくても
画面右上の「Quick Test」からブラウザ上で動作をチェックすることができます。
f:id:y-matsushita:20171031192637j:plain:w750

テストに使う画像をアップロード

学習に使用していない画像をアップロードします。
f:id:y-matsushita:20171031192655j:plain:w750

テスト結果

f:id:y-matsushita:20171031192713j:plain:w600
100%、catと出ました。少し出来過ぎな感じもしますが、期待通りの結果です。
このようにブラウザ上で画像をアップロードしてテストすることができます。

再学習

もしテストに使用した画像が理想の結果にならなかった場合は、
テストに使用した画像を利用してモデルを再学習させることができます。
f:id:y-matsushita:20171031192735j:plain:w750

新たに学習させたい画像をクリックしたら正解となる正しいタグを選択してセーブしてください。
f:id:y-matsushita:20171031192748j:plain:w750

画像のタグ付けが終わったら忘れず「Train」を実行して、再度モデルを生成しましょう。


最後に

AzureのCustom Vision Serviceは非常に少ない画像枚数でも、Core MLモデルを作り始めることができます。
理由はCustom Vision Service が使用する方法にあるそうで、小さな差異の影響を受けづらいからだそうです。

ただし逆に言えば微妙な差異を検出したいとき (品質保証の小さな割れやへこみなどの検出) にはCustom Vision Service はあまり適さないようです。 また判定の対象となるものが画像内のどこにあるかは今のところ識別しないようです。そのため対象が画像の角のほうに寄っていたり、対象が小さかったりすると識別が上手くいかないこともあるようです。ここらへんは更なる発展に期待ですね。

とはいえコードを一切書くことなく短時間でこの精度のCore MLモデルが作成できたのは、かなり凄いです!
試すのに時間はかからないので一度チャレンジしてみてはいかがでしょうか。