お久しぶりです。iOSエンジニアのかっくん(@fromkk)です。
少し前にFammにアップロードする写真をレコメンドするという案件があったので、CreateMLでCoreML用のモデルを作成して利用する機会があったのですが、気をつけないといけないなと思う事がありました。
CreateMLについて
CreateMLは昨年(2018年)のWWDCで発表されたCoreML用の学習モデルを作成出来るツールでXcodeのPlaygroundに付属しています。
最低限の使い方は macOS
用のPlaygroundファイルを新規作成し以下のコードを実行します。
import CreateMLUI let builder = MLImageClassifierBuilder() builder.showInLiveView()
そうすると以下の様な画面が表示されてデータが格納されているフォルダをドラッグ&ドロップするといい感じにモデルを生成してくれます。
詳しくはWWDCの動画を見たり色々記事も上がっていると思うのでそちらを参考にして頂ければと思います。 1
事前調査・調整
今回やりたかった事はシンプルで、写真の中に犬か猫が写っているかどうかを判別したかっただけでした。
まずは既存のモデルを活用出来ないかと思っていたらAppleがCoreML用にいくつかモデルを提供している事を知り試してみました。
https://developer.apple.com/jp/machine-learning/build-run-models/
ちなみに配布されているモデルは Place205-GoogLeNet 以外はimagenetの1000クラスの学習モデルとの事 2
モデルの検証にはこちらのアプリを作成して検証する様にしました。
試してみた様子
なんとなく言ってる事は分かるんだけど、今回欲しいのは「犬」か「猫」かだったので1000カテゴリから該当のモデルだけをまとめてハンドリングするのもなかなか手間だなと思ったので既存モデルを利用することは諦めました。
CreateMLをトライ
ということでCreateMLでモデルを自作する事にしました。
犬や猫の写真を沢山集めてCreateMLに渡してモデルを作ってもらえれば良いと思いデータをかき集めてCreateMLでモデルを作成してみました。
実際に(かわいい)犬や(かわいい)猫の写真を利用して試してみると、いい感じの結果が返ってきました。
お、いい感じ! と思いきや
なんと(美味しかった) もつ鍋 が99%以上の確率で犬だと判定されてしまいました😱
今回「犬」と「猫」だけを集めてモデルを作ってみたのですが、「 その他 」を判定する必要があったという事です。
という事で「犬」「猫」に加えて「景色・食事・人・絵画などなど」をその他というラベルを付けて再度学習させてモデルを作成してみました。
ちゃんと先ほどの(美味しかった)もつ鍋も「その他」に分類されました🎉
その他の判断基準
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