编码器和扩散模型
目录
- 摘要
- 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
相关文章:
编码器和扩散模型
目录 摘要abstract1.自动编码器2.变分编码器(VAE)3.论文阅读3.1 介绍3.2 方法3.3 结论 4.总结参考文献 摘要 本周学习了自动编码器(AE)和变分自动编码器(VAE)的基本原理与实现,分析其在数据降维…...
PAT甲级-1024 Palindromic Number
题目 题目大意 一个非回文数,加上它的翻转数所得的和,进行k次,有可能会得到一个回文数。给出一个数n,限制相加次数为k次,如果小于k次就得到回文数,那么输出该回文数和相加的次数;如果进行k次还…...
FS8405 Release FS0B
复位场景:FS8405正常工作后,RSTB后期产生拉低复位信号。 1 故障与PGOOD、RSTB和FS0B引脚的联系 FS8405出现故障时,会对PGOOD、RSTB和FS0B引脚产生不同的影响,具体影响如下: 橙色标记,反应是不可配置的。…...
IGBT的损耗计算的学习【2025/1/24】
可以通过示波器实测IGBT电压电流波形,然后通过示波器的math功能将电压电流波形乘积后积分求损耗。 软开管:给了导通信号,但是电流并没有从此IGBT流过 IGBT(绝缘栅双极晶体管)的损耗主要分为 导通损耗 和 开关损耗 两部…...
Unity|小游戏复刻|见缝插针1(C#)
准备 创建Scenes场景,Scripts脚本,Prefabs预制体文件夹 修改背景颜色 选中Main Camera 找到背景 选择颜色,一种白中透黄的颜色 创建小球 将文件夹里的Circle拖入层级里 选中Circle,位置为左右居中,偏上&…...
No.1|Godot|俄罗斯方块复刻|棋盘和初始方块的设置
删掉基础图标新建assets、scenes、scripts文件夹 俄罗斯方块的每种方块都是由四个小方块组成的,很适合放在网格地图中 比如网格地图是宽10列,高20行 要实现网格的对齐和下落 Node2D节点 新建一个Node2D 添加2个TileMapLayer 一个命名为Board&…...
SSM框架探秘:Spring 整合 SpringMVC 框架
搭建和测试 SpringMVC 的开发环境: web.xml 元素顺序: 在 web.xml 中配置 DisPatcherServlet 前端控制器: <!-- 配置前端控制器 --> <servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>…...
2025.1.20——二、buuctf BUU UPLOAD COURSE 1 1 文件上传
题目来源:buuctf BUU UPLOAD COURSE 1 1 目录 一、打开靶机,查看信息 二、解题思路 step 1:上传一句话木马.php文件康康回显 step 2:蚁剑连接 三、小结 一、打开靶机,查看信息 这里提示到了文件会被上传到./uplo…...
【架构面试】三、高可用高性能架构设计
高可用高性能架构设计 面试要点引入:架构原理、分布式技术等是面试必考领域,高可用高性能需求考察频繁。面试常通过询问系统架构设计来考察能力,讲解架构设计过程就是证明系统高可用的过程,其中涉及SLA指标。SLA指标详解 定义与衡…...
11.渲染管线——光栅化阶段
光栅化阶段是渲染管线中的一个关键步骤,负责将3D模型转换成屏幕上的2D像素。用通俗易懂的方式来解释: 通俗解释:光栅化就像把3D模型“投影”到2D屏幕上 想象你是一个画家,正在把3D场景画到2D画布上: 3D模型到2D屏幕的…...
【数据分享】1929-2024年全球站点的逐月平均能见度(Shp\Excel\免费获取)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标!说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2024年全球气象站点…...
二叉树的深度
二叉树深度的定义: 二叉树的深度(高度)是指从根节点到最远叶子节点的最长路径上的节点数。例如,一个只有根节点的二叉树,其深度为1;如果根节点有两个子节点,且每个子节点又分别有两个子节点&…...
MySQL命令及用法(精华版)
目录 DDL(数据定义语言) 数据库操作 表操作 DML(数据操作语言) DQL(数据查询语言) 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 DCL(数据控制语言) 用户…...
R语言学习笔记之高效数据操作
一、概要 数据操作是R语言的一大优势,用户可以利用基本包或者拓展包在R语言中进行复杂的数据操作,包括排序、更新、分组汇总等。R数据操作包:data.table和tidyfst两个扩展包。 data.table是当前R中处理数据最快的工具,可以实现快…...
将 OneLake 数据索引到 Elasticsearch - 第二部分
作者:来自 Elastic Gustavo Llermaly 及 Jeffrey Rengifo 本文分为两部分,第二部分介绍如何使用自定义连接器将 OneLake 数据索引并搜索到 Elastic 中。 在本文中,我们将利用第 1 部分中学到的知识来创建 OneLake 自定义 Elasticsearch 连接器…...
Linux——冯 • 诺依曼体系结构
目录 一、冯•诺依曼体系结构原理二、内存提高冯•诺依曼体系结构效率的方法三、当用QQ和朋友聊天时数据的流动过程四、关于冯诺依曼五、总结 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系 流程&#…...
Java进阶(一)
目录 一.Java注解 什么是注解? 内置注解 元注解 二.对象克隆 什么是对象克隆? 为什么用到对象克隆 三.浅克隆深克隆 一.Java注解 什么是注解? java中注解(Annotation)又称java标注,是一种特殊的注释。 可以添加在包,类&…...
appium自动化环境搭建
一、appium介绍 appium介绍 appium是一个开源工具、支持跨平台、用于自动化ios、安卓手机和windows桌面平台上面的原生、移动web和混合应用,支持多种编程语言(python,java,Ruby,Javascript、PHP等) 原生应用和混合应用…...
Qt 5.14.2 学习记录 —— 이십 QFile和多线程
文章目录 1、QFile1、打开2、读写3、关闭4、程序5、其它功能 2、多线程1、演示2、锁 3、条件变量和信号量 1、QFile Qt有自己的一套文件体系,不过Qt也可以使用C,C,Linux的文件操作。使用Qt的文件体系和Qt自己的一些类型更好配合。 管理写入读…...
積分方程與簡單的泛函分析7.希爾伯特-施密特定理
1)def函數叫作"由核生成的(有源的)" 定义: 设 是定义在区域上的核函数。 对于函数,若存在函数使得, 则称函数是“由核生成的(有源的)”。 这里的直观理解是: 函数的“来源”可以通过核函数 与另一个函数的积分运算得到。 在积分方程理论中,这种表述常…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
