Tech Blog

グローバルな家族アプリFammを運営するTimers inc (タイマーズ) の公式Tech Blogです。弊社のエンジニアリングを支える記事を随時公開。エンジニア絶賛採用中!→ https://timers-inc.com/engineering

CreateMLでモデルを作成する時に気をつけた事 #createml #coreml #ios #Xcode #playground

お久しぶりです。iOSエンジニアのかっくん(@fromkk)です。
少し前にFammにアップロードする写真をレコメンドするという案件があったので、CreateMLでCoreML用のモデルを作成して利用する機会があったのですが、気をつけないといけないなと思う事がありました。

CreateMLについて

CreateMLは昨年(2018年)のWWDCで発表されたCoreML用の学習モデルを作成出来るツールでXcodeのPlaygroundに付属しています。
最低限の使い方は macOS 用のPlaygroundファイルを新規作成し以下のコードを実行します。

import CreateMLUI

let builder = MLImageClassifierBuilder()
builder.showInLiveView()

そうすると以下の様な画面が表示されてデータが格納されているフォルダをドラッグ&ドロップするといい感じにモデルを生成してくれます。
詳しくはWWDCの動画を見たり色々記事も上がっていると思うのでそちらを参考にして頂ければと思います。 1

f:id:bboykk:20190220142252p:plain

事前調査・調整

今回やりたかった事はシンプルで、写真の中に犬か猫が写っているかどうかを判別したかっただけでした。
まずは既存のモデルを活用出来ないかと思っていたらAppleがCoreML用にいくつかモデルを提供している事を知り試してみました。

https://developer.apple.com/jp/machine-learning/build-run-models/

ちなみに配布されているモデルは Place205-GoogLeNet 以外はimagenetの1000クラスの学習モデルとの事 2

モデルの検証にはこちらのアプリを作成して検証する様にしました。

github.com

試してみた様子

f:id:bboykk:20190220152011p:plain

f:id:bboykk:20190220151952p:plain

なんとなく言ってる事は分かるんだけど、今回欲しいのは「」か「」かだったので1000カテゴリから該当のモデルだけをまとめてハンドリングするのもなかなか手間だなと思ったので既存モデルを利用することは諦めました。

CreateMLをトライ

ということでCreateMLでモデルを自作する事にしました。
犬や猫の写真を沢山集めてCreateMLに渡してモデルを作ってもらえれば良いと思いデータをかき集めてCreateMLでモデルを作成してみました。

実際に(かわいい)犬や(かわいい)猫の写真を利用して試してみると、いい感じの結果が返ってきました。

f:id:bboykk:20190220152447p:plain f:id:bboykk:20190220152507p:plain

お、いい感じ! と思いきや

f:id:bboykk:20190220152645j:plain

なんと(美味しかった) もつ鍋 が99%以上の確率で犬だと判定されてしまいました😱
今回「犬」と「猫」だけを集めてモデルを作ってみたのですが、「 その他 」を判定する必要があったという事です。

という事で「犬」「猫」に加えて「景色・食事・人・絵画などなど」をその他というラベルを付けて再度学習させてモデルを作成してみました。

f:id:bboykk:20190220160212j:plain

ちゃんと先ほどの(美味しかった)もつ鍋も「その他」に分類されました🎉

その他の判断基準

Appleが配布しているモデルは容量も大きいんですよね。
比べてみるとこんな感じ。

モデル名 サイズ
MobileNet 17.1 MB
SqueezeNet 5 MB
Places205-GoogLeNet 24.8 MB
ResNet50 102.6 MB
Inception v3 94.7 MB
VGG16 553.5 MB

ちなみに今回僕が作ったモデルは 66KB だったのでそもそも桁が違うという事がよく分かります。
但し、CreateMLで作ったモデルはiOS 12以降しか利用出来ない点に注意が必要です。
今回は元々存在したモデルの差し替え作業だったのでiOS 12以上の制限で問題がありませんでした。
どうしてもiOS 11でも利用したい場合は配布されているモデルを利用するか、TuriCreateやCoreML Toolsを利用してモデルを別途作成する必要があります。

まとめ

WWDC 2018で発表されてから使いたいなーと思いながらなかなか使い所が難しかったCreateMLですが、今回初めて案件で利用してみました。
学習モデルを作る時に、「欲しい分類」と「欲しくない分類」が必要だという事が分かりました。
実際の案件では更に「子ども」「大人」「犬」「猫」「その他」というモデルになっています。
弊社には機械学習専門のエンジニアが未だ居ないのですが、iOSエンジニアだけでもここまで分類機能が簡単に作れるというのは本当に感動です。

P.S.

今日僕が33歳の誕生日なので干し芋のリストを置いておきますね

積極採用中!!

子育て家族アプリFammを運営するTimers inc. では、現在エンジニアを積極採用中! 急成長中のサービスの技術の話を少しでも聞いてみたい方、スタートアップで働きたい方など、是非お気軽にご連絡ください! 採用HP : http://timers-inc.com/engineerings

Timersでは各職種を積極採用中!

急成長スタートアップで、最高のものづくりをしよう。

募集の詳細をみる