SinGAN: Learning a Generative Model from a Single Natural Imageを読んだのでメモ
はじめに
SinGAN: Learning a Generative Model from a Single Natural Imageを読んだのでメモ. 一言で言えば1枚の学習画像からGANを学習するという研究.
Method
目標は一枚の学習画像のinternal statistics(1枚の画像が従う分布という理解)をGANによって捉えることで,構成はほぼ通常のGANと変わらない.違いとしては学習データが1枚で,1枚の画像からイテレーションごとにランダムに切り抜かれたパッチを学習に用いる.これはinternal distirbutionを異なるスケールで捉えることを目的としてる.
Multi-scale architecture
SinGANはそれぞれ異なる解像度を生成する個のgenerator (が最も解像度が低い)とそれぞれのGeneratorに対応する解像度のDiscriminator ,学習画像のパッチを使って学習が行われる.GeneratorとDiscriminatorの受容野は全て同じとのこと.をダウンサンプリングのスケールファクターとする.
はガウスノイズから画像を生成する,.はすべてガウス乱数と前段のGeneratorの出力画像を入力とする.
はスケールファクターのアップサンプリングを表す.Generatorの構造はすべて同じ(論文のFig. 5)で,この構造によりアップサンプリングによって得られた画像の詳細な部分をノイズ成分に基づいて推論するような働きをする.
はConv(33)-BatchNorm-LeakyReLUを5ブロック積み重ねたCNNでチャネル数はが32で,スケールが上がるごとに2倍に増やしていくとのこと.
Training
学習はWGAN-GPのAdversarial Lossと再構成誤差からなる.
Adversarial lossはinternal distributionを捉えるためでreconstruction lossは特定のノイズがを生成することを保証する.WGAN-GPに関する部分は割愛.Reconstruction lossに関して,を生成することを保証するため,まず固定のガウスノイズを設定する.ただし,は学習中にサンプリングされたノイズを固定して使うとのこと.この固定ノイズを使って損失を計算する.
まとめ
手法自体はほぼ従来のGANと変わらず,生成画像のクオリティはめちゃくちゃ高い.PyTorch実装も公開されており簡単に試すこともできる.