shimopino / papers-challenge

Paper Reading List I have already read
30 stars 2 forks source link

InstaGAN: Instance-aware Image-to-Image Translation #100

Open shimopino opened 4 years ago

shimopino commented 4 years ago

論文へのリンク

[arXiv:1812.10889] InstaGAN: Instance-aware Image-to-Image Translation

著者・所属機関

Sangwoo Mo, Minsu Cho, Jinwoo Shin

投稿日時(YYYY-MM-DD)

2018-12-28

1. どんなもの?

インスタンス情報を利用することで物体の形状変化も行える画像変換モデルのInstaGANを提案した。本研究では(1)インスタンス情報を利用するネットワーク構造、(2)インスタンスに関する損失関数、(3)インスタンス数が多い場合の計算方式を提案しており、従来のCycleGANを上回る画像を生成できている。

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

3. 技術や手法の"キモ"はどこにある?

InstaGANでは特定ドメインXの画像に紐付いているA個のインスタンス情報をセグメンテーションマスクとして使用する。つまり(X,A)の空間を(Y,B)の空間に投影するような関数を学習させることが目的となる。

インスタンス情報を活用することでモデルは各物体を分離してドメイン変換が行うことが可能となり、生成結果をより正確にすることが期待される。

以下ではドメインXから異なるドメインYに変換するモデルをGXYで表現している。 

3.1 InstaGAN Architecture

InstaGANのベースはCycleGANでありCycle-Consistency損失などを採用している。しかしCycleGANのように2つのドメインを互いに変換する関数を同時に学習させるのではなく、あるドメインから他のドメインに変換する関数のみを学習させている。

本手法は以下のようにGeneratorに対して変換前のオブジェクトのインスタンス情報を導入する際にその順序に依存しておらず、変換後のインスタンスも変換前の順序に従って対応する画像を生成する。

image

上図のGeneratorから見てわかるように、本手法ではインスタンスを生成するGeneratorは(1)元の画像の特徴ベクトル、(2)個別インスタンスの特徴ベクトル、(3)全インスタンスの特徴ベクトルの和の3要素を入力にしている。

つまり以下のように画像生成を担うGeneratorとインスタンス生成を担うGeneratorとで入力する特徴量は変更されている。

image

しかしDiscriminatorは変換された画像の特徴ベクトルと変換されたインスタンス画像の特徴ベクトルの和の2要素を入力に、対象を本物か偽物なのかを識別している。

image

3.2 損失関数

画像変換モデルの役割は背景や物体の向きといったContext情報を保持させたまま対象のドメインに物体を変換することであるため、損失関数もこの性質を学習できるように設計していく。

基本的にはCycleGANで提案されていた損失関数を使用するが、新たな損失関数としてセグメンテーションマスクの一貫性を保持するためのContext Preserving損失を提案している。

本研究では敵対的損失関数にはLSGANを採用している。

image

次にCycle-Consistency損失と恒等損失は以下のように表現される。

image

本手法による画像変換では物体の形状も大きく変化させてしまうため、単純に背景を1、物体を0としてピクセル間同士の差をとるだけでは一貫性は保持できない。そこで変換前後の画像でお互いに背景であるピクセルに対してのみ0でない重みを考慮するために以下のように、画像同士の差分を取った後で重みを要素積を掛け合わせている。

image

後はこれらの損失関数をパラメータを調整しながら組み合わせればいい。

image

3.3 連続的なミニバッチ変換

GPUのメモリ制限のためNaiveに実装すると同時に計算可能なインスタンスの個数に制限が出てしまい、多くの物体が写っている画像に対する汎化能力が失われてしまう。

インスタンスマスクをM個のミニバッチに分割し、一回のイテレーションで特定のミニバッチのみを使用して画像変換を行う。次のイテレーションでは前のイテレーションで生成された画像と、次にインスタンスマスクのミニバッチを使用して画像を生成していく。

m回計算を繰り返すことで以下のように途中状態の画像とインスタンスを使用し、画像に多くの物体が写っている場合にも対応できるようにしている。

image

ミニバッチ内のインスタンス情報を使って画像変換を行うため、変換されたミニバッチを集約して新たな画像変換を進めていく。

image

以上が推論時の挙動だが学習時の挙動は少々異なる。Generatorに関しては一貫性を保持するための損失関数のみを適用して、入力されたインスタンス情報に関する物体のみ画像変換を行う。しかし敵対的損失関数を計算する際には、一部のインスタンス情報を反映させた画像を使用することはできないため、すべてのインスタンスに関する計算が終了した後で学習を実施している。

image

image

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

生成される画像の質を検証するために、パラメータ数をInstaGANに合わせたCycleGANを使用した。

image image image

また本手法を使用することでマスク画像の変化を反映させることが可能となり、CycleGANではできなかった出力画像の制御に成功している。

image

本研究で提案されている損失関数や学習手法の効果を検証するために、CycleGANとの比較を行った。結果から全インスタンスマスクを一気に計算するCycleGANではできていなかった小さな物体に対する変換にも成功していることがわかる。

image

インスタンスをミニバッチに分けて計算する方法の効果を検証するために、学習時と推論時にインスタンスを分けて計算した結果と一気に計算した結果を比較した。なお学習に関しては一気に計算する手法では最大で2つのインスタンスのみを考慮している。

生成結果からわかるように、学習時と推論時ともにミニバッチに分けて計算すると最も本物に近い画像を生成することができている。

image

image

5. 議論はあるか?

shimopino commented 4 years ago

https://github.com/sangwoomo/instagan https://github.com/kiyohiro8/InstaGAN