Neural Network Consoleを使って五等分の花嫁を学習してみた

# はじめに

機械学習を使って五等分の花嫁の予測をする記事はいくつかあるのですが、最新10巻までのデータを使ったもの、Neural Network Console（以下NNC）を使ったものが無かったので自分の練習がてら試してみました。
**多少のネタバレを含みますので注意してください。**
因みに私は三玖派です。
過程はいいから結果だけ見たい方は[こちら](#判定結果)。

# Neural Network Consoleとは？

[Neural Network Console](https://dl.sony.com/ja/)とは、SONYが開発したディープラーニング・ツールで、ドラッグ＆ドロップでニューラルネットワークを編集できるため、数学やプログラミングの知識がない人でも簡単にディープラーニングを行うことができるツールです。また、学習にはクラウド上のGPUを使うので、頭もPCも低スペックな私でも簡単に学習モデルを作ることができます。
開発者である小林由幸氏自身による[解説動画](https://www.youtube.com/channel/UCRTV5p4JsXV3YTdYpTJECRA)もあるので、そちらも参考にしてみるとわかりやすいです。

# データセットの準備

## 画像収集

今回の労力の7割近く。
kindleからSnipping Toolを使い手動でデータを収集。手動で集めることがこんなに面倒だなんて思わなかった。
のちにリサイズするのでサイズは気にしなくともなるべく正方形に切り取りました。
変装時の扱いですが、顔を見て変装と判断出来ないものは省きました。

![miku.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/15376dbe-3406-e474-007a-c1df6735821b.jpeg)　三玖として学習　![itsuki.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/2ce7d887-2281-5ad5-d50f-d3be2c30eda3.jpeg)　五月として学習　

![nino.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/52590bc6-6952-a766-8335-4262b72b1613.jpeg)　学習させず　　　![miku2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/53329055-3b0f-18d3-1497-a092cf7573d2.jpeg)　学習させず

収集できた画像として
一花 : 574枚
二乃 : 613枚
三玖 : 549枚
四葉 : 555枚
五月 : 500枚
計　 : 2791枚
になりました。

また、データセットを作るときのために、ラベルごとに画像をフォルダ分けして保存しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/28641c63-2e52-2cdf-dcb6-8ffe1cf056a0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/b41a729f-a05a-7903-5c27-ae5a29d18cee.png)




## 画像のサイズを統一

NNCを使ってデータセットを作るには画像のサイズを均等にしなければいけないので、[縮小専用](https://forest.watch.impress.co.jp/library/software/shukusen/)を使い、すべての画像を50px四方に縮小します。

## データセットの作成

アプリ版のNNCにてデータセットを作成します。
DATASETページ上部の「Create Dataset」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/25b1ae98-41b0-9b66-5e08-e74fc3feaf0d.png)

Source Dirにて画像フォルダの入っているフォルダを指定
Output Dirにて作成するcsvファイルの保存先を指定します。
Shaping Modeは、今回はなるべく正方形になるように切り取っているのでResizeを選択します。
モノクロ画像なので1(MonoChrome)を選択。
Outputのサイズは縦横ともに50px。
絵柄の移り変わりなども考えられるのでDataのシャッフルにチェックを入れます。
最後に学習データと評価データの割合とファイル名を入力します。今回は学習8:2評価の割合にしました。
最後にApplyをクリックすればcsvファイルを作成してくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/832aa987-6f25-874d-de64-7a8bb2f3b38c.png)

## csvファイルのアップロード

nnc uploaderを使い、作成したcsvファイルをクラウド版NNCにアップロードします。
クラウド版NNCのDatasetページ上部の「Upload Dateset」をクリック。
現れたタブのhash codeをコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/6fd66c1e-ba02-1bc3-c235-14dda8b920e5.png)

コピーしたhash codeをPasteし、アップロードするcsvファイルを選択した後にstartをクリックするとアップロードが始まります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/0bef4079-b6b0-c78a-4d00-bc867e6e8906.png)

# 画像を学習させる

## プロジェクトの準備

クラウド版NNCのプロジェクトページにて「+ New Project」をクリックし、新しいプロジェクトを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/2f3b723a-f764-c1bc-3f09-3851b1be8d88.png)


作成したプロジェクトページにて先程アップロードしたデータセットをリンクさせます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/8f5698be-664e-72b6-8523-eee4bc378889.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/e7e517ff-107e-27ca-27a8-30724a985d1c.png)

Trainingの項目には学習用のデータセットを、Validationの項目には評価用のデータセットをそれぞれリンクさせます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/8b411406-329e-0aeb-0565-e349b222356c.png)

## 学習モデルの作成

EDITページにて学習モデルを作成→学習→評価→修正の繰り返しを行います。

しかしここで一つ問題が発生
五月の精度だけがどうにも上がらず…　
（インデックスの関係上ラベルの数字は-1になってます）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/f25341f4-ab34-ae0a-9922-857e010d9074.png)

## データセットの修正

過学習も多く見られたので、データの水増しをします。
[画像一括リサイザー](https://www.vector.co.jp/soft/winnt/art/se491652.html)を使い、左右反転した画像を追加、データセットの再作成を行いました。
画像サイズも縦横100pxに変更。

一花 : 574枚 × 2 = 1148枚
二乃 : 613枚 × 2 = 1226枚
三玖 : 549枚 × 2 = 1098枚
四葉 : 555枚 × 2 = 1110枚
五月 : 500枚 × 2 = 1000枚
計　 : 2791枚 × 2 = 5582枚

まで水増し。

## 学習モデルの再作成　

色々な記事を参考に試行錯誤してモデルを作成。
CONFIGページのOptimizerでWeight Decayなどもいじっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/1e495921-2aa7-d256-cf0b-04aa8e1214c4.png)

全体的な精度は約80%になりました。~~五等分の誤答率。~~
これ以上はどうにも中々あがらず…
5人の精度のバランスもいいこのモデルを使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/96acfbbe-6f67-68e9-7d6e-70607c5b90bc.png)

# 花嫁画像の判定

## 判定用のデータセットの作成

判定したい花嫁の画像のみのデータセットを改めて作ります。
ラベルについてはどの数値でも構いません。
学習・評価データと同じようにアップロードし、Validationのデータセットにリンクさせます。
使用したいモデルのTRAININGページにて、改めてRUNボタンを押すことで判定が始まります。

## 判定結果

今回は6枚の画像を判定しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/af79722d-454c-b5e0-94b3-d02e2bf2768a.png)


判定は**五月**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/48f70de4-c62c-1b88-e37f-95f503dc42ad.png)


判定は**一花**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/30ef7b3b-d0ad-061a-8214-fd8a86f1f339.png)


判定は**五月**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/b7482252-71ae-d396-9a4e-040e6e01456d.png)


判定は**一花**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/ebccf552-18f7-542d-8d93-5989c26c9bf2.png)


判定は**五月**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/df00dafa-b9bd-38c0-fd91-6766787c83f0.png)


判定は僅差で**四葉**


ということで大体**一花**か**五月**との結果が出ました。

# 終わりに

精度があと一歩上がらなかったのは、~~愛が足りなかった~~切り取り時に吹き出しなどのノイズが多かったのかなと。
デフォルメだったり、顔だけか頭全体かなど、切り取り方が均等でなかったりと量を求めるあまりにノイズが多くなり質が下がってしまったのが一因かと思われます。勿論全体的な知識不足もありますが。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/316279/da17a920-6f89-cf3f-9485-54fa16d891d0.png)


精度自体はあと一つになしましたが、試行錯誤等は楽しかったのでまた何かに挑戦できればと思います。
~~アルトリア顔やろうと思ったけど多分無理…~~