ひょっとするとすごいぞ！。。。改めpix2pix-starGANなのだ♬

今日、ちょっとstarGANのお勉強したら、なんとなんと。。。
[昨日提案のpix2pix_multiGAN](https://qiita.com/MuAuan/items/b1480465cc706220c8e3)は、以下のようにトポロジカル的には[starGAN](https://github.com/yunjey/StarGAN)だし、同一のGeneratorとDiscriminatorで学習するという意味でも同一のモデルのようだ。そこで、これ以降pix2pix_multiGAN改めpix2pix-starGANと改名することとする。
今回のコードは以下に置いた
[MuAuan/multiGAN](https://github.com/MuAuan/multiGAN) 
#starGANとpix2pix-starGANの類似性
【参考】
[StarGAN:UniﬁedGenerativeAdversarialNetworks forMulti-DomainImage-to-ImageTranslation](https://arxiv.org/abs/1711.09020)
存在は知っていたが、モデルが複雑に見えて違うものと思っていた。しかし、トポロジカル的な意味では、同じだということに気が付いた。
![starGAN無題.png](https://qiita-image-store.s3.amazonaws.com/0/233744/1b0fa45b-23d0-61d1-9c13-7c0a77abcded.png)

###pix2pix-starGANはGeneratorとDiscriminatorで収束させるが、ラベル等外部情報は一切無し
そして上図のキャプションにも記載されているが、基本的に同じ発想だ。
しかし、StarGANでは、Labelを使っているというのが大きな差である。
こちらはpix2pixを用いる構造であり、そのような外部的な要素は存在せず、単にGeneratorとDiscriminatorが連続するドメイン間変換の中で学習していく。
しかも、巷で記載されているようにStarGANやCycleGANが苦手とする、大きな構造変化のドメイン間の変換も特に制限なく学習できる。
【参考】
①[StarGANで顔イラストの表情変換](https://qiita.com/mattya/items/e71ea1d203b110013753)
②[[DL輪読会]StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation](https://www.slideshare.net/DeepLearningJP2016/dlstargan-unified-generative-adversarial-networks-for-multidomain-imagetoimage-translation)

昨日のお約束通り、今回は６連続変換、つまり６連ガチャ（GAN）を試みた。
#モデルの学習について
ドメイン・データはStarGANにちなんで、表情を選んだ。
①すまし顔　②笑顔　③怒り顔　④悔しい顔　⑤泣き顔　⑥変顔　を集めて６グループとした。
しかし、なかなか怒りや悔しい顔はなかったので、ちょっと違っていてもご容赦願いたい。データ数は10個／カテゴリだが、１個／一人である。つまり、一つ一つのデータは、ユニークデータである。
また、以下のように６つの連続的なGANのフィッティングは以下のようなイメージで学習する。
```
j 1100, Epoch1 1100/8001, Time: 4816.475056648254
10/10 [==============================] - 1s - D logloss: 0.5653 - G tot: 4.0634 - G L1: 0.2641 - G logloss: 1.4228
10/10 [==============================] - 1s - D logloss: 0.5687 - G tot: 4.1672 - G L1: 0.2815 - G logloss: 1.3523
10/10 [==============================] - 1s - D logloss: 0.5558 - G tot: 3.8783 - G L1: 0.2498 - G logloss: 1.3799
10/10 [==============================] - 1s - D logloss: 0.5596 - G tot: 3.9424 - G L1: 0.2587 - G logloss: 1.3558
10/10 [==============================] - 1s - D logloss: 0.5605 - G tot: 3.8764 - G L1: 0.2463 - G logloss: 1.4132
10/10 [==============================] - 1s - D logloss: 0.5578 - G tot: 4.6342 - G L1: 0.3240 - G logloss: 1.3942
```
#結果
驚くべきことに、フィッティングのペアは相対ペアが事前というか、瞬間に首尾一貫して同一で決まっている。今回は顔表情ということで、それぞれの人の表情をユニークに使っている。もし、相対ペアがランダムに決定されているのであれば、異なった人の表情で変換されてもよさそうなものである。また、計算時間は363*60sec／5000epoch≒4.356sec／epochであり、前回までの計算時間と比べて特に増加しておらず、GANのプロセスが増加したことによる効果は線形に増えた程度である。そのことからも、相対ペアを決め打ちで選んでいるようにしか見えない。しかし、今回も相対ペアは見事に本人（ここは若い人が見わけつかないし、変顔などもあるので残念ながらたぶんなのだが）のペアを選んでいるように思う。何より本人から始まるチェーンは、本人に戻ってきている。
###素顔⇒変顔⇒泣き顔⇒不満顔⇒怒り顔⇒笑顔⇒素顔
上段：入力
中断：出力
下段：ターゲット元画像
素顔⇒変顔
![current_batch_training5_4900.png](https://qiita-image-store.s3.amazonaws.com/0/233744/d9fbb4b8-058d-1ecb-1509-368b2f791c80.png)
変顔⇒泣き顔
![current_batch_training4_4900.png](https://qiita-image-store.s3.amazonaws.com/0/233744/af284106-308e-738c-1ba7-d3ba6d9a7ef5.png)
泣き顔⇒不満顔
![current_batch_training3_4900.png](https://qiita-image-store.s3.amazonaws.com/0/233744/f8ba6183-4355-e1f9-04d0-d21a294ddd76.png)
不満顔⇒怒り顔
![current_batch_training2_4900.png](https://qiita-image-store.s3.amazonaws.com/0/233744/89b4b5f9-5ede-143f-a9d6-8258375e3128.png)
怒り顔⇒笑顔
![current_batch_training1_4800.png](https://qiita-image-store.s3.amazonaws.com/0/233744/07ebc31a-b474-a3f6-77c0-5254fde5fa25.png)
笑顔⇒素顔
![current_batch_validation0_4800.png](https://qiita-image-store.s3.amazonaws.com/0/233744/6b3f4da1-591c-8101-fbe8-e9166a29a29e.png)
#まとめ
###１．pix2pix_multiGANはpix2pix-starGANである
###２．１つずつはユニークな画像を使って、１０個／カテゴリで６連ガチャ達成
###３．ラベル無しドメイン間のランダム無作為フィッティングで、素顔⇒変顔⇒泣き顔⇒不満顔⇒怒り顔⇒笑顔⇒素顔の順に人を間違えずに変換できた
#課題
###１．データを増加していったとき、汎化はどのように進んでどの程度できるのだろうか
###２．データを増加していったとき、どこまで間違えずに行けるのだろうか