これまで、pix2pix(encoder-decoder版)は女性や猫顔学習した後、いろいろなものに適用すると、すべてテンソルが記憶した顔で表現することを見てきた。
これは、一種の記憶であって、それは入力情報から適当に変換して、それらを出現させている。
今回のコードは以下に置いた
MuAuan/cycleGAN-like
cycleGANモデルの原理
pix2pixのチームは、昨年cycleGANを発明した。
junyanz/pytorch-CycleGAN-and-pix2pix
それは、以下のようにあらわされる。
L(G,F,DX,DY ) =LGAN(G,DY ,X,Y ) +LGAN(F,DX,Y,X) + λLcyc(G,F),
ここで重要なことは、Generator(GとF)は異なるGeneratorであり、このモデルでは入力の画像XとCycleで得られた画像X'とのloss
G∗,F∗ = arg min max L(G,F,Dx,Dy ).
G,F Dx,Dy
λLcyc(G,F)
を最小化する。
形式的に以下のように記載できる。
X ⇒ G(Dx) ⇒ Y' ⇒ F(Dy) ⇒ X' min(X'-X)
【参考】cycleGANの説明は以下が詳しい
GANで犬を猫にできるか~cycleGAN編(1)~
cycleGAN元論文
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
pix2pix-cycleGAN-likeモデル
上記の表記で言えば、以下のようなシンプルなモデルである。
X ⇒ G(Dx) ⇒ Y'
Y ⇒ G(Dy) ⇒ X'
cycleGANとの最大の違いは、Generator GとFを同一のGeneratorとし、上記サイクルを何の制限もなく(もちろん当初の制限(X⇒Y'の変換時のロスを最小化するmini(Y'-Y))繰り返すことにより収束させるものである。この手法は厳密にいえば、異なる変換を連続させるているだけであるが、同じGを使って収束させることにより、一つのGでX⇒YとY⇒Xの変換を実施できるようになる。
実施したこと
1.猫・犬顔 ⇒ 男性顔 ⇒ 猫・犬顔の実施
ここでは、データ数は何個でもいいが、今回の例はそれぞれのデータ数は、10個である。
なお、上段:入力 中断:出力 下段:ターゲット元絵
①猫・犬顔 ⇒ 男性顔
②男性顔 ⇒ 猫犬顔
上記となるべく同じ男性画像を選びたいが、個数が少ないため同じ画像は得られない。以下の図を見るとわかるが、適当にフィッティングされているわけではなく、それぞれ男性顔に対して同一の猫・犬顔が対応していることがわかる。
2.難しそうな画像サイクル 猫・犬顔⇒飛行機⇒猫・犬顔の実施
①猫・犬顔 ⇒ 飛行機
②飛行機 ⇒ 猫・犬顔
複雑な変換だと思うが、こちらも取り違えずに相手に巡り合えている。
3.やっぱり複雑と言えば、名画 ⇒ 男性顔 ⇒ 名画
この回は、データ数20個ずつでやりました。
時間2.89s/epoch 10000epoch
①名画 ⇒ 男性顔
②男性顔 ⇒ 名画
一応、対応はしており、サイクリックになっている。
それにしても、名画のほうがよほど緻密な印象を受けるが、その情報をテンソルの記憶が吸収しているように見える。
4.最後に
この2つの画像ペア間の整合性は一体どこから来るのだろうか?
cycleGANもたぶん同様な結果を得ていると思うが、今回10個ずつと20個ずつのグループで実施したが、フィッティングに要する時間はそれぞれ以下の通り
10個グループ 300sec/2000epoch=1.5sec/epoch
20個グループ 2.89sec/epoch
ということで、倍のデータに対してほぼ倍の時間を要している。
このことから、フィッティングは相対で実施しており、当初それぞれのフォルダーにごっちゃに入れられているが、何かを見て相対ペアとしてフィッティングしているものと考えられる。
また、今回の結果はpix2pix(encoder-decoder版)での結果を示したがpix2pix(u-net版)でも以下のとおり、同様な収束性を示した。
まとめ
1.cycleGANとは異なるモデルとして、さらにシンプルな
pix2pix_cycleGAN-likeモデルを提案した
2.このモデルを使うと容易に画像間の変換ができる
3.グループペア間の変換を実施したが、特にペアで与えなくても自ら相対ペアを構成してフィッティングしているようだ
課題
1.相対ペアの構成が何に基づいてなされるのかは、依然不明である。
2.このモデルによって得られるGの表現力はどの領域まで適用できるのだろうか