セグメンテーション情報から写真画像生成(SPADE/GauGAN)

はじめに

セマンティックセグメンテーションにより画像からクラスごとのセグメンテーションマスク画像を生成するネットワークモデルは 以前に前景抽出の検討を行う際にDeepLabV3モデルなどとして紹介しましたが、 今回はセグメンテーション情報から写真画像を生成するGANについて紹介します。

紹介するのはNVlabsのSPADEというネットワークを用いたGauGANというモデルです。 学習を行うことでセグメンテーションマスク画像を入力として写真画像を出力するネットワークになります。

以下はオンラインデモで生成した画像です。

SPADE

SPADEは正規化層(normalization layer)により意味情報(semantic information)が喪失(著者は“wash away”と表現)してしまう傾向を改善するために導入した、 空間適応的(非)正規化(SPatially-Adaptive (DE)normalization)と呼ばれる条件付き正規化手法です。 要は正規化層で失った情報をセグメンテーション画像の情報でactivationの調整を行うということです。 実際にSPADEではBatchNormalization層の後に調整を行っています。

入力するセグメンテーション画像は$H\times W\times C$次元の変数($C$はチャンネルつまりセマンティックラベル数)として畳み込み層に送られ、 畳み込み層を通じて変調(modulation)パラメータ$γ$と$β$に変換を行います。 これらのパラメータを使用して正規化層からの出力に対してアフィン変換を行うことで正規化で失った情報が調整されます。 結局この変調パラメータ$γ$と$β$を学習により求めるのがSPADEの目的になります。 もし$γ$と$β$が空間的に一定であればBatchNormalizationやstyleGANのAdaINに相当するためSPADEはそれらの一般化となっていることから、 StyleGANにおける潜在変数変換mlpの代わりとなる生成画像の制御と考えることもできると思います。

セグメンテーション画像に畳み込みを適用し、次いで正規化を行う単純な構造ではうまくいきません。 少数の均一な領域から構成されたものに正規化を行うと情報損失が起こります。 セグメンテーション画像に畳み込みを適用すると同じラベルは全て一様な出力となりInstanceNormを適用するとセマンティックな情報は失われるからです。 代わりにセグメンテーション画像側からの入力では正規化層に通さず、前層からの出力のみに正規化が行われることでセマンティック情報を供給することが可能になります。

実際には生成器はランダムな潜在ベクトルを入力として、 ResNetブロックを用いて各解像度スケールで学習された変調パラメータを各ブロックでサンプリングされます。 また識別器はpix2pixHDの識別器には最小二乗損失をhinge損失関数に置き換えたものを使用しています。

デモコード

https://github.com/NVlabs/SPADE をクローンし、事前学習モデルをダウンロードすれば対応するモデルの画像を生成することができます。 以下のコードのように他のNVlabsのデモとほぼ同じ形で実行することができます。

    python test.py --name [type]_pretrained --dataset_mode [dataset] --dataroot [path_to_dataset]

オンラインデモ

GauGANはオンラインデモを利用することができます。

http://gaugan.org/gaugan2/

入力は生成器がマルチモーダル合成に対応していることからセグメンテーションの他にも出力画像を説明するテキスト、スケッチ、ベース画像などを利用して生成することができ、 いろいろ試してみるととても面白いです。またアプリケーション版も存在しGPUなどの要件を満たせばローカルでも使用可能です。

簡単な使い方

Input utilizationのチェックボックスを"text"のみにしてinput textに生成したい画像の説明を記入します。 下部の"terms and conditions"の説明を読んでチェックボックスにチェックした後、右矢印のrender outputボタンを押すと初期画像が生成されます。 左矢印ボタンを押すと編集側に画像が移るのでそこでセグメンテーション情報などの編集を行います。 テキストから画像を生成するのではなく、代わりに最初からセグメンテーションやスケッチで編集して生成もできますが、生成画像の精度は良くなくうまくいかないことが多いです。

Reference

  1. https://github.com/NVlabs/SPADE
Next Post Previous Post
No Comment
Add Comment
comment url