Re:ゼロから始めるML生活

機械学習ド素人が、流行に乗ってニューラルネットとかその他いろいろ勉強してみるブログ

【論文メモ:CycleGAN】Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks

論文

[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)は、コンピュータビジョンの大きな分野の一つとなっており、 これには整備されたデータセットを使用して入力画像と出力画像のマッピングを学習させる必要がある。 しかし、多くの場合トレーニングデータが利用できない場合が多いという問題がある。

目的とアプローチ

目的

  • image-to-image translationの学習における学習データセットの削減 (対になるデータセットを用意する必要がない)

アプローチ

  • CycleGAN(循環による首尾一貫性の利用)

提案手法

学習プロセス

学習の考え方の概要について下記に示す。 f:id:nogawanogawa:20180402171949j:plain

上図のように、提案手法では二種類の画像の集合をX、Yに対してX➝Y、Y➝Xの変換を行うGeneratorを用意する。 加えて、双方に対応するDiscriminatorも2つ用意する。

提案手法では二種類のloss(Adversarial Loss, Cycle Consistency Loss)を考慮する。 ネットワーク全体でのlossを下記に示す。 f:id:nogawanogawa:20180402171356j:plain

上記のlossを下記の目的関数を満たすように学習を行う。 f:id:nogawanogawa:20180402171626j:plain

補足

全体の構成の概念図を下記に示す。 f:id:nogawanogawa:20180407144816j:plain

図のようにGenerator2つ(G1, G2)とDiscriminator2つ(D1, D2)を組み合わせて学習行う。 そのため、入力は常に画像となる。

Adversarial Loss

Adversarial Lossについて下記に示す。 f:id:nogawanogawa:20180402170530j:plain

Adversarial Lossは入力画像をもとにGenerator (G)が画像を生成した際に生じるlossを表す。

Cycle Consistency Loss

Cycle Consistency Lossについて下記に示す。 f:id:nogawanogawa:20180402171021j:plain

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を使用する。

その他

評価

評価指標

評価に使用する指標を下記に示す。

AMT perceptual studies

Generatorによって生成された画像と教師データを被験者に見せ、どちらが本物であるかを当てさせる評価。 地図と航空写真の変換を対象とする。

FCN score

全結合によるニューラルネットに画像を判定させる評価。 路上の車の写真とラベルの変換を対象とする。

Semantic segmentation metrics

写真からラベルへの変換を対象とする。 ピクセルレベルのラベル分類精度、クラスごとの精度、クラスの境界に関する精度を見る評価。

比較対象

下記の5つのモデルと提案手法を比較する。

  • CoGAN
  • SimGAN
  • Feature loss + GAN
  • BiGAN/ALI
  • pix2pix

先行研究との比較

先行研究との比較をTable 1から Table 3に示す。 f:id:nogawanogawa:20180414133053j:plain

f:id:nogawanogawa:20180414133106j:plain

f:id:nogawanogawa:20180414133119j:plain

pix2pixを除いて先行研究より高い精度の画像認識精度が達成されている。(※)

実際にGeneratorによって変換された画像を下記に示す。

f:id:nogawanogawa:20180414132347j:plain

f:id:nogawanogawa:20180414132523j:plain

先行研究よりもより高い精度で変換できていることが分かる。

※pix2pixでは入力に対応する教師データを1対1で用意するため、精度が高いと考えられる。

Adversarial LossとCycle Consistency Lossの組み合わせに関する評価

f:id:nogawanogawa:20180414133510j:plain

f:id:nogawanogawa:20180414133522j:plain

f:id:nogawanogawa:20180414133917j:plain

提案手法の適用範囲に関する評価

pix2pixと同様の評価

写真からラベル付け、線画から写真の生成もpix2pixと同様に提案手法によって可能である事がわかる。 f:id:nogawanogawa:20180414134121j:plain

f:id:nogawanogawa:20180414135830j:plain

style transfer

描画の手法の自動変換も可能である事がわかる。

f:id:nogawanogawa:20180414135420j:plain

f:id:nogawanogawa:20180414135438j:plain

絵画から写真への変換

過去の絵画から当時の情景を表現することが可能だと言うことが分かる。

f:id:nogawanogawa:20180414135453j:plain

オブジェクトの変換および季節の変換

写真内部の季節や物体を別のものに変換できると言うことが分かる。 f:id:nogawanogawa:20180414135509j:plain

物体の強調

着目する物体の周りをぼかすことで対象物を強調する変換画家のということが分かる。 f:id:nogawanogawa:20180414135525j:plain

写真から絵画の作成

写真を入力に有名絵画に似せた絵画を作成できるということが分かる。 f:id:nogawanogawa:20180414135540j:plain

先行研究で失敗している部分についても変換できていることが分かる。 f:id:nogawanogawa:20180414135553j:plain

課題

変換がうまくされないものもある。 f:id:nogawanogawa:20180414135607j:plain

  • 画像生成をうまくいかない場合がある(Generatorの改良による表現力の向上が必要)
  • 馬に人が乗ったケースは少なく、変換に失敗している(教師データの多様性が不可欠)
  • ラベル付けが曖昧になりがち(半教師無し学習が必要の可能性)

実装

いろんな人のを継ぎ接ぎして参考にした実装はこちら。

loss

Generator

Discriminator

その他

全体はgithubをご参照下さい。

https://github.com/nogawanogawa/CycleGAN_tensorflow.git

試しに回してみた結果

失敗しました。

丸3日かけて頑張って計算しても、20epochちょいしかいけなかったので、そこで打ち切りました。(全部で100epochなので、終わるには10日程度かかりそうでした…) ということで、残骸を乗せておきます。

左側が入力画像で、右側が出力画像です。 上段がhorse -> zebra、下段がzebra -> horseです。

上段は入力画像がそもそもイケてないので変化が見られませんが、なんか頑張ってるのは伝わります。 下段はそれなりにまともな画像なんですが、シマウマはシマウマのままです。馬に変化するにはもっと時間が必要のようです。

epoch = 0

f:id:nogawanogawa:20180428211704p:plain

epoch = 5

f:id:nogawanogawa:20180428211725p:plain

epoch = 10

f:id:nogawanogawa:20180428211738p:plain

epoch = 15

f:id:nogawanogawa:20180428211751p:plain

epoch = 20

f:id:nogawanogawa:20180428211808p:plain

epoch = 22

f:id:nogawanogawa:20180428211821p:plain

感想

論文の評価以降はあんまり興味ないので、結構すっ飛ばしました。 とりあえず良いということは理解したので、だいじょうぶかと。。。 許してください。

実装については、ここまで来ると5年選手のMacBook Airの限界です。。。 無料のクラウドを勉強して、お遊び系はそっちに移行するようにしたいと思います。