学習済みStyleGAN2モデルを使って、新規画像を画像編集してみる

#1.はじめに
　前回の[**「StyleGAN2の潜在空間に、新垣結衣は住んでいるのか？」**](https://qiita.com/jun40vn/items/e58974c2aa9839d25a57) では、**学習済みStyleGAN2モデル**は学習に使っていない**新規画像**についても、**高い画像生成能力**を持っていることが分かりました。

　今回は、**学習済みStyleGAN2モデル**を使って、学習に使っていない**新規画像をどの程度画像編集できるか**を見て行きたいと思います。

　なお、コードは Google Colab で作成し Github に上げてありますので、自分でやってみたい方は、この[「**リンク**」](https://github.com/cedro3/StyleGAN2/blob/master/Edit_new_image.ipynb)をクリックし表示されたシートの先頭にある**「Colab on Web」**ボタンをクリックすると動かせます。

＊このブログで使用している画像は全てStyleGAN2の学習には使用していない新規画像です([前回ご紹介した方法](https://qiita.com/jun40vn/items/e58974c2aa9839d25a57)で作成しています)。

#2.Style Mixing とは？
　StyleGANは、今までのGANの様に１個の潜在変数から画像生成するのではなく、Mapping network を使って18個の潜在変数w(これをstyleと呼びます)から画像生成しています。この特徴を生かすと **Style Mixing** と呼ばれる編集が可能になります。

![スクリーンショット 2020-07-08 13.40.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209705/3c344c4f-2277-6a2c-8d27-eb1df795ea9b.png)

　18個の潜在変数**w0〜w17**は、9段階の解像度のレイヤ (4×4, 8×8, 16×16, 32×32, 64×64, 128×128, 256×256, 512×512, 1024×1024)に各2個づつ接続されています。

　解像度によって潜在変数が画像生成に影響する内容は異なり、低解像度では顔の向き、顔の形、髪型など大局的なものに影響し、解像度が上がるに従って、目・口など細部のものに影響します。

　ここで、画像Aと画像Bの**潜在変数wのある部分だけ入れ替える**ことによって2つの**画像の特徴を混ぜ合わせる**ことが出来、これを**Style Miximg**と呼んでいます。

#3.顔の向き
![スクリーンショット 2020-07-08 13.32.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209705/d2e622fd-3521-386b-281a-2285fd27a1c2.png)
　この画像は、青枠の**Row_pic**の潜在変数 **w0, w1** を赤枠の **Col_pic** のものに入れ替えた結果を表しています。**w0, w1 は主に顔の向きやメガネの有無くらいにしか影響を与えない**ので、顔の向きだけを独立して変えることができます。

＊実際は、そのまま置き換えると効きが弱かったので、Col_pic の w0, w1 を1.4倍して、Row_pic と入れ替えています。
　
#4.笑い
![スクリーンショット 2020-07-08 13.52.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209705/ed4583f5-dba5-e395-0f3c-9e588a493b0d.png)
　この画像は、Row pic の **w4, w5** をCol_picに入れ替えたものです。笑いのポイントである**口の形に影響を与えるのは主に w4, w5** です。口の開け方が割とそのまま移動している感じですので、笑い方のニュアンスも編集できそうです。

#5.メガネ
![スクリーンショット 2020-07-08 14.15.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209705/8b06ef2e-d58b-d899-572b-3aa0ac7e7620.png)
　この画像は、Row_picの **w0, w1, w2** をCol_picに入れ替えたものです。**メガネに影響与えるのは主にw0, w1, w2** です。顔の向きと被ってしまうので、顔の向きも同時に変わります。　

　興味深いのは、メガネの形がそのまま移動するのではなく、Row_pic が**個別に持つメガネの属性**があるようです。従って、意図した形のメガネを掛けさせることは難しいです。

#6.若さ
![スクリーンショット 2020-07-08 14.26.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209705/4ed754f8-62ad-a594-6f10-bf5d2f9cf4e0.png)
　この画像は、Row_picの **w4, w5, w6, w7** をCol_picに入れ替えたものです。**顔の形や髪型が影響するw2, w3**はそのままにして、**口の形に影響するw4, w5** と**目の形に影響する w6, w7**だけを入れ替えています。目と口の形を変えると、結構幼さが出ます。

＊実際は、そのまま置き換えると効きが強すぎたので、w4, w5, w6, w7 について、Row_pic : Col_pic＝2:8でミックスして、Row_picに入れています。

#7.歳を重ねる
![スクリーンショット 2020-07-08 14.38.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209705/6b9fb204-f6be-6e09-f1bd-2055cf7b437a.png)
　先程同様、顔の形や髪型が影響するw2, w3はそのままにして、**口の形や目の形に影響する w4, w5, w6, w7 だけを入れ替え**ています。目と口の形を変えるだけでも、少し歳をとった様に見えます。

＊実際は、そのまま置き換えると効きが強すぎたので、w4, w5, w6, w7 について、Row_pic : Col_pic＝4:6でミックスして、Row_picに入れています。

#8.男性化
![スクリーンショット 2020-07-08 14.43.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209705/8fd24750-a8f3-323e-bb82-45681b7f0731.png)
　これはおまけです。同じく、w4, w5, w6, w7だけを入れ替えていますが、結果はイマイチですね（笑）。

#9.まとめ
![スクリーンショット 2020-07-08 16.34.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209705/ea1ccd1b-fb47-363d-d358-84f4aa7a4570.png)

　これは、顔画像の要素と関係する主な潜在変数wをの関係を大まかにまとめたものです。**w8以上はコントラストや色など**への影響に留まり、直接顔の形には影響しないようです。

　学習済みStyleGAN2モデルは**新規画像**についても、**高い画像編集能力を秘めている**ように思います。

（参考）
[StyleGANを遊び尽くせ!! ~追加学習不要の画像編集~](https://qiita.com/pacifinapacific/items/1d6cca0ff4060e12d336)