编码器和扩散模型

目录

  • 摘要
  • 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 介绍

给定一个标准产品视图中的孤立服装图像和一个单独的人物图像,虚拟试穿任务旨在生成穿着目标服装的人的新图像。先前的虚拟试穿工作在实现这一目标是面临两大挑战:

  1. 配对的(人类和服装)训练数据可用性有限;
  2. 生成与提示服装完美匹配的人体纹理很困难,通常会导致文本扭曲和纹理褪色。

《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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/7430.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】类与对象初级应用篇:打造自定义日期类与日期计算器(2w5k字长文附源码)

文章目录 一、日期类的实现1. 日期类的默认成员函数的分析与实现构造函数其它默认成员函数 2. 各种逻辑比较运算符重载3. 日期加与减天数日期加天数系列日期减天数系列日期加减天数的最后修定和- -系列 4. 日期减日期方法一方法二 5. 流插入与流提取重载流插入重载流提取重载(含…

Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)

redis实现查询缓存的业务逻辑 service层实现 Overridepublic Result queryById(Long id) {String key CACHE_SHOP_KEY id;// 现查询redis内有没有数据String shopJson (String) redisTemplate.opsForValue().get(key);if(StrUtil.isNotBlank(shopJson)){ // 如果redis的数…

ThinkPhp伪静态设置后,访问静态资源也提示找不到Controller

ThinkPhp没有配置伪静态时,除了默认的IndexController能访问,其他路由Controller都访问不到,提示404错误。配置了伪静态后就解决了这个问题。 但是当我的ThinkPhp后台项目中有静态资源放在public目录(或子目录)中需要…

2013年蓝桥杯第四届CC++大学B组真题及代码

目录 1A:高斯日记(日期计算) 2B:马虎的算式(暴力模拟) 3C:第39级台阶(dfs或dp) 4D:黄金连分数(递推大数运算) 5E:前缀…

【数据分享】1929-2024年全球站点的逐月平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标!说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2024年全球气象站点…

【动态规划】--- 斐波那契数模型

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 算法Journey 🏠 第N个泰波那契数模型 📌 题目解析 第N个泰波那契数 题目要求的是泰波那契数,并非斐波那契数。 &…

单片机-STM32 WIFI模块--ESP8266 (十二)

1.WIFI模块--ESP8266 名字由来: Wi-Fi这个术语被人们普遍误以为是指无线保真(Wireless Fidelity),并且即便是Wi-Fi联盟本身也经常在新闻稿和文件中使用“Wireless Fidelity”这个词,Wi-Fi还出现在ITAA的一个论文中。…

计算机的错误计算(二百二十二)

摘要 利用大模型化简计算 实验表明,虽然结果正确,但是,大模型既绕了弯路,又有数值计算错误。 与前面相同,再利用同一个算式看看另外一个大模型的化简与计算能力。 例1. 化简计算摘要中算式。 下面是与一个大模型的…

ansible自动化运维实战--软件包管理模块、服务模块、文件模块和收集模块setup(4)

文章目录 一、软件包管理模块1.1、功能1.2、常用参数1.3、示例 二、服务模块2.1、功能2.2、服务模块常用参数2.3、示例 三、文件与目录模块3.1、file功能3.2、常用参数3.3、示例 四、收集模块-setup4.1、setup功能4.2、示例 一、软件包管理模块 1.1、功能 Ansible 提供了多种…

高速光模块中的并行光学和WDM波分光学技术

随着AI大模型训练和推理对计算能力的需求呈指数级增长,AI数据中心的网络带宽需求大幅提升,推动了高速光模块的发展。光模块作为数据中心和高性能计算系统中的关键器件,主要用于提供高速和大容量的数据传输服务。 光模块提升带宽的方法有两种…

Linux命令行配置网络代理

在Linux命令行中,你可以使用以下方法设置网络代理服务器。 本文演示代理地址为:http://192.168.1.30:7890 请根据实际代理地址进行替换 临时代理 使用环境变量的方法: 打开终端,并输入以下命令: export http_proxyhtt…

SpringBoot3+Vue3开发学生选课管理系统

功能介绍 分三个角色登录:学生登录,老师登录,教务管理员登录,不同用户功能不同! 1.学生用户功能 选课记录,查看选课记录,退选。选课管理,进行选课。通知管理,查看通知消…

牛客周赛 Round 78 A-C

A.时间表查询! 链接:https://ac.nowcoder.com/acm/contest/100671/A 来源:牛客网 题目描述 今天是2025年1月25日,今年的六场牛客寒假算法基础集训营中,前两场比赛已经依次于 20250121、20250123 举行;而…

Android - 通过Logcat Manager简单获取Android手机的Log

由于工作需要,经常需要获取Android手机的Log。 平常都是通过adb命令来获取,每次都要写命令。 偶然的一个机会,我从外网发现了一个工具 Logcat Manager,只需要通过简单的双击即可获取Android的Log,这里也分享一下。 目…

苍穹外卖-day10

苍穹外卖-day10 Spring Task Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 cron表达式 cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间 **构成规则:**分为6或7个域&…

一文详解Filter类源码和应用

背景 在日常开发中,经常会有需要统一对请求做一些处理,常见的比如记录日志、权限安全控制、响应处理等。此时,ServletApi中的Filter类,就可以很方便的实现上述效果。 Filter类 是一个接口,属于 Java Servlet API 的一部…

(2)STM32 USB设备开发-USB虚拟串口

例程:STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为USB虚拟串口教程,没有知识,全是实操,按照步骤就能获得一个STM32的USB虚拟串口。本例子是在野火F103MINI开发板上验证的,如果代码中出现一些外设的…

K8S中的数据存储之基本存储

基本存储类型 EmptyDir 描述:当 Pod 被调度到节点上时,Kubernetes 会为 Pod 创建一个空目录,所有在该 Pod 中的容器都可以访问这个目录。特点: 生命周期与 Pod 绑定,Pod 删除时,数据也会丢失。适用于临时…

谈谈RTMP|RTSP播放器视频view垂直|水平反转和旋转设计

技术背景 我们在做RTMP|RTSP播放器的时候,有这样的技术诉求,有的摄像头出来的数据是有角度偏差的,比如“装倒了”,或者,图像存在上下或者左右反转,这时候,就需要播放器能做响应的处理&#xff…

自然语言处理——从原理、经典模型到应用

1. 概述 自然语言处理(Natural Language Processing,NLP)是一门借助计算机技术研究人类语言的科学,是人工智能领域的一个分支,旨在让计算机理解、生成和处理人类语言。其核心任务是将非结构化的自然语言转换为机器可以…