🎮

Projected GANsで100枚の画像からゲーミング部屋を生成する

2022/11/12に公開

概要

E資格のコーディング演習でGANをやった時のやつ。
GANの敷居はかなり下がってきている気がする。

ゲーミング系ガジェットYouTuberは、よく視聴者からデスク周りの写真を募集して紹介するんだけど、その写真をGANで生成できたら面白そうだなと思った。

Colabはこちらから↓
https://colab.research.google.com/drive/1FnQDAxl9QvKh-BKwFsCDRWu3EjvPEksk

データ収集

icrawlerを使用してデータを収集する。

from icrawler.builtin import GoogleImageCrawler

google_crawler = GoogleImageCrawler(
    feeder_threads=1,
    parser_threads=2,
    downloader_threads=4,
    storage={'root_dir': 'dataset/grooms'})

google_crawler.crawl(keyword='Gaming Room', max_num=200, file_idx_offset=0)

max_numで画像数を決める。今回は200枚。
後からどうせ削除するので多めにすると良い。

データセットの全貌はこんな感じ。

モデル選定

一般的にGANの学習には大量の学習データが必要になる。

PyTorchのDCGAN Tutorial では、64x64のカラー顔画像を生成するために、Celeb-A Faces datasetという、202,599枚もの顔画像を使用している。
今回用意したデータセットは100枚程度のため、少量のデータセットでも過学習やモード崩壊を起こさないように学習する工夫が必要となる。

以下の3つの方法を試し、比較する。

Data-Efficient GAN

GANの場合、データ拡張を行うと拡張後のデータ分布が学習されてしまうという問題があり、
「水平方向の反転」程度しか行えなかった。
この方法では、リアル画像とフェイク画像の両方を拡張(DiffAugment)することで、
マスキング等の強いデータ拡張を行えるようにした。
Generatorには、Style GAN2を使用する。

Fast GAN

skip-layer channel-wise excitationとself-supervised Discriminatorの導入により、
学習パラメータを大幅に削減。
学習には上記のDiffAugmentも使用することで、少量のデータセットにも対応する。

Projected GANs

Generatorには、上記のFast GANのものを使用する。
Discriminatorには、学習済みモデル(ImageNetで学習させたEfficientNet)の特徴表現を使用する。

学習

全て公式実装を使用する。学習には時間がかかるため、省略する。

結果

GANの評価指標によく使われるフレシェ開始距離(FID)と、実際の生成画像で各モデルを比較する。

各モデルのフレシェ開始距離(FID)を比較

縦軸がFIDで、横軸は時間となっている。
それぞれFIDの算出タイミングがずれているため、横軸は一致していない。

Data-Efficient GANでは、FIDが250程度に収束する。
Fast GANでは、パラメータが大幅に削減されているにもかかわらず、FIDは150程度に収束する。
Projected GANでは、学習済みモデルを用いることで、より低いFID100程度になっている。

各モデルの生成画像を比較する

Data-Efficient GAN

Data-Efficient GANの生成画像では、歪んだ画像、左右対称の画像、色の薄い画像が多く見られた。
学習回数やデータが足りず、あまり上手く行っていない印象。

Fast GAN

Fast GANの生成画像では、歪みが減り、直線的でコントラストがはっきりとした画像が多く見られた。
しかし、各部で画像が荒くなったり、物体の境界が不明瞭になっているもの等があった。
大まかな特徴を捉えた画像は生成出来ているが、細部が上手く生成出来ていない印象。

Projected GAN

Projected GANの生成画像では、細部も比較的上手く生成出来ている。
ただし、データセットに多く含まれているディスプレイや棚は上手く生成出来ているが、
あまり含まれていない床や壁の照明などは上手く生成出来ていない印象。

考察

今回は複数のGANでゲーム部屋の写真生成を行った。
使用した3つのモデルは、下のものほど最新で、下のものは上を引用する形になっている。

Projected GANでの画像生成は、驚くほど低コストかつ高精度で、GANが一般化される瞬間を見た気がした。
しかし、その背景には、DiffAugmentによるデータ拡張、Fast GANによる学習の高効率・高速化、
学習済みモデルの利用等、多くの技術が利用されている。

今回の結果からは、Projected GANの学習済みモデルの利用が、GANの性能向上に最も大きく寄与していると感じた。

Discussion