Channelwise Variational AutoEncoder(失敗)
Posted On 2018-09-20
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の中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内
技術書コーナー
北海道の駅巡りコーナー