はじめに
とあるコンテストに向けて後輩と寿司判別するアプリを作りました。
(後輩が特に頑張ってくれて、素材作成は別の後輩に頑張ってもらいました。)
このアプリ実現のために使ったもののノウハウ「Custom Vision Serviceを用いてcoreML用のmlmodelを作成、iOSで推論を行い結果を出力させる」をまとめたかったので、ここにまとめます。
学習データの取得
私たちの所属する団体のメンバーが某大手回転寿司チェーン店に行ったタイミングで寿司の写真を撮ってもらいました。
開発メンバーとも食べに行って撮ったりもしました。
それだけでは勿論足りないので、Webからも画像を収集しました。
そこらへんの話は本件と関係が薄いのでここには書きませんが、ggると沢山情報が出てきます。
Custom Vision Serviceで寿司を学習
Custom Vision Service - Microsoft Azure
こちらにアクセスし「はじめる」を押して、サインインします。
するとこんな感じの画面に遷移するかと思います。
私のやつは既にプロジェクトがありますが、初期状態ではまっさらだと思います。
ここで「New Project」をクリック。
このように適当な情報を入れてプロジェクトを作ります。
このときDomainsの項目はGeneral(compact)を選択しておいてください。
するとこのような画面に遷移します。
後は真ん中の「Add images」ボタンを押して、画像を追加していくだけです。
本当に簡単ですね。ビックリします。
例えばマグロの握りを追加するときはこんな感じで画像+タグをセットしてUploadボタンを押すだけです。
無事に終了するとこんな感じに飯テロ画面が完成します。
早くこんな食べ物を沢山食べられる大人になりたいと思いました。
無料枠で学習できる画像の枚数が1000枚だったので、今回は20種類の寿司ネタに対して50枚ずつ画像を集めました。
(今考えると少ない気がするけれど、そこは今回置いておきます。)
全ての画像をタグ付きでアップロードができれば、後は上にある緑色の「Train」を押すと学習が始まります。
学習が終わったらパフォーマンスを確認してみましょう。
再現率が若干悪いですが、あれだけの枚数でここまでの精度がでました。
本当にすごいですね。
後は、このPERFORMANCEタブの「Export」を押すと
こんな感じで、CoreMLのmlmodelとして学習モデルを吐き出せます。
CoreMLで推論
こちらの記事がとてもわかりやすくて参考にさせてもらいました。
書いてある手順に従って、モデルを読み込み、推論のプログラムを自分たちのアプリに上手く組み合わせることでコンテストに向けたアプリを作りました。
(この記事のことを簡単に試すのなら上記の記事のプログラムだけで動くと思います。)
実行結果
上記の記事のプログラムで作成したモデルから無事に寿司ネタを推論ができているかの確認です。
上手くできていそうですね。
まとめ
高度な技術の話がわからなくても、世の中にあるものを使うだけで気軽にそこそこの精度の寿司分類ができました。
中で何が起こっているのかがよくわからないのは怖いと思うので、ちゃんと技術的な勉強もおいおいやっていきたいなと思いました。