编辑 AI科技评论
本文介绍的是CVPR2020入选论文《Towards Photo-Realistic Virtual Try-On by Adaptively Generating↔Preserving Image Content》。作者是来自哈工大的杨涵同学,首发于知乎。
论文地址:https://arxiv.org/abs/2003.05863
开源代码:https://github.com/switchablenorms/DeepFashion_Try_On
我们主要着眼于同一个人物模特的2d虚拟换装,示意图如下。multi-pose的就不在我们的讨论范围之内了。
ACGPN利用一种layout aware的方法,自适应的判断哪部分图像是应该保留的,解决了现有方法中,无法对人物肢体与衣服有遮挡的情况的建模,极大程度地降低了生成结果中的伪影以及模糊细节;并通过引入仿射变换的共线性等性质,对变形inshop-clothes中的TPS变换起到约束,使得Logo和花纹不易扭曲变形。
这个领域比较经典的工作有: VITON (CVPR18), CP-VTON (ECCV2018), VTNFP (ICCV2019) 以及在CVPR20截稿后挂出来的paper: SieveNet (WACV2020), GarmentGAN (2020 3月)
因为都是在VITON的数据集上做的,所以大家可以直接对比paper中图的质量。
1
回顾Image Based Virtual Try-on
介绍算法之前,我们先来回顾一下基于图像的虚拟换装的历史。传统的虚拟换装基于3D匹配,比如一些换装墨镜,都是生成一个跟踪人物的虚拟贴图。
而基于图像的虚拟换装,可以直接生成换好装的人物图片。
VITON提供了一个被广泛使用的pipeline,现在的方法大多遵循类似的框架。
1、利用网络泛化能力的重构学习
由于同一个模特在同一姿势下穿着不同衣服的数据集较难获得,常见做法是,将人物图片的监督信息减弱,再将与人物身上同样的inshop-clothes(平铺的衣服正面大图)穿在这个处理过后的表达上。将图片的监督信息减弱防止过强的参考使得网络无法泛化到不同的衣服上。
也就是提取关键点,模糊形状等来作为一个人物的表达,再重构原来的图像。
经典的衣服无关人物表达(clothing-agnostic person representation)
姿势关键点+身体形状(模糊化)+头部信息
如图所示,CP-VTON和VITON都采用了这一表达。但是缺点在于生成细节丢失较大。
2、基于Thin-Plate Spline (TPS)变换的服装变形模块
VITON中的服装变形模块
VITON:如图所示,VITON通过先生成衣服mask和原始inshop-clothes的mask来计算TPS变换的参数,将这套参数使用到inshop-clothes上,生成一个变形衣服图。之后会和之前生成的一个coarse人物结果,一起refine出最终结果。整个流程是2-stage模式。
CP-VTON的服装变形模块
CP-VTON:CP-VTON基于VITON这个工作,增加了一个“GMM模块”,使用一个网络来回归TPS变换的参数,抛弃了之前利用shape context图像descriptor进行匹配的方法,变成learning-based,奠定了这一模块的一般设计方法。
2
现有方法存在的问题
我们拿CP-VTON和VITON举例,以上CP-VTON自己report的图,我们可以看到
1.人物的肢体仍然是模糊的
2.对于下装很难做到清楚的保留
3.衣服的纹理容易产生过度形变
运行两者的official code,运行出的结果,我们还能发现一个更为本质的问题。
这两个方法都无法处理人物肢体与衣服有交叉的情况。一旦手挡在了衣服前,或者姿势较为复杂,往往图片会丢失肢体细节,手指糊成一团。这给面向真实场景应用的虚拟换装系统的实现,带来极大的隐患与阻力,毕竟用户在使用的时候,姿势是各种各样的。
为了解决这一问题,我们使用语义分割来代替原有的衣服无关人物表达。
3
我们的解决方案
我们的解决方案:
Adaptive Content Generating and Preserving Network (ACGPN)
如图所示,这是网络的测试流程图。:
(1)在Step I, Semantic Generation Module (SGM) 将目标衣服图片 ,人体姿势关键点 , 以及融合后的人体语义模板 作为输入去预测 和目标衣服模板 ;
(2)在 Step II, Clothes Warping Module (CWM) 将目标衣服图片变形成 根据预测出来的语义划分,并且我们提出一种二阶差分约束去稳定变形过程;
(3)在 Step III和IV, Content FusionModule (CFM)首先利用随机的遮罩模板产生躯干被遮挡的RGB图片 ,然后使用融合网络去生成换装后的图片 ,并且联合 , , 去补全图片 。
用语义模板之间的组合,可以最大程度上的保留原来的正确语义模板,并结合原来的除衣服以外的RGB图片 生成最后的换装图片。如图中的Non-target Body Part Composition 模块,组成公式如下:
表示逐元素乘积。
其中 是 除去衣服区域。通过这种组成,就能保证保存的 和对应区域的语义模板的一致性,并且通过训练过程的遮挡再生成的过程,学习补全的泛化能力,以解决现有方法对于复杂姿势以及肢体生成较差的问题。
核心思想就是对semantic layout (语义布局)的awareness,网络可以自适应地去保留所有不发生改变的区域,并且引入图层的思想,把手和衣服分成两个图层来处理,减少了互相的影响。
每一个生成器都可以独立训练,完整的训练流程如下:
由于每一个模块都可以分别训练,所以可以用前一个step的ground-truth代替synthesized data完成训练。
4
二阶差分约束
在Clothes Warping Module里面,我们使用Spatial Transformation Network (STN) 利用薄板样条插值算法(TPS)对目标衣服进行变形,以保留衣服的纹理细节。但是,仅仅使用现有结构不足以保留精确的纹理细节,尤其是面对复杂姿势、复杂衣服花纹的时候,更容易出现不匹配的情况。为了解决这一问题,我们引入一种二阶差分约束,对TPS变换中的网格点进行控制。
比较有无二阶差分约束对TPS形变的影响。
我们可以看出没有我们的约束,衣服虽然在整体形状上没有差异,但是内部花样会产生较大扭曲。我们给出约束的公式:
表示约束的Loss, 和 是权重超参数。 表示一个特定的采样控制格点, 分别表示 周围的上下左右四个点。
表示两个点之间的斜率。通过这个约束我们可以引入仿射变换的两个性质,共线性和对应线段比例相同。从而减少过度的扭曲变形的发生。并且为了防止在求取斜率中会出现的除零错误,我们使用乘积形式:
形变Loss我们以 表示,它是形变后的衣服与其ground-truth之间的1-范数距离
是形变后的衣服, 是其ground-truth。
最后的Loss即为:
其中 表示总的形变Loss。
5
实验
实验都是在VITON数据集上进行,并且根据姿势的复杂程度可以分为Easy,Medium,Hard三个等级:
-
Easy: 手放两侧,身体向前;
-
Medium: 身体会发生扭曲,肢体与身体轻微遮挡;
-
Hard: 肢体与身体有严重遮挡。
我们一共从两个方面证明所提方法,质量性实验:比较虚拟换装结果,我们的方法可以更有效地降低伪影提高真实度,并且能更好的保留衣服的纹理细节,达到照片级别的换装效果;量化指标:通过SSIM和IS以及用户调查等指标,从另外一个方面证明我们方法的优越性。