誕生日のパラドックスを応用してGANによる生成データの分布の多様性を評価する

GANによって生成されたデータの分布の多様性を評価する論文。
この論文では誕生日のパラドックスを使った少しトリッキーな分析をしている。

実際のGANの生成するデータの分布は、
GANに与える訓練データの分布より多様性に欠けるものであるという結論で終わっている。

誕生日のパラドックス

誕生日のパラドックスとは「何人集まれば,その中に誕生日が同一の2人がいる確率が50%を超えるか」という問題の結果が直観に反しているというパラドックス. 100%を超えるのは366人以上集まった場合だが, 50%を超えるのに必要なのはたった23人である.

試しに22人の場合に全員の誕生日が異なる確率を計算してみる.
その確率は以下のようになる. {} $$ \begin{align} p &= 1 \cdot (1 - \frac{1}{365}) \cdot (1 - \frac{2}{365}) \cdot (1 - \frac{3}{365}) \cdots (1 - \frac{22}{365}) \end{align} $$

この式を変形していく。
{x}が小さいときに{e^{x}}テイラー展開ができて {} $$ e^{x} \approx 1 + x $$ となるので例えば、以下の項は {} $$ 1 - \frac{1}{365} \approx e^{-1/365} $$ となる.これを使うと上の{p}は, {} $$ \begin{align} p &\approx 1 \cdot e^{-1/365} \cdot e^{-2/365} \cdots e^{-22/365} \\ &\approx e^{-1-2-3 \cdots -22/365} \\ &\approx e^{-(1+2+\cdots+22)/265} \\ &\approx e^{-(23 \cdot 22)/(2 \cdot 365)} \\ &= 0.499998 \end{align} $$ となる.
さてこの問題を一般化してみる.
人のある属性がT種類あるとき,n人集まったときにその属性が被る確率が50%を超えるnを求める問題を考えると, {} $$ p \approx e^{-(n^{2}/2 \cdot T)} $$ となる.これを{p = 0.5}に対して解くと, {} $$ n \approx 1.177 \sqrt{T} $$ となる.
よって、ある属性がT種類あるときに,だいたい{\sqrt{T}}人集めればその属性が被ることがわかる.

GANによる生成データの被り具合を調べる

この誕生日のパラドックスを利用して,GANによる生成データの分布の多様性を調べる.
その手順は以下のようなものになる.

  1. {s}個の生成データをサンプリングする
  2. サンプルの中から類似したペアを機械的アルゴリズムで検出
  3. 2で検出したペアに関して,目視で複製であるかチェックする
  4. 1に戻る

{s}個のサンプルをチェックしてその中で複製のようなペアが見つかった場合,
誕生日のパラドックスから生成データの全個数は{s^{2}}であるといえる.

GANの生成データの分布は連続であり、誕生日のパラドックスのように離散でない。
よって完全に同一のサンプルだけでなく,目視で非常に似ているサンプルを"複製"とみなす.

CelebAデータセットに対する結果

DCGANを使う条件において, CelebA(顔データセット)では400サンプルに50%の確率で複製が含まれていることがわかった。 したがって,誕生日のパラドックスを援用すると400*400=16000がこのGANが生成する画像の種類と言える. これはCelebAのデータセット数(200K個)からするとかなり小さい.
つまり訓練データ全体を生成データがカバーしているとは言い難い.

なお,生成分布の多様性はDiscriminatorのフィルタチャネル数に依存することも論文中で示されている.

f:id:yusuke_ujitoko:20170707002335p:plain:w500

論文では他にもCIFAR-10やLSUN(ベッドルーム画像データセット)に対しても評価が行われている. VAEに対してはぼやけていて画像間の複製が判断できなかったため未実施.

個人的にはWGAN-gpに対して同様の実験を行うとどうなるかが気になる.

Conditional GANをMNISTとCIFAR-10で試してみる

cGANは条件付き確率分布を学習するGAN。

スタンダードなGANでは,指定の画像を生成させるといったことが難しい.
例えば0,1,…9の数字を生成させるよう学習させたGANに対しては,
ノイズを入れると0,1,…9の画像の対応する"どれかの数字画像"が生成される.

しかし,cGANを使えばラベルを指定して、目的の画像を選択的に生成できる。
例えば0というラベルを指定してノイズと一緒にGeneratorに入力すると,
0という画像を取り出すことができる.

試しにMNISTとCIFAR-10のデータセットで遊んでみた。
MNISTの生成結果はこのような感じ。

f:id:yusuke_ujitoko:20170704184820g:plain

cGANの概要

  • GANの条件付きバージョン
  • Gにはラベルyとノイズzをfeed
  • Dにはラベルyと訓練画像yをfeed

f:id:yusuke_ujitoko:20170704160600p:plain:w500

  • 目的関数は従来と同じ.
    (特に規定せず?)

MNIST

Gでのノイズzとラベルyを結合の仕方は幾つか考えられる。
論文では、ノイズzを中間層200ユニットにマッピングし、
ラベルyを中間層の別の1000ユニットにマッピングし、
中間層で200ユニットと1000ユニットを結合し1200ユニットとし、zとyの結合としているが、

今回はノイズz(100次元)とy(10次元)を入力層において結合する方針で試した。
(このとき入力層のユニット数は(100 + 10)=794ユニットとなる)

Dでの結合もDの入力層で訓練画像xとラベルyを結合した。
GAN全体の構造と目的関数はWGAN-gpを採用している。

結果

指定したラベル通りの数字をそこそこうまく生成できた。
論文の結果よりも良い結果なのでは。

f:id:yusuke_ujitoko:20170704183015p:plain

CIFAR-10

(追記) CIFAR-10でも試しこちらも、 MNISTの生成結果画像と同じく指定ラベルごとの画像を生成できている(…と思われる)

f:id:yusuke_ujitoko:20170712203536p:plain

その他

cGANの系統では以下のGANがあるので今後試してみたい。

  • Semi-Supervised GAN
  • InfoGAN
  • AC-GAN

cGANによるマンガの色付け論文メモ

概要

  • 学習データとしてマンガを集めるのが難しい
    • 普通マンガは白黒しかない
    • copyrightの問題

  • 自動色つけ手法としてpix2pixがあるが,大量の訓練データを必要とする
  • そこで提案手法では
    • たった一枚を参照画像とする
    • 生成画像のぼけを緩和する手法も使っている

参照画像一枚でどのように色付けするか

f:id:yusuke_ujitoko:20170701234447p:plain

  • スクリーントーンは削除
  • 画像1枚で学習させたcGANで色付け
    • 色づけしたい部位ごとに良い訓練データは異なる.
      例えば,顔のコマを色付けしたい場合顔だけが写っている訓練データを使うのが良いことが実験で分かっている.
  • segmentation
  • segmentごとの代表色を選択
  • 彩度を上げる
  • 色み離散化
  • screentone部分にshadingを施す

maxoutに関するメモ

DeepLearningBookで読んだmaxoutについてのメモ.

MaxoutはReLUを一般化したもの.
Maxoutユニットは{k}個の値からなるユニットの集合{\mathbb{G}^{i}}である.
他の活性化関数と違ってmaxoutでは,前層ユニットからmaxout{\mathbb{G}^{i}}内の各ユニットへの線形変換のパラメータを学習する.

また集合{\mathbb{G}^{i}}内で最大の値を選んでmaxoutユニットの出力とする. {} $$ g(z)_{i} = \max_{j \in \mathbb{G}^{(i)}} z_{j} $$

この性質によりmaxout unitはconvex functionとなる. f:id:yusuke_ujitoko:20170628083208p:plain

Maxoutでは集合内のk個のユニットのうち,k-1個は出力されないため冗長性があり, NNが過去に訓練したタスクを忘れてしまう catastrophic forgetting が起きにくい.

pix2pixで白黒動画に色をつけてみる

白黒動画のcolorizationをpix2pixを使って行ってみたというのが本記事の主旨 f:id:yusuke_ujitoko:20170625170657p:plain

pix2pixの概要

  • 画像間変換向けの写像関数や誤差関数は,
    従来手法では変換するドメインに応じて個別設計していた。
  • しかし本研究ではGANの手法を利用し,統一的なネットワーク構造や誤差関数の枠組み内で、
    色んなドメイン画像間の変換を学ぶ手法(pix2pix)を提案。

f:id:yusuke_ujitoko:20170625150512p:plain:w500

  • pix2pixでできることとして論文では以下が紹介されている
    • label to street scene
    • aerial to map
    • label to facade
    • day to night
    • BW to Color
    • Edge to Color

f:id:yusuke_ujitoko:20170625150656p:plain

pix2pix2で色付け

↑のうち,BW to Colorを試してみる.
今回は既存の実装を使わせていただいた.

ただしデータセットや学習済みモデルに関しては残念ながら提供されていなかったので,
データセットとしてOpen Images Datasetから5000点ダウンロードしモデルを訓練した.
モデル訓練には3日ほど掛けた.

テストデータとしてはこの動画からフレームを抜き出して使わせていただいた.

テスト結果の一部

f:id:yusuke_ujitoko:20170625164140p:plain かなり赤みがついている

f:id:yusuke_ujitoko:20170625164151p:plain 空は認識されると,ちゃんと青くなる

f:id:yusuke_ujitoko:20170625164235p:plain やはり赤み

一応動画でも限定公開しておく.(音無し)

www.youtube.com

全体的に赤っぽい色味がついた.
データセットが小さいことによる失敗かもしれないと思い,
現在4倍のデータセットを使って再学習中.

ただ,似た先行事例↓においても,鮮明には色がついておらず,また赤みがかった色となっているので,ナイーブにpix2pixを使うとこうなるのかもしれない. www.youtube.com