虚拟试衣人像合成新SOTA!IMAGDressing-v1:ControlNet和IP-Adapter的最佳拍档

news2024/9/20 9:23:36

文章链接:https://arxiv.org/pdf/2407.12705
github链接:https://imagdressing.github.io/
Demo试用:https://sf.dictdoc.site/

亮点直击

  • 为商家引入了一项新的虚拟试衣(VD)任务,并设计了一个综合亲和力测量指数(CAMI)用于评估生成图像与参考服装之间的一致性。

  • 提出了IMAGDressing-v1,其中包括一个用于提取细粒度服装特征的服装UNet和一个带有混合注意力模块的去噪UNet,以平衡服装特征与文本提示控制。

  • IMAGDressing-v1可以与其他扩展插件(如ControlNet和IP-Adapter)结合,以增强生成图像的多样性和可控性。

  • 收集并发布了一个大规模的互动服装配对(IGPair)数据集,包含超过30万对服装和穿戴图像,供社区探索和研究。

目前已经通过使用潜在扩散模型的局部服装修补实现了逼真的虚拟试衣(VTON),显著提升了消费者的在线购物体验。然而,现有的VTON技术忽略了商家全面展示服装的需求,包括对服装、面孔、姿势和场景的灵活控制。

为了解决这一问题,本文定义了一个虚拟试衣(VD)任务,专注于生成具有固定服装和可选条件的可自由编辑的人像。同时,设计了一个综合亲和力指标(CAMI),用于评估生成图像与参考服装之间的一致性。并提出了IMAGDressing-v1,它结合了一个捕捉CLIP语义特征和VAE纹理特征的服装UNet。同时提出了一种混合注意力模块,包括一个冻结的自注意力和一个可训练的交叉注意力,将服装UNet中的服装特征整合到一个冻结的去噪UNet中,确保用户可以通过文本控制不同的场景。IMAGDressing-v1可以与其他扩展插件(如ControlNet和IP-Adapter)结合,以增强生成图像的多样性和可控性。此外,为了解决数据缺乏的问题,发布了互动服装配对(IGPair)数据集,包含超过300,000对服装和穿戴图像,并建立了一个标准的数据组装流程。大量实验表明,IMAGDressing-v1在各种受控条件下实现了最先进的人像合成性能。

与MagicClothing对比

与IP-Adapter结合

与IP-Adapter 和 ControlNet-Pose结合

支持不同场景的文本提示

支持在特定区域更换(实验特性)

Demo展示:

方法

IMAGDressing-v1

如下图3所示,提出的IMAGDressing-v1主要由一个可训练的服装UNet组成,其架构与Stable Diffusion V1.5(SD v1.5)相同。不同之处在于服装UNet能够同时捕捉来自CLIP的服装语义特征和来自VAE的纹理特征,因为VAE可以近乎无损地重建图像。下部是一个冻结的去噪UNet,类似于SD v1.5,用于在特定条件下对潜在图像进行去噪。与SD v1.5不同,研究者们用混合注意力模块替换了所有自注意力模块,以更容易地整合来自服装UNet的服装特征,并利用现有的文本生成图像功能通过文本提示进行场景控制。此外,IMAGDressing-v1包括一个用于编码服装特征的图像编码器和投影层,以及一个用于编码文本特征的文本编码器。

服装UNet

提取细粒度的服装特征对于保持VD任务中的服装细节一致性至关重要。为此,提出的服装UNet同时提取语义信息和纹理特征作为服装特性。给定服装图像,首先使用冻结的VAE编码器将其转换为潜在空间表示。同时,使用冻结的CLIP图像编码器和可训练的投影层从X中提取token嵌入,其中利用Q-Former作为映射层。随后,服装UNet中的服装特征在交叉注意力机制中充分交互,类似于原始T2I模型中文本和图像之间的交互。最后,服装UNet与去噪UNet平行对齐,通过混合注意力将细粒度特征注入去噪UNet中。需要注意的是,服装UNet仅用于编码参考图像。因此,参考图像不会添加噪声,并且在扩散过程中只执行一次前向传递。

混合注意力

对于VD任务,一个理想的去噪UNet应该具备两个关键能力:(1) 保持原有的编辑和生成能力,(2) 整合额外的服装特征。前者可以通过冻结去噪UNet的模块来实现,而后者则通过提出的混合注意力模块来完成。因此,IMAGDressing-v1中的去噪UNet架构类似于原始文本生成图像SD v1.5模型,主要区别在于本文用混合注意力模块替换了去噪UNet中的所有自注意力模块。如上面图3所示,混合注意力模块由一个冻结的自注意力模块和一个可学习的交叉注意力模块组成。这里,混合注意力模块的自注意力权重使用来自SD v1.5的自注意力权重初始化。假设和分别表示查询特征和服装UNet在相应位置输出的服装特征,混合注意力的输出可以定义如下。

其中, 是用于调节服装条件强度的超参数。,, , 和 。这里,和 是可训练线性投影层的权重矩阵。研究者们为自注意力和交叉注意力共享一个查询矩阵Q。在混合注意力模块中,自注意力是冻结的,而交叉注意力是可训练的。换句话说,在公式5中,只有4W′_k和W′_v$ 是可学习的。这种方法能够保留原始T2I模型的生成能力,例如场景生成。

训练和推理

在训练阶段,保持去噪UNet中基本模块的参数不变,只优化剩余的模块。令 表示文本条件,则损失函数LLDM如下所示:

在推理阶段,也根据公式7使用无分类器指导。

Q: 如何支持自定义生成?如前面图3所示,去噪UNet中的基本模块权重是冻结的,这使得服装UNet实际上成为一个适配器模块,与其他社区适配器兼容,以实现自定义面部和姿势生成。例如,要生成穿着给定服装和一致姿势的人的图像,IMAGDressing-v1可以与ControlNet-Openpose结合。要生成穿着指定服装的特定个人,IMAGDressing-v1可以与IP-Adapter集成。此外,如果需要同时指定姿势和面部,IMAGDressing-v1可以与ControlNet-Openpose和IP-Adapter结合使用。此外,对于虚拟试衣(VTON)任务,IMAGDressing-v1也可以与ControlNet-Inpaint结合使用。

实验

实施细节

实验中,通过继承Stable Diffusion v1.5中UNet的预训练权重来初始化服装UNet的权重,并微调其权重。本文的模型在IGPair数据集的配对图像上以512×640的分辨率进行训练。采用固定学习率为5e-5的AdamW优化器。模型在10个NVIDIA RTX3090 GPU上以批次大小为5进行训练,共200,000步。在推理阶段,图像使用UniPC采样器进行50步采样,并将指导尺度w设置为7.0。

主要比较

将IMAGDressing-v1与四种最新的(SOTA)方法进行比较:Blip-Diffusion,Versatile Diffusion,Versatile Diffusion,以及MagicClothing。

定量结果

如下表2所示,由于Blip-Diffusion、Versatile Diffusion和IP-Adapter并非专门设计的VD模型,它们难以提取细粒度的服装特征并生成精确匹配文本、姿势和服装属性的角色图像。这导致其在多个指标上表现不佳。此外,这些模型与多个插件不兼容,因此无法计算CAMI-S指标。与MagicClothing相比,IMAGDressing-v1通过其图像编码器分支捕捉更多细节服装特征,并采用混合注意力机制。这种机制在保留原有文本编辑和生成能力的同时,整合了额外的服装特征。因此,IMAGDressing-v1在所有评估指标上表现优于其他SOTA方法。

定性结果

下图4展示了IMAGDressing-v1与SOTA方法的定性结果对比,包括非特定条件和特定条件生成的结果。在图4(a)中,在非特定条件下,BLIP-Diffusion 和Versatile Diffusion未能忠实地再现服装纹理。虽然IP-Adapter保持了服装的整体外观,但无法很好地保留细节,更重要的是,未能准确遵循文本提示。MagicClothing与文本条件高度一致;然而,它在保留服装整体外观和细节(如印刷文字或颜色)方面表现不佳。相比之下,IMAGDressing-v1不仅遵循文本提示,还保留了细粒度的服装细节,在VD任务中表现出色。本文的方法支持自定义文本提示场景,如图4(a)的最后三行所示。此外,图4(b)展示了在特定条件下的定性结果。观察到,IMAGDressing-v1在涉及给定姿势、面部或两者的场景中显著优于MagicClothing。IMAGDressing-v1生成的结果表现出更优越的纹理细节和更逼真的外观。这表明IMAGDressing-v1与社区适配器的兼容性增强,提升了生成图像的多样性和可控性。

消融研究

各组件的有效性。下表3展示了一项消融研究,以验证所提出的图像编码器分支(IEB)和混合注意力(HA)模块的有效性。这里,A0(基础)表示没有IEB和HA的设置。观察到使用IEB的A1在所有指标上都有所提升,表明IEB有效地捕捉到了语义服装特征。此外,A2超越了A1,表明IEB和HA的结合进一步提升了定量结果。

此外,下图5提供了定性比较。A0未能在具有复杂纹理的图像中充分捕捉服装特征(第二行)。尽管IEB(A1)部分解决了这个问题,但将IEB直接注入去噪UNet会导致与主模型特征冲突,导致服装细节模糊(第三行)。因此,HA模块(A2)通过调整服装UNet中服装细节的强度来提高图像保真度(第四行),这与本文的定量结果一致。

超参数 。下图6展示了超参数对使用固定随机种子生成样本的影响。随着增加到1.0,生成角色中的服装变得更像输入的服装。较小的确保生成的结果更接近文本提示,而较大的λ使结果偏向输入的服装。这表明有效地平衡了原有编辑和生成能力与额外的服装特征。因此,在实验中经验性地将设置为1.0。

潜在应用

下图7展示了IMAGDressing-v1在虚拟试衣(VTON)中的潜在应用。通过将IMAGDressing-v1与ControlNet-Inpaint结合并遮罩服装区域,实现了VTON。结果表明,IMAGDressing-v1可以实现高保真的VTON,展示了显著的潜力。

结论

尽管最近使用潜在扩散模型在VTON方面取得了显著进展,增强了在线购物体验,但它们仍然无法让商家全面展示服装,并灵活控制面部、姿势和场景。为了弥补这一差距,本文引入了虚拟试衣(VD)任务,旨在生成在可选条件下穿着固定服装的可编辑人像。本文提出的IMAGDressing-v1采用了服装UNet和混合注意力模块,整合服装特征,通过文本实现场景控制。它支持像ControlNet和IP-Adapter这样的插件,以提供更大的多样性和可控性。此外,研究者们发布了包含超过300,000对服装和穿着图像的IGPair数据集,提供了一个强大的数据组装流程。广泛的实验验证表明,IMAGDressing-v1在受控人像合成方面达到了业界领先的性能水平。

参考文献

[1] MAGDressing-v1: Customizable Virtual Dressing

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关闭 Linux 服务器上的 IPv6

虽然 IPv6 已经逐渐普及,但在某些 Linux 服务器上的业务系统仍然可能遇到一些奇怪的问题。特别是在集群场景中,因为集群各个节点之间需要互相通信,如果 IPv6 没有正确配置网络,可能导致一些未知问题,解决起来相当麻烦。…

acwing796-子矩阵的和-前缀和

s矩阵是全局变量,维度n*m,从1~n和 1~m存储元素【0】【0】~【0】【m】和【0】【0】~【n】【0】分别存储的都是0.s矩阵刚开始是存储输入的元素,后面用于存储前缀和。 s矩阵的意思是s【i】【j】表示从【0】【0】到【i】【j】为对角线的矩阵里面所有元素的和…

Pytorch的编译新特性TorchDynamo的工作原理和使用示例

在深度学习中,优化模型性能至关重要,特别是对于需要快速执行和实时推断的应用。而PyTorch在平衡动态图执行与高性能方面常常面临挑战。传统的PyTorch优化技术在处理动态计算图时效果有限,导致训练时间延长和模型性能不佳。TorchDynamo是一种为…

AI批量剪辑,批量发布大模型矩阵系统搭建开发

目录 前言 一、AI矩阵系统功能 二、AI批量剪辑可以解决什么问题? 总结: 前言 基于ai生成或剪辑视频的原理,利用ai将原视频进行混剪,生成新的视频素材。ai会将剪辑好的视频加上标题,批量发布到各个自媒体账号上。这…

[CP_AUTOSAR]_通信服务_CanTp模块(二)

目录 3、功能规范3.1、提供给上层的服务3.1.1、Initialization and shutdown3.1.2、Transmit request3.1.3、Transmit cancellation 3.2、提供给下层的服务3.2.1、Transmit confirmation3.2.2、Reception indication 3.3、内部行为3.3.1、N-SDU接收 在前面 《[CP_AUTOSAR]_通信…

一款异次元小清新风格的响应式wordpress个人博客主题

一款异次元小清新风格的响应式个人博客主题。这是一款专注于用户阅读体验的响应式 WordPress 主题,整体布局简洁大方,针对资源加载进行了优化。 Kratos主题基于Bootstrap和Font Awesome的WordPress一个干净,简单且响应迅速的博客主题&#x…

go-微服务的设计概括

一、微服务到底是什么? 初学者很容易把微服务和分布式混为一谈,但其实二者之间存在非常大的差异,我个人认为主要有以下几点: 分布式主要是一种技术手段,用来保证多个相同的进程能够共同工作而不出错。采用各种复杂的…

修复公路 (最小生成树)

//新生训练 Input 4 4 1 2 6 1 3 4 1 4 5 4 2 3 Output 5 #include <iostream> #include <algorithm> #include <bits/stdc.h> using namespace std; typedef long long ll;struct road {int u,v;ll w;bool operator<(const road a)const{return w<a.w…

每日练习*

目录 一、选择题二、知识点1.中间件特点的描述1.1中间件的定义和作用1.2中间件的主要特点1.3中间件的应用场景1.4中间件的发展趋势 二、重写与重载总结![](https://i-blog.csdnimg.cn/direct/aa4190dfbd0e463294e41059016b8895.png) 一、选择题 题目选自牛客网 1.执行下列代码…

自动化测试 - selenium 环境搭建

在进行自动化测试时&#xff0c;Selenium 是一个非常强大的工具&#xff0c;在使用前需要做一些环境准备。 1. 配置 Chromedriver 访问 Chrome 浏览器的官方网站&#xff08;https://www.google.cn/chrome/&#xff09;&#xff0c;下载并安装 Chrome 浏览器。 接下来&#x…

Postman 集合变量的实用指南

在运用 Postman 进行 API 测试时&#xff0c;变量扮演着动态数据存储器的角色。它们作为键值对存在&#xff0c;其中“键”是变量的标识&#xff0c;而“值”则是存储在变量中的数据。这种机制不仅可以在多个 API 调用中重用数据&#xff0c;还有助于降低数据冗余&#xff0c;优…

【已解决】Linux(Centos7)中yum过程域名无法解析问题

问题原因 Linux中yum过程域名无法解析问题&#xff0c;但是ping 域名时联通的&#xff08;即DNS没问题&#xff09;&#xff0c;所以初步判断是镜像源的问题。 解决方法&#xff08;Centos7&#xff09; 1、备份/etc/yum.repos.d/CentOS-Base.repo 2、下载CentOS-Base.repo…

WebGL-编译报错,如何定位sendfile报错位置

1&#xff09;WebGL-编译报错&#xff0c;如何定位sendfile报错位置 2&#xff09;设置DepthBufferBits和设置DepthStencilFormat的区别 3&#xff09;Unity打包exe后&#xff0c;游戏内拉不起Steam的内购 4&#xff09;使用了Play Asset Delivery提交版本被Google报错 这是第3…

Nginx的HA高可用的搭建

1. 什么是高可用 高可用&#xff08;High Availability, HA&#xff09;是一种系统设计策略&#xff0c;旨在确保服务或应用在面对硬件故障、软件缺陷或任何其他异常情况时&#xff0c;仍能持续稳定地运行。它通过实现冗余性、故障转移、负载均衡、数据一致性、监控自动化、预防…

MySQL下载安装(保姆式教程)以及解决一些可能的问题

目录 MySQL的下载和安装 显示路径已经存在问题解决 注意&#xff1a; 端口被占用问题解决 注意&#xff1a; 服务名占用问题解决 注意&#xff1a; 应用配置问题解决 注意&#xff1a; MySQL环境配置 检查MySQL是否成功安装 如何将MySQL文件删除干净 MySQL的下载和安装 首先直接…

Python(字符串)

方法名描述说明 str.lower() 将str字符串全部转化为小写字母&#xff0c;结果为一个新的字符串str.upper()将str字符串全部转化为大写字母&#xff0c;结果为一个新的字符串str.split(sepNone)将str按照指定的分隔符sep分隔&#xff0c;结果为列表类型str.count(sub)结果为…

Golang | Leetcode Golang题解之第239题滑动窗口最大值

题目&#xff1a; 题解&#xff1a; func maxSlidingWindow(nums []int, k int) []int {n : len(nums)prefixMax : make([]int, n)suffixMax : make([]int, n)for i, v : range nums {if i%k 0 {prefixMax[i] v} else {prefixMax[i] max(prefixMax[i-1], v)}}for i : n - 1…

使用C#实现无人超市管理系统——数据结构课设(代码+PPT+说明书)

说明&#xff1a;这是自己做的课程设计作业&#xff0c;得分情况98/100 如果想要获取私信我 本项目采用线性表中的链表来进行本次系统程序的设计。链表分为两条线&#xff0c;分别是存储用户信息和商品信息&#xff0c;并且都设为公共属性&#xff0c;方便对用户信息和商品信息…

QT5:多窗口跳转

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助 目录 前言 一、环境 二、步骤 三、代码实现 四、效果图 前言 学习使用qt5完成多窗口&#xff08;界面&#xff09;跳转&#xff1a;从主界面可分别跳转至界面一和界面二&#xf…

echarts实现3d柱状效果

代码如下&#xff0c;单个的调第一个方法&#xff0c;多个柱状的调第二个方法&#xff0c;具体情况修改参数或者二次开发即可 //3d柱状图 export function getEcharts3DBar (xAxisData:string[][name1,name2,name3], data:number[][1,2,3], colorObj:IBaseObject{topStartColo…