SONYのNeural Network Consoleで画像分類

# SONYのNeural Network Consoleで画像分類

**Sony＆レッジのAI開発コンテスト「Neural Network Console Challenge」**
SONYのNeural Network Consoleを用いて、PIXTA提供の10,000枚の写真を素材にした画像分類をするコンテストです。

Neural Network Console Challenge 公式ページ
[https://nnc-challenge.com/](https://nnc-challenge.com/)

# 画像分類のテーマ
リンク先４番目の「上記以外のチャレンジテーマを自由に設定しての応募も可」とあった為、
明治の文豪、森鴎外の短編小説「杯」からキーワードを拾って画像分類テーマを決めました。

小説のストーリーは、７人の少女が持ち寄った杯で泉の水を飲む良く解らない話です。
比喩表現が散りばめられいた抽象的な短編小説です。

著作権が切れているため、青空文庫で読めます。

青空文庫「杯」
[https://www.aozora.gr.jp/cards/000129/files/688_23234.html](https://www.aozora.gr.jp/cards/000129/files/688_23234.html)

この小説には、
>泉を繞めぐる木々の梢には、今まで立ち籠こめていた靄が、まだちぎれちぎれになって残っている。

のように、情景描写が彩り豊かに描かれています。

小説の本編と小説に寄せられた感想やレビューを元に形態素解析を行いました。

<img width="513" alt="keyword.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/2bb3726b-effe-afd4-dc57-6df179a44152.png">

これらのキーワードに当てはまりそうなPIXTAの写真素材を探し、画像の分類項目を選定します。

###10種類の画像分類

#####光 Y0
タイプ：現象
自然光やライトなどの人工光が差し込んでいる画像
![1_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/f84cf7db-2b48-d89a-2f39-f11057a1cf0f.jpeg)![1_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/72ce9763-319e-ff1a-f0ad-727494b9491b.jpeg)

#####梢（こずえ）Y2
タイプ：自然
重なり合った木の画像
![2_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/c3fa9222-f78a-9239-e3af-d23f08fb4343.jpeg)![2_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/f257a5f8-4c7a-ef4f-0989-1ee5592dac20.jpeg)

#####靄（もや）Y3
タイプ：自然
靄がかかった画像

![3_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/21fa9151-d8aa-5abf-26e9-59ce85bd253d.jpeg)![3_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/ac3a3236-dbbb-c613-0328-2d8cde557620.jpeg)

#####藍染　Y4
タイプ：色
青色っぽい画像

![4_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/71664f8e-a9f0-f9ae-d972-3ed1256088a5.jpeg)![4_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/512affcc-8a57-2a58-272f-6782d0fa1d03.jpeg)

#####琥珀　Y5
タイプ：色
琥珀（金色）っぽい画像
![5_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/aed4028e-d4ad-d98f-1154-bb2f9e507f04.jpeg)![5_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/eaf18ae4-56a3-7484-4074-0d3416f9892c.jpeg)

#####白い雲　Y6
タイプ：自然
空に浮かぶ雲の画像
![6_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/9be8e22a-61d4-1c0b-6e37-d5731d601804.jpeg)![6_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/dc47597d-f521-ce7c-c7e3-4d89fa8ba2f8.jpeg)

#####紅の唇　Y7
タイプ：人
レッド系の口紅をつけた人の画像
![7_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/208cfe97-5fd9-cb23-7f52-cc374ab26aa7.jpeg)![7_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/c2f00d01-6b58-94ee-1d5d-a20ae5c49403.jpeg)

#####清冽　Y8
タイプ：形容詞
本来の意味は、澄んで冷たいこと
言葉の雰囲気に近い印象を受ける画像
![8_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/0b038536-9fcc-be68-b7e3-b41197faf4d3.jpeg)![8_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/68b5de8e-5f19-3a28-3d37-a14257ffddea.jpeg)

#####音　Y9
タイプ：現象
音が聞こえてきそうな賑やかな画像
![9_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/100d704f-d0b6-cf09-8866-bb184b311ea5.jpeg)![9_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/22a01a9b-b6f0-7bbe-2a05-01202f671aac.jpeg)

#####杯　Y1
タイプ：抽象
この短編小説のイメージを具体化した画像
（正解（感じ方）は人によって違う）
![10_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/cdbd6788-e552-9525-b25c-e822fc48d773.jpeg)![10_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/841e077a-61ad-0444-0211-6340330d782d.jpeg)

###データセットの用意

**工程１**
ベースになる写真素材を学習用と評価用に分けます。

**工程2**
画像の縦横比が統一されていない為、トリミングで正方形に加工します。
トリミング位置の変更、左右反転、明度変更等の処理等で、各分類ごとに学習用の画像を2,000枚まで増やします。

**工程3**
解像度を128ピクセルにリサイズ

10個のフォルダーに分けた画像を機械学習出来るようにする為には、下記のようなNNC独自のフォーマットで記述されたCSVファイルが必要です。

> x:image	y:label
> ./training/5/0.png	5
> ./training/0/1.png	0
> ./training/4/2.png	4

このファイルは「データセットアップロードツール」を用いることで自動で生成されます。

##Neural Network Consoleで学習
10のカテゴリーに分類される多値分類なので、活性化関数として、複数値のベクトルから合計が1.0になる確率分布にするソフトマックス、学習指標として交差エントロピーを使って計算します。

![Screen Shot 2020-03-31 at 18.46.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/02088227-8a72-8ddb-b23e-83a85c3e581f.png)


最低限必要な設定箇所は、
Inputレイヤーをフルカラー（RGB）の128x128サイズなので、3,128,128に
Affineレイヤーを分類数である10にのみです。

###学習開始
**CPUで学習**
<img width="90%" alt="cpu.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/05e8285d-9045-f2c0-365d-bc9d9962d898.png">
　　　　　　　　　　　　　　　　　4時間経過・・・・・
収束する気配が無いので、**中断**

**GPUで学習**

epoch15　経過時間　1分39秒
<img width="90%" alt="15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/34498818-347b-7d58-d17d-4fd32e343fdc.png">

epoch73　経過時間　6分23秒
<img width="90%"　alt="73.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/164d98cd-4db7-a91d-33bb-043598451a7f.png">

終了　経過時間　8分42秒
<img width="90%" alt="100.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/4edde6b5-c2fa-2d8a-5cf1-d96afad350a7.png">

選択したGPUは、Tesla K80 GBU x1 ですが、この速度の違いたるや

###学習結果の検証
Accuracy（正答率）：0.9785
Avg.Precision：0.9786
Avg.Recall：0.9783
Avg.F-Measures：0.9784
![result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611710/56426545-b7c4-be72-dd2f-94d457905015.png)

Training　0.001333
Validation　0.148384
Best Validation　0.092844@30
CostMultiplyAdd　20,430,904

以上

                              * 学習用データ提供：PIXTA *