Microsoft Azure CustomVisionを使って、犬種判別AIモデル作成

# はじめに
AIを学習し始めて3か月ほど、Kaggleなどを用いてAIモデル作成の学習などをしていた。
画像認識に興味を持って、犬が好きだから犬種を画像から判別出来るAndroidアプリを作りたいと思ったのが事の発端。

どうやら、TensorFlowで作成したモデルをtflite(TensorFlow Lite)形式に変換して軽量化すれば、AndroidでAIモデルを使用することが出来るらしいので、tflite形式の犬種判別のAIモデル作成することを一旦のゴールとする。

# TensorFlowを用いて自力で作成
犬のデータセットをここから入手。

http://vision.stanford.edu/aditya86/ImageNetDogs/

大体1種につき200枚ほど、合計120種類ほどの犬種の画像が取得できる。

これを用いて、CNN（畳み込みニューラルネットワーク）を用いて、モデルの作成を行った。
本筋じゃないので経過は割愛するが、結果的にモデルの作成は出来たが、結果は精度18％程。
これでは全然ダメ。
また、モデル作成にGoogleColaboratoryを使用していたが、無償版での性能問題などもあり、自力でモデル作成を行う事を断念した。

# CustomVisionの使用
自力で作成することは難しかったため、既存のAPIを利用してモデルの作成が出来ないかと思い、諸々検索した結果、CustomVisionが出てきた。
早速使ってみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118127/44434d0e-424a-8f0e-8419-a1826c16517a.png)

## リソースの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118127/083a1140-08d3-d657-74bf-7177fcf234c7.png)

作成オプションは予測と学習を行うため両方を選択。
名前に任意の名前を入力して、トレーニング価格レベルを選択すれば完了。
価格レベルは無料で使えるFree(F0)を選択。（別途作成してたので、画像上では注意書きが出てしまっている）

リソースの作成が行えたら、CustomVisionポータルへ移動
https://www.customvision.ai/

サインインを行い、この画面に進めばOK
すぐにAIモデル作成が出来るようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118127/a603ee78-a6ba-8054-c244-934f73e9cc01.png)

## モデル作成
NEW PROJECTを選択するとこのような画面が出るので、自分の要件に合わせて埋めていく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118127/dc43e57a-1e4b-966d-895a-4224b8847f30.png)

今回は画像の分類なので、ProjectTypesはClassification、
1枚の画像に1つの答えを付けていくので、Classification TypesはMulticlass、
最後にDomainsは、TensorFlow Lite形式で出力したいので、General (compact) [S1]を選択。

これらについて、詳しくは下記を参照。

https://learn.microsoft.com/ja-jp/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier

その後は、ひたすらフォルダから画像をアップロードしていき、タグ付けを行っていく。
そこそこ大変だが、複数をまとめてアップロード、タグ付け出来るため、今回のデータセットのように学習用の画像がフォルダ分けされていればすぐ終わる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118127/725ebce6-a19c-6556-a8f1-0f66f33341aa.png)

3000枚ほどの画像のアップロードとタグ付けが完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118127/b156b7f3-158d-2936-3f85-f7817a072ef2.png)

あとは、右上のTrainを押下するのみ。

## モデル作成結果
モデルの作成が完了

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118127/ebd3d503-92c8-6bdb-fabb-3ca82d8939be.png)

結果はこの通り、なんと精度9割越え

■各数値のザックリ説明
- Precsion：精度　画像の分類結果が、設定したタグと合っているかどうか
- Recall：再現性　画像がそもそも犬として判別されているか
- AP：平均精度　精度と再現性から出される数値

詳しくはこちら

https://learn.microsoft.com/ja-jp/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier

作成したモデルを使用してテストを行う事も出来る。
試しに、適当に学習に使用していない柴ちゃんの画像をテストしてみたが、このように99.9％柴犬と判別された。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118127/7872e243-5c07-d194-7826-fd2ff50d7f4a.png)

## モデル出力
あとはこのモデルを出力するだけ。
画面右上のExport -> TensorFlow -> TensorFlow Liteを選択してダウンロードするのみ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118127/fa38251e-02e1-02bf-e90c-46b46c9a79ad.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118127/d9462421-0b2a-e0c1-4ffd-39b825cb9f5f.png)
無事、tflite形式のモデルの作成に成功しました。
あとはこれをAndroidアプリから呼び出すだけ。

# まとめ
正直、CNNを使用して自力で作っていたのが考えられないくらい、簡単に高精度のモデルが作れる。
他にもモデルをExportするだけではなく、直接CustomVisionを呼び出してモデルを利用することもできるらしい。
他にもいろいろなAPIがあると思うが、これらを使う事でAIについてあまり知らなくても直感的にモデル作成を行う事が出来る。

APIを使って実現可能なものであれば、これらを使って学習コストをかなり抑えることが出来ので、
自力でのモデル作成と既存API利用の取捨選択が出来るようになるのが効率が良いと感じた。

次回は他のAPIなども利用してみて、良し悪しをそれぞれまとめてみたい。