[論文メモ] OUR-GAN: One-shot Ultra-high-Resolution Generative Adversarial Networks
一枚の画像から単純な繰り返しではないUltra-high-resolution(UHR)な画像を生成するフレームワーク。
ここでのUHRな画像はここでの8K(8192 x 5456)や16K(16384 x 10912)。
SinGANとかone-shotでの画像生成はあるが解像度は1K(1024 x 1024)ぐらいが現状。
繰り返し構造を見つけて拡大する方法もあるが、それだと大きな形を生成できないし学習データも大量に必要。UHRな画像を集めるのも大変。
また、UHRな画像を生成するにはかなりのGPUメモリが必要という問題もある。
手法
- 大まかな構成を生成するGlobal Structure Generation
- 画像全体の解像度を上げるIn-memory super-resolution
- GPUメモリの限界を迎えたとき画像をパッチにして解像度を上げるSeamless subregion-wise super-resolution
Global structure generation
大まかな構成となる画像をノイズから生成する。
アーキテクチャはHP-VAE-GANを採用。
HP-VAE-GANは多様な画像を生成できるが画像全体の一貫性が少々弱い(だから大まかな画像生成に使う)。
生成過程は下記式。
はGenerator、は生成した画像、はノイズ、はアップサンプリング。
始めノイズから生成し、のときはpatch VAEで、のときはpatch GANでで生成する。
風景画像には垂直方向に強いバイアスがある。空は上に海は下とか。水平方向はほとんどない。
だからといって座標も入力すると、1枚の画像からの学習では生成結果が座標と強く結びついて多様性が失われる。
そこで垂直方向のみの位置埋め込みを入力する(図4)。
In-memory super-resolution
画像をそのまま受け取り解像度を上げるコンポーネント。
学習済みのESRGANを調整して利用する。zero-shotの超解像系の既存手法も存在するが学習済みESRGANを使ったほうが結果が良かった。
DIV2KとFlickr2Kで事前学習する。
前のステップ(Global structure generation)で生成した画像 にノイズを加えてより高解像度な画像 を得る。はこのステップでのGenerator、はノイズ。
subregion-wise super-resolution
前のステップのように画像全体を入力とするとGPUメモリが不足するようになってからのステップ。
画像をパッチに切り分け、それぞれの解像度を上げていく。
単純に超解像するとパッチを戻したときにパッチ同士の境界の連続性が失われるので工夫する必要がある。
この不連続性の原因はzero paddingにあるとして、既存手法ではパッチ切り出し時点でオーバーラップして切り出すことでzero paddingをなくす手法やzero paddingをなくすためにconvolutionを作り変えるものなどがあるが、ここでは簡単な前者を選択。
オーバーラップは受容野のサイズより大きい必要があるが、理論的な受容野のサイズ(TRF)はネットワークの深さに比例する。
ただ、実際に有効な受容野のサイズ(ERF)を分析するとネットワークの深さの平方根に比例するという既存研究の報告がある。
そこでERFの半径分をオーバーラップした。
オーバーラップのありなしの結果が図7。
Global structure generationのステップのlossは、再構成loss(MSE)、adversarial loss、WGAN-GP lossとKL loss。まさかのAppendix。
次の2つのステップのlossは、再構成loss(L1)、RaGANという手法のadversarial lossとperceptual loss。
所感
既存手法の組み合わせがメイン。
超解像のために学習済みのESRGANを使うのは確かに良さそう。
また、風景画像のバイアスとして垂直方向方向のみの位置埋め込みを使うのはなるほどと思った。今回は1枚の画像からの生成なので座標を位置埋め込みにするのは確かによくなさそう。