かぷかぷ笑う

非IT系エンジニアの趣味エンジニアリング

【超訳】Free-Form Image Inpainting with Gated Convolution【論文まとめ】

はじめに

前回FC-FEGANのまとめをしたが、これはDeepfillv2の正統進化だったので、Deepfillv2の論文も読む必要がある。論文の内容自体は落合先生の論文のまとめ方を使って簡単に済ませ、アーキテクチャ全振りでまとめる。ちなみに、この論文は下のFigure 1のようなことができる。

GatedConv_Fig1

論文

どんなもの?

自由な形のマスクで画像を消して、ユーザの好ましい方向性の編集になるようなガイド線を与えることで、画像を補間・修正することができるシステム。 ユーザの不必要な部位を取り除き、画像のレイアウトを修正し、透かしをきれいにし、顔を編集し、そして画像内に新しいオブジェクトをインタラクティブに作成することができるようになる。

先行研究と比べてどこがすごい?

最新の論文に比べて、Places2の自然画像とCelebA-HQの顔画像において、より高品質に自由に画像編集ができるようになった。さらに、semantic(意味のある)、Non-Local(局所的でない)、Free-Form Masks(自由な形のマスク)、User-Guided Option(ユーザが指定できる)である。

技術や手法のキモはどこ?

従来の畳み込みの欠点であった、マスク部分とそうでない部分(さらにその境界)を区別せずに全ての入力を同じフィルタで等価に扱うことをGated Convolutionで克服した。さらに密な画像のパッチにおいて、スペクトルを標準化するSN-Patch GANを提案し、シンプルな式で高速に、安定的に訓練することができるようになった。

どうやって有効だと検証した?

Places2の自然画像とCelebA-HQの顔画像を他手法とを物体の消去、画像編集で比較。また、50人に対して、画像が本物画像か生成画像かを判定してもらう調査で、88.7%が生成画像を本物と信じた。ちなみに本物画像の本物判定率は94.3%である。

議論はある?

特に見当たらない。あえていうなら、Global Discriminatorは本当に必要ないのか。SC-FEGANを読んだ後だと、髪やイヤリングなどの複雑な構造を復元できないことと、色を入力に受け取れないこと、大部分を消去してゴリゴリとスケッチ描いて復元できなさそうなところ。

次に読むべき論文は?

Guilin Liu, Fitsum A Reda, Kevin J Shih, Ting-Chun Wang, Andrew Tao, and Bryan Catanzaro. 2018. Image Inpainting for Irregular Holes Using Partial Convolutions. arXiv preprint arXiv:1804.07723 (2018).

Takeru Miyato, Toshiki Kataoka, Masanori Koyama, and Yuichi Yoshida. 2018. Spectral normalization for generative adversarial networks. arXiv preprint arXiv:1802.05957 (2018).

かな。あとSC-FEGAN(未来形)。

アーキテクチャ詳細

Gated ConvolutionとSN-Patch GANをまとめる。

Gated Convolution

なぜ普通のCNNは自由形式の画像編集がダメなのか

入力を Cチャンネルとして、座標 (y,x)における C'チャンネルのマップを出力する普通のCNNは以下のように計算される。


\begin{align}
O_{y,x} = \sum_{i=-k'_h}^{k'_h} \sum_{j=k'_w}^{k'_w} W_{k'_h+i,k'_w+j} \cdot I_{y+i,x+j},
\end{align}

ただし、 x,yはそれぞれ出力マップの x軸、 y軸であり、 k_hk_wカーネルサイズ、 k'_h=\frac{k_h-1}{2}, k'_w=\frac{k_w-1}{2} W \in \mathbb{R}^ {k_h \times k_w \times C' \times C}は畳み込みフィルタ、 I_{y+i,x+j} \in \mathbb{R}^ {C} O_{y,x} \in \mathbb{R}^ {C'}は入力と出力を表す。簡単のため、バイアスは無視した。 普通のCNNでは同じフィルタが全ての位置に適用されて出力が計算される。画像分類や物体検出では問題ないが、画像編集では穴の外側に有効なピクセルがあったり、マスク部分は浅い層では不鮮明なピクセル、深い層では合成されたピクセルとなっている。これは訓練時に曖昧さを発生させ、色のずれやブラー、はっきりとしたエッジへの反応(ジャギ)のような、視覚効果をもたらしてしまう(ここ参照)。

Partial Convolution(部分畳み込み)

近年、部分畳み込みベースのアーキテクチャが提案され、有効なピクセルのみを畳み込むようにマスキングと再標準化が行われる。数学的には以下のようになり、


\begin{align}
O_{y,x} =
\begin{cases}
\sum \sum W \cdot (I \odot \frac{M}{sum(M)}), & \text{if sum(M) > 0} \\
0, & \text{otherwise}
\end{cases}
\end{align}

 Mはそれぞれのバイナリマスク(0無効、1有効)を表し、 \odotは要素ごとの積(アダマール積)を表す。部分畳み込み後に、マスクを更新する必要があり、以下の式によって、新しい Mが伝搬する。


\begin{align}
m'_{y,x} =
\begin{cases}
1, & \text{if sum(M) > 0} \\
0, & \text{otherwise}
\end{cases}
\end{align}

部分畳み込みは不定形のマスクの画像編集を改善したが、問題が残った。

  1. 有効・無効をヒューリスティックに全ての空間を分類する(0か1のみで、マスクの大きさが考慮されない)。
  2. 追加のユーザの入力を受け取るのに適さない。

Gated Convolution(ゲート付き畳み込み)

画像編集ネットワークのためのゲート付き畳み込みを提案した。制約の強いマスクの更新式の代わりに、ゲート付き畳み込みは自動的にデータから柔軟にマスクを学習する。次の式で表すことができ、


\begin{align}
Gating_{y,x} &= \sum \sum W_g \cdot I, \\
Feature_{y,x} &= \sum \sum W_f \cdot I, \\
O_{y,x} &= \phi(Feature_{y,x}) \odot \sigma(Gating_{y,x}),
\end{align}

ただし、 \sigmaは出力を0から1にするためのシグモイド関数で、 \phiは活性化関数(ReLUまたはLeakyReLU)である。 W_g W_fは異なる畳み込みフィルタである。

ゲート付き畳み込みは、それぞれのそれぞれのチャンネルとそれぞれの空間位置に対して、動的に特徴選択の構造を学習することができる。興味深いことに、背景、マスク、スケッチだけではなく、いくつかのチャンネルではセマンティックセグメンテーションも学習する(Figure 3)。深い層ではゲート付き畳み込みはマスクされた領域とスケッチ情報をそれぞれのチャンネルで強調するように学習し、良い画像編集結果を生成する。

Gated_Conv_Fig2

Gated_Conv_Fig3

SN-Patch GAN

様々な形・場所における複数の穴を自由に画像編集するタスクを考える。global and local GANsMarkovianGANsperceptual lossspectral-normalized GANsより、SN-Patch GANという自由な形式で画像編集できるネットワークを開発した(Figure 4)。 GatedConv_Fig4

Markovian patchesの特徴統計を捉えるために、カーネルサイズ5でストライド2の畳み込みを6層重ねた。そして、 h \times w \times cの異なる場所とセマンティクスに注目した特徴マップにGANを直接適用した。我々の訓練データではそれぞれの場所の領域が入力画像全体を覆うので、グローバルDiscriminatorが重要ではなかった。

近年提案された重みを標準化するテクニックとして、spectral normalizationを採用し、より安定的な訓練を確立した。本物か偽物か見分けるために、目的関数としてヒンジ損失を用いた。


\begin{align}
L_{D^{sn}} &= \mathbb{E}_{x \sim \mathbb{P}_{data}(x)} \left[ ReLU(\mathbb{1}-D^{sn}(x)) \right] + \mathbb{E}_{z \sim \mathbb{P}_{z}(z)} \left[ ReLU(\mathbb{1}+D^{sn}(G(z))) \right], \\
L_G &= - \mathbb{E}_{z~\mathbb{P}_z(z)} \left[ D^{sn}(G(z)) \right].
\end{align}

ただし、 D^{sn}はspectral-normalized discriminatorであり、 Gは画像編集のネットワークで不完全画像 zを受け取る。6つの損失を使うPartialConvとは異なり、pixel-wise  l_1再構築損失とSN-PatchGANの損失のハイパーパラメータ1:1の目的関数とした。

終わりに

Gated Convolutionの普通のConvolutionが画像編集・修復ではダメな理由の議論が面白い。しかし、人間は普通のCNNとGatedを意識して切り替えずに、写真を見て画像を想像上で編集できるし、訓練を積めば自由に写真を元にして絵を描くことができる。今の深層学習はアーキテクチャをタスクに合わせて変えていってるけど、人間はもっと汎用的にタスクをこなしているはずだ。でもこの汎用的ってなんなのかね?やっぱり計算機はシリコン製だからシリコン脳として作る必要があるのかな。

この形式いいね。毎日書けそう(書けない)