写真の情景を表現するオノマトペ

# Neural Network Console Challenge
ソニーが開発したプログラミングなしでディープランニングを実装できるツールである Neural Network Console（以降 NNC）を用いたコンテストのテーマとして「写真の情景を表現するオノマトペ」を作成

* 内容：NNC を用いて PIXTA の写真素材を画像分類
* 期間：2020年3月4日（水） - 2020年3月27日（金）
* リンク： [Neural Network Console Challenge](https://nnc-challenge.com/)

もともと私自身写真が好きで PIXTA の1万枚の画像に興味があったことと、Neural Network を勉強するのにちょうど良いきっかけと思い応募。4つのテーマのうち、『人物画像を NNC で学習させ新しいオノマトペ（擬音語/擬声語/擬態語）の画像カテゴリ分類を作り出す』のコンテストに参加

# Neural Network の設計と学習

### 設計の方向性

* 写真全体の雰囲気で分類
PIXTA の画像が**情景**に合わせた色合いに出来上がっているので、色合いから情景ごとに分類し、それぞれオノマトペを当てはめた。

* 情景の分類
    1. 海、空など<font color="Blue">**青**</font>を基調とした画像
    2. 森林や草木などの<font color="Green">**緑**</font>を基調とした画像
    3. 古い町並みや紅葉など<font color="Orange">**オレンジ系（暖色系）**</font>の画像
    4. 日没間際や夜景などの全体的に<font color="DarkBlue">**輝度が低い（ダークブルー系）**</font>画像
    5. オフィスや会議などの**白黒**系の色が多い画像 
    6. 複数の人が談笑している<font color="magenta">**明るい雰囲気**</font>の画像
    7. 人の写っていない<font color="brown">**料理**</font>の画像（おまけ）

* オノマトペ
上記1~7の分類に対してそれぞれ以下のオノマトペを割り当てた。
    1. <font color="Blue">キラキラ</font>
    2. <font color="Green">さっそう</font>
    3. <font color="Orange">しっとり</font>
    4. <font color="DarkBlue">しっぽり</font>
    5. シャキッ！
    6. <font color="magenta">わいわい</font>
    7. <font color="Brown">ごくり</font>

### アノテーション
画像ファイルには「絞り値」、「露出時間」、「ISO速度」、「焦点距離」等の情報が含まれるものの、これらの情報から機械的に振り分けることは難しいと判断し、目視にて各場景の特徴量が強く出ているように見える画像を選び 1万枚の中から 808枚を選択した。今回は時間の都合上、特徴量の強く出ている写真のみを抽出したが、時間があればもう少し特徴量の少ない写真を用いた場合の結果についても試してみたい。
下記が画像分類例

* <font color="Blue">キラキラ</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/16c80811-a6a5-0daf-0f39-31e16029acf1.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

* <font color="Green">さっそう</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/207786b4-ed23-a3b3-8715-f3991364c8e5.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

* <font color="Orange">しっとり</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/ee3db36c-e6df-1e4b-057e-beea4a94624a.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

* <font color="DarkBlue">しっぽり</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/912661e7-88e7-8038-e896-bc231b602cf3.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

* シャキッ！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/e70789ce-1b75-dc5e-fe05-31b36ca1bce2.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

* <font color="magenta">わいわい</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/de524f50-7471-7da6-4460-90d4df06d68e.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

* <font color="Brown">ごくり</font>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/f059e816-e84c-2ecc-0ce6-a6d2ef662b61.png)

<div style="text-align: center;">学習用データ提供：PIXTA</div>

### データセットの準備
目視で分類したデータを 64x64 にリサイズし、80% を Train data、20% を Test Dataとして使用

### NNCのモデルの作成
下記に示す Convolutional Neural Network で Train、Test を実施
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/d65e7b27-a5bd-1036-6c9a-6e35a196066b.png)

### 学習の精度向上
最初の Convolution の Kernel Shape を 7x7、5x5、3x3 の3通りについてテスト。それぞれの結果は以下の通りとなった。

|Kernel Shape|7x7|5x5|3x3|
|:---:|:---:|:---:|:---:|
|Accuracy|0.9135|0.9506|0.9506|
|Avg.Precision|0.8954|0.9254|0.9410|
|Avg.Recall|0.9038|0.9422|0.9555|
|Avg.F-Measures|0.8961|0.9308|0.9467|

こちらが一番精度の高かった 3x3 の Confusion Matrix。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/721ffe34-fab2-c1d0-786b-28490802f317.png)

y:label=1 <font color="Green">**「さっそう」**</font>を y'=4 **「シャキッ！」**と誤検出しているケースがいくつかあった。<font color="Green">**「さっそう」**</font>の中に下記のようにいくつか黒色の多い画像が含まれていたのが原因と推測し、こちらを除外して再度学習させたところ以下のような結果になった。なお一部画像除外後の画像の枚数は合計771枚である。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/112ddf6b-d781-fcb0-ccee-7b06fa9a2eae.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

<font color="Green">**「さっそう」**</font>から除外した画像と結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/fbafb7db-fcc2-9eb0-1e1e-dc14b0fa4463.png)

### その他の画像の分類
今回作成したモデルで1万枚の全画像を分類した。今回タイトルに設定した「写真の情景を表現するオノマトペ」には適合しない画像についても分類を実施し、意図した特徴量にて画像を分類できているかを確認することができた。以下分類結果の抜粋である。

* <font color="Blue">キラキラ</font>（y'_0 の確率が高い画像）    
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/d31103c1-4773-af10-419d-2f77fa3f8e6d.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

* <font color="Green">さっそう</font>（y'_1 の確率が高い画像）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/af050825-dd91-d51f-53f2-064d9d9461aa.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

* <font color="Orange">しっとり</font>（y'_2 の確率が高い画像）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/2e0c9cbd-d9fd-f71d-79d9-68fe78271b22.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

* <font color="DarkBlue">しっぽり</font>（y'_3 の確率が高い画像）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/238220ab-2528-1f55-a13f-d9801065a6b3.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

* シャキッ！（y'_4 の確率が高い画像）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/4c3545c0-c7d5-389a-ed69-8c538757b875.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

* <font color="magenta">わいわい</font>（y'_5 の確率が高い画像）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/9d284181-b1a3-d0fd-5672-d674ad96ce27.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

* <font color="Brown">ごくり</font>（y'_6 の確率が高い画像）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606115/359d71f4-9e41-6201-98f5-7d61c5c84a49.png)
<div style="text-align: center;">学習用データ提供：PIXTA</div>

## まとめ
今回初めて NNC を使用した画像分類を実施し、

* NNC がとても使い勝手の良いツールであること
* 色合いや人数、人の有無などを高精度で識別し画像を分類可能なこと
* 目的に合った Dataset を準備することの重要性

について理解することができ有意義な検討を行うことができた。