[論文メモ] CM-GAN: Image Inpainting with Cascaded Modulation GAN and Object-Aware Training

arxiv.org

Adobe Research
間違いがあるかもしれないので注意。

大きな欠損のある画像の補完が出来る、cascaded modulation GAN (CM-GAN)の提案。

大きな欠損を補完出来る既存手法としてLaMaやCoModGANがあるが、それでもまだ厳しい。
それはマスクされた補完箇所からの画像の空間的距離依存やグローバルなセマンティクスを扱えないからでそれを解決したい。

なお下記画像はgithubから引用(論文中の画像は当時、貼り忘れられていた)。
多分図2。
f:id:Ninhydrin:20220325101839p:plain

手法

欠損箇所をglobal contextによって作った特徴マップで埋めることカスケード構造を提案

アーキテクチャ

アーキテクチャの全体像は図2を参照。
エンコーダと2つのデコーダからなる。
エンコーダは欠損画像と欠損のマスクを受け取り、マルチスケールの特徴マップ F_e^{(1)},..., F_e^{(L)}を出力する。 Lはスケールの数で F_e^{(L)}が最も小さい解像度の特徴マップ。

全体構造をキャプチャするためのglobal style code  \boldsymbol{s} F_e^{(L)} L_2正則化付きの線形変換によって取得する。
これを潜在変数  \boldsymbol{z} をMapping Networkによって変換して得られた  \boldsymbol w とconcatしてglobal code  \boldsymbol g =[\boldsymbol{s}; \boldsymbol{w}]を作る。global codeはデコーダに利用される。

Global-Spatial Cascaded Modulation

decode時にglobal contextをうまく扱うためにglobal-spatial Cascaded Modulation (CM)を提案。
図2の右側の2つのモジュール、Global Modulation Block (GB)とSpatial Modulation Block (SB) がそれにあたる。
GB、SBともに各ブロックは F^{in}_g F^{in}_sを入力として受け取り F^{out}_g F^{out}_sを出力する( F^{out}_g F^{out}_sが次の F^{in}_g F^{in}_sになる)。詳しく書かれていないが多分 F^{in}_g \boldsymbol sを2Dに変換したものがはじめで、2ブロック以降は前ブロックの出力を受け取る。 F^{in}_sも同じく \boldsymbol sを2Dにしたものとエンコーダの同じ解像度の特徴( F_e^{(l)})をconcatしたものを受け取ると思われる。このあたりは抜け落ちている図に書いてあるのかも。

エンコーダの出力は欠損箇所の特徴がノイジーなのでglobal contextと合わせて単純にデコードしても欠損箇所にアーティファクトが出る(図7参照)。
f:id:Ninhydrin:20220328092603p:plain

そこで欠損箇所の影響をあまり受けない特徴も同時にデコードするカスケードなモデルにする。
2D化した \boldsymbol sとglobal code  \boldsymbol gからデコードするGBのデコーダを用意し、その中間特徴をSBのデコーダに注入する。
SBの各ブロックでは入力をglobal code  \boldsymbol gでmodulationした後、GBの中間特徴 \boldsymbol Xを加工したもので特徴を更新する。
加工はAffine Parameters Network(APN)を通す。擬似コードが以下(間違ってるけどなんとなくわかる)。詳しくは論文参照。
f:id:Ninhydrin:20220328095205p:plain

これによりグローバルな特徴を常に意識しつつ、空間的な特徴もきれいに捉えることが出来る。

Expanding the Receptive Field at Early Stages

エンコーダについて。
単純なFCNだと浅い層の有効な受容野(effective receptive field)の成長が遅い(らしい)。これは既存研究のLaMaでも言及されている。
そのため、欠損部分についておかしな特徴ができてデコーダが苦しむ。

既存手法としてfast Fourier convolution (FFC)があり、FFCを使うと浅い層でも画像全体をカバーできる大きな受容野となる。
既存手法ではFFCボトルネック部分でスタックしていて計算量が多く、ボトルネックは浅めなためglobal contextをうまく処理できず欠損を処理しきれない。
そこで本手法ではエンコーダ自体をFFCで構成することで浅い層の段階で欠損部分を処理して、欠損部分に変な特徴が出ることを防ぐ。

Object-aware Training

実際にアプリケーションとして使う場合、既存手法のようなランダムマスクではなく画像中の不要なオブジェクトを塗りつぶしたようなマスクになる(図4)。
f:id:Ninhydrin:20220328100116p:plain

そこでPanopticFCNを用いてセグメンテーションを学習し、それをマスクに利用する。
FCNによるオブジェクトレベルのセグメンテーションからのサンプリングとランダムな欠損を生成しオーバーラップを計算。しきい値異常のオーバーラップがあった場合はオブジェクトをマスクする(人間が入力する場合のobject removalに相当するマスク)。
それ以下の場合はランダムな欠損を利用する(人間が入力する場合の補完に相当するマスク)。

Training Objective and Masked-R1 Regularization

adversarial lossだけでも良いパフォーマンスだがperceptual lossを追加すると更に改善した。
またマスク以外の領域でgradient penaltyを計算しないことで学習が安定化。
f:id:Ninhydrin:20220328101333p:plain
 mはマスク。

実験・結果

512x512のPlaces2データセット
詳細は論文参照。
f:id:Ninhydrin:20220328101614p:plain

CM-GANは既存手法と比べぼやけておらず細かく生成している印象を受ける。GBとSBの恩恵か。
f:id:Ninhydrin:20220328101526p:plain
f:id:Ninhydrin:20220328101642p:plain


Ablation。各モジュールの有用性。
f:id:Ninhydrin:20220328101715p:plain

所感

メモを書いた当時、論文も投稿されて間もないため論文が正直不十分だった(図の貼り忘れ、図にある特徴が不明 or 間違っている、擬似コードも間違っているなど)。なんか急いでいた感がある。
グローバルな特徴でのみデコードするモデルと空間的な特徴も扱うモデルでのカスケード構造は良さそう。
以前CoModGANを試したとき、たしかに大きな欠損にアーティファクトが出ていた。それを補うためにマスクの影響をあまり受けないグローバルな特徴のみから生成した特徴マップを欠損箇所の補完に利用することでなんとなくグローバルに正しいものが生成できそう。
欠損箇所の特徴がアーティファクトの原因になりそうなのもよく分かる(3x3とかのConvoolutionならなおさら)。