LoginSignup
2
0

More than 3 years have passed since last update.

GANに自作イラストを学習させる[前編:実験]

Last updated at Posted at 2019-08-26

概要

DCGANを用いた画像生成に取り組んだので、その記録のための記事になります。
技術的な解説というよりは、実験と考察が主な内容です。ご了承ください。

ゴール:自作イラストをデータセットに用い、GAN(DCGAN)に学習させて画像を生成する。

データセット

趣味でアニメや漫画のキャラクターイラストを描いており、そのイラストを学習用画像に使用しました。

  • 画像サイズ: 200*200
  • チャンネル数: 1 (グレースケール)
  • 枚数: 176
  • 形式: png (透過なし)

2018年4月〜2019年6月までに描かれたものの中から、オリジナル(一次創作)の顔部分を中心に選出しています。
キャラクターの年齢・性別は特に区別していません。

example.png

学習

ソースコードは今さら聞けないGAN (2) DCGANによる画像生成で公開されているものをお借りしました。
Generatorの畳み込み層が画像サイズの200*200に合うようパラメータを調整しています。
また、以下の学習条件を変え、3回ほど学習・画像生成を実行し実験していきます。

  • 潜在変数の次元数
  • 学習用画像枚数
  • 学習回数
  • Discriminator学習の正解ラベルに対するノイズ

1回目

学習条件

  • 潜在変数の次元数: 5
  • 学習用画像枚数: 176
  • 学習回数: 7000
  • ノイズ: 0 (補正なし)

7000イテレーション

mnist_fromFixedValue_7000.png

学習経過GIF

1566452160jUKRxA9pUpJCBeA1566452158.gif

学習経過グラフ

training_7000のコピー.png

所見

もともと10000回学習をまわす予定だったのですが、誤操作で学習が中断されてしまい、7000回までの記録しか残っていません。(もっとも、7000回目の時点で芳しい成果ではないのですが……)
1500イテレーション頃にlossが大きくなり、精度があがらなかったDiscriminatorの学習が進む、という現象が見られました。勝手に「Discriminator革命」と呼んでいます。決定的な特徴量の獲得、人間的に表現すると「偽物を見破るコツを掴んだ」といったところでしょうか。偶然なのかトリガーがあったのか、原因はわかっていません……
後ほど考察しますが、今回の学習の問題点として以下のことが挙げられます。

  • Discriminatorが強くなりすぎ、学習の拮抗が保たれなくなっている
  • モード崩壊の傾向が見られる

1回目の結果をふまえて2回目の学習条件を調整しました。

2回目

学習条件

  • 潜在変数の次元数: 5
  • 学習用画像枚数: 176
  • 学習回数: 10000
  • ノイズ: [正] -0.3 〜 +0.2, [誤] 0 〜 +0.3

9500イテレーション

mnist_fromFixedValue_9500.png

学習経過GIF

15664571007YoIbulQ3dMxmys1566456981.gif

学習経過グラフ

training_9500のコピー.png

所見

Discriminatorが強くなりすぎ、学習の拮抗が保たれなくなっている

ということで、Discriminator学習の正解ラベルにノイズを加え、学習を不安定化させることで、Discriminatorが強くなりすぎないように調整しました。
結果として、GeneratorとDiscriminatorの学習は拮抗しているように見えます。
しかし、1回目と比べて2回目はモード崩壊がより顕著になり、生成画像のノイズも際立つようになっています。

3回目

学習条件

  • 潜在変数の次元数: 10
  • 学習用画像枚数: 352 (176枚を左右反転処理)
  • 学習回数: 4000
  • ノイズ: [正] -0.2 〜 0

3500イテレーション

mnist_fromFixedValue_3500.png

学習経過GIF

1566458241My7Ua2uLrFBlV5X1566458238.gif

学習経過グラフ

training_3500のコピー.png

所見

しかし、1回目と比べて2回目はモード崩壊がより顕著になり、

モード崩壊を避けるための対策として、学習用画像枚数を増やし、潜在変数の次元数を10に設定しました。
モード崩壊の傾向自体は未だにありますが、2回目よりは緩和されているように見えます。

生成画像のノイズも際立つようになっています。

生成画像が荒くなったのは「Discriminatorの学習を不安定化させすぎたため」と考え、ノイズの加え方を見直しました。
学習用画像の正解ラベルにのみノイズを加えるようにし、その幅も小さくなるよう調整しています。
結果、GeneratorとDiscriminatorの学習を拮抗させたままにすることには成功していますが、生成画像が鮮明になったとはいえない状態です。
原因としては、学習用画像枚数に対して学習の回数が不足していることが考えられます。
(なぜ4000イテレーションで学習を止めてしまったのか明確には覚えていないのですが、おそらく学習させるのに時間的な問題があったためと思われます……)

成果

ゴール:自作イラストをデータセットに用い、GAN(DCGAN)に学習させて画像を生成する。
「元になったデータの特徴量を獲得しつつある」 と評価できる程度の成果は見られた
  が、鮮明な画像は得られなかった。

MVPをあげるなら、1回目の3000イテレーション頃は「それっぽい」かなと思います。
item.png

一連の実験に関する反省点

  • 学習回数が統一されていない。統一されていなければ比較にならない。
  • 学習経過を記録するスパンが統一されていない。(500, 1000)

長くなったので、後編:考察パートに続きます。
GANに自作イラストを学習させる[後編:考察]
https://qiita.com/gomahalmaki/items/d34286dcdb0bd49500f5

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0