画像認識で「トロ」「サーモン」を判定してみた。by Microsoft Custom Vision Service

##Watsonから少し浮気して、今回はMicrosoft Custom Vision
普段はWatson関係の仕事や登壇が多くて、2年ほど前、IBM Watson関係の勉強会で「Watson Visual Recognitionを使って寿司ネタを判定してみた」ってのを作って何度か登壇時のネタに使ってました。（ネタセッションだけに「寿司ネタ」っていう発想）
<img width="753" alt="スクリーンショット 2018-12-06 13.00.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/45591/cd652b80-77dd-d7c5-527e-32b5bad597b8.png">

その後各社が独自の画像認識モデルを作れるサービスを相次いでリリース。Microsoftさんもすっかりベータも取れてCustom Visionがいい感じに使えるというので、全く同じ学習データでモデルを作成してみました。

##環境準備
うーん、ここ書くのめんどくさいですよね。Microsoft Azureのアカウント作った上で、https://azure.microsoft.com/ja-jp/services/cognitive-services/custom-vision-service/ から「はじめる」ってやるだけです。それだけ。

## Custom Vision Serviceの特徴
 Watsonと比べた場合の感想になります。
- プロジェクト名・クラス名に日本語が使えるのが嬉しい
- プレビューだけど物体認識モデルも作れる
- マルチラベル（例えば、「寿司」でかつ「中トロ」など）と、マルチクラス（いわゆる分類機）が選べる
- 強化学習であるので、元のモデルのドメインを選べる
- ちゃんと学習結果の精度を数字で出してくれる。

この辺りが嬉しいなー。

必要な画像枚数もWatson Visual Recognitionと同様に少なく、今回は１６−７枚ずつ入れました。Watsonの時と同じです。
<img width="621" alt="スクリーンショット 2018-12-06 12.34.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/45591/a18fce52-ec45-2e90-7b20-876faac3bcc8.png">

## 学習データ
今回はWeb検索で出てきたお寿司の画像を放り込みました。ちょっと個人的には炎上案件だったので、「とろ」と「サーモン」を学習させました。枚数は１６−７枚。手元にあった2年前の画像です。決して執筆時点で話題になってる人のことじゃありません。
<img width="1437" alt="スクリーンショット 2018-12-06 12.36.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/45591/a7c35bf7-87b7-25d4-08a1-4b027da70684.png">
<img width="1426" alt="スクリーンショット 2018-12-06 12.36.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/45591/6dd99873-4c52-df79-5d50-014afb58eb6c.png">


## 学習時間速い！！ちゃんと精度表示される
何より学習が早い！「Train」と押したらすぐできちゃった。
そして前述の通り、認識率がちゃんと数字で出てくるのがえらい、、、いや、それ普通だろうよ。うん。
今回枚数も少ないため非常に精度が低い感じになってますが、「やってみた」なのでOKとします。
<img width="1433" alt="スクリーンショット 2018-12-06 13.24.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/45591/ce2ae730-7ae3-7420-22cc-045c3c9cbd66.png">

## テストしてみる
Webの画像では学習データに入ってるかもしれないので、別件セミナーの登壇前に回転寿司のお店に入ってネタ写真を撮ってきたので、それでテストしてみます。ちなみに、回転寿司と書いてあるのに、ネタの名前が書いてあるふだが回っているだけのシュールなお店でした。
![IMG_0075.jpeg](https://qiita-image-store.s3.amazonaws.com/0/45591/7ad12dcc-15dd-0844-e2bc-cbe46dff06d0.jpeg)

## 結果！
<img width="1160" alt="スクリーンショット 2018-12-06 12.40.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/45591/a6f486de-2dd2-8b89-c0ac-2e1e6891fd0c.png">
<img width="1170" alt="スクリーンショット 2018-12-06 12.40.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/45591/d6e92506-dbf7-ee3f-de90-87171dccbfa4.png">

おー、トロ　サーモン　共にちゃんと認識してくれています。Webの画像は横から撮った写真が多いのですが、実際寿司屋で写真を撮ると上からでほぼネタしか見えないことになるので、注意が必要です。

## iOS Core MLへのエクスポート
最近のこの手のサービスはCoreMLへのエクスポートというビジネスモデルぶっ壊し兼ねない機能を備えているのですが、どうやら、ベースモデルのドメイン選択で「compact」となっているものしかエクスポートできないそうです。ということで、「General(compact）」を選択し直して再度学習してみました。

<img width="1434" alt="スクリーンショット 2018-12-06 13.52.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/45591/22681e02-6d2e-f255-dbfe-7535c33d4317.png">
少しだけ精度が上がってる。なんで？

<img width="1143" alt="スクリーンショット 2018-12-06 13.52.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/45591/55c3abdd-d81c-3bf4-509f-93691020891a.png">
<img width="1135" alt="スクリーンショット 2018-12-06 13.53.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/45591/2e263ac8-3a38-b773-e201-8cc84d034e78.png">
結果はやはり良好。

Exportを選ぶと、CoreML以外にも、TensorFlowのモデルやONNXフォーマット（といってもこれはWindows ML用かな？）あとDockerのイメージができるのでそのまま環境が作れます。
<img width="590" alt="スクリーンショット 2018-12-06 13.55.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/45591/a5c47451-ff49-d6af-d887-37c658280eb1.png">


## 感想
Microsoft さんのサービスはいい感じに仕上がってて、なんか画像認識案件があったら使ってみたいなー。あと物体認識はこのあと試してみたいなーと思います。