VITON 论文笔记

  • 介绍
  • 论文笔记
    • 任务
    • VITON 框架
      • Person Representation(人体表示)
        • Pose heatmap (姿势热图)
        • Human body representation (人的身体表示)
        • Face and hair segment (脸和头发的分割)
        • Concatenate (结合)
      • Multi-task Encoder-Decoder Generator(Encoder-Decoder 生成器)
        • 模型结构
        • 损失函数
      • Refinement Network(细化网络)
        • Warped clothing item(扭曲衣服)
        • Learn to composite(图像合成)
      • Visualization of every step
    • 实验
      • 与其他算法的对比实验
      • 对图像预处理的消融实验
      • 去除衣服的伪影
      • 人体的裤子部分
    • 结论
  • 参考文献

介绍

最近在调研一些虚拟换装的技术,在这里做一下笔记。

VITON:An Image-based Virtual Try-on Network 应该是第一篇专注于图像的换衣论文了,发表于2018年的CVPR,后续的很多虚拟换衣的工作都是基于这篇文章,可以说是图像换衣领域的开山之作了。

论文笔记

任务

以前的虚拟换衣技术基本都是基于3D模型的,其最大的优点就是效果稳定。但基于3D的换衣技术在硬件部署和计算效率上成本很高,而且获取3D数据本身就是一件很困难的事情。为了降低3D计算的成本,人们的注意力开始转移到基于2D图像的虚拟换装技术。

该算法目的很明确,就是给定两张图像,一张是包含穿着任意衣服的人的图像,另一张是一件衣服的图像,算法就会生成一张这个人穿着这件指定衣服的图像,并且保留这个人原始的姿势,头部等信息,仅改变身上的衣服。换衣效果如下图所示。

论文中提出了一个评价生成的图像是否足够好的指标——生成的图像需要在感知上具有说服力,需要满足以下要求:

  1. 人的身体部位和姿势与原始图像相同。
  2. 最终图像中的服装需要根据人的姿势和体型自然变形。
  3. 视觉图案清晰可见,不仅包括颜色和纹理等低级特征,还需要包括刺绣、徽标等复杂图形。

对于这三个问题,VITON 算法进行了逐一解决。

VITON 框架


文章中将算法分成了两阶段,首先
两阶段:

  1. 首先生成一个粗糙的合成图像,目标服装覆盖在同一人的同一姿势上。
  2. 再通过一个细化网络进一步增强初始模糊服装区域。

VITON的目标是:给定一个参考图像III(有一个穿着衣服的人)和一个目标衣服图像ccc,合成一个新的图像I^\hat{I}I^,其中c被自然地转移到同一个人的相应区域,该人的身体部位和姿势信息被保留。

个人认为,按照文章中的算法描述,VITON 算法本身应该是分为三阶段的,除了上图的两阶段外,在这之前还应有一个提取图像中衣服无关信息的阶段,三个阶段分别为:

  1. 与衣服无关的人体表示(Person Representation)
  2. 多任务的编码器-解码器结构(Multi-task Encoder-Decoder Generator)
  3. 细化网络(Refinement Network)

其中第一步属于算法开始前的预处理阶段,在这一步的预处理阶段中,是直接使用的已有的算法模型进行处理的,仅对算法的结果进行了处理,在这部分的算法模型结构上,作者并没有做任何的改变,因此 VITON 的两阶段并没有包含这一部分。

Person Representation(人体表示)

VITON 算法并不是直接将包含穿着衣服的人的参考图像III直接输入到网络中的,首先需要对参考图像进行预处理,去除掉其中原有衣服的信息,提取出与衣服无关的人体表示。这一部分分成了三个小任务,最后将这三个任务的结果结合在一起即为我们需要的人体表示。如下图所示。

虚拟试衣其中一个主要的技术挑战是使目标服装图像变形以适合人的姿势。为此,作者引入了一个服装无关的人物表示,这个表示包含了人的很多特征,包括姿势、身体部位、面部和头发等,这些特征是作为合成图像的一个前提条件。

Pose heatmap (姿势热图)

这部分主要是提取图像中人体的姿态信息(pose),人体的姿态信息是使用 18 个关键点进行表示的。作者分成了三个步骤:

  1. 首先使用了一个表现 SOTA 的体态估计方法对人体的体态信息进行提取,(18个关键点的形式)。
  2. 然后将每个关键点都转换成热图的形式。为此,作者**先将 18 个关键点分开,对特征图中的每个关键点,将它 11×1111 \times 1111×11 范围内的邻居点填充为1,其余地方填充为 0。
  3. 最后,将这些关键点的热图结果合并到一起,就得到了一个18通道的人体姿态热图(pose heatmap)**。

Human body representation (人的身体表示)

作者在这部分提取了参考图像III中的人的身体信息,分为三个步骤:

  1. 首先,同样也是使用了一个表现 SOTA 的模型——人体分析器(human parser),来得到人体的分割图。不同区域表示人体的不同部位。
  2. 然后将分割图转为单通道的特征图,其中除了脸和头发外的其他身体部分标为1,其余部分标为0.
  3. 最后,为了避免身体形状和服装形状发生冲突时产生伪影,对得到的结果进行降采样操作,处理成 16×1216 \times 1216×12 大小的特征图。

Face and hair segment (脸和头发的分割)

最后,为了保持图像中这个人的身份信息,利用在上一步中得到的人体分割图,将人的面部和头发区域的 RGB 通道提取出来,注入到网络中。

Concatenate (结合)

在预处理的最后,需要将这三个特征调整到相同的分辨率,然后合并在一起,形成一个与服装无关的图像表示 p, p∈Rm×n×kp \in R^{m \times n \times k}p∈Rm×n×k。在论文中,m=256m = 256m=256,n=192n = 192n=192 代表特征图的高度和宽度。其中,k=18+1+3=22k = 18 + 1 + 3 = 22k=18+1+3=22,代表了特征图的通道数,是将以上三个特征合并在一起后的总通道数。

论文里认为,这些特征包含了一个人的大量信息了,后续的工作都是在这个基础上,以这个得到的特征图做为输入,得到最终结果的。

Multi-task Encoder-Decoder Generator(Encoder-Decoder 生成器)

这部分的目的主要是生成一个粗糙的合成图像,作者使用了一个多任务 Encoder-Decoder 框架,该框架可以生成一个穿着衣服的人的图像以及这个衣服的 mask,如上面的算法预览图所示。

模型结构

这个 Encoder-Decoder 是一种通用的 U-net 体系结构,可以跳过连接,在层之间直接共享信息。在论文最后的附录部分,给出了它结构的详细构造。如下图所示:

论文使用 GcG_cGc​ 来表示这个生成器,最后的输出是一个四通道的结果, Gc(c,p)=(I′,M)G_c(c, p) = (I^{'}, M)Gc​(c,p)=(I′,M),其中,I′I^{'}I′ 表示生成的粗糙的合成图像(3通道),MMM 表示衣服的 mask(1通道)。

损失函数

损失函数方面,如果像 mask 这样只有单通道的数据,可以直接使用 L1 Loss;但是,L1 loss 在多通道的图像上效果不好,会使图像产生模糊,因此,这里作者使用了感知损失来计算合成图像和 ground_truth 的距离,这个距离是由视觉感知网络计算的。损失函数如下:

其中的 ϕi\phi_iϕi​ 表示感知网络第 iii 层的输出,感知网络是一个在 ImageNet 数据集上预训练的的 VGG19 模型。对于 i≥1i \geq 1i≥1 的情况下,分别使用了 ‘conv1_2’, ‘conv2_2’,‘conv3_2’, ‘conv4_2’,‘conv5_2’ 五层,对于 i=0i = 0i=0 的情况,直接输入 RGB 图像。

虽然合成的图像中,人体的姿势和人脸是对应上的,但一些衣服上的细节并没有生成,如文本和图案等。为了解决这个问题,VITON 使用细化网络和预测的衣服mask 对合成图像做进一步细化处理。

Refinement Network(细化网络)

这一部分是对上一步合成的图像中的衣服进行更细致的操作,生成更多的细节,让图像看起来更加真实。

Warped clothing item(扭曲衣服)

因为衣服会根据人的姿势和身体形状变形,这里不能直接将衣服粘贴到合成图像上。为此,作者使用了一个 TPS 变换来扭曲衣服,如下图所示。

具体做法分为三步:

  1. 首先提取衣服的前景 mask
  2. 然后计算生成器生成的 mask 和衣服的 mask 之间的 TPS 形变。
  3. 利用计算出来的 TPS 参数,进一步将原始的衣服扭曲成人身上穿着的衣服的形状。

Learn to composite(图像合成)

这里需要扭曲好的衣服与生成的粗糙的合成图像进行匹配,与其中的衣服区域进行无缝连接,并且在手臂遮挡的情况下依然有效。

细化网络的输入是扭曲的衣服 c′c^{'}c′ 和上一步合成的图像 I′I^{'}I′,最终的输出是一个单通道的 mask,表示一个分别从这两张图像中提取多少信息,公式如下:


最后就可以根据这个 mask 得到最终的计算合成图像 I^\hat{I}I^。

损失函数如下:

这里需要解释的一点是,视觉感知网络的特征计算是从第3层开始的,仅使用了 ‘conv3_2’, ‘conv4_2’, ‘conv5_2’ 三层的输出。因为视觉感知网络的较低层更关心图像的详细像素级信息而不是其内容。

进一步,作者对上述的损失函数进行了改进,加入了正则项防止过拟合。

后面两项,第一项是 L1 损失,使结果更多的关注在扭曲图像上,进而生成更多的细节信息;第二项是全变差损失,使其在空间上平滑,以便从扭曲区域到粗糙结果的过渡看起来更自然。

Visualization of every step

下面是 VITON 算法每一步的结果。

实验

论文中做了很多对比实验,包括消融实验。整个论文很完整,看着很舒服。挑几个简单介绍一下。

与其他算法的对比实验

最有效的对比是与其他算法的对比,虽然是第一个2D换衣算法,但作者在文章中还是找了一些其他的生成图像的方法进行了对比。


简单理解一下这几个算法:

  • PRGAN:普通的生成图像的 GAN 方法,使用的话,需要将模型的输入调整为与 VITON 相同。
  • CAGAN:图像类比问题,学习训练数据中存在的成对图像之间的关系,然后概括并生成对应于该关系但在训练集中从未见过的图像。
  • CRN:利用一系列细化模块,每个模块从其先前的模块和输入的降采样版本获取输出,以生成高分辨率合成图像。
    上面三种都是使用已有的表现 SOTA 的方法进行对比的,并没有进行服装的扭曲。下面的方法是在已有的方法基础上进行消融实验。
  • Encoder-decoder generator:直接使用算法第一阶段的合成结果进行对比。
  • Non-parametric warped synthesis:不使用 TPS 方法进行扭曲。

对图像预处理的消融实验

作者做了两个在预处理部分的消融实验,分别去掉了算法中的 pose 信息和 body shape 信息。

  • pose 的消融实验:
  • body shape 的消融实验

    两个消融实验的对比都很明显。

去除衣服的伪影

由于在扭曲衣服的过程中,前面使用的是整个衣服的前景(就是衣服的正面)区域进行扭曲的,但是细化网络应该忽略脖子部分的标签和衣服的内领部分,下面是对衣服内领不处理和处理之后的对比实验。


在作者的实际测试过程中,首先使用了 FCN 模型去分割图像,并去除了衣服的后领部分。

人体的裤子部分

由于这里只需要更换人的衣服,所以,裤子部分不需要任何的改变,理论上是可以直接使用 mask 转移到最终的图像上的。但是这就会有一个很重要的问题:如果换的衣服比原始的衣服短,就会导致,裤子和衣服之间有缝隙。为了消除这个缝隙,论文中也将裤子部分重新生成。

下面是将裤子部分按照头发和脸的方式进行处理的结果:


在第一行的最后一列,可以明显的看到,衣服和裤子中间有缝隙。

结论

这篇文章可以说是 2D 图像虚拟换衣技术的开篇鼻祖,提供了一个基于图像的换衣 baseline。论文中也表示,有一些图像的效果是很差的,如果出现很罕见的姿势或者衣服与原有的衣服形状差距太大时,效果恨不准确。

参考文献

  1. Han, X., Wu, Z., Wu, Z., Yu, R., & Davis, L. (2018). VITON: An Image-Based Virtual Try-on Network. 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition, 7543-7552.

虚拟换衣 VITON 论文笔记相关推荐

  1. 虚拟换衣 CP-VTON 论文笔记

    CP-VTON 介绍 论文笔记 算法目的 主要贡献 CP-VTON 算法框架 Geometric Matching Module(几何匹配模块) Try-on Module(试穿模块) 总结 参考文献 ...

  2. 虚拟换衣!速览这几篇最新论文咋做的!

    Virtual Try-on 虚拟换衣,也就是给定某款衣服图像,让目标试衣者虚拟穿上.下面整理了一些相关论文.打包下载好的论文,可关注微信公众号"学点诗歌和AI知识"回复" ...

  3. 【HR-VITON】虚拟换衣算法pre-processing复现全过程记录

    Link of original Github repo Link of personal made study case of HR-VITON Content Pre 1.OpenPose(On ...

  4. 虚拟试穿VTNFP论文笔记

    VTNFP虚拟试穿笔记 文章目录 VTNFP虚拟试穿笔记 任务 相关工作: VTNFP Person Representation(人体表示) Clothing Deformation Module ...

  5. 基于图像的虚拟换装:Towards Photo-Realistic Virtual Try-On by Adaptively Generating-Preserving Image Content

    Image Based Virtual Try-On 基于图像的虚拟换装,可以直接生成换好装的人物图片.VITON提供了一个被广泛使用的pipeline,现在的方法大多遵循类似的框架. 利用网络泛化能 ...

  6. 基于图像的虚拟换装:Morphing architectures for pose-based image generation of people in clothing

    项目的重点是变形操作的特征化与实现,解决卷积神经网络中的信息失准问题.我们将所研究的方法应用到一个换衣服的任务中,将其建模为一个条件图像生成问题.尽管对抗性方法在生成性任务中很流行,但我们将此项目的范 ...

  7. 【论文笔记】An End-to-End Model for QA over KBs with Cross-Attention Combining Global Knowledge

    一.概要   该文章发于ACL 2017,在Knowledge base-based question answering (KB-QA)上,作者针对于前人工作中存在没有充分考虑候选答案的相关信息来训 ...

  8. ICCV 2019 | 沉迷AI换脸?不如来试试“AI换衣”

    作者丨文永明 学校丨中山大学硕士生 研究方向丨Object Manipulation.机器人视觉.GAN 引言 笔者最近发现一篇发表在 ICCV 2019 挺有意思的论文,是来自中山大学 Fashio ...

  9. CVPR 2020 | ACGPN: 基于图像的虚拟换装新思路

    点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! CVPR 2020之117篇GAN论文分类清单 编辑  AI科技评论 本文介绍的是 ...

最新文章

  1. 单例模式 之 单例模式——Holder
  2. App Class Loader
  3. ssh、私钥、密钥理解
  4. powerbi的功能介绍_PowerBI 8月更新,这几个实用功能,你应该会用到
  5. 用table展示树形结构数据_复习一下数据结构(二)——2.2 树形索引(23树)
  6. jdk的安装(redhat)
  7. 基于UDP的网络对战五子棋
  8. TFS2010的生成功能
  9. HCIE大师之路(三)——QOS综合实验
  10. rs232接口_RS232接口与RS485究竟有什么区别?
  11. 进程同步问题(二)——信号量机制
  12. 凯利讯分享ECL电路与TTL电路的使用注意事项
  13. 16位算术逻辑运算实验
  14. IE浏览器地址栏输入中文乱码问题
  15. 感受野-Receptive Field的理解
  16. 解决win10设备管理器及操作找不到蓝牙
  17. RCF—用于C++的进程间通讯(1)
  18. K、KB、M、MB、G、GB 、TB
  19. 手把手带你爬取猫眼电影,正则解析
  20. [转]用Mcafee打造自己的安全系统

热门文章

  1. python回调廖雪蜂_廖雪峰Python总结4
  2. 海康摄像头字符叠加详解
  3. Qt: 判断字符串是否为数字,是否为整数
  4. [转] 人生“三重境界”和“四种大智慧”
  5. 益聚星荣:今年双11,薇娅失去了“全网最低价”?
  6. html基础之块元素、行内元素、行内块元素
  7. vscode调试js
  8. IBM SPSS Modeler 【5】 关联分析
  9. m基于simulink的麦克纳姆轮Back-Stepping控制系统仿真
  10. 更改jupyter lab默认启动路径(亲测有效)