【初心者向け】Azure Custom Vision Serviceを使って写真の天気を判別するモデルを作る

#はじめに
この記事では、Azure Custom Vision Serviceを使って画像分類モデルを作成→トレーニング→テストをする流れについてまとめていきます。
#Azure Custom Visionとは
>Azure Custom Visionは、独自の画像識別子を構築、デプロイ、改良できるようにする画像認識サービスです。 画像識別子は、視覚特性に従って画像に (クラスまたはオブジェクトを表す) ラベルを適用します。 Computer Vision サービスとは異なり、Custom Vision ではユーザーがラベルを指定し、それらを検出するためのカスタム モデルをトレーニングできます。

#今回やりたいこと
写真から天気を判別するモデル作成→トレーニング→テスト
画像は[こちら](https://data.mendeley.com/datasets/4drtyfjtfy/1)から天気認識用のデータセットをお借りしました。

#作業の流れ

##画像の準備
今回は「曇り」「雨」「晴れ」「日の出」の写真を、それぞれ60枚トレーニング用に使用します。

##プロジェクト作成
①Azureにログイン→[Custom Vision](https://www.customvision.ai/projects)に移動。
②新しいプロジェクトを作成
![recipe1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/bef2116b-7ab8-dd7f-5d3b-f9de059fcaf5.png)
③プロジェクト名入力→ドメインなどを選択→「Create project」を押す。

- Classification:画像認識
- Object Detection:物体検出
- Multilabel (Multiple tags per image):1つの画像につき複数タグ付け
- Multiclass (Single tag per image):1つの画像につきタグは1つ
- Domainsで画像の種類を選択。今回はFood（食料）でもLandmarks（ランドマーク）でもRetail（小売）でもないのでドメインはGeneral（全般）を選択

![recipe2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/f56bc5e1-c357-d193-5684-da5a4b57ef26.png)
##学習に使用する画像をアップロード
①「Add image」から画像をアップロード。
![recipe3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/1e1db7fa-f412-5a1a-0209-ee03ee178417.png)
②タグをつけて「Upload ×× files」をクリック。
![recipe4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/bef56a8c-1665-dd0b-98c5-3ee7d01b0f08.png)
③数秒待つとアップロードされる
他の画像も同様にアップロードし、タグ付けをしていく。
![recipe5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/fe7cdbf4-b11d-0d42-d23b-e702b8aed095.png)
##トレーニング
①画像のアップロードとタグ付けが終わったら右上の「Train」をクリック。
![recipe6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/a5a57b6d-ee82-3747-8e63-4dc1ebd29b2b.png)
②Tranining Typeを選択し「Train」でトレーニング開始。
（Advanced Trainingを選択すると1時間以上のトレーニングにかけることができる。）
![recipe6.5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/5bfff8a8-b55d-798c-2e13-c66cb216eedd.png)
③数分待つ。
![recipe7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/42ad389c-7aea-fb1d-0918-d3a1e67457a8.png)
④結果が表示される。
Precision（適合率）は例えば「雨」と判断したもので、実際に「雨」であった確率
Recall（再現率）は例えば「雨」のもののうち、「雨」と判断した確率
APは精度の平均

今回の結果はPrecisionとRecallが97.9%、APは99.9%となりました。
100枚中97枚正しい天気の認識ができるということですね。
下部の表でタグごとの精度も見ることができます。
![recipe8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/824b07f1-0014-05f1-e871-db7db3d222d2.png)
##テスト
①「Quick Test」をクリック。
![recipe8のコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/9d1be757-b925-194b-7a56-820b3bd9e2e5.png)
②テストに使用する写真をアップロード。
![recipe10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/43ed347b-259f-ec55-9737-231319139db3.png)
③予測結果を見る。
こちら日の出の写真ですが、ちゃんとsunriseが100%と予測されました。
![recipe11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/70ac80c8-8017-4eca-729e-a825a6bb597a.png)
曇りの写真も「cloudy」が99.9%で出ています。
![recipe12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/05dec6c7-dafd-2fb1-b506-a46936395e70.png)
晴れも。
![recipe13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/b45a92dd-40da-2834-ccf8-d2ad4ff57597.png)
雨も。
![recipe14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/0396a87c-a173-4b97-2f26-9ea400500df3.png)
また、テストで使用した画像をそのまま再学習に使用することもできます。
![recipe15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/7f3f4668-61f3-8bbe-9677-810c53e3d880.png)
タグを追加して保存するだけ。
![recipe16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655635/4acc195e-6cf7-415d-0647-bb9ebb316037.png)
モデル作成後はExportして利用したり、API連携してアプリケーションと組み合わせることも可能です。
#おわりに
モデルの作成→トレーニング→テストの作業がたったの数分で完了しました。
Azure Cognitive Servicesには、画像系に限らず言語や音声などの解析ができるAPIも用意されているので、そちらも触ってみて記事にしていきたいです。
#参考リンク
https://docs.microsoft.com/ja-jp/azure/cognitive-services/custom-vision-service/overview