Custom Vision Serviceから出力したモデルを使ってWindowsML上で物体認識をする（その１　AIモデルの作成と出力）

Windows10 InsiderPreview Build 17110以降にはWindowsMLという機能が搭載されました。
これはAIモデル（onnx形式に対応）を使用するための実行環境です。

今回はCustom Vision Seviceを使ってAIモデル（野菜の判別）を作成し、出力したモデルを使って野菜をリアルタイムで認識するUWPアプリを作成してみます。

##今回開発に使った環境
・Windows10 Pro Insider Preview Build 17110以降（Hyper-V上にVM環境を用意）
・Windows10 SDK Insider Preview 17110以降（[こちら](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK)からダウンロード）
・VisualStudio 2017 Community
・Python2.7 or Python 3.6
・Azure サブスクリプション
・Windows10 IoT Core Insider Preview 17110以降 + RaspberryPi3
・Webカメラ
・学習に使う画像（1種類毎に5枚以上、サイズは6MBまで、プロジェクト毎に5000枚まで）

##参考
こちらのブログの記事を参考にさせてもらいました。
[Mike Taulty : First Experiment with Image Classification on Windows ML from UWP]
(https://mtaulty.com/2018/03/11/first-experiment-with-image-classification-on-windows-ml-from-uwp/)
サイトオーナーは MS UK のエンジニアさんみたいです。

公式ドキュメント
[https://docs.microsoft.com/en-us/windows/uwp/machine-learning/](https://docs.microsoft.com/en-us/windows/uwp/machine-learning/)

##Custom Vison ServiceでAIモデルを作成する

・[Custom Visonサイト](https://www.customvision.ai/)からSIGN INします。
![0.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/aa447697-1f67-8bac-b19c-f3062e0addbc.png)

・New Projectをクリックします。
![1.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/716ce2d2-cd77-fb49-a60d-deb6f49ce878.png)

・Name欄にはプロジェクト名を入力します。（半角英数の方がトラブルが少ないと思います。）
　Domainsは「General (compact)」を選択します。
　「Create project」ボタンをクリックするとプロジェクトが作成されます。 
![2.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/19261a43-bb37-1c87-7925-157d7e916f1d.png)

・「Add images」タブをクリックします。
![3.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/91cf432e-4e18-bd81-2f21-fafaa965e6b6.png)

・「Browse local files」をクリックしてトレーニング用の画像ファイルをアップロードします。今回は種類ごとに20枚の画像を準備しました。
![4.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/077e24ce-e300-abf3-8553-4fa8440d1175.png)

・「My Tags」にタグ名(ラベル）を入力してまとめてアップロードできます。
　（種類ごとにフォルダに分けておいてアップロードするのがいいでしょう）
![5.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/e5e8ee23-8924-b369-26ca-014c8b73e2e7.png)

・アップロードが完了して「Done」をクリックします。種類ごとに繰り返してアップロードします。
![6.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/148fcef8-b5af-7132-9cb1-033c33acd46b.png)

・アップロードが完了したら緑色の「Train」をクリックします。
・トレーニングが完了すると下記のような画面に変わります。「Quick Test」をクリックしてトレーニングの結果を試してみます。
![8.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/3d2ec7b7-d038-b55f-0453-f4392bb6838c.png)

・「Browse local file」をクリックして、トレーニングでは使っていない画像（4MBまで）を選択します。
![9.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/9e8938d1-8b73-bcbd-6ef1-0c57fd483f3f.png)

・Predicions欄にテスト画像を推定したタグ一覧がパーセント表示されます。
![10.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/5521779c-4142-c716-97c6-c3dc3a9d5c73.png)

・これでAIモデルが完成しました。「Export」をクリックしてモデルを出力します。
![11.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/7c44b43a-f4a5-f540-21ca-51b07e8abdd8.png)

・プラットフォームは「iOS」を選択します。
![12.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/ad726d21-048f-28e7-4628-d3f223540d04.png)

・一旦「Export」をクリックして、閉じます。
![13.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/3df1067e-d3cd-6a20-a0b0-25c453c3b39b.png)

・再び「Export」をクリックして、プラットフォームの「iOS」を選択すると「Download」ボタンが
　表示されるので、それをクリックしてモデルファイルをローカルにダウンロードします。
![14.PNG](https://qiita-image-store.s3.amazonaws.com/0/62606/a950d8dc-aa84-d92e-fdfd-aae996fa6ee1.png)


以上でCustom Visonで作成したAIモデルを出力できました。
次は作成したモデルをonnxに変換して、UWPアプリで使用してみます。

[Custom Vision Serviceから出力したモデルを使ってWindowsML上で物体認識をする（その２　モデルデータの変換とクラスの生成）](https://qiita.com/linyixian/items/65e979fa3714a6f1b8af)に続きます。

---
WindowsMLネタ一番乗りだけど、結局Custom Vision Serviceの使い方になっちゃった・・・
次はちゃんとWindowsML出てきます。