ディープラーニングで五十嵐響子と椎名法子を見分けられるか試してみた

# はじめに

グランドレベル中居君のCMでお馴染み「デレステ」や、その派生元である「モバマス」に
登場するキャラクターに「五十嵐響子」と「椎名法子」が居ます。

この二人は初心者には見分けづらいと評判なので、自動で識別できないか試しました。

# キャラ紹介

二人の違いを簡単な表にまとめてみました。
髪型とその色だけで見分けようとすると、結構難しそうです。

|            |五十嵐響子            |椎名法子      |
|:-:         |:-:                   |:-:           |
|属性        |Cute                  |Cute          |
|髪型        |サイドテール          |ポニーテール  |
|髪色        |茶色                  |茶色          |
|年齢        |15                    |13            |
|CV          |種﨑敦美              |都丸ちよ      |

## 五十嵐響子(いがらしきょうこ)
![Kyoko.png](https://qiita-image-store.s3.amazonaws.com/0/199141/0afbfe86-6b09-b991-f266-ebb1b8a7fdba.png)

鳥取県出身で、Cute属性のユニットである「ピンクチェックスクール」に所属しています。
その楽曲「ラブレター」のMVがニコニコ動画で再生数100万回を超えました。

以降、苗字を省略して単に「響子」と呼称します。

## 椎名法子(しいなのりこ)
![Noriko.png](https://qiita-image-store.s3.amazonaws.com/0/199141/ea0e9eae-0c34-fe7d-07e5-d122f52882af.png)

大阪府出身で、同じくCute属性のユニット「メロウイエロー」に所属しています。
ドーナツが大好きで、常時ドーナツを持ち歩いています。

こちらも以降、単に「法子」と呼称します。

# 方法

使用したのは公式イラストのみで、二次創作イラストは使っていません。

ネックとなるのが画像数の少なさで、この二人の公式イラストは数十枚しかありません。
また、アニメ版の登場シーンも僅かなため、畳み込み層の学習に必要な画像数が得られません。

そこで、学習済みのVGG16モデルを用いて特徴を抽出して最後の判定結果を出力する段だけ
この二人の判定に挿げ替える転移学習という方式を使います。

私が参考にした記事はこちらです。
[Deep learningで画像認識⑧〜Kerasで畳み込みニューラルネットワーク vol.4〜](https://lp-tech.net/articles/ks8F9)

## コード

以下にあります。
https://github.com/YankeeDeltaBravo225/fine_tuning
使い方と改変方法も載せてあるので、暇なら自分の好きなキャラで試してみてください。

@kazuki_hayakawa さんの [Keras(Tensorflow)の学習済みモデルのFine-tuningで少ない画像からごちうさのキャラクターを分類する分類モデルを作成する](https://qiita.com/kazuki_hayakawa/items/c93a21313ccbd235b82b)
のGithub上のコードからForkさせてもらいました。

## モデル

上記の記事で詳しく解説されているため、ここでは省略します。

keras.utils.plot_model で図にしたものがこちら。
最後だけが自前の層です。

![model.png](https://qiita-image-store.s3.amazonaws.com/0/199141/169dceb9-fc47-01bd-2648-4c9134965532.png)


## 使用する画像

デレステはまだイラスト数がそこまで無いため、派生元である「モバマス」のイラストを使用しました。
それでも、響子が36枚、法子が30枚しかありません。

法子の30枚の画像のうち、20枚を訓練用、残り10枚をテスト用に割り振りました。響子も同様です。

## データ拡張

さすがに数十枚では厳しいので、伸ばしたり縮めたり回転させたりで枚数を水増しします。
これの処理もKerasでImageDataGeneratorとして用意されています。

パラメータは以下の様にしました。

|パラメータ          |効能                       |使用した値      |
|:-:         |:-:                   |:-:           |
|rescale            |積算するスケール値           |1/255|
|zoom_range         |ランダム拡大縮小             |0.1  |
|rotation_range     |ランダム回転範囲             |10   |
|width_shift_range  |横方向のランダム伸び縮み範囲 |0.2  |
|height_shift_range |縦方向のランダム伸び縮み範囲 |0.2  |
|shear_range        |ランダムなシアー変形        |0.1  |
|channel_shift_range|色チャンネルのランダム変換   |40   |
|horizontal_flip    |ランダム左右反転             |False(デフォルト)|
|vertical_flip      |ランダム上下反転             |False(デフォルト)|


[Kerasによるデータ拡張](http://aidiary.hatenablog.com/entry/20161212/1481549365) が詳しいです。
[Kerasのドキュメントはこちら](https://keras.io/ja/preprocessing/image/)

# 結果

TensorBoardのスクリーンショットをそのまま載せています。

![tensor_board_test.png](https://qiita-image-store.s3.amazonaws.com/0/199141/abbcac1a-9844-ffd2-82c0-cfcdb2ba433d.png)
![tensor_board_val.png](https://qiita-image-store.s3.amazonaws.com/0/199141/f611a9d3-21f1-0a51-0b81-38c6434bfdf5.png)

エポック数が30なので、増やして行けば精度が向上していきそうですが、
40にしたところ逆に悪化してしまいました。
更にもっと増やせば精度が再度上がって行きそうな気配はします。

## デレステのイラストを識別

ここまで、モバマスのイラストを訓練用、検証用に使用してきました。
これでデレステのイラストが識別できるか試してみました。
(モバマスからの流用イラストは除いています。)

### 法子

![result_noriko.png](https://qiita-image-store.s3.amazonaws.com/0/199141/381c5541-1222-66fc-003c-863e4f77939a.png)

|カード                                 |五十嵐響子 |椎名法子率 |正誤|
|:-:                                    |:-:        |:-:        |:-: |
|［Ring♪Ring♪フィーリング］椎名法子   |6.40%      |93.60%     |○  |
|［Ring♪Ring♪フィーリング］椎名法子＋ |0.41%      |99.59%     |○  |
|［Kawaii make MY day！］椎名法子       |6.39%      |93.61%     |○  |
|［Kawaii make MY day！］椎名法子＋     |12.77%     |87.23%     |○  |

### 響子

![result_kyoko.png](https://qiita-image-store.s3.amazonaws.com/0/199141/594d8724-88f5-bd70-8d0a-3f47fd78c524.png)

|カード                                 |五十嵐響子 |椎名法子率 |正誤|
|:-:                                    |:-:        |:-:        |:-: |
|［あったかハート］五十嵐響子           |98.04%     |1.96%      |○  |
|［あったかハート］五十嵐響子＋         | 3.94%     |96.06%     |×  |
|［ラブレター］五十嵐響子               |36.93%     |63.07%     |×  |
|［ラブレター］五十嵐響子＋             | 8.94%     |91.06%     |×  |
|［ドラマティック・ナイト］五十嵐響子   |98.11%     | 1.89%     |○  |
|［ドラマティック・ナイト］五十嵐響子＋ |15.13%     |84.87%     |×  |
|［With Love］五十嵐響子                |50.85%     |49.15%     |○  |
|［With Love］五十嵐響子＋              |64.83%     |35.17%     |○  |

## 感想

デレステの12枚のイラストのうち8枚が正解なのですが、
響子に限って言えば正解率50%なため、
迷ったら法子と判定する微妙な感じになってしまいました。

特に「［あったかハート］五十嵐響子＋」と「［ラブレター］五十嵐響子＋」は
かなり自信満々に誤判定してしまっています。

データ拡張のパラメータを調整したり、エポック数を増やして行けば
もう少しマシな結果になりそうな気はします。

---

声をスペクトログラム化したものをCNNにかけたら声優を識別できないかな。
サンプルの収集が大変そうだけど。