![](https://blogimg.goo.ne.jp/user_image/7b/ef/f4fc18a2ef6fe4bcc6f30d09705a22c3.png)
引き続いて、Generative Deep Learning [1] の 4章 Wasserstein GAN with Gradient Penalty (WGAN-GP)のサンプル (wgan_gp.ipynb)[2]を試し、学習の安定性が向上していることは見て取れた。一方で、Gradient Penalty のためにInterpolated imageを使うことによってアーティファクトが発生していた。実用的には単純なinterpolationではなくもっと工夫が必要なことが見て取れた。
このサンプルは、VRAM 6GBのRTX A2000では メモリ不足で実行できなかったが、GPU無し用のdocker imageを使いCPUのみを使って実行した。
このサンプルでは、下記のような64x64のカラー画像の画像セットで学習する。
![](https://blogimg.goo.ne.jp/user_image/46/2c/a75ff1853d00dba068b5afa7a789b557.png)
学習は、1epochあたり判別機の学習をCRITIC_STEPS 回 行って 200 epoch 行う。
まずは、サンプルそのままに CRITIC_STEPS = 3 で実行。
その学習の進捗を50 epochごとに示すと、
1/200
.![](https://blogimg.goo.ne.jp/user_image/7f/fd/b95dc8c21171e74b55bd83581f1e1bfa.png)
50/200
![](https://blogimg.goo.ne.jp/user_image/79/fd/c7c386ec29fd98ae15dc28a24ef647a0.png)
100/200
![](https://blogimg.goo.ne.jp/user_image/7d/4b/9604276e672946ab74821421bf0e6d24.png)
150/200
![](https://blogimg.goo.ne.jp/user_image/78/e9/ba07dd7bd5f93c11adb0a3b752f9c0c2.png)
199/200
![](https://blogimg.goo.ne.jp/user_image/78/64/f7b278d4318b5a6b56a93849e1083dbe.png)
となる。
最終的に生成される画像の例がこちら。
![](https://blogimg.goo.ne.jp/user_image/3f/9c/901e07e356b6cb988c3ea10285245276.png)
教科書figure 4-14の生成例と比べるといまいち。WGAN-GPの学習の安定性を見るために学習と生成を3回行い、その結果を並べてみるとこの通りで、DCGANを試した時と比べるとずっと学習が安定している。しかし、教科書にあるほど良い結果にはなってない。あれは良い画像だけを選んだものかな?
![](https://blogimg.goo.ne.jp/user_image/3f/9c/901e07e356b6cb988c3ea10285245276.png)
![](https://blogimg.goo.ne.jp/user_image/1c/73/077c3a58560c2851ee7a427a49be640a.png)
![](https://blogimg.goo.ne.jp/user_image/2b/92/051867c5596e3c665ed247819bc8d89c.png)
ちなみに、学習にかかった時間は約120分。 マシンは、メモリが16GBでCPUが Core i5 10600 (3.3GHz) 6 コア 12 Thread.
結果がいまいちに思えたので、CRITIC_STEPSを変えて試してみた。CRITIC_STEPSが 2, 3, 5, 7 で最終的な生成画像を並べてみるとこうなる。この結果で言うとサンプルのCRITIC_STEPSはちょっと少なかったかな。ただ回数を増やせば学習の所要時間も増して、それに見合うほどの画質向上が得られるかというところがある。
CRITIC_STEPS=2 使用時間 85分
![](https://blogimg.goo.ne.jp/user_image/5e/d6/ef78036642bca47c4fea384911e19ff0.png)
CRITIC_STEPS=3 所要時間 118分
![](https://blogimg.goo.ne.jp/user_image/2b/92/051867c5596e3c665ed247819bc8d89c.png)
CRITIIC_STEPS=5 所要時間 186分
![](https://blogimg.goo.ne.jp/user_image/66/e1/df358f66985f859ec15b8d57a6c3e99e.png)
CRITIC_STEPS=7 所要時間 253分
![](https://blogimg.goo.ne.jp/user_image/7b/ef/f4fc18a2ef6fe4bcc6f30d09705a22c3.png)
下記は生成された画像の一つだが、二重写しのように見える。思うに、Gradient Penalty のためにオリジナルと生成物の二つをミックスしてほどほどの評価点の物として学習させているため、二重写しもそれなりに受け入れられる画像として学習してしまっているのかと推測した。
![](https://blogimg.goo.ne.jp/user_image/0d/e4/15eaf379747a3e3d5bbe89351cc38d4f.png)
[1] Generative Deep Learning, 2nd Edition by David Foster, Released May 2023, Publisher: O'Reilly Media, Inc. ISBN: 9781098134181
[2] https://github.com/davidADSP/Generative_Deep_Learning_2nd_Edition
このサンプルは、VRAM 6GBのRTX A2000では メモリ不足で実行できなかったが、GPU無し用のdocker imageを使いCPUのみを使って実行した。
このサンプルでは、下記のような64x64のカラー画像の画像セットで学習する。
![](https://blogimg.goo.ne.jp/user_image/46/2c/a75ff1853d00dba068b5afa7a789b557.png)
学習は、1epochあたり判別機の学習をCRITIC_STEPS 回 行って 200 epoch 行う。
まずは、サンプルそのままに CRITIC_STEPS = 3 で実行。
その学習の進捗を50 epochごとに示すと、
1/200
.
![](https://blogimg.goo.ne.jp/user_image/7f/fd/b95dc8c21171e74b55bd83581f1e1bfa.png)
50/200
![](https://blogimg.goo.ne.jp/user_image/79/fd/c7c386ec29fd98ae15dc28a24ef647a0.png)
100/200
![](https://blogimg.goo.ne.jp/user_image/7d/4b/9604276e672946ab74821421bf0e6d24.png)
150/200
![](https://blogimg.goo.ne.jp/user_image/78/e9/ba07dd7bd5f93c11adb0a3b752f9c0c2.png)
199/200
![](https://blogimg.goo.ne.jp/user_image/78/64/f7b278d4318b5a6b56a93849e1083dbe.png)
となる。
最終的に生成される画像の例がこちら。
![](https://blogimg.goo.ne.jp/user_image/3f/9c/901e07e356b6cb988c3ea10285245276.png)
教科書figure 4-14の生成例と比べるといまいち。WGAN-GPの学習の安定性を見るために学習と生成を3回行い、その結果を並べてみるとこの通りで、DCGANを試した時と比べるとずっと学習が安定している。しかし、教科書にあるほど良い結果にはなってない。あれは良い画像だけを選んだものかな?
![](https://blogimg.goo.ne.jp/user_image/3f/9c/901e07e356b6cb988c3ea10285245276.png)
![](https://blogimg.goo.ne.jp/user_image/1c/73/077c3a58560c2851ee7a427a49be640a.png)
![](https://blogimg.goo.ne.jp/user_image/2b/92/051867c5596e3c665ed247819bc8d89c.png)
ちなみに、学習にかかった時間は約120分。 マシンは、メモリが16GBでCPUが Core i5 10600 (3.3GHz) 6 コア 12 Thread.
結果がいまいちに思えたので、CRITIC_STEPSを変えて試してみた。CRITIC_STEPSが 2, 3, 5, 7 で最終的な生成画像を並べてみるとこうなる。この結果で言うとサンプルのCRITIC_STEPSはちょっと少なかったかな。ただ回数を増やせば学習の所要時間も増して、それに見合うほどの画質向上が得られるかというところがある。
CRITIC_STEPS=2 使用時間 85分
![](https://blogimg.goo.ne.jp/user_image/5e/d6/ef78036642bca47c4fea384911e19ff0.png)
CRITIC_STEPS=3 所要時間 118分
![](https://blogimg.goo.ne.jp/user_image/2b/92/051867c5596e3c665ed247819bc8d89c.png)
CRITIIC_STEPS=5 所要時間 186分
![](https://blogimg.goo.ne.jp/user_image/66/e1/df358f66985f859ec15b8d57a6c3e99e.png)
CRITIC_STEPS=7 所要時間 253分
![](https://blogimg.goo.ne.jp/user_image/7b/ef/f4fc18a2ef6fe4bcc6f30d09705a22c3.png)
下記は生成された画像の一つだが、二重写しのように見える。思うに、Gradient Penalty のためにオリジナルと生成物の二つをミックスしてほどほどの評価点の物として学習させているため、二重写しもそれなりに受け入れられる画像として学習してしまっているのかと推測した。
![](https://blogimg.goo.ne.jp/user_image/0d/e4/15eaf379747a3e3d5bbe89351cc38d4f.png)
[1] Generative Deep Learning, 2nd Edition by David Foster, Released May 2023, Publisher: O'Reilly Media, Inc. ISBN: 9781098134181
[2] https://github.com/davidADSP/Generative_Deep_Learning_2nd_Edition
※コメント投稿者のブログIDはブログ作成者のみに通知されます