ロジねこのサービスを作ったときの日本ネコ判定をAzure Custom Visionで作った話

この記事は、[Azure AI Advent Calendar 2019](https://qiita.com/advent-calendar/2019/azure-ai)の19日目の記事になります。

# 1. はじめに
こんにちは、ひで (@blue_islands)です。
こちらは、ネコを見つけるために作ったサービス「**[ロジねこ](https://rojine.co/)**」で利用した[Azure Custom Vision](https://www.customvision.ai )について、説明していきます。
世界のネコ判定なるものはサンプルの画像解析とかAPIとかでよく見かけるのですが、日本ネコの模様を判定するものは存在していなかったので、その日本ネコ判定を作った時の話です。

ちなみに今回作成したサービスの「**[ロジねこ](https://rojine.co/)**」は下のものです。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ネコを見つけるために作ったサービス！ <a href="https://twitter.com/blue_islands/status/1205391345092681729?ref_src=twsrc%5Etfw">2019年12月13日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 2. 日本ネコの種類とは
日本ネコは毛並みの色や柄により、主に以下の6種類に分けられます。

### 白ネコ(white_cat)
真っ白なネコで、目の色は青や金です。左右の目の色が違うオッドアイの場合が多いです。性格は神経質で警戒心が強いため、打ち解けるまでに時間を要することがありますが、その分心を許した時に見せる仕草は格別に感じられるでしょう。

### 黒ネコ(black_cat)
黒ネコは一部に白毛が混ざったネコと、全身が真っ黒のカラスネコに分けられます。多くの黒ネコには白毛が混じっており、遺伝子の関係上、カラスネコは珍しい個体で、次第に数が減少しているようです。
目は大半が黄色で、稀に青い目を持つ黒ネコもいます。
性格は穏やかで人懐っこく、飼い主さんの気持ちを察する賢いネコと言われています。

### 三毛ネコ(calico_cat)
黒・白・茶の配色が一般的ですが、白・茶・こげ茶であればキジ三毛と呼び、縞模様が入っていると縞三毛と呼びます。
遺伝子の関係で大半がメスとして生まれるので、三毛ネコのオスは希少です。
自立心が強い勝気な性格で、他の日本ネコと比べても飼育が難しいとされています。

### サビネコ(rust_cat)
赤と黒のモザイク模様の毛を持つネコで、その見た目はべっこう飴に例えられることもあります。サビネコは三毛ネコの一種なので、ほとんどがメスです。
性格は控えめで大人しく、頭の良いネコが多いとされています。

### トラネコ(tiger_cat)
縞模様のネコで、ベースとなる色によってキジトラやサバトラと呼びます。

* キジトラ…日本ネコの元祖と言われる茶色がベースで、用心深い性格とされていますが、慣れてくるとスキンシップを好むネコもいます。
* サバトラ…灰色をベースとしていて、人懐っこい性格と警戒心の強い性格の両極端に分かれる傾向にあります。

### ブチネコ(spotted_cat)
白に黒や茶色などが入っている二色のネコです。額から八の字のように割れている毛柄を持つネコをハチワレと呼ぶなど、様々なパターンがあります。
性格は白い毛が多ければ白ネコに似ていて、黒い毛が多ければ黒ネコに似ることが多いですが、基本的にはフレンドリーな性格と言われています。
![スライド12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/6ec304f4-389a-d3f5-886a-1669fb9d2b88.png)


# 3. オブジェクトの検出と画像分類との組み合わせ
「Azure Custom Vision」では以下の判定ができます。

* **オブジェクトの検出**<br>
画像をアップロードして学習させることで、独自の画像分類器を構築。オブジェクトの座標もわかる。
* **画像分類**<br>
画像をアップロードして学習させることで、独自の画像分類器を構築。

今回作成する日本ネコ判定の精度を高めるために最初に「オブジェクトの検出」を行い。その後で、「画像分類」を行うようにしています。

このように、複数の判定を工程別に組み合わせることで、精度の高い視覚情報処理を行うことが出来ます。

# 4. Azure Custom Visionを使ってみる。
こちらは、ちょうど良いタイミングで[名古屋でハンズオン](https://cogbot.connpass.com/event/147513/)が行われて勉強になりました。

その時の資料の「[Custom Visionで犬種判別の分類器作成](https://github.com/beachside-project/dog-breed-classification/blob/master/docs/01_create-custom-vision.md)」を参考に「Custom Visionの設定」と「画像分類でネコを分類」をすることができました。
「オブジェクトの検出でネコを抽出」はちょっと調べるだけでできたので、Custom Visionは1日である程度、画像解析ができるので、Azureすげーってなっていました。

# 5. オブジェクトの検出でネコを抽出
オブジェクトの検出のやり方自体、ハンズオンで学んだことプラス、少し設定を変えるだけで、すぐに使えるかと思います。
NEW PROJECT をクリックして新規プロジェクトを作成するときにProject Typesの設定をObject Detectionに変えるとオブジェクトの検出ができるようになります。
![FireShot Capture 108 - Custom Vision - Projects - www.customvision.ai.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/7483e472-6940-f18f-28d8-4a5a55fe248d.png)
そして、ネコの写真をとにかくたくさん集めて登録します。
![FireShot Capture 109 - Custom Vision_ 猫発見機 - Training Images - www.customvision.ai.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/4e57d40c-2d61-4e66-cf9d-d4a82f0765fe.png)
ネコの写真は「ネコ」ってGoogleで画像検索するとたくさん出てくるので、とにかくそれをダウンロードして登録してください。（忍耐あるのみ）

# 6. 画像分類でネコを分類
画像分類については、「[Custom Visionで犬種判別の分類器作成](https://github.com/beachside-project/dog-breed-classification/blob/master/docs/01_create-custom-vision.md)」で解説しているので、説明はしませんが、こちらもネコの写真をとにかくたくさん集めて登録します。
白ネコとか黒ネコとかで検索するといい感じに出で来るので、ひたすら登録、学習をします。
![FireShot Capture 013 - 白ネコ - Google 検索 - www.google.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/f7707943-3985-c74e-d516-aeb08170739f.png)
![FireShot Capture 014 - 黒ネコ - Google 検索 - www.google.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/007ae576-281a-708e-58f9-bbf9acce9ee4.png)
登録してみるとこんな感じ。
![FireShot Capture 107 - Custom Vision_ 日本猫分類 - Training Images - www.customvision.ai.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/aa941b3e-56a5-b7fd-1054-6f865114fdb6.png)

# 7. 使ってみて
実際にアプリ側からAPIとして呼び出し、ネコ写真を登録してみるとこんな感じで判定されました。
![スライド14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/e15075b7-a680-8464-fc2e-6416620bc1a8.png)
ネコ写真のディープラーニングはいいですね。
教師データ集めてすら、癒しになるので、やっているだけで、幸せな気持ちになります。

そんな感じで作りました、「**[ロジねこ](https://rojine.co/)**」を一度、試してみてください。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ネコを見つけるために作ったサービス！ <a href="https://twitter.com/blue_islands/status/1205391345092681729?ref_src=twsrc%5Etfw">2019年12月13日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>