Pixel cherry-picking
潜在変数Zと離散なマスク画像Mの組(Z, M)で画像を表現するAutoencoderモデル。
CIFAR-10上のVAEベースでの実装(chainer v6)
https://github.com/tmagara/pixel-cherry-picking
概要
- N枚分の出力を行うAutoencoderを用意する。
- 出力をピクセルごとにcherry-pickする。
- 各ピクセル(例.32x32)についてN個の出力の中から最も損失が低くなる(入力に近い)ものを選ぶ。
- cherry-pickされた出力について損失を求める。
「2で各ピクセルにおいてどの値が選ばれたか?」の情報はN値のマスク画像として表現できる。
疑似コード
# normal autoencoder
y = self.decoder(self.encoder(x))
loss = (x - y) ** 2
loss = chainer.functions.mean(loss)
# autoencoder with pixel cherry-picking
y = self.decoder(self.encoder(x))
B, _, H, W = y.shape
y = chainer.functions.reshape(y, (B, x.shape[1], -1, H, W))
loss = (x[:, :, None] - y) ** 2
loss = chainer.functions.mean(loss, (1,))
loss = chainer.functions.min(loss, (2,))
loss = chainer.functions.mean(loss)
出力
いずれも左から入力画像、マスク画像で合成された出力画像、デコーダーからの直接の出力画像x4、マスク画像x4。
潜在変数Zが4次元:
潜在変数Zが64次元:
見やすくするために出力値を輝度の総和でソートしたもの:
画像の一部成分(高周波数成分?)が離散なマスク画像に分離されている様子がわかる。
問題
- 画像を生成するために潜在変数Zだけではなくマスク画像Mが必要。
- 画像の特徴量が潜在変数Zだけに抽出されるわけではない。
⇒ このモデルに意味はあるか?
考察
画像xを記述するモデルとしてのデコーダーDについて考える。
$$ x = \sum_{j=1}^{N}M_j D_\theta(z) + \Delta $$
オッカムの剃刀に従えば、「よりシンプルに(=より少ない情報量で)データを記述できるモデル」が良いモデル。
- MSEによって誤差$ \Delta $ ($ \sim \mathcal{N} $)の情報量が測られる。
- VAEのKLダイバージェンス項で潜在変数Zの情報量が(間接的に)測られる。
- マスク画像Mの情報量は(最悪で)ピクセル当たりlog2(N)ビット。
- 課題: どうすればこの情報量を下げることができるのか?
###次回
GANの枠組みで潜在変数Zからマスク画像Mを生成する試みについて。