論文
[1703.10593] Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks
著者
Jun-Yan Zhu∗ Taesung Park∗ Phillip Isola Alexei A. Efros
Berkeley AI Research (BAIR) laboratory, UC Berkeley
背景
画像を別の画像ヘ変換(image-to-image translation)は、コンピュータビジョンの大きな分野の一つとなっており、 これには整備されたデータセットを使用して入力画像と出力画像のマッピングを学習させる必要がある。 しかし、多くの場合トレーニングデータが利用できない場合が多いという問題がある。
目的とアプローチ
目的
アプローチ
- CycleGAN(循環による首尾一貫性の利用)
提案手法
学習プロセス
学習の考え方の概要について下記に示す。
上図のように、提案手法では二種類の画像の集合をX、Yに対してX➝Y、Y➝Xの変換を行うGeneratorを用意する。 加えて、双方に対応するDiscriminatorも2つ用意する。
提案手法では二種類のloss(Adversarial Loss, Cycle Consistency Loss)を考慮する。 ネットワーク全体でのlossを下記に示す。
上記のlossを下記の目的関数を満たすように学習を行う。
補足
全体の構成の概念図を下記に示す。
図のようにGenerator2つ(G1, G2)とDiscriminator2つ(D1, D2)を組み合わせて学習行う。 そのため、入力は常に画像となる。
Adversarial Loss
Adversarial Lossについて下記に示す。
Adversarial Lossは入力画像をもとにGenerator (G)が画像を生成した際に生じるlossを表す。
Cycle Consistency Loss
Cycle Consistency Lossについて下記に示す。
Cycle Consistency LossはGenerator (G)が生成した画像を入力画像に戻した際に生じるlossを表す。
Cycle Consistency Lossでは、循環して生成された分布を教師データと比較させることで、lossを算出する。 そのため、Cycle Consistency Lossを求める際にはDiscriminatorは使用しない。
実装
ネットワーク構造
実装は下記の論文を参考にする。
https://arxiv.org/abs/1603.08155
ビルディングブロックとしてストライド2の畳み込み層、いくつかの剰余区画そしてストライド1/2の畳み込みを組み合わせて使用する。
128×128の画像に対して6層ネットワーク、256×256の画像に対して9層ネットワークを使用する。
Discriminatorとして、70×70のPatchGANを使用する。
その他
- Lossとして、クロスエントロピーではなく、最小2乗を使用(参考:https://arxiv.org/abs/1611.04076)
- 学習の擾乱を低減するためにShrivastava et al’s strategyを採用する。(参考:https://arxiv.org/abs/1612.07828)
- λ=10
- Adam Optimizer(バッチサイズ= 1)を使用
- 始め100epochは学習率は0.0002とし、その後の100epochで0に向けて値を減少させる
評価
評価指標
評価に使用する指標を下記に示す。
AMT perceptual studies
Generatorによって生成された画像と教師データを被験者に見せ、どちらが本物であるかを当てさせる評価。 地図と航空写真の変換を対象とする。
FCN score
全結合によるニューラルネットに画像を判定させる評価。 路上の車の写真とラベルの変換を対象とする。
Semantic segmentation metrics
写真からラベルへの変換を対象とする。 ピクセルレベルのラベル分類精度、クラスごとの精度、クラスの境界に関する精度を見る評価。
比較対象
下記の5つのモデルと提案手法を比較する。
- CoGAN
- SimGAN
- Feature loss + GAN
- BiGAN/ALI
- pix2pix
先行研究との比較
先行研究との比較をTable 1から Table 3に示す。
pix2pixを除いて先行研究より高い精度の画像認識精度が達成されている。(※)
実際にGeneratorによって変換された画像を下記に示す。
先行研究よりもより高い精度で変換できていることが分かる。
※pix2pixでは入力に対応する教師データを1対1で用意するため、精度が高いと考えられる。
Adversarial LossとCycle Consistency Lossの組み合わせに関する評価
提案手法の適用範囲に関する評価
pix2pixと同様の評価
写真からラベル付け、線画から写真の生成もpix2pixと同様に提案手法によって可能である事がわかる。
style transfer
描画の手法の自動変換も可能である事がわかる。
絵画から写真への変換
過去の絵画から当時の情景を表現することが可能だと言うことが分かる。
オブジェクトの変換および季節の変換
写真内部の季節や物体を別のものに変換できると言うことが分かる。
物体の強調
着目する物体の周りをぼかすことで対象物を強調する変換画家のということが分かる。
写真から絵画の作成
写真を入力に有名絵画に似せた絵画を作成できるということが分かる。
先行研究で失敗している部分についても変換できていることが分かる。
課題
変換がうまくされないものもある。
- 画像生成をうまくいかない場合がある(Generatorの改良による表現力の向上が必要)
- 馬に人が乗ったケースは少なく、変換に失敗している(教師データの多様性が不可欠)
- ラベル付けが曖昧になりがち(半教師無し学習が必要の可能性)
実装
いろんな人のを継ぎ接ぎして参考にした実装はこちら。
loss
Generator
Discriminator
その他
全体はgithubをご参照下さい。
https://github.com/nogawanogawa/CycleGAN_tensorflow.git
試しに回してみた結果
失敗しました。
丸3日かけて頑張って計算しても、20epochちょいしかいけなかったので、そこで打ち切りました。(全部で100epochなので、終わるには10日程度かかりそうでした…) ということで、残骸を乗せておきます。
左側が入力画像で、右側が出力画像です。 上段がhorse -> zebra、下段がzebra -> horseです。
上段は入力画像がそもそもイケてないので変化が見られませんが、なんか頑張ってるのは伝わります。 下段はそれなりにまともな画像なんですが、シマウマはシマウマのままです。馬に変化するにはもっと時間が必要のようです。
epoch = 0
epoch = 5
epoch = 10
epoch = 15
epoch = 20
epoch = 22
感想
論文の評価以降はあんまり興味ないので、結構すっ飛ばしました。 とりあえず良いということは理解したので、だいじょうぶかと。。。 許してください。
実装については、ここまで来ると5年選手のMacBook Airの限界です。。。 無料のクラウドを勉強して、お遊び系はそっちに移行するようにしたいと思います。