这个AI算法,可以帮“元宇宙”虚拟人进行虚拟更换衣服

上期视频,我们制作了一个AI算法更换模特身上的衣服,本期教程,介绍一下如何来实现视频中的代码以及实现过程

AI算法,可以帮你进行虚拟换衣,元宇宙虚拟人再也不用愁衣服少了

——1——

什么是HR-VITON

其视频是基于一种称之为HR-VITON的技术,它实现了高分辨率的虚拟人物试穿衣服,通过提供试穿条件生成器,减少了由于传统翘曲和分割图之间的不一致而导致的失真。

传统上,虚拟试衣包括:翘曲,以使服装的图像适合人体,并生成分割图以生成最终图像。这时,翘曲模块和分割图独立移动,可能会造成不一致,尤其是当身体的一部分遮挡衣服时,会造成伪影(失真)。

HR-VITON

 因此,HR-VITON对人的图像(I)和衣服的图像(c )进行预处理,然后使用Try-on Condition Generator生成翘曲和分割图,通过融合减少伪影和虚拟化实现了高分辨率拟合。

——2——

HR-VITON 代码实现

基于图像的虚拟试穿任务旨在将目标服装项目转移到人的相应区域,这通常通过将项目装配到所需的身体部位并将扭曲的项目与人融合来解决。虽然近几年已经进行了越来越多的研究,但合成图像的分辨率仍然很低(例如256x192)。

这种局限性源于几个挑战:随着分辨率的增加,在最终结果中,翘曲衣服和所需衣服区域之间的错位区域中的伪影变得明显;现有方法中使用的架构在生成高质量身体部位和保持衣服纹理锐度方面的性能较低。为了应对这些挑战,此模型提出了一种称为VITON-HD的新型虚拟试穿方法,该方法成功地合成了1024x768个虚拟试穿图像。

具体来说,首先准备分割图来指导模型的虚拟试穿合成,然后将目标服装项目大致适合给定的人的身体。接下来,模型提出了对齐感知段归一化和别名生成器来处理错位区域,并保留1024x768输入的细节。通过与现有方法的严格比较,证明VITON-HD在定性和定量上都大大优于其他模型。

# 源代码#https://github.com/sangyun884/HR-VITON! git clone https://github.com/cedro3/HR-VITON.git
%cd HR-VITON
! pip install tensorboardX
! pip install torchgeometryimport gdown
gdown.download('https://drive.google.com/uc?id=1XJTCdRBOPVgVTmqzhVGFAgMm2NLkw5uQ', 'mtviton_step_100000.pth', quiet=False)
gdown.download('https://drive.google.com/uc?id=1BkSA8UJo-6eOkKcXTFOHK80Esc4vBmVC', 'gen_step_110000.pth', quiet=False)
gdown.download('https://drive.google.com/uc?id=1CcgCubhLc9iF6jGACdUgGhTDWMC7Gjzr', 'test.zip', quiet=False)
! unzip test.zipfrom function import *import warningswarnings.filterwarnings("ignore")
! mkdir download

首先,需要下载预训练模型与数据集,并解压出来,方便我们调用里面的图片(模特与衣服)

模型使用VITON-HD: High-Resolution Virtual Try-On via Misalignment-Aware Normalization
的数据集训练和评估此模型。
下载数据集:https://github.com/shadow2496/VITON-HD。

然后我们把所有图片解压在image文件夹中,并设置一个随机参数来从数据集中随机挑选出5个模特与 5件衣服,以便模型把5件衣服分别穿在5个不同模特的身上。并把图片信息保持在test_pairs.txt文件中。

import glob
import randomimport shutil
import osseed_number =  120random.seed(seed_number)
reset_folder('image')
image_files = sorted(glob.glob('test/test/image/*.jpg'))
cnt = len(image_files)
num = random.sample(range(cnt),5)
image_names = []for i in num:
  shutil.copy(image_files[i], 'image/'+os.path.basename(image_files[i]))
  image_names.append(image_files[i])
image_names.sort()
display_pic('image')

reset_folder('cloth')
cloth_files = sorted(glob.glob('test/test/cloth/*.jpg'))
cnt = len(cloth_files)
num = random.sample(range(cnt),5)
cloth_names =[]for j in num:
  shutil.copy(cloth_files[j], 'cloth/'+os.path.basename(cloth_files[j]))
  cloth_names.append(cloth_files[j])
cloth_names.sort()
display_pic('cloth')if os.path.isfile('test/test/test_pairs.txt'):  os.remove('test/test/test_pairs.txt')

f = open('test/test/test_pairs.txt', 'w', encoding='UTF-8')for image_name in image_names:    for cloth_name in cloth_names:
        f.write(os.path.basename(image_name)+' ')
        f.write(os.path.basename(cloth_name)+'\n')
f.close()

reset_folder('output')

! python3 test_generator.py --occlusion --tocg_checkpoint './mtviton_step_100000.pth'\
                             --gpu_ids 0\
                             --gen_checkpoint './gen_step_110000.pth'\
                             --datasetting unpaired\
                             --dataroot './test'\
                             --data_list './test/test_pairs.txt'clear_output()
display_pic_png('output/mtviton_step_100000.pth/test/unpaired/generator/output')

然后我们根据下载的预训练模型与随机选择的图片与衣服进行模型的预测,预测结果保存在output文件夹下

模型预训完成后,会把5件衣服穿在5个模特身上,并依次排列出模特试穿衣服的效果

当然,我们也可使用ffmpeg来把生成的图片合成视频,若想查看其他衣服与模特可以修改第二段代码中的随机因子

import cv2
import glob
reset_folder('movie1')
reset_folder('movie2')
result_files = sorted(glob.glob('output/mtviton_step_100000.pth/test/unpaired/generator/output/*.png'))
cnt = 0
black = cv2.imread('black.jpg')
for image_name in image_names:
   for cloth_name in cloth_names:
      left = cv2.imread(image_name)
      center = cv2.imread(cloth_name)
      right = cv2.imread(result_files[cnt])
      tmp = cv2.hconcat([left, center])
      img1 = cv2.hconcat([tmp, right])
      cv2.imwrite('movie1/'+str(cnt).zfill(4)+'.jpg', img1)
      up = cv2.hconcat([black, center])
      down = cv2.hconcat([left, right])
      img2 = cv2.vconcat([up, down])
      cv2.imwrite('movie2/'+str(cnt).zfill(4)+'.jpg', img2)
      cnt +=1

! ffmpeg -y -r 1 -i movie1/%04d.jpg -vcodec libx264 -pix_fmt yuv420p -loglevel error output1.mp4

! ffmpeg -y -r 1 -i movie2/%04d.jpg -vcodec libx264 -pix_fmt yuv420p -loglevel error output2.mp4display_mp4('output1.mp4')

 

更多Transformer 视频动画教程
请参考头条号:人工智能研究所

VX搜索小程序:AI人工智能工具,体验不一样的AI工具

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340