LoginSignup
1
2

More than 3 years have passed since last update.

Pixel cherry-picking: 潜在変数と離散なマスク画像の組で画像を表現するAutoencoderモデル

Posted at

Pixel cherry-picking

潜在変数Zと離散なマスク画像Mの組(Z, M)で画像を表現するAutoencoderモデル。

CIFAR-10上のVAEベースでの実装(chainer v6)
https://github.com/tmagara/pixel-cherry-picking

概要

  1. N枚分の出力を行うAutoencoderを用意する。
  2. 出力をピクセルごとにcherry-pickする。
    • 各ピクセル(例.32x32)についてN個の出力の中から最も損失が低くなる(入力に近い)ものを選ぶ。
  3. 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次元:
z4mask4.png

潜在変数Zが16次元:
z16mask4.png

潜在変数Zが64次元:
z64mask4.png
見やすくするために出力値を輝度の総和でソートしたもの:
z64mask4sorted.png
画像の一部成分(高周波数成分?)が離散なマスク画像に分離されている様子がわかる。

問題

  • 画像を生成するために潜在変数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を生成する試みについて。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2