目录
- 摘要
- abstract
- 1.自动编码器
- 2.变分编码器(VAE)
- 3.论文阅读
- 3.1 介绍
- 3.2 方法
- 3.3 结论
- 4.总结
- 参考文献
摘要
本周学习了自动编码器(AE)和变分自动编码器(VAE)的基本原理与实现,分析其在数据降维、特征学习以及生成任务中的应用与局限性。自动编码器通过编码器和解码器结构,将复杂数据映射到低维潜在空间,再从潜在空间还原输入数据,但面临潜在空间表达模糊和对噪声敏感等问题。为解决这些问题,引入变分自动编码器(VAE),通过正则化潜在空间的分布,使得生成任务更为鲁棒和自然。此外,阅读并解读了《Enhancing Virtual Try-On with Synthetic Pairs and Error-Aware Noise Scheduling》一文,提出了结合合成数据与错误感知扩散的虚拟试穿方法,有效改善了生成图像的质量。实验表明,VITON-HD 和 DressCode-Upper 数据集上的增强数据与细化模型均能提升生成效果。
abstract
This week we studied the basic principles and implementation of AE and VAE, and analyzed their applications and limitations in data dimensionality reduction, feature learning, and generation tasks. Autoencoders map complex data to low-dimensional latent space through encoder and decoder structure, and then restore input data from latent space, but it faces problems such as fuzzy expression of latent space and sensitivity to noise. To solve these problems, variational autoencoders (VAE) are introduced to make the generation task more robust and natural by regularizing the distribution of potential Spaces. In addition, I have read and interpreted the paper “Enhancing Virtual Try-On with Synthetic Pairs and Error-Aware Noise Scheduling”, and proposed a virtual try-on method combining synthetic data and error-aware noise scheduling. Effectively improve the quality of the generated image. Experiments show that both the enhanced data and the refined model on VITON-HD and DressCode-Upper data sets can improve the generation effect.
1.自动编码器
思考:自动编码器如何将复杂数据转换为更简单、更有意义的的表示(称为潜空间)?
自动编码器是一种人工神经网络,用于学习数据的有效表示,用尽可能少的特征来描述非常大的数据。其基本架构是编码器(将输入数据压缩为潜在空间表示)、潜在空间(捕捉输入数据的基本特征)和解码器(将编码器和潜在空间产生的压缩表示重建输入数据)。
上述过程如何训练呢?
训练自动编码器的重点是最小化原始数据与其重建版本之间的差异,目标是提高解码器从压缩表示中准确重建原始数据的能力。通过对比两幅图片中像素均方误差来学习
上述过程中,潜在空间的维度决定了能够重建版本的关键参数。
自动编码器是最大优势也是它们最大的局限性:潜在空间,如果只依靠自动编码器的重构损失来组织潜在空间,我们通常会得到不是我们所希望的明确表示,如下图(将5D的数据在二维空间下的表示使得各手写数字的特征过于接近)从而影响了重建的效果。
另一个问题是如果在潜在空间中随机取两个点,预计中间点是那个两个点的混合,但在实际中,大多数中间点都毫无意义,如下如(所取值的0和6的插值为5,但是附近没有编码5)
最后一个问题就是,自动编码器也会学习许多不相关的特征,假设在输入中加入一点噪音,自动编码器无法重构原模型。
因此下面引入变分编码器(正则化自动编码器VAE)。
代码实现:
# 定义自动编码器模型
class Autoencoder(nn.Module):def __init__(self, input_dim, latent_dim):super(Autoencoder, self).__init__()# 编码器self.encoder = nn.Sequential(nn.Linear(input_dim, 128),nn.ReLU(),nn.Linear(128, latent_dim))# 解码器self.decoder = nn.Sequential(nn.Linear(latent_dim, 128),nn.ReLU(),nn.Linear(128, input_dim),nn.Sigmoid() # 假设输入是归一化数据)def forward(self, x):z = self.encoder(x)x_reconstructed = self.decoder(z)return x_reconstructed
2.变分编码器(VAE)
其目的是将输入有噪声的图片转换为干净的或者至少去除一部分噪声的图片。使用均方误差作为损失函数,同时减少自动编码器输出和干净图像之间的距离。
思考:降噪自动编码器真正学习到了什么?
其本质就是将噪声图像投影回流形的映射,不仅消除了噪声,还可以学习流形本身的结构(可以识别有意义图像的模式和特征)
使用数学模型来构建噪声模型所用到的公式:
用干净数据和噪声数据之间的MSE训练神经网络
使得上述噪声图像回归流形线中所使用到的公式:
f θ ( x ~ ) = x ~ + σ ∇ log p σ ( x ~ ) f_\theta(\tilde{x})=\tilde{x}+\sigma\nabla\log p_\sigma(\tilde{x}) fθ(x~)=x~+σ∇logpσ(x~)
f θ ( x ~ ) f_\theta(\tilde{x}) fθ(x~):表示根据当前模型参数 θ \theta θ,对输入噪声数据 t i l d e x tilde{x} tildex的修正函数, σ \sigma σ代表噪声强度,通常是与扩散过程中的时间步数相关的变量。 ∇ log p σ ( x ~ ) \nabla\log p_\sigma(\tilde{x}) ∇logpσ(x~)表示数据在噪声分布 l o g p σ log p_\sigma logpσ下的对数概率密度梯度,即“得分函数”,他描述了在噪声数据上,如何调整以上增加其概率密度。
代码实现:
# 定义VAE模型
class VariationalAutoencoder(nn.Module):def __init__(self, input_dim, latent_dim):super(VariationalAutoencoder, self).__init__()# 编码器self.encoder = nn.Sequential(nn.Linear(input_dim, 128),nn.ReLU())self.mu = nn.Linear(128, latent_dim) # 均值self.log_var = nn.Linear(128, latent_dim) # 方差的对数# 解码器self.decoder = nn.Sequential(nn.Linear(latent_dim, 128),nn.ReLU(),nn.Linear(128, input_dim),nn.Sigmoid() # 假设输入是归一化数据)def reparameterize(self, mu, log_var):std = torch.exp(0.5 * log_var)epsilon = torch.randn_like(std)return mu + epsilon * stddef forward(self, x):h = self.encoder(x)mu = self.mu(h)log_var = self.log_var(h)z = self.reparameterize(mu, log_var)x_reconstructed = self.decoder(z)return x_reconstructed, mu, log_var# 定义损失函数
def vae_loss(reconstructed, original, mu, log_var):reconstruction_loss = nn.MSELoss()(reconstructed, original)kl_divergence = -0.5 * torch.sum(1 + log_var - mu.pow(2) - log_var.exp())return reconstruction_loss + kl_divergence
特性 | 自动编码器 (AE) | 变分自动编码器 (VAE) |
---|---|---|
表示学习 | 确定性潜在表示 | 概率分布表示 |
损失函数 | 重建误差 | 重建误差 + KL散度 |
应用场景 | 数据压缩、降维 | 数据生成、概率建模 |
潜在空间采样 | 无法采样 | 可以从潜在空间采样生成新数据 |
3.论文阅读
3.1 介绍
给定一个标准产品视图中的孤立服装图像和一个单独的人物图像,虚拟试穿任务旨在生成穿着目标服装的人的新图像。先前的虚拟试穿工作在实现这一目标是面临两大挑战:
- 配对的(人类和服装)训练数据可用性有限;
- 生成与提示服装完美匹配的人体纹理很困难,通常会导致文本扭曲和纹理褪色。
《Enhancing Virtual Try-On with Synthetic Pairs and Error-Aware Noise Scheduling》这篇论文中探索结合通过数据合成和模型细化解决这些问题的方法。引入了一种服装提取模型,该模型可以从穿着衣服的个体的单个图像生成合成服装对。然后可以使用合成对来增强虚拟试穿的训练。论文还提出了一种基于错误感知细化的EARSB,它可以精确地针对局部生成错误来纠正基础虚拟试穿模型的输出。为了识别可能的错误,论文提出了一个弱监督错误分类器,它可以定位区域来进行细化,随后使用其置信度热图增强
Schrodinger Bridge 的噪声计划。在VITON-HD和DressCode-Upper上表明,合成数据增强了先前工作的性能,而EARSB提高了整体图像质量。
3.2 方法
基于细化的 EARSB 中的扩散过程。首先对输入图像进行预处理,然后使用基本试穿模型,该模型采用蒙面人体图像,其姿态表示P以及服装C作为输入,以生成初始人体图像x1.x1被输入到弱监督分类器WSC以获得误差图M.该图将噪声分布ϵ重新加权ϵr为I2SB扩散中,并将生成的误差图像x1细化为真是图像x0.
3.3 结论
本文提出了一种方法来解决虚拟试穿方面的先前研究的两个缺点。首先通过引入人衣模型来解决数据可用性有限的问题,该模型可以从穿着衣服的个体的单张图像生成(人衣、合成服装)对。其次提出了一个改进模型 EARSB,该模型可以精准地针对先前模型输出中的局部生成误差。EARSB 根据针对已知伪影的空间变化噪声计划改进了初始生成图像的低质量区域。在两个基准数据集上进行的实验表明合成数据增强提高了现有方法的性能,并且 EARSB 提高了先前模型生成的图像的质量。
4.总结
本周通过详细阐述 AE 和 VAE 的架构与实现,展示了它们在特征学习和生成任务中的重要作用。AE擅长处理降维和特征提取任务,但其潜在空间表达存在不确定性,限制了生成任务的能力。VAE通过概率建模与KL散度正则化(KL散度正则化相当于告诉模型:“你不仅需要学会重建数据,还要确保潜在空间的结构遵循某种有意义的分布(例如标准正态分布)。这样,就能利用这个潜在空间采样出新的数据,而不是只能还原训练集中的数据。”)克服了这些缺陷,在图像生成与数据建模中表现出更强的能力。在虚拟试穿领域,结合合成数据与基于扩散的 EARSB 模型,能够生成更高质量的虚拟试穿图像,解决了以往方法中数据有限和局部生成失真等问题。
参考文献
http://arxiv.org/abs/2501.04666v1