ねこ顔学習のpix2pix(encoder-decoder版)の出力はみんな猫顔になりました！

前の記事の通り、「[女性顔学習のpix2pix(encoder-decoder版)の出力はみんな女性顔になりました！](https://qiita.com/MuAuan/items/0df02cec6cba414937a8)」の続きです。

今度は猫顔抽出して、猫顔を学習させてそれをいろいろな対象のTest出力画像を見てみました。

当たり前かもですが、みんな猫顔になりました。

そして、pix2pix(u-net版)が過学習であるという有力が証拠が見つかりました。
これは、猫顔以上にウワンにとっては重要なことかもしれません。
そして、これまでの中心テーマであった、「pix2pixは１データで学習できる」ことも併せて検証できました。

まあ、以下これら二つのエビデンスにたどり着くまでの経緯を記載していきます。
#まずは猫顔の収集
これが今回一番むつかしそうな事項です。
しかし、実は人の顔と同じアプリで猫や犬の顔を抽出できました。
もちろん、人ほどヒット率というか収集率は上がりませんでしたが、１０個集めればOKなので、犬猫併せて１０個集めることができました。
#早速、猫顔、犬顔の学習
１０カテゴリに１個ずつ、猫か犬の顔データを当てました。
#そして、学習はpix2pix(encoder-decoder版)で実施
ここで、今回は学習させることが主眼なので、TrainデータもTestデータも同じセットを使いました。ただし、TrainはGray画像、Testは輪郭画像としました。
###学習１　Gray画像の学習
train
gray
![current_batch_training1900.png](https://qiita-image-store.s3.amazonaws.com/0/233744/b7cf7161-1796-f901-9322-b118148e1ccc.png)
test
輪郭画像
![current_batch_validation1900.png](https://qiita-image-store.s3.amazonaws.com/0/233744/10bcebbb-65fa-a852-b080-2b71a1b469b3.png)
###学習２　輪郭画像の学習
train
輪郭画像
![current_batch_training1900.png](https://qiita-image-store.s3.amazonaws.com/0/233744/41fa2616-44c5-8205-5771-ac75f1f648e6.png)
test
gray
![current_batch_validation1900.png](https://qiita-image-store.s3.amazonaws.com/0/233744/a419f37e-b7de-5cba-0b0d-a2db19e7c9ee.png)
###学習３　学習のスウィッチ
学習2の後の結果パラメータを使って、gray画像を学習することにしました。これは、テンソルのパラメータは汎用的に学習されていれば、さらに学習しても今までの記憶を失わないだろうという仮説に基づいて実施することにしました。
その結果は以下の通りになりました。
train
gray
![current_batch_training500.png](https://qiita-image-store.s3.amazonaws.com/0/233744/282a1033-2c8f-a9ad-e32e-92e72ba1e355.png)
test
輪郭画像
![current_batch_validation500.png](https://qiita-image-store.s3.amazonaws.com/0/233744/bc6091e1-7779-190d-1e0b-196c9a41b0ee.png)
仮説が成り立っているようです。両方とも最初の100epochから美しい画像を出力しました。
上の画像はねんのため少し回して500epoch時のものです。
１個データなので、500epochといっても６分くらいしかかっていません。
そして以下ウワンにとっては重要な発見をすることになりました！
#pix2pix(u-net版)で学習実施
###学習１　輪郭画像の学習
train
輪郭画像
![current_batch_training600.png](https://qiita-image-store.s3.amazonaws.com/0/233744/ebc1ec2e-ff3b-42c9-aaf1-e307a806a8c8.png)
600epochですが、美しい
test
gray
![current_batch_validation600.png](https://qiita-image-store.s3.amazonaws.com/0/233744/d2b426da-2811-b045-35ba-c55814987f39.png)
やはり、いまひとつ美しくない
###学習２　学習のスウィッチ　gray画像の学習
train
gray
100epoch
![current_batch_training200.png](https://qiita-image-store.s3.amazonaws.com/0/233744/5d5a701f-32e3-e7d0-b9a2-866343bc1ca4.png)
test
輪郭画像
０epoch
![current_batch_validation0.png](https://qiita-image-store.s3.amazonaws.com/0/233744/2dedaeaf-e192-d05a-8d05-2d99762dd9f4.png)
100epoch
![current_batch_validation100.png](https://qiita-image-store.s3.amazonaws.com/0/233744/03427a59-9b7c-7fed-5b68-14155436dc52.png)
そうです！輪郭画像のTestは、最初は覚えていたのですが、たかだか１００epoch１分もたたずに消えてしまいました。
これは、もともと最初にgray画像を学習したときの輪郭画像のTest結果と同一になってしまいました。

**ウワンは、この事実こそ、u-net版pix2pixが汎用性がなく過学習であるという事実なのだと考察します。**

#上記のpix2pix(encoder-decoder版)による猫顔バージョンの適用
###男性に適用
![current_batch_validation2.png](https://qiita-image-store.s3.amazonaws.com/0/233744/7a7f03d7-e68c-2f32-c359-8ebfe706016a.png)
![current_batch_validation3.png](https://qiita-image-store.s3.amazonaws.com/0/233744/f3c95683-a781-3fc3-b4f6-237b3efcfdf2.png)
###飛行機に適用
![current_batch_validation4.png](https://qiita-image-store.s3.amazonaws.com/0/233744/bacfdd3d-6691-a952-a725-c972a43fdd5d.png)
![current_batch_validation0.png](https://qiita-image-store.s3.amazonaws.com/0/233744/f9460061-c5d4-c20c-797d-ae9e4d68a524.png)
###物体に適用
![current_batch_validation2.png](https://qiita-image-store.s3.amazonaws.com/0/233744/8442cbe9-adc7-41d0-d8f6-c23e517f5622.png)

そして、上記の猫や犬の顔はどうも入力画像のタイプによって、変化しているようです。
これについては、もう少し詳しく見てからご紹介することとします。
#まとめ
・pix2pix(u-net版)は過学習である
・pix2pix(encoder-decoder版)は２ペア画像の表裏を学習することにより、効率的に学習できる
・猫・犬顔がいっぱいで、どうやら入力データの種類に依存して変化している
#課題
・まとめの最後に記載したことは、どういう法則に依存しているか不明である
・表裏学習した場合の汎用性の制限は、どちらかを学習継続した場合の汎用性と同じ領域か