実装レベルで学ぶVQVAE

ぱんいち すみもとSoftware Developer, um University of Tokyo
実装レベルで学ぶVQVAE
ぱん@かーねる
⽬標: 実装レベルでVQ-VAEを理解する
n 第⼀著者: Aaron van den Oord
n 同著者が書いた関連論⽂
n Neural Discrete Representation Learning (NIPS 2017)
n Generating Diverse High-Fidelity Images with VQ-VAE-2 (NIPS 2019)
n 概要:
n VAEのフレームワークで離散的な潜在変数の学習を可能にし,posterior collapseの問題を解決する
ことで,⾼いクオリティの画像,ビデオ,⾳声のサンプリングを可能にした
VQVAE2による256x256のサンプル
提案⼿法: VQVAEの学習⽅法
n 1: 例えば32x32x3の画像をCNNでエンコードして,8x8xDのfeature mapを出⼒する
n 2: feature mapのそれぞれの1x1xDのベクトルに最も距離が近いものを,予め⽤意したK個の
D次元の埋め込みベクトルに置き換える
n 3: 置き換えた8x8xDのベクトルをデコードして元の画像を復元できるように学習する
提案⼿法: VQVAEの学習⽅法
n 1: 例えば32x32x3の画像をCNNでエンコードして,8x8xDのfeature mapを出⼒する
n 2: feature mapのそれぞれの1x1xDのベクトルに最も距離が近いものを,予め⽤意したK個の
D次元の埋め込みベクトルに置き換える
n 3: 置き換えた8x8xDのベクトルをデコードして元の画像を復元できるように学習する
提案⼿法: VQVAEの学習⽅法
n 1: 例えば32x32x3の画像をCNNでエンコードして,8x8xDのfeature mapを出⼒する
n 2: feature mapのそれぞれの1x1xDのベクトルに最も距離が近いものを,予め⽤意したK個の
D次元の埋め込みベクトルに置き換える
n 3: 置き換えた8x8xDのベクトルをデコードして元の画像を復元できるように学習する
提案⼿法: VQVAEの学習⽅法
n 学習するもの: エンコーダ・デコーダのパラメータ, KクラスxD次元の埋め込みベクトル
n sgはstop gradientで勾配を計算しないの意味
n 再構成の際,埋め込みベクトルに流れた勾配をそのままエンコーダに渡して学習させる
再構成誤差 埋め込みベクトルを
エンコーダベクトル
に近づける
エンコーダベクトルに
埋め込みベクトルを
近づける
提案⼿法: VQVAEのサンプリング⽅法
n 潜在変数の形はベクトルではなく,例えば32x32x3の画像の場合,8x8xDのテンソルになる
n この潜在変数の規則性のようなものを学習するために,PixelCNNを新たに学習させる
n PixelCNNで潜在変数をサンプリングして,これをデコードすることで画像のサンプリング
を⾏う
学習 サンプリング
実験: VQVAEのサンプリング
n 左図: ⼀様分布の潜在変数の事前分布からサンプリングした画像
n 右図: PixelCNNの事前分布からサンプリングした画像
Uniform prior PixelCNN prior
そこそこ
きれい
実験: VQVAEの再構成
n 保持している情報が多い(特に位置)ので,再構成は⾮常に綺麗
考察: なぜ再構成誤差だけで学習可能なのか
n 通常のVAEと同様に,ELBOの最⼤化を考える
n ここで,VQVAEの事後分布は,決定的なone-hotの分布
n また,p(z)が⼀様な事前分布と仮定しているので,KL項は⼀定になり,
学習時にKL項を無視してもよいことになる
実装: ⼤きな流れ
n 表記
n B: バッチサイズ
n C: チャンネル数
n H: ⾼さ
n W: 幅
n K: 埋め込みベクトルの数
n D: 埋め込みベクトルの次元
n 今回はpixelCNNを使ったサンプリング
を除く実装までの解説を⾏う
実装参考
https://nbviewer.jupyter.org/github/zalandoresea
rch/pytorch-vq-vae/blob/master/vq-vae.ipynb
実装: エンコーダ部分(⼀例)
n 2回のconvで画像の⼤き
さを1/4にする
n 次のconvとresblockは⼤
きさとチャネルの数を変
えない
実装: デコーダ部分(⼀例)
n 最後のconv_transは2回
繰り返して画像サイズを4
倍にする
n 最初のconvとresblockは
チャネル数と⼤きさを変
えない
実装: Residual部分
n Resblockのconvは⼊⼒次
元と出⼒次元を同じにす
る
n そうしないともとの⼊⼒
に加えられない
n ここではin_channels =
num_hiddensにする
n layerをリストにするとき
はnn.ModuleListを使う
n 理由は普通のリストを使
うと学習可能なパラメー
タを更新できないから
実装: VQ部分
n ⼊⼒shapeをBCHWからBHWCにして,D
次元のベクトルが並ぶようにflatにする
n embeddingとエンコードベクトルの距離計
算はループを使わない賢いテクニックを
使っている
n それぞれのエンコードされたベクトルと埋
め込みベクトルの⼆乗距離を分解している
実装: VQ部分
n encoding_indices: (B*W*H, 1)
n 距離で⼀番近い部分をとる
n encodings: (B*W*H, K)
n 0の⾏列をつくる
n encodings.scatter_(1, encoding_indices, 1)
n 1番⽬のaxisでインデックス番号の0を1に変換する
(one hotになる)
n quantized: (B, H, W, D)
n エンコードベクトルを埋め込みベクトルにする
quantized
encodings
encoding
indices
実装: VQ部分
n ロスの⼀部分を計算する
n inputs: z_e(x), quantized: e
n detachでstop gradientできる
n その次のコードは,⼊⼒に勾配を伝えるため
n 埋め込みベクトルに置き換えると勾配が⼊⼒に
伝わらなくなるから
実装: VQ部分
n 特に,ロス関数の⼆番⽬の項はEMAを利⽤する
と収束が早い
n ⼀般には,各埋め込みベクトル𝑒"から最も近い
エンコードされたベクトルを𝑧"とし,その数を
𝑛"とすると, 𝑒"は𝑧"の平均をとればよい
n しかし,ミニバッチによる計算を⾏っているた
め,移動平均を利⽤したほうが良い
n ガンマはハイパラで,0.99くらい
実装: 最終的なモデルの訓練
n pre_vq_convでは,VQ部分の⼊⼒チャ
ネルをD次元にするために1x1convをか
ましている
n 訓練は先程説明したVQのlossに再構成
誤差を加えたものを最⼩化する
提案⼿法: VQVAE2
n VQVAEは256x256のような⾼解像度画像のサンプリングは⼗分にきれいにできない
n VQVAE2はVQVAEを階層化することによって,これを解決する
提案⼿法: VQVAE2の訓練アルゴリズム
n ロス関数はVQVAEと同じで,エンコーダが⼀つ増
えるだけ
提案⼿法: VQVAE2のサンプリングアルゴリズム
n まず,topの潜在変数とbottomの潜在変数
を利⽤し,2つのpixelCNN(𝑝&'(, 𝑝*'&&'+)
を学習する
n 次に,学習したpixelCNNを使って潜在変
数をサンプリングし,デコーダに通す
実装: VQVAE2
n 構造は少し複雑になるが,Encoderが⼀つ
増えるだけで,VQVAEと同じように画像
の通りに実装するだけで良い
n 元論⽂では,bottom levelの潜在変数のサ
イズが元画像の1/4で,top levelの潜在変数
のサイズは元画像の1/8
n ⼊⼒が2つあるときはサイズをあわせて
channel⽅向でconcatする
1 von 23

Recomendados

[DL輪読会] Spectral Norm Regularization for Improving the Generalizability of De... von
[DL輪読会] Spectral Norm Regularization for Improving the Generalizability of De...[DL輪読会] Spectral Norm Regularization for Improving the Generalizability of De...
[DL輪読会] Spectral Norm Regularization for Improving the Generalizability of De...Deep Learning JP
9K views26 Folien
[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder von
[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder[DL輪読会]NVAE: A Deep Hierarchical Variational Autoencoder
[DL輪読会]NVAE: A Deep Hierarchical Variational AutoencoderDeep Learning JP
1.9K views22 Folien
GAN(と強化学習との関係) von
GAN(と強化学習との関係)GAN(と強化学習との関係)
GAN(と強化学習との関係)Masahiro Suzuki
83K views77 Folien
畳み込みニューラルネットワークの高精度化と高速化 von
畳み込みニューラルネットワークの高精度化と高速化畳み込みニューラルネットワークの高精度化と高速化
畳み込みニューラルネットワークの高精度化と高速化Yusuke Uchida
64.5K views133 Folien
[DL輪読会]Flow-based Deep Generative Models von
[DL輪読会]Flow-based Deep Generative Models[DL輪読会]Flow-based Deep Generative Models
[DL輪読会]Flow-based Deep Generative ModelsDeep Learning JP
14.6K views62 Folien
Generating Diverse High-Fidelity Images with VQ-VAE-2 von
Generating Diverse High-Fidelity Images with VQ-VAE-2Generating Diverse High-Fidelity Images with VQ-VAE-2
Generating Diverse High-Fidelity Images with VQ-VAE-2harmonylab
14.1K views21 Folien

Más contenido relacionado

Was ist angesagt?

Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料 von
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Yusuke Uchida
16K views38 Folien
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models von
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion ModelsDeep Learning JP
2.6K views15 Folien
自己教師学習(Self-Supervised Learning) von
自己教師学習(Self-Supervised Learning)自己教師学習(Self-Supervised Learning)
自己教師学習(Self-Supervised Learning)cvpaper. challenge
12.8K views177 Folien
[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions von
[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions
[DL輪読会]Glow: Generative Flow with Invertible 1×1 ConvolutionsDeep Learning JP
5.9K views26 Folien
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and Editing von
[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and EditingDeep Learning JP
3K views21 Folien
PRML学習者から入る深層生成モデル入門 von
PRML学習者から入る深層生成モデル入門PRML学習者から入る深層生成モデル入門
PRML学習者から入る深層生成モデル入門tmtm otm
5.7K views73 Folien

Was ist angesagt?(20)

Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料 von Yusuke Uchida
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Swin Transformer (ICCV'21 Best Paper) を完璧に理解する資料
Yusuke Uchida16K views
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models von Deep Learning JP
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
【DL輪読会】High-Resolution Image Synthesis with Latent Diffusion Models
Deep Learning JP2.6K views
自己教師学習(Self-Supervised Learning) von cvpaper. challenge
自己教師学習(Self-Supervised Learning)自己教師学習(Self-Supervised Learning)
自己教師学習(Self-Supervised Learning)
cvpaper. challenge12.8K views
[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions von Deep Learning JP
[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions
[DL輪読会]Glow: Generative Flow with Invertible 1×1 Convolutions
Deep Learning JP5.9K views
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and Editing von Deep Learning JP
[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing[DL輪読会]GLIDE: Guided Language to Image Diffusion  for Generation and Editing
[DL輪読会]GLIDE: Guided Language to Image Diffusion for Generation and Editing
Deep Learning JP3K views
PRML学習者から入る深層生成モデル入門 von tmtm otm
PRML学習者から入る深層生成モデル入門PRML学習者から入る深層生成モデル入門
PRML学習者から入る深層生成モデル入門
tmtm otm5.7K views
【DL輪読会】Perceiver io a general architecture for structured inputs & outputs von Deep Learning JP
【DL輪読会】Perceiver io  a general architecture for structured inputs & outputs 【DL輪読会】Perceiver io  a general architecture for structured inputs & outputs
【DL輪読会】Perceiver io a general architecture for structured inputs & outputs
Deep Learning JP1.5K views
【DL輪読会】Flamingo: a Visual Language Model for Few-Shot Learning 画像×言語の大規模基盤モ... von Deep Learning JP
【DL輪読会】Flamingo: a Visual Language Model for Few-Shot Learning   画像×言語の大規模基盤モ...【DL輪読会】Flamingo: a Visual Language Model for Few-Shot Learning   画像×言語の大規模基盤モ...
【DL輪読会】Flamingo: a Visual Language Model for Few-Shot Learning 画像×言語の大規模基盤モ...
Deep Learning JP3.2K views
[DL輪読会]MetaFormer is Actually What You Need for Vision von Deep Learning JP
[DL輪読会]MetaFormer is Actually What You Need for Vision[DL輪読会]MetaFormer is Actually What You Need for Vision
[DL輪読会]MetaFormer is Actually What You Need for Vision
Deep Learning JP1.4K views
Transformer 動向調査 in 画像認識(修正版) von Kazuki Maeno
Transformer 動向調査 in 画像認識(修正版)Transformer 動向調査 in 画像認識(修正版)
Transformer 動向調査 in 画像認識(修正版)
Kazuki Maeno1.7K views
ドメイン適応の原理と応用 von Yoshitaka Ushiku
ドメイン適応の原理と応用ドメイン適応の原理と応用
ドメイン適応の原理と応用
Yoshitaka Ushiku5.5K views
StyleGAN解説 CVPR2019読み会@DeNA von Kento Doi
StyleGAN解説 CVPR2019読み会@DeNAStyleGAN解説 CVPR2019読み会@DeNA
StyleGAN解説 CVPR2019読み会@DeNA
Kento Doi8.4K views
【DL輪読会】ViT + Self Supervised Learningまとめ von Deep Learning JP
【DL輪読会】ViT + Self Supervised Learningまとめ【DL輪読会】ViT + Self Supervised Learningまとめ
【DL輪読会】ViT + Self Supervised Learningまとめ
Deep Learning JP4K views
モデル高速化百選 von Yusuke Uchida
モデル高速化百選モデル高速化百選
モデル高速化百選
Yusuke Uchida24.7K views
Transformerを多層にする際の勾配消失問題と解決法について von Sho Takase
Transformerを多層にする際の勾配消失問題と解決法についてTransformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法について
Sho Takase4.8K views
[DL輪読会]data2vec: A General Framework for Self-supervised Learning in Speech,... von Deep Learning JP
[DL輪読会]data2vec: A General Framework for  Self-supervised Learning in Speech,...[DL輪読会]data2vec: A General Framework for  Self-supervised Learning in Speech,...
[DL輪読会]data2vec: A General Framework for Self-supervised Learning in Speech,...
Deep Learning JP2.4K views
[DL輪読会]ICLR2020の分布外検知速報 von Deep Learning JP
[DL輪読会]ICLR2020の分布外検知速報[DL輪読会]ICLR2020の分布外検知速報
[DL輪読会]ICLR2020の分布外検知速報
Deep Learning JP5.4K views
全力解説!Transformer von Arithmer Inc.
全力解説!Transformer全力解説!Transformer
全力解説!Transformer
Arithmer Inc.9.5K views
Curriculum Learning (関東CV勉強会) von Yoshitaka Ushiku
Curriculum Learning (関東CV勉強会)Curriculum Learning (関東CV勉強会)
Curriculum Learning (関東CV勉強会)
Yoshitaka Ushiku63.9K views
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary von Deep Learning JP
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
Deep Learning JP2.2K views

Más de ぱんいち すみもと

ICLR・ICML読み会2021 by パンハウスゼミ von
ICLR・ICML読み会2021 by パンハウスゼミICLR・ICML読み会2021 by パンハウスゼミ
ICLR・ICML読み会2021 by パンハウスゼミぱんいち すみもと
886 views33 Folien
Free lunch for few shot learning distribution calibration von
Free lunch for few shot learning distribution calibrationFree lunch for few shot learning distribution calibration
Free lunch for few shot learning distribution calibrationぱんいち すみもと
646 views23 Folien
Anomaly detection survey von
Anomaly detection surveyAnomaly detection survey
Anomaly detection surveyぱんいち すみもと
5K views57 Folien
最近(2020/09/13)のarxivの分布外検知の論文を紹介 von
最近(2020/09/13)のarxivの分布外検知の論文を紹介最近(2020/09/13)のarxivの分布外検知の論文を紹介
最近(2020/09/13)のarxivの分布外検知の論文を紹介ぱんいち すみもと
1.7K views14 Folien
continual learning survey von
continual learning surveycontinual learning survey
continual learning surveyぱんいち すみもと
1.6K views18 Folien
Contrastive learning 20200607 von
Contrastive learning 20200607Contrastive learning 20200607
Contrastive learning 20200607ぱんいち すみもと
2.6K views47 Folien

Más de ぱんいち すみもと(20)

実装レベルで学ぶVQVAE