6.3 Recycle-GAN を使って顔を変換する

CycleGANの問題点

ドメインA のデータ$x_1$ をA2B変換してドメインBのデータ$y_1$を生成し、$y_1$をB2A変換して$x'_1$ を得たとする。 また、ドメインA のデータ$x_2$ をA2B変換してドメインBのデータ$y_2$を生成し、$y_2$をB2A変換して$x'_2$ を得たとする。

$x_1$ と $x'_1$ が近いことや、$x_2$と$x'_2$ が近いことはサイクル一貫性損失で実現できる。

$y_1$ と$y_2$がドメインBにおいて正しい特徴を持つように分類されているかどうかは、保証されない。

Recycle-GAN の概要説明

  1. 時刻 $t$ におけるドメインAのデータ $x_t$ を、A2B変換で $y_s$ に変換する
  2. $y_s$ を入力として予測器で時刻 $s+1$ でのデータ $y_{s+1}$ を予測する。
  3. $y_{s+1}$ を入力としてB2A変換で時刻 $t+1$ でのデータ $x'_{t+1}$ に変換する。
  4. $x_{t+1}$ と $x'_{t+1}$ で損失を計算する。

Recycle-GAN の損失関数

敵対性損失: 平均二乗誤差:
$\displaystyle L_{GAN} (G, D_Y, X, Y) = \mathbb{E}_{y \thicksim P_{data}(y)} [(D_Y(y)-b)^2] + \mathbb{E}_{x \thicksim P_{data}(x)} [(D_Y(G(x)) - a)^2]$

サイクル一貫性損失:(論文ではL2距離だが、ここではL1距離を使う)
$\displaystyle L_{CYC} (G, F) = \mathbb{E}_{x \thicksim P_{data}(x)} [|| F(G(x)) - x ||_1] + \mathbb{E}_{y \thicksim P_{data}(y)} [|| G(F(y)) - y ||_1]$

同一性損失:(論文では言及されていないが、ここではL1距離を使う)
$\displaystyle L_{ID}(G,F) = \mathbb{E}_{x \thicksim P_{data}(x)} [|| F(x) - x ||_1] + \mathbb{E}_{y \thicksim P_{data}(y)} [|| G(y) - y ||_1]$

再規制損失: (論文ではL2距離だが、ここではL1距離を使う)
$\displaystyle L_{REC} (P_x, P_y) = \mathbb{E}_{x_t, x_{t+1}, x_{t+2} \thicksim P_{data}(x)} [|| P_x(x_t, x_{t+1}) - x_{t+2} || _1] + \mathbb{E}_{y_t, y_{t+1}, y_{t+2} \thicksim P_{data}(y)} [|| P_y(y_t, y_{t+1}) - y_{t+2} || _1] $

Recycle-GAN の実装

Google Drive のマウント

入力データのダウンロードと確認