こしあん
2018-09-20

Channelwise Variational AutoEncoder(失敗)


1.8k{icon} {views}


Variational Auto Encoder(VAE)を試していて、カラー画像は上手く行かなくてもグレースケール画像ならそこそこうまく行ったので、「じゃあチャンネル単位にVAEかけて後で結合すればカラーでもきれいにいくんじゃね?」と安直な発想で試してみたら失敗しました。それの記録を書きました。

発想

入力画像をRGBチャンネル単位に分割して(channel-wise)、チャンネル単位のVAEをかける。各チャンネル間の出力画像を合成する。サンプリングもRGB単位で独立にサンプリングする(なぜならVAEのサンプリングも、標準正規乱数であって潜在変数どうしの相関はサンプリング時に考えないから)。

結論からいうとこれは失敗でした。結果を見ます。STL-10のテストデータを学習させました。

Channel-wiseを使った例

Reconstruction


ちょっとカラーノイズが目立つ?

Sampling


全然ダメ

Channel-wiseを使わない例

Reconstruction


きれいというわけではないけどカラーノイズはない

Sampling


こちらもきれいというわけではないけどChannel-wiseを使った例よりはマジ

結論

channel-wise VAEはダメだった!

理由としてはいくつかあると思いますが、潜在空間の意味を考えるのがわかりやすいと思います。潜在空間では画像の意味、例えば「猫」「犬」といった変数にマッピングしているのであって、それはRGBチャンネルを分割することとは異なるからだと思います。

コード

コードは以下の通りです。なお、Channel-wiseを使った例・使わない例はtrain.pyで次のように設定しました。

# Channel-wiseを使った例
net = MultipleVAE(True, 1, device)
# Channel-wiseを使わない例
net = MultipleVAE(False, 2, device)

もう少しうまく行ったらパラメーターを変えて試してみたかったのですが、あまりに失敗だったのでやめました。




Shikoan's ML Blogの中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内

技術書コーナー

北海道の駅巡りコーナー


Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です