当前位置: 首页 > news >正文

编码器和扩散模型

目录

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

相关文章:

编码器和扩散模型

目录 摘要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 的开发环境&#xff1a; web.xml 元素顺序&#xff1a; 在 web.xml 中配置 DisPatcherServlet 前端控制器&#xff1a; <!-- 配置前端控制器 --> <servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>…...

2025.1.20——二、buuctf BUU UPLOAD COURSE 1 1 文件上传

题目来源&#xff1a;buuctf BUU UPLOAD COURSE 1 1 目录 一、打开靶机&#xff0c;查看信息 二、解题思路 step 1&#xff1a;上传一句话木马.php文件康康回显 step 2&#xff1a;蚁剑连接 三、小结 一、打开靶机&#xff0c;查看信息 这里提示到了文件会被上传到./uplo…...

【架构面试】三、高可用高性能架构设计

高可用高性能架构设计 面试要点引入&#xff1a;架构原理、分布式技术等是面试必考领域&#xff0c;高可用高性能需求考察频繁。面试常通过询问系统架构设计来考察能力&#xff0c;讲解架构设计过程就是证明系统高可用的过程&#xff0c;其中涉及SLA指标。SLA指标详解 定义与衡…...

11.渲染管线——光栅化阶段

光栅化阶段是渲染管线中的一个关键步骤&#xff0c;负责将3D模型转换成屏幕上的2D像素。用通俗易懂的方式来解释&#xff1a; 通俗解释&#xff1a;光栅化就像把3D模型“投影”到2D屏幕上 想象你是一个画家&#xff0c;正在把3D场景画到2D画布上&#xff1a; 3D模型到2D屏幕的…...

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

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

二叉树的深度

二叉树深度的定义&#xff1a; 二叉树的深度&#xff08;高度&#xff09;是指从根节点到最远叶子节点的最长路径上的节点数。例如&#xff0c;一个只有根节点的二叉树&#xff0c;其深度为1&#xff1b;如果根节点有两个子节点&#xff0c;且每个子节点又分别有两个子节点&…...

MySQL命令及用法(精华版)

目录 DDL&#xff08;数据定义语言&#xff09; 数据库操作 表操作 DML&#xff08;数据操作语言&#xff09; DQL&#xff08;数据查询语言&#xff09; 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 DCL&#xff08;数据控制语言&#xff09; 用户…...

R语言学习笔记之高效数据操作

一、概要 数据操作是R语言的一大优势&#xff0c;用户可以利用基本包或者拓展包在R语言中进行复杂的数据操作&#xff0c;包括排序、更新、分组汇总等。R数据操作包&#xff1a;data.table和tidyfst两个扩展包。 data.table是当前R中处理数据最快的工具&#xff0c;可以实现快…...

将 OneLake 数据索引到 Elasticsearch - 第二部分

作者&#xff1a;来自 Elastic Gustavo Llermaly 及 Jeffrey Rengifo 本文分为两部分&#xff0c;第二部分介绍如何使用自定义连接器将 OneLake 数据索引并搜索到 Elastic 中。 在本文中&#xff0c;我们将利用第 1 部分中学到的知识来创建 OneLake 自定义 Elasticsearch 连接器…...

Linux——冯 • 诺依曼体系结构

目录 一、冯•诺依曼体系结构原理二、内存提高冯•诺依曼体系结构效率的方法三、当用QQ和朋友聊天时数据的流动过程四、关于冯诺依曼五、总结 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系 流程&#…...

Java进阶(一)

目录 一.Java注解 什么是注解&#xff1f; 内置注解 元注解 二.对象克隆 什么是对象克隆? 为什么用到对象克隆 三.浅克隆深克隆 一.Java注解 什么是注解&#xff1f; java中注解(Annotation)又称java标注&#xff0c;是一种特殊的注释。 可以添加在包&#xff0c;类&…...

appium自动化环境搭建

一、appium介绍 appium介绍 appium是一个开源工具、支持跨平台、用于自动化ios、安卓手机和windows桌面平台上面的原生、移动web和混合应用&#xff0c;支持多种编程语言(python&#xff0c;java&#xff0c;Ruby&#xff0c;Javascript、PHP等) 原生应用和混合应用&#xf…...

Qt 5.14.2 学习记录 —— 이십 QFile和多线程

文章目录 1、QFile1、打开2、读写3、关闭4、程序5、其它功能 2、多线程1、演示2、锁 3、条件变量和信号量 1、QFile Qt有自己的一套文件体系&#xff0c;不过Qt也可以使用C&#xff0c;C&#xff0c;Linux的文件操作。使用Qt的文件体系和Qt自己的一些类型更好配合。 管理写入读…...

積分方程與簡單的泛函分析7.希爾伯特-施密特定理

1)def函數叫作"由核生成的(有源的)" 定义: 设 是定义在区域上的核函数。 对于函数,若存在函数使得, 则称函数是“由核生成的(有源的)”。 这里的直观理解是: 函数的“来源”可以通过核函数 与另一个函数的积分运算得到。 在积分方程理论中,这种表述常…...

使用vitepress搭建自己的博客项目

一、介绍can-vitepress-blog 什么是CAN BLOG CAN BLOG是基于vitepress二开的个人博客系统&#xff0c;他能够方便使用者快速构建自己的博客文章&#xff0c;无需繁琐的配置和复杂的代码编写。 CAN BLOG以antdv为UI设计基础&#xff0c;简洁大方&#xff0c;界面友好&#xf…...

开始步入达梦中级dba

分析内存使用需要的方法之一 disql /nolog conn sysdba/sysdbaselect value from v$parameter where nameMEMORY_LEAK_CHECK; SP_SET_PARA_VALUE(0,MEMORY_LEAK_CHECK,1); select * from V$MEM_REGINFO; select * from V$MEM_HEAP;...

如何在docker中的mysql容器内执行命令与执行SQL文件

通过 docker ps -a 查询当前运行的容器&#xff0c;找到想执行命令的容器名称。 docker ps -a若想执行sql文件&#xff0c;则将sql文件放入当前文件夹下后将项目内的 SQL 文件拷贝到 mysql 容器内部的 root下。 sudo docker cp /root/enterprise.sql mysql:/root/然后进入 my…...

S4 HANA更改Tax base Amount的字段控制

本文主要介绍在S4 HANA OP中Tax base Amount的字段控制相关设置。具体请参照如下内容&#xff1a; 1. 更改Tax base Amount的字段控制 以上配置用于控制FB60/FB65/FB70/FB75/MIRO的页签“Tax”界面是否可以修改“Tax base Amount”&#xff0c; 如果勾选Change 表示可以修改T…...

Linux权限有关

文章目录 一、添加普通用户二、Xshell下命令行的知识三、 Linux和Windows操作系统四、再探指令和Linux权限五、用户相关用户切换: 今天我们学习与Linux有关的权限等内容&#xff0c;以及一些零碎知识帮助我们理解Linux的系统和Xshell的原理。 本篇是在Xshell环境下执行的。 一…...

【github 使用相关】提交pr和commit message Conventional Commits 规范 代码提交的描述该写什么?

目录 Git 提交信息格式格式描述Subject&#xff08;标题&#xff09;Body&#xff08;正文&#xff09; 规范的标签&#xff08;Tag&#xff09;示例 CG Git 提交信息格式 格式描述 一般开源项目代码库根目录都会有一个 CONTRIBUTING.md 或者其他类似名字的文档来介绍如何开始…...

Docker—搭建Harbor和阿里云私有仓库

Harbor概述 Harbor是一个开源的企业级Docker Registry管理项目&#xff0c;由VMware公司开发。‌它的主要用途是帮助用户迅速搭建一个企业级的Docker Registry服务&#xff0c;提供比Docker官方公共镜像仓库更为丰富和安全的功能&#xff0c;特别适合企业环境使用。‌12 Harb…...

Maven的下载安装配置

maven的下载安装配置 maven是什么 Maven 是一个用于 Java 平台的 自动化构建工具&#xff0c;由 Apache 组织提供。它不仅可以用作包管理&#xff0c;还支持项目的开发、打包、测试及部署等一系列行为 Maven的核心功能 项目构建生命周期管理&#xff1a;Maven定义了项目构建…...

Rust:高性能与安全并行的编程语言

引言 在现代编程世界里&#xff0c;开发者面临的最大挑战之一就是如何平衡性能与安全性。在许多情况下&#xff0c;C/C这样的系统级编程语言虽然性能强大&#xff0c;但其内存管理的复杂性导致了各种安全漏洞。为了解决这些问题&#xff0c;Rust 作为一种新的系统级编程语言进入…...

matlab的cat()函数详解(OK)

cat函数的功能是 连接数组 功能&#xff1a; 按指定的维度连接多个向量 结构&#xff1a; C cat(dim, A, B) 按dim指定的维度连接向量A和BC cat(dim, A1, A2, A3,A4, …) 按dim指定的维度连接多个向量A1, A2,A3,A4…C cat(dim, A{:}) 将包含向量的cell或结构数组联合为一…...