こしあん
2018-09-20

Channelwise Variational AutoEncoder(失敗)


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)

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


Related Posts

PyTorchでのConvTranspose2dのパラメーター設定について... VAE(Variational Auto Encoder)やGAN(Generative Adversarial Network)などで用いられるデコーダーで畳み込みの逆処理(Convtranspose2d)を使うことがあります。このパラメーター設定についてハマったので解説します。 エンコーダ...
ColabのTPUでNASNet Largeを訓練しようとして失敗した話... ColabのTPUはとてもメモリ容量が大きく、計算が速いのでモデルのパラメーターを多くしてもそこまでメモリオーバーor遅くなりません。ただし、あまりにモデルが深すぎると訓練の初期設定で失敗することがあります。NASNet Largeを訓練しようとして発生しました。これを見ていきます。 CIFAR...
Google ColabのTPUでResNetのベンチマークを取ってみた... Google ColaboratoryでTPUが使えるようになりましたが、さっそくどのぐらい速いのかベンチマークを取ってみました。以前やったResNetのベンチマークを使います。 環境:Google Colab(TPU)、TensorFlow:1.11.0-rc2、Keras:2.1.6 コ...

Add a Comment

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