夏休みの日記 8/22

夏休みのoutput

pix2pixの論文を読みました

pix2pixの論文

pix2pixって何

ある画像を別の画像に(構造を保ったまま)変換するモデルです。例えば猫の線画を着色して猫の写真のように変換したりなどできます。

モデル

ベースとしてはGeneratorとDiscriminatorを競うように学習させていくGANを用います。

pix2pixの特徴としては、以下が挙げられます。

  1. 通常のGANと異なり、conditional GANを用いる
  2. Gが本物と似ている画像を生成したかどうかのL1Lossを加える
  3. GeneratorにU-netの構造を採用する

1. Conditional GAN

このGANはGeneratorに情報を与えてその情報の条件の下で生成させます。例えば、今は猫の画像をもとに生成してください、と情報を与えてやります。つまり、今までGANは何も知らない状態のまま手書き数字やらを生成していたのを、あるラベル情報をもとに生成させるようにしてやるのです。

理由としては、このモデルは線画を着色したり、写真の物体を色分けした抽象画にしたりと、変換しても画像の構造はへんかしていません。そのため、ある構造のもとで生成することが有効と考えられるからです。

潜在変数を z、条件のラベルを x、本物のラベルを yとして、lossは以下の式で表されます。

 {
\displaystyle \mathcal{L}_{cGAN} (G, D) = \mathbb{E} [ \log D(x, y) ] + \mathbb{E} [ \log (1 - D(x, G(x, z))) ]
}

2. L1Loss

これもGANとは異なり、Gが本物に似せられているかの程度を学習させることでよりGの精度を上げようとしています。式は以下の通りです

 {
\displaystyle \mathcal{L}_{L1} (G) = \mathbb{E} [ || y - G(x, z) || ]1
}

3. U-net

このモデルでは入力画像と出力画像の構造は変わらないはずなのでDownsampleによる前layerの情報を極力保つように後のlayerに前layerの情報をそのまま渡すようにします。より具体的には、 n をlayerの総数とするとlayer {i}の情報はlayer n-iに渡すようにします。ここで、layerどうしはEncoderとDecoderの関係になっています。つまり、Encode前の情報を渡していることになります。

今回はここまでとして、次回はこれを実装していきます。