Sim2Real論文まとめ(1) - SimGAN
やりたいこと
センサノイズをシミュレータで再現したい。
そのために有用そうなSimGANを理解する。
論文について
CVPR2017でBest Award
珍しいAppleの論文
評価
☆☆☆☆☆(5/5)
めちゃくちゃコスパ良いアプローチ。素晴らしい。
内容まとめ
Abstract
教師あり学習の難点として、たくさんのラベル付きデータが必要になる。
シミュレータでデータを作ることが期待されているが、シミュレータと実世界の乖離が問題で上手く行かないことが多い。
本論文はその溝を埋める手法を提案する。
方法としてはラベル付きのシミュレーションのデータとラベルなしの実データを用いて、Genertive Adversarial Networks(GANs)によりシミュレーションデータを実データに近づける(S+U Learning with SimGAN)。
以下の三点がキーポイント。
a "self-regularization" term
a local adversarial loss
updating the discriminator using history of refined images
これらによってリアリスティックな画像を生成することができる。
Introduction
シミュレータをリアルに近づけるアプローチも盛んだが、良いレンダリングアルゴリズムのものを使ったとして、実世界を完全に再現できているわけでなく、これを用いて学習した場合、過学習することもある。
この論文の目標はラベリングなしの実データとシミュレータを用いてリアルな画像を生成すること。
そのために、refinerというネットワークを考案した。下図参照。
これはシミュレータが作った生成画像をrefineする。
実データに近づけるため、refinerはadversarial lossを用いて訓練する。
これはGANsに似たアプローチをとっていて、実データとの区別がつかないように更新するdiscriminative networkを用いている。
ここで、生成データのアノテーション情報を保つため、生成データとrefineされたデータの差にペナルティを与えるようなself-regularization lossをadversarial lossに追加している。
そして、ピクセルレベルでのfully CNNを用いることで、大域的な構造を保つ。
GANsのアプローチは対立する2つのネットワークを訓練するため、不安定になりがち。これに対して、discriminatorの受容野を画像全体ではなく複数の局所的な領域に制限する。
さらに安定に訓練を行うため、過去のrefineされた画像を用いてdiscriminatorの更新を行う。
Contributions
ラベルなしの実データを用いて合成データをrefineする(S+U learning)
adversarial lossとself-regularization lossを用いてrefiner networkを訓練する
refiner networkを安定して訓練するためのGANsに対するいくつかの大事な修正を行う
定性的な実験結果とSOTAな結果を示す
S+U Learning with SimGAN
ゴールはアノテーション情報を保持しつつ生成画像をリアルに近づけるrefinerを訓練すること。
以下の2つの損失関数によって、関数パラメータθを学習によって最適化する。
第一項は実データに近づける作用、第二項はアノテーション情報を保つ作用がある。
詳細はこれから説明。
Adversarial Loss with Self-Regularization
- GANsに似ている提案手法は同様に2つのネットワークのminmax gameであり、refiner networkとdiscriminator nerworkを交互に更新する。
Discriminator
- discriminator networkは以下の損失関数を最小化することによってΦを更新する。
この式は交差エントロピー誤差で~xiが生成データ、yiが実データである。
Dはrefineされた画像である確率を出力する層を最終層に持つConvNetとして実装。つまり、refineであれば1、実データであれば0が理想。
確率的勾配降下法によって更新する。
Refiner
- (1)式のlrealは訓練済みのdiscriminatorを用いて以下のようにかける。
このロス関数が小さくできれば、discriminatorをより騙すようなrefinerに近づく。
さらに、生成されたリアルな画像はシミュレータで付与されたアノテーション情報も保ってほしい。
これを実現するため、生成データとrefineされたデータのピクセルレベルでの違いを小さくするようself-regularization lossを用いる。
そうすると、(1)の式は以下にような表現になる。こおkでψは恒等関数。||はL1ノルム。
- ここでRはピクセルレベルでrefineするためプーリングなどがないfully convolutinal neural netで実装。
更新則
以下の通りでR(θ)を更新する間はΦを固定、D(Φ)を更新する間はθを固定。
交互に繰り返してLr(θ)とLd(Φ)を最小化する。
Local Adversarial Loss
refinerがとても強いdiscriminatorを訓練した時、refinerが過度に特徴を強調する方向へ働くことがある。
ここで、局所的な状態もrefinerはリアルに近づけるべきで、同様にdiscriminatorも局所的な情報で判断できるべき。
上記を踏まえ下図のように discriminatorのネットワーク出力をw x hの確率マップにし、refinerのadversarial loss関数を局所パッチのcross entropy lossesで表す。
Updating Discriminator using a History of Refined Images
discriminatorが最新のrefined imagesにのみ正しく区別できる傾向に陥ることがある。
これは本来すべてのrefined imagesを正しく区別したいため良くない。
なので、discriminatorの更新時に過去のrefined imagesも使用することで、安定性を向上させる。
下図のようにmini-batchの半分を最新の画像、もう半分をバッファにためていた画像を用いる。
以上がSimGANのロジックの部分。
Experiments
ここからは画像ベースでSimGANを使った向上例をペタペタ貼り付けます。かなり汎用性がありあそう。
視線方向はたもちつつ、リアルな画像へrefine↓
- より詳細↓
- 手の姿勢推定のためのDepth画像への適応例↓
- 過去の画像を使ってdiscriminatorを更新したことの効果↓
- Local adversarial loss の効果↓
所感
実機でデータセットを作るのはホント大変なので、生成データとアノテーションなしの実データでSimlationとRealのGapを埋めれるのは素晴らしい。
特にセンサのノイズは個体によって異なるし、表現しにくいので、このアプローチはほんとに興味深い。