论文阅读–MoVQ: Modulating Quantized Vectors for High-Fidelity Image Generation
Abstract
虽然两级Vector Quantized (VQ) 生成模型(例如 VQVAE-2)能够合成高保真度和高分辨率的图像,但它们的量化操作符将图像中相似的 patch 编码到相同的索引中,这可能导致使用现有解码器架构时,相邻区域出现重复产生的伪影。
现有的 VQ-VAE 或 VQGAN 模型虽然性能出色,但也有其缺点。它们的第二阶段通常以自回归的方式建模为序列生成过程,逐个生成不同空间位置的离散潜码,这是一个非常耗时的推理过程。MaskGIT 通过在每个步骤中基于预测置信度预测多个令牌,有效地解决了这个问题,大大减少了自回归令牌生成器所需的步骤数。
为了进一步优化,结合空间条件归一化来调制量化向量,并在嵌入的索引映射中插入空间变化的信息,鼓励解码器生成更逼真的图像。这种方法不会增加模型和码本的成本,同时通过利用多信道量化,提高了离散码的重组能力。
在第二阶段生成离散 token 方面,采用了 Masked Generative Image Transformer (MaskGIT) 来学习压缩潜在空间中的先验分布,这种方法比传统的自回归模型更快。在两个基准数据集上的实验表明,modulated VQGAN 能够极大地提高重建图像的质量,并提供高保真的图像生成。
Introduction
- VQ基础图像合成的固有缺陷:传统的VQ方法在量化过程中经常会产生重复的图案,这是因为类似的图像块被映射到相同的索引上。这种重复会导致合成图像中出现伪影。
- 耗时的推理过程:流程的第二阶段负责序列生成,是自回归的,意味着它一次生成一个离散的潜在代码。这个过程在推理时特别耗时。
文章引入了改进措施来解决这些问题:
- 解决重复图案问题:作者重新设计了解码器架构,包括空间条件归一化层,使用量化向量来调制激活。这种添加引入了更多的变化和空间变异到离散表示中,有助于减少重复模式。
- 多通道表示技术:为了进一步提高图像质量并保持可管理的代码本大小,作者采用了多通道表示技术。这种方法允许更好的表示能力而不会显著增加复杂性。
- 加速先验分布训练:受MaskGIT启发,作者提出了一种加速紧凑离散表示上的先验分布训练的方法,提高了模型的整体速度和效率。
总结来说,我们的主要贡献如下:
• 我们指出了基于VQ的图像合成流程的一个固有缺陷:在相似临近区域出现重复的人工痕迹,并通过引入空间条件归一化来解决这个问题,以提供不同位置的空间变异信息。
• 在我们提出的空间条件归一化的帮助下,我们进一步融入了多通道表示法,这大大提高了使用与VQGAN相同的编解码器层的重建图像质量。
• 当从学习到的先验中对多位置和多通道进行采样时,两个基准数据集上的实验结果显示,我们合成的样本不仅质量高,而且具有很大的多样性。
Method
首先,训练一个编码器-解码器架构的量化器,使用学习到的codebook中的离散token将图像embedding到紧凑序列中,然后学习一个先验网络来建模离散空间中的底层分布。我们发现的关键观察是,更好的量化器自然会导致更好的图像重建和生成质量[45]。因此,我们在这项工作中的主要目标是改进第一阶段的量化,同时不会像同时期的工作那样遭受笨拙的计算成本[45, 24]。
3.1 Modulating Quantized Vector调制量化向量
背景
给定一个图像 x ∈ R H × W × 3 x \in \mathbb{R}^{H \times W \times 3} x∈RH×W×3,传统的VQ-VAE学习一个离散的代码本来表示观察,作为代码本条目 z q ∈ R h × w × n q z_q \in \mathbb{R}^{h \times w \times n_q} zq∈Rh×w×nq 的集合,其中 n q n_q nq 是代码本中量化向量的维数。这样,每个图像可以等价地表示为一个具有 h ⋅ w h \cdot w h⋅w 个码矢 z q z_q zq 索引的紧凑序列 s s s。形式上,观察到的图像 x x x 通过以下方式重建:
x ^ = G θ ( z q ) = G θ ( q ( z ^ ) ) = G θ ( q ( E ψ ( x ) ) ) . \hat{x} = G_\theta(z_q) = G_\theta(q(\hat{z})) = G_\theta(q(E_\psi(x))). x^=Gθ(zq)=Gθ(q(z^))=Gθ(q(Eψ(x))).
特别地,编码器 E ψ ( ⋅ ) E_\psi(\cdot) Eψ(⋅) 首先将图像 x x x 嵌入到一个连续向量 z ^ \hat{z} z^,然后进行量化操作 q ( ⋅ ) q(\cdot) q(⋅) 将连续特征 z ^ \hat{z} z^ 转换为离散空间,通过查找 z ^ \hat{z} z^ 中每个空间网格特征 z i j z_{ij} zij 最接近的代码本条目 z k z_k zk:
z q = q ( z ^ ) = arg min z k ∈ Z ∥ z ^ i j − z k ∥ 2 , z_q = q(\hat{z}) = \text{arg min}_{z_k \in Z} \|\hat{z}_{ij} - z_k\|^2, zq=q(z^)=arg minzk∈Z∥z^ij−zk∥2,
其中 Z ∈ R K × n q Z \in \mathbb{R}^{K \times n_q} Z∈RK×nq 是由 K K K 个条目组成,每个条目 n q n_q nq 维的代码本。量化向量 z q z_q zq 最终传输到解码器 G θ ( ⋅ ) G_\theta(\cdot) Gθ(⋅) 以重建原始图像。通过优化以下目标来学习整体模型和代码本:
L ( E ψ , G θ , Z ) = ∥ x − x ^ ∥ 2 2 + ∥ s g [ E ψ ( x ) ] − z q ∥ 2 2 + β ∥ s g [ z q ] − E ψ ( x ) ∥ 2 2 . L(E_\psi, G_\theta, Z) = \|x - \hat{x}\|^2_2 + \|sg[E_\psi(x)] - z_q\|^2_2 + \beta \|sg[z_q] - E_\psi(x)\|^2_2. L(Eψ,Gθ,Z)=∥x−x^∥22+∥sg[Eψ(x)]−zq∥22+β∥sg[zq]−Eψ(x)∥22.
这里, s g sg sg 表示停止梯度操作符, β \beta β 是第三个承诺损失的超参数。第一项是重建损失,用于估计观察到的 x x x 和重建的 x ^ \hat{x} x^ 之间的误差。第二项是代码本损失,用于优化代码本中的条目。我们使用发布的VQGAN实现作为我们的基线。
图像的离散表示
图像首先通过编码器 E ψ E_\psi Eψ 被嵌入成连续向量 z ^ \hat{z} z^,然后通过量化操作 q q q 转换为离散的码矢 z q z_q zq,这些码矢来自于预设的代码本。
重建和优化
量化向量 z q z_q zq 被用于解码器 G θ G_\theta Gθ 来重建图像 x ^ \hat{x} x^。整个过程的优化包括最小化重建损失(观察图像和重建图像之间的差异)、代码本损失(优化代码本条目以更好地表示图像)和承诺损失(控制量化的稳定性)。
参数和损失函数
模型的训练涉及到多个参数和损失项,其中包括重建损失、代码本损失和承诺损失,以及控制这些的超参数,如 β \beta β。
plus:
- 图像的维度:假设原始图像的维度是 H×W×3,其中 H 和 W 分别代表图像的高度和宽度,3代表颜色通道(例如,RGB)。
- 量化的概念:量化是一种压缩技术,它将连续的值(如图像像素的颜色强度)映射到有限的离散集合中。在VQ-VAE中,这是通过一个称为“代码本”的结构完成的,代码本包含了一组离散的“码矢”(或称“码字”),每个码矢都是离散的向量,可以代表图像中的一小块区域或特定的特征。
- 转换成码矢索引序列:当图像被处理或“量化”时,每个 h×w 大小的小区域(可以看作是图像的一个子块)被映射到代码本中最接近的一个码矢。这样,整个图像就被转换成一系列码矢的索引。这些索引构成了一个紧凑的序列 s,每个索引都对应于代码本中的一个特定码矢 z**q*。
- hxw代表了总的码矢数
Spatially conditional normalization(adaptive instance normalization)空间条件归一化
输入是embedding的离散特征,其中包含学习到的紧凑内容。这是第一个在基于vq的图像生成框架上调制量化向量并使用多通道量化的工作。
量化算子为有损,相似的patch通常embedding为相同的codebook索引,导致通过现有解码器架构合成时会出现重复的伪影:
引入一个新的空间条件归一化层来将embedding的内容传播到activations.。动机是在离散映射中添加空间变量,这样模型就可以生成合理而多样的结果,即使是相邻区域的相同量化索引
量化操作是有损的,相似的图像块通常被嵌入为相同的代码本索引,当它们通过现有的解码器架构合成时,会导致重复的人工痕迹(参见图3(a))。与直接将离散特征图作为激活输入到解码器的现有方法不同,在本工作中,我们引入了一个新的空间条件归一化层来将嵌入的内容传播到激活中。这背后的关键动机是为离散图添加空间变量,使得模型即使对于相邻区域相同的量化索引也能生成合理且多样的结果。我们调制解码器的结构如图2(左)所示,一个激活
F
F
F 通过传统的归一化被归一化,然后由从嵌入向量计算出的学习的尺度和偏差调制。具体来说,解码器
G
θ
G_\theta
Gθ 中第
i
i
i 层的激活
F
i
F_i
Fi 由下式给出:
F
i
=
ϕ
γ
(
z
q
)
F
i
−
1
−
μ
(
F
i
−
1
)
σ
(
F
i
−
1
)
+
ϕ
β
(
z
q
)
,
F_i = \phi_\gamma(z_q)\frac{F_{i-1} - \mu(F_{i-1})}{\sigma(F_{i-1})} + \phi_\beta(z_q),
Fi=ϕγ(zq)σ(Fi−1)Fi−1−μ(Fi−1)+ϕβ(zq),
其中 F i − 1 F_{i-1} Fi−1 是中间特征图,可以初始化为位置嵌入、学习常数或解码器中 F 0 F_0 F0 的傅里叶特征。 μ ( ⋅ ) \mu(\cdot) μ(⋅) 和 σ ( ⋅ ) \sigma(\cdot) σ(⋅) 分别表示计算激活的均值和标准差的函数。归一化有许多选择,遵循基线VQGAN,这里我们直接使用组归一化。 ϕ γ ( ⋅ ) \phi_\gamma(\cdot) ϕγ(⋅) 和 ϕ β ( ⋅ ) \phi_\beta(\cdot) ϕβ(⋅) 是两个学习的仿射变换,它们在我们的设置中实现为 1 × 1 1 \times 1 1×1 的卷积滤波器,将离散表示 z q z_q zq 转换为缩放和偏差值。注意, ϕ γ ( ⋅ ) \phi_\gamma(\cdot) ϕγ(⋅) 和 ϕ β ( ⋅ ) \phi_\beta(\cdot) ϕβ(⋅) 的输出分辨率与当前激活 F i − 1 F_{i-1} Fi−1 相同,这将空间变量注入到离散特征中。
实际上,这种空间条件归一化源自自适应实例归一化(AdaIN),它已被应用于许多图像合成方法。与这些方法相比,我们的空间条件映射是一个量化映射,其中包含学习的紧凑内容。这样的调制操作注入了空间变异信息,它鼓励相同的量化条目在不同位置生成合理且多样的结果。
在上下文中,F 代表的是在解码器中的一个层级(或者某一步骤)的激活。在神经网络,尤其是在编解码器架构中,激活通常指的是网络中某一层的输出。这些激活可以是原始输入数据经过一系列变换(如加权求和、非线性激活函数等)后的结果。激活是神经网络处理信息和学习特征的基本单位。
Multichannel representation
多通道表示是一种图像量化和特征表示方法,它与传统的单通道索引映射不同,通过将图像转换为多通道索引映射并使用共享代码本来进一步提高图像质量。
与现有的量化器将图像映射为单通道索引映射不同,这里将其转换为具有共享码本的多通道索引映射,以进一步提高图像质量。其中1 × 1 × Nc随机向量能够生成结构合理的逼真图像,表明跨通道的值包含丰富的信息。在实践中,首先沿着通道维度将编码的连续特征z∈Rh×w×nz细分为多个块,即z = {z(1),···,z©}。然后,这些块中的每一个都基于equation2到codebook中最接近的codevector进行量化。
多通道表示
多通道表示是一种图像量化和特征表示方法,与传统的单通道索引映射相比,它通过将图像转换为多通道索引映射并使用共享代码本来进一步提高图像质量。以下是对多通道表示方法的详细解释:
通道维度的划分
在实践中,首先将编码的连续特征 z ˆ ∈ R h × w × n z zˆ \in \mathbb{R}^{h \times w \times n_z} zˆ∈Rh×w×nz 沿着通道维度划分为多个块,例如, z ˆ = { z ˆ ( 1 ) , ⋯ , z ˆ ( c ) } zˆ = \{zˆ^{(1)}, \cdots, zˆ^{(c)}\} zˆ={zˆ(1),⋯,zˆ(c)},每个块 z ˆ ( c ) ∈ R h × w × n z / c zˆ^{(c)} \in \mathbb{R}^{h \times w \times n_z/c} zˆ(c)∈Rh×w×nz/c。这样的划分允许每个块独立进行量化,根据最接近的代码向量进行映射。
多通道索引映射
相较于单通道索引映射,多通道方法将图像转换为多个索引映射,每个映射对应一个通道块。这种方式能够提供更丰富的信息和更高的表示能力,因为每个通道块可以独立捕捉不同的特征和细节。
计算成本与表示能力
对于 256 × 256 256 \times 256 256×256 的图像,通过固定比例下采样到 16 × 16 16 \times 16 16×16 的特征。在本工作中,通常使用 c = 4 c = 4 c=4 个并行块,因此等效序列表示是 16 × 16 × 4 16 \times 16 \times 4 16×16×4,这比原始图像小了192倍。尽管这种方法减少了每个代码向量的维度,但总计算成本与完整维度的单通道表示相似。
序列长度与组合能力
尽管更高分辨率的表示(如 32 × 32 × 1 32 \times 32 \times 1 32×32×1 或 64 × 64 × 1 64 \times 64 \times 1 64×64×1)也可以提高重建质量,但对于第二阶段来说计算成本将会更高,因为序列 s = h × w s = h \times w s=h×w 更长。相比之下,多通道表示保持较短的序列长度(即 16 × 16 16 \times 16 16×16),尽管每个序列标记现在由四部分重新组成,每部分对应一个量化索引。这样的指数级组合能力使得多通道表示的能力大大超过了原始代码本中的 K K K 个条目。
总结来说,多通道表示通过将特征分解为多个通道块并独立量化,大大提升了图像的表示能力和重建质量,同时保持了相对较低的计算成本。这种方法允许在保持较短序列长度的同时,通过组合不同通道块的量化索引来捕捉更丰富的图像细节和特征。
3.2 Modeling Prior Distribution
解码器和离散图像嵌入
解码器可以将离散图像嵌入 z q z_q zq 反转生成图像 x x x,但为了实现图像生成,我们需要训练一个模型来估计离散空间上的先验分布。我们的主要目标是改进代码本学习阶段,因此我们直接采用现有的第二阶段设置,包括传统的自回归模型和最新的掩膜生成图像变换器(MaskGIT)。
自回归标记生成Autoregressive token generation
在将图像 x x x 嵌入为代码本条目 z q z_q zq 的索引序列 s = { s 1 , ⋯ , s h × w } s = \{s_1, \cdots, s_{h \times w}\} s={s1,⋯,sh×w} 之后,图像生成可以自然地被表述为一个自回归的下一个符号预测问题。特别是,我们最大化似然函数:
p ( s ) = ∏ i p ( s i ∣ s < i ) , p(s) = \prod_i p(s_i | s_{<i}), p(s)=i∏p(si∣s<i),
其中 p ( s i ∣ s < i ) p(s_i | s_{<i}) p(si∣s<i) 是在给定所有前面的符号 s < i s_{<i} s<i 的情况下,有下一个符号 s i s_i si 的概率。然后,第二阶段的训练目标等于最小化整个序列的负对数似然,即 L = E x ∼ p ( x ) [ − log p ( s ) ] L = \mathbb{E}_{x\sim p(x)}[-\log p(s)] L=Ex∼p(x)[−logp(s)]。
有许多选择的自回归生成模型,如基于CNN的PixelCNN和基于变换器的GPT。尽管它们可以基于先前生成的结果顺序产生多样化和合理的结果,但采样过程非常慢。
掩膜标记生成Masked token generation.
为了高效地产生索引序列,我们遵循最新的MaskGIT同时并行预测所有标记。受BERT启发,模型旨在基于在固定长度中可见的索引估计所有索引的分布:
p ( s ) = ∏ i p ( s i ∣ s ˉ m ) , p(s) = \prod_i p(s_i | \bar{s}_m), p(s)=i∏p(si∣sˉm),
其中 s ˉ m \bar{s}_m sˉm 表示部分可见代码本索引的条件表示。在实践中,将训练过程中带有随机掩码比的掩码图 s ˉ m \bar{s}_m sˉm 输入多层双向transformer,同时计算上述的负对数似然目标。在推理时,模型运行固定的步骤,并在每次迭代中基于先前产生的可见token同时并行地预测所有token。然后,选出最可信的token,剩余的masked token将在下一步条件下对先前预测的token进行预测。
多通道标记生成Multichannel token generation.
由于我们的MoVQ将图像嵌入为多通道序列 s = { s 1 , ⋯ , s h × w } s = \{s_1, \cdots, s_{h \times w}\} s={s1,⋯,sh×w},其中 s i ∈ { 0 , ⋯ , ∣ Z ∣ − 1 } c s_i \in \{0, \cdots, |Z| - 1\}^c si∈{0,⋯,∣Z∣−1}c,对于每个位置,沿着通道将块反向拼接为输入的一个token,并预测输出的c个index。在实践中,我们独立地掩膜各个通道和位置的每个索引。与MaskGIT相比,我们模型中预测的索引条件在三个方向依赖上,即来自不同位置和通道的可见索引,由于组合能力,导致更大的多样性。
三、实验Experiments
1、Experimental Details
Datasets. 在无条件和类条件图像生成任务上实例化MoVQ,分别使用FFHQ和ImageNet。训练和验证设置遵循基线模型VQGAN的默认设置。在256 × 256的图像上训练所有模型。
Evaluation metrics. 使用两个最常见的评估指标Fréchet初始距离(FID)和初始分数(IS)来评估生成图像和真实图像之间的质量和多样性。也评估重建图像与原始图像之间的质量,还报告了传统的patch-level图像质量指标,包括峰值信噪比(PSNR)、结构相似指数(SSIM),以及最新学习到的配对重建图像和真实图像的特征级LPIPS
更少的参数量,更好的性能。学习的codebook只包含1024个64维的码向量,但有趣的是,它优于使用更大codebook的其他方法。这表明,*一个更好的量化器可以提高码本的使用率,而不需要贪婪地增加码本的大小*
4.3 Image Generation
第二阶段用transformer来估计底层先验分布。配置: layers:24,heads:16,embedding_dim:1024和hidden_state:4096。网络架构建立在VQGAN基线之上,除了最后一层预测16 × 16 × 4 × 1024的张量,其中16 × 16 × 4是预测索引的数量,1024是codebook中的条目数量。在这里,将图像生成设置为两种场景:(1)“auto”场景,其中训练和推理与VQGAN基线完全相似;(2)“mask”场景,其中训练和推理受到MaskGIT的启发。默认使用MaskGIT中的token进行采样,以便更快地进行采样。超参数遵循VQGAN中的默认设置,在4个V100 gpu上训练200个epoch,batch_size为64
。虽然模型比并行工作vit-vqgan表现得更差,但他们在第二阶段使用了更大的模型(比作者模型大5倍),训练时间更长,这并不是一个好方法。(买点是快)
*条件生成:*
模型为每个类别生成50个样本,共50,000个样本,用于定量评价
与同样采用多通道表示的并发工作RQ-VAE相比,即使没有专门设计用于进一步预测多通道指标的RQ-transformer,性能也具有竞争力。由于MaskGIT和vit-vqgan使用更多的gpu进行更长时间的训练,因此与MoVQ进行比较并不直接公平。*(这里的买点不是效果,而是效率)*
最终:
在未来,希望探索学习codebook中每个条目的语义含义。
由于模型不仅能像最先进的GAN一样生成高保真图像,而且还能提供更好的重建图像,对基于vq的模型的未来感到兴奋,并计划将其应用于更多的图像反演、插值和翻译任务。
限制:
尽管MoVQ在相同压缩比下显著提高了图像表示质量,但模型有时会生成具有高频外观的图像,而结构信息缺失。这部分是由于在模型中采用的多通道表示。因此,需要进一步研究一种更好的多通道指标建模生成模型。
论文中最后提出的codebook中的语义是一个很好的想法,但是这个工作难度大,涉及可解释性,如果能做出来,那就很棒了。
额外的说明:
1×1卷积核的作用
1×1卷积核的主要功能之一确实是改变通道数目,这样可以有效减少计算量和模型参数,同时也能增加网络的深度和复杂性。这种卷积操作不会改变原始图像或特征图的宽度和高度,而是仅改变通道数。通过对所有输入通道的相同位置的像素进行加权求和,它可以将输入通道融合成较少的输出通道。
示例:
假设有一个特征图的尺寸为 32 × 32 × 64 32 \times 32 \times 64 32×32×64,即宽度为32个像素,高度为32个像素,有64个通道。
现在我们想用一个 1 × 1 1 \times 1 1×1 卷积层来减少通道的数量,从64个减少到16个,提高网络效率和改变特征表示。
- 输入特征图: 32 × 32 × 64 32 \times 32 \times 64 32×32×64 (宽度 x 高度 x 通道数)
- 卷积层: 使用 1 × 1 1 \times 1 1×1 卷积核,设定输出通道数为16。
- 输出特征图: 32 × 32 × 16 32 \times 32 \times 16 32×32×16
在 1 × 1 1 \times 1 1×1 卷积操作中,每一个输出通道都是通过对所有64个输入通道在相同空间位置(同一个宽度和高度)的像素进行加权求和,然后可能加上一个偏置项,来生成的。每个新的输出通道有自己的一组64个权重,这些权重决定了如何从输入的64个通道中融合信息。因此,通过这种方式,原先的64个通道被压缩或融合为16个通道。
在这个过程中, 1 × 1 1 \times 1 1×1 卷积层实际上充当了一个全连接层,为每个位置的像素提供了一个从64维到16维的线性变换。这个操作显著减少了后续层需要处理的数据量,同时还保持了原始空间维度(宽度和高度)的大小不变。通过这种方式, 1 × 1 1 \times 1 1×1 卷积核在降低模型复杂度和计算需求的同时,还可以通过重新组合通道信息来提炼和改进特征表示。
- 其中, x 是内容特征, y 是风格特征。首先,它将内容特征 x 归一化,使其具有零均值和单位方差。然后,使用风格特征 y 的均值 μ(y) 和方差 σ(y) 来调整归一化后的内容特征。这种调整改变了内容特征的通道统计信息,使其匹配风格特征的通道统计信息。
- 不需要可学习参数:不同于批归一化(BN)或实例归一化(IN)等其他归一化技术,AdaIN不使用可学习的仿射参数。它直接从风格输入动态计算需要的统计数据,使得每个内容特征图的通道都根据风格特征图进行特定的调整。
- 保留空间结构:虽然AdaIN调整的是整个通道的统计特性,但它保留了内容输入在每个通道内的空间结构。这意味着内容图像的空间排列和对象的形状被保留,同时其纹理和颜色属性被风格图像所影响。这种空间结构的保留是通过在每个通道内独立应用变换实现的。
参考资料链接:
https://blog.csdn.net/RachelRicher/article/details/125439445
https://www.spaces.ac.cn/archives/6760
https://blog.csdn.net/justBeHerHero/article/details/128203770