一键换衣,这个AI可以让你实现穿衣自由

news2024/9/24 21:17:50

基于图像的虚拟穿衣是一种流行且前景广阔的图像合成技术,能够显著改善消费者的购物体验,并降低服装商家的广告成本。顾名思义,虚拟穿衣任务旨在生成目标人穿着给定服装的图像。

OOTDiffusion简述

图1 虚拟换衣

基于图像的虚拟穿衣目前面临两个主要挑战:

首先,生成的图像应足够逼真和自然,以避免不和谐感。大多数最近关于虚拟试穿的研究利用生成对抗网络(GANs)或潜在扩散模型(LDMs)进行图像生成。先前基于GAN的方法通常难以生成正确的服装褶皱、自然的光影或逼真的人体。因此,更多近期的工作倾向于基于LDM的方法,这些方法有效提高了试穿图像的逼真度。

第二个关键挑战是尽可能保留服装的细节特征,如复杂的文本、纹理、颜色、图案和线条等。先前的研究执行显式的变形过程,将服装特征与目标人体对齐,然后将变形后的服装输入到生成模型(即GANs和LDMs等)中。因此,这种方法的性能极大地依赖于独立变形过程的有效性,而这一过程容易对训练数据过拟合。

图2 OOTDiffusion模型

鉴于上述问题的前景和挑战,一种新颖的基于LDM的虚拟试穿方法,称为Outfitting over Try-on Diffusion(OOTDiffusion;见图2)被提出。

  1. 首先,充分利用预训练的潜在扩散模型的优势,确保生成图像的高逼真度和自然的试穿效果,并设计了一种装配UNet模型,以在潜在空间中进一步学习服装的细节特征。
  2. 然后,OOTDiffusion提出了一种装配融合过程,以在去噪UNet的自注意力层中精确对齐服装特征与噪声人体。通过这种方式,服装特征能够顺利适应各种目标人体类型和姿势,而不会因独立变形过程而导致信息丢失或特征扭曲。

图3 OOTDiffusion 丢弃操作

  1. 此外,OOTDiffusion执行了一种装配丢弃操作,在训练中随机丢弃少量服装潜变量,以启用关于服装特征的无分类器。通过这种方法,可以简单地通过指导尺度调整服装控制对生成结果的影响,从而进一步增强OOTDiffusion方法的可控性。
  2. OOTDiffusion模型左侧部分,服装图像被编码到潜在空间,并输入到装配UNet中进行单步处理。由CLIP编码器生成的条件输入,服装特征通过装配融合被引入到去噪UNet模型中。特别是在训练过程中,对服装潜变量执行装配丢弃操作,以启用无分类器指导操作。右侧部分,输入的人体图像根据目标区域进行遮罩,并与高斯噪声拼接,作为去噪UNet的输入进行多次采样。去噪后,特征图被解码回图像空间,作为模型的试穿结果进行输出。

OOTDiffusion模型生成的效果与其他模型对比,有了较大的提升,可以从对比图可以看出,OOTDiffusion模型生成的效果并没有改变服装的特性,而其他的模型多多少少更改了服装的特性,给人的感觉并没有换上合适的衣服。

图4 模型对比

OOTDiffusion实战

OOTDiffusion是一个开源的项目,且提供了预训练模型,大家可以在GitHub上面找到相关的下载链接,下载预训练权重,然后复制整个模型空间的代码就可以实现虚拟换衣操作了。当然在实现虚拟换衣代码前,需要安装相关的第三方库以及相关的torch环境。最后可以直接使用cmd窗口中进行代码的实现。

git clone https://github.com/levihsu/OOTDiffusion
conda create -n ootd python==3.10
conda activate ootd
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2
pip install -r requirements.txt
# 只换半身衣服
cd OOTDiffusion/run
python run_ootd.py --model_path <model-image-path> --cloth_path <cloth-image-path> --scale 2.0 --sample 4

#换全身衣服
cd OOTDiffusion/run
python run_ootd.py --model_path <model-image-path> --cloth_path <cloth-image-path> --model_type dc --category 2 --scale 2.0 --sample 4

OOTDiffusion提供了2种预训练模型,半身模型与全身模型。本身模型可以换上半身服装,而全身模型,不仅可以换上半身的衣服,还可以换下半身的服装。代码执行时,需要指定模型与换的衣服。

图5 OOTDiffusion更换下半身服装

当然代码实现,需要一定的技术手段,需要稍微懂一些编程技术,而OOTDiffusion模型已经上架到了hugging face上,其hugging face提供免费使用的GUI使用界面。只需要在GUI界面上,选择或者上传自己的图片,并选择或者上传需要换的服装,点击run即可,等待一段时间后,模型会自动生成对应的换衣效果。

图6 hugging face 体验界面

图7 hugging face体验界面

当然hugging face也提供全身换衣服的模型,可以在GUI界面选择上身服装与下身服装进行换衣,或者选择一个裙子进行整体服装更换。

图8 OOTDiffusion更换裙子

图9 OOTDiffusion更换上半身服装

https://github.com/levihsu/OOTDiffusion?tab=readme-ov-file
https://arxiv.org/abs/2403.01779
https://huggingface.co/spaces/levihsu/OOTDiffusion

更多transformer,VIT,swin tranformer
参考头条号:人工智能研究所
v号:启示AI科技
 

 动画详解transformer  在线教程

 

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

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

相关文章

解决linux服务器下微信公众号授权和业务接口授权失败的问题

我们的公众号web站点代码在Windows服务器IIS下运行没有问题&#xff0c;迁移到linux 服务器的nginx下之后&#xff0c;出现了微信授权和接口授权无法通过引起的问题。如下图所示&#xff1a; 经过排查&#xff0c;发现是因为nginx配置默认对 http 配置节下的 underscores_in_he…

MySQL黑马教学对应视屏笔记分享之聚合函数,以及排序语句的讲解笔记

聚合函数 注意&#xff1a;null值不参与聚合函数的计算。 分组查询 2.where与having的区别 执行时机不同&#xff1a;where是在分组之前进行过滤&#xff0c;不满足where条件&#xff0c;不参与分组&#xff1b;而having是分组之后对结果进行过滤。判断条件不同&#xff1a;w…

3,区块链加密(react+区块链实战)

3&#xff0c;区块链加密&#xff08;react区块链实战&#xff09; 3.1 哈希3.2 pow-pos-dpos3.3非对称加密&#xff08;1&#xff09;对称加密AES&#xff08;2&#xff09;非对称加密RSA 3.4 拜占庭将军3.5 P2P网络3.6 区块链 3.1 哈希 密码学&#xff0c;区块链的技术名词 …

【SQL】MySQL中的字符串处理函数:concat 函数拼接字符串,COALESCE函数处理NULL字符串

MySQL中的字符串处理函数&#xff1a;concat 函数 一、concat &#xff08;&#xff09;函数1.1、基本语法1.2、示例1.3、特殊用途 二、COALESCE&#xff08;&#xff09;函数2.1、基本语法2.2、示例2.3、用途 三、进阶练习3.1 条件和 SQL 语句3.2、解释 一、concat &#xff0…

java中stirng真的不可改变么?

目录 1. 字符数组的私有性和不可变性 2. 没有提供修改内容的方法 3. 共享字符串常量池 4.不可变性的优点 5.结论 &#x1f388;边走、边悟&#x1f388;迟早会好 Java 中的 String 对象是不可变的。不可变性意味着一旦创建了一个 String 对象&#xff0c;它的值就不能再被…

怎么提高音频声音大小?提高音频声音大小的四种方法

怎么提高音频声音大小&#xff1f;在音频处理和编辑中&#xff0c;增加声音的音量是一个常见的需求&#xff0c;尤其是在确保音频清晰度和听觉效果的同时。调整音频的音量不仅仅是简单地提高音频的响度&#xff0c;它也涉及到如何保持音质的高标准&#xff0c;确保没有失真或削…

STM32智能机器人手臂控制系统教程

目录 引言环境准备智能机器人手臂控制系统基础代码实现&#xff1a;实现智能机器人手臂控制系统 4.1 数据采集模块 4.2 数据处理与控制算法 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;机器人手臂管理与优化问题解决方案与优化收尾与总结 1. 引言 …

计算机组成原理:408考研|王道|学习笔记II

系列目录 计算机组成原理 学习笔记I 计算机组成原理 学习笔记II 目录 系列目录第四章 指令系统4.1 指令系统4.1.1 指令格式4.1.2 扩展操作码指令格式 4.2 指令的寻址方式4.2_1 指令寻址4.2_2 数据寻址 4.3 程序的机器级代码表示4.3.1 高级语言与机器级代码之间的对应4.3.2 常用…

leetcode--从前序与中序遍历序列构造二叉树

leetcode地址&#xff1a;从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,…

提升机器视觉与机器学习软件安全性的实践策略

在近几年科技爆发中&#xff0c;机器学习&#xff08;ML&#xff09;和机器视觉&#xff08;MV&#xff09;的结合正在改变各行各业。机器学习通过数据驱动的算法让计算机能够自我学习&#xff0c;而机器视觉赋予计算机识别和理解图像的能力。这种结合使得计算机可以高效地执行…

传统的springboot项目中,如何进行添加自定义静态资源访问路径实现对静态资源的访问?

如何配置可以实现在浏览器中配置路径实现对resource资源路径下的index.html个性化定制访问路径 要在Spring Boot项目中配置使特定前缀访问静态资源&#xff0c;可以在application.yml文件中配置路径映射。以下是一个示例配置&#xff1a; 打开你的application.yml文件&#xf…

【MindSpore学习打卡】应用实践-LLM原理和实践-基于MindSpore实现BERT对话情绪识别

在当今的自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;情绪识别是一个非常重要的应用场景。无论是在智能客服、社交媒体分析&#xff0c;还是在情感计算领域&#xff0c;准确地识别用户的情绪都能够极大地提升用户体验和系统的智能化水平。BERT&#xff08;Bidirec…

C++基础篇(1)

目录 前言 1.第一个C程序 2.命名空间 2.1概念理解 2.2namespace 的价值 2.3 namespace的定义 3.命名空间的使用 4.C的输入输出 结束语 前言 本节我们将正式进入C基础的学习&#xff0c;话不多说&#xff0c;直接上货&#xff01;&#xff01;&#xff01; 1.第一个C程…

2024.7.10作业

完成学生管理系统 1> 使用菜单完成 2> 有学生的信息录入功能&#xff1a;输入学生个数&#xff0c;并将学生的姓名、分数录入 3> 查看学生信息&#xff1a;输出所有学生姓名以及对应的分数 4> 求出学习最好的学生信息&#xff1a;求最大值 5> 按姓名将所有…

vue学习day05-watch侦听器(监视器)、Vue生命周期和生命周期的四个阶段、、工程化开发和脚手架Vue cli

13、watch侦听器&#xff08;监视器&#xff09; &#xff08;1&#xff09;作用&#xff1a;监视数据变化&#xff0c;执行一些业务逻辑或异步操作 &#xff08;2&#xff09;语法&#xff1a; 1&#xff09;简写语法——简单数据类型&#xff0c;直接监视 ① Watch:{ 数…

python reload找不到怎么办

Python 3.0 把 reload 内置函数移到了 imp 标准库模块中。它仍然像以前一样重载文件&#xff0c;但是&#xff0c;必须导入它才能使用。 方法一&#xff1a; from imp import reload reload(module) 方法二&#xff1a; import imp imp.reload(module)

计算机网络之广域网

广域网特点: 主要提供面向通信的服务&#xff0c;支持用户使用计算机进行远距离的信息交换。 覆盖范围广,通信的距离远&#xff0c;需要考虑的因素增多&#xff0c; 线路的冗余、媒体带宽的利用和差错处理问题。 由电信部门或公司负责组建、管理和维护&#xff0c;并向全社会…

基于Booth乘法和Wallace树的乘法器优化思想

基于Booth乘法和Wallace树的快速乘法器 为了理解Booth乘法和Wallace数如何让乘法器变得更快&#xff1a; 先考虑不优化的8位乘法器实现&#xff0c;即8个16位数字累积共进行7次加法运算&#xff0c;可以认为一次16位加法用到16个全加器&#xff0c;则共需要112个全加器件&…

创建React 项目的几种方式

①.react自带脚手架 使用步骤&#xff1a; 1、下载 npm i create-react-app -g 2、创建项目命令&#xff1a; create-react-app 项目名称 ②.Vite构建工具创建react步骤&#xff1a;&#xff08;推荐&#xff09; 方法一&#xff1a; 1、yarn create vite 2、后续根据提示步…

深度动态IP代理 国内动态IP软件哪个好用

想必大家都用过动态IP产品&#xff0c;什么是动态IP&#xff0c;动态IP就是非固定的静态IP地址&#xff0c;短 时间了频繁波动ip地址&#xff0c;就叫动态IP&#xff0c;因为工作需要用到不同的IP&#xff0c;这时就需要动态IP软件。 今天给大家带来一款深度动态IP软件&#xf…