Variational Auto Encoder(VAE)を試していて、カラー画像は上手く行かなくてもグレースケール画像ならそこそこうまく行ったので、「じゃあチャンネル単位にVAEかけて後で結合すればカラーでもきれいにいくんじゃね?」と安直な発想で試してみたら失敗しました。それの記録を書きました。
目次
入力画像をRGBチャンネル単位に分割して(channel-wise)、チャンネル単位のVAEをかける。各チャンネル間の出力画像を合成する。サンプリングもRGB単位で独立にサンプリングする(なぜならVAEのサンプリングも、標準正規乱数であって潜在変数どうしの相関はサンプリング時に考えないから)。
結論からいうとこれは失敗でした。結果を見ます。STL-10のテストデータを学習させました。
ちょっとカラーノイズが目立つ?
全然ダメ
きれいというわけではないけどカラーノイズはない
こちらもきれいというわけではないけどChannel-wiseを使った例よりはマジ
channel-wise VAEはダメだった!
理由としてはいくつかあると思いますが、潜在空間の意味を考えるのがわかりやすいと思います。潜在空間では画像の意味、例えば「猫」「犬」といった変数にマッピングしているのであって、それはRGBチャンネルを分割することとは異なるからだと思います。
コードは以下の通りです。なお、Channel-wiseを使った例・使わない例はtrain.pyで次のように設定しました。
# Channel-wiseを使った例
net = MultipleVAE(True, 1, device)
# Channel-wiseを使わない例
net = MultipleVAE(False, 2, device)
もう少しうまく行ったらパラメーターを変えて試してみたかったのですが、あまりに失敗だったのでやめました。
DiscordのbotをTer…