[论文笔记]Soft-Gated Warping-GAN for Pose-Guided Person Image Synthesis

Soft-Gated Warping-GAN for Pose-Guided Person Image Synthesis

摘要

作者认为当前的生成模型无法很好地解决在人体图像(姿态迁移)过程中由于遮挡,视角变化以及大幅度姿态变化所导致的生成图像质量较差的问题。作者主要尝试从两个方面来解决这个问题:
1. 之前的人体姿态迁移方法中姿态信息大多使用PG2中使用的基于关键点的掩码图的形式,作者认为这种形式不够精细,缺乏对于原图像和目标姿态之间更高层次的部位结构建模,在GAN生成人体图像时缺少对网络的约束(自由度太大了),不能够很好地指导人体图像的生成,因此作者在本文中使用人体部位的语义分割图来作为更高级的人体结构约束。(就是说相较于之前使用18个关键点图而言,语义分割图能够给网络更加明确人体结构信息)
2. 作者认为之前方法没有考虑到因为人体姿态的大幅度变化所导致的不对齐问题,这一点在上一篇将可变形的跳跃连接那一篇论文中进行了详细说明(实际上那篇论文比作者更早考虑到了这个问题,但是那篇论文里的解决方法比较粗糙),因此作者提出了一个Warping-GAN(Soft-Gated Warping Generative Adversarial Network):具有软门控变化的生成对抗式网络。其核心思路是首先使用神经网络从第一点里的人体部位的语义分割图(源和目标)中学到源人体图像和目标人体图像位置之间的映射关系,再将学习到位置变化关系引用到源人体图像提取出的特征图上,将经过映射变化后的特征图和从目标人体的语义分割图提取的特征图结合起来,进一步编码和解码出目标人体图像

创新点

  1. 使用人体部位的语义的分割图来在网络生成人体是给与更加明确的结果约束,并且目标人体的语义分割图是通过使用源人体的语义分割图和目标姿势的关键点的掩码图以及一个GAN网络来生成的。
  2. 提出了Warping-GAN,首先通过神经网络学习到源人体图像和目标姿势之间的映射关系,然后借助于这种映射关系将源人体的外观特征渲染到目标人体的对应部位中(语义分割的部位中),同时通过一个软门控机制来根据源人体和目标人体的之间的变化幅度来决定源人体特征图变化时的变化幅度。

总体网络结构

在这里插入图片描述

本文提出的方法主要分为两个阶段,第一阶段主要负责生成源人体和目标人体的语义分割图,第二阶段主要使用第一阶段生成的语义分割图、源图像和目标姿态信息(人体关键点图)以及Warping-GAN来生成目标人体图像。

Pose-Guided Parsing

这一阶段主要分为以下几个步骤:

  1. 首先通过现有人体语义分割器获取源人体图像中人体部位分割图,
  2. 将获得源人体的部位分割图作为条件约束,并根据目标姿态(关键点图形式)来使用一个类似于pix2pix(一种condition GAN)的网络来生成对应目标人体的部位分割图。

作者这里并没有像源人体的语义分割图一样直接使用一个现有的人体语义分割器来直接从目标人体图像中获取目标人体语义分割图,个人认为主要是模型在实际使用时是没有成对的源人体图像和提供姿态信息的人体图像(这里成对是指源人物和目标人物一致),因此两个人体在体型衣着等外观上差异较大,就会导致直接从提供姿态信息的人体图像上获取的人体部位分割图和源人体人体部位分割图之间存在着很多与姿态无关的差异,这种差异会导致后面在计算变化关系时计算出错误的变化关系进而导致最终生成图像的外观特征与源人体的外观差异存在较大的差异。

其实感觉上面这段解释有点废话了,其实从人体姿态迁移这个任务所要做的事情去看就很好理解了:

  • 首先人体姿态迁移这个人物的核心工作是在保持源人体外观不变的条件下,改变源人体的姿态使得其和目标人体一致。
  • 因此在保持外观特征不变的前提下,我们的Pose-Guided Parsing真正要做的工作实际上估测出源人体在目标姿态下的人体语义分割图(在目标姿态下的结构信息),而不是目标人体的语义分割图由于我们在实验条件下使用的源图片和目标图片是同一个源人体的图片,所以在实验是就直接用目标人体的语义分割图来描述了,如果在实际应用中提供姿态信息的人体图像和源人体图像很有可能不是同一个人体,这个时候直接用提供姿态信息的人体图像获取的人体部位的分割图就有问题了。
  • 其实这里在进一步的看,其这个网络架构的核心思想和PG2的思想很像,PG2的第一阶段主要生成目标的结构和粗略的外观,第二阶段去获取细节更加丰富的外观。而本文的方法从这个角度看,第一阶段也是去获取源人体在目标姿态下的结构信息,然后第二阶段将源人体的外观信息通过两种姿态下结构之间的关系填充到目标姿态下的结构中,相比于PG2,本文中两个阶段分工更加明确。

Warping-GAN Rendering

这一阶段主要利用第一阶段产生人体的部位分割图,来将源人体的不同区域的外观特征渲染到目标人体的对应区域中,主要步骤如下:

  1. 使用第一阶段获取的源人体部位分割图和目标人体分割图作为输入,然后使用一个几何匹配器获得二者的映射变化关系,这种关系最终以变化网格形式输出
  2. 将源人体图片和源人体部位分割图结合起来作为输入,并使用一个编码器来提取源人体的外观特征,同时将目标姿态的关键点图和第一阶段生成的目标人体分割图作为输入,使用一个编码器提取目标人体的结构特征
  3. 将第一步获取的映射变化网格通过一个含软门控的变化模块作用在提取出源人体的特征图上,这一步就是实现将源人体的外观信息渲染到目标人体的对应部位中去,解决因为姿态变化所导致的特征图中存在的不对齐问题。
  4. 将变化后的外观特征图和提取的目标人体结构(姿态)特征图结合起来,经过残差块提取特征后输入到解码器中,然后生成出目标人体图像。
Geometric Matcher

在这里插入图片描述

作者这里直接使用一个基于深度神经网络的几何匹配器,输入源人体和目标人体的语义分割图,网络会输出从源图片变化到目标图片时所需的仿射变化(affine)和薄板样条插值(TPS)的参数,作者在文章给出的结构是简化版本的几何匹配器的 结构,实际上这个几何匹配器的结构应该如下:

在这里插入图片描述

几何匹配器也是分两个阶段的来分别获取仿射变化的参数和TPS(薄板样条插值)的参数,但是两个阶段的训练是一起完成的,主要过程如下:

  1. 从两个待匹配对象A,B中分别使用两个特征提取器提取相应的特征,这里的特征提取网络是直接通过从vgg16网络架构中截断出来的。

  2. 从图像A,B中分别提取出两个h*w*d的特征图后,在匹配层进行特征匹配来计算二者之间的匹配程度,具体计算方法如下:

  • 对于特征图B中的每个像素点的特征1*d,其要与特征图A中所有像素点的特征图((h*w)*d)进行点积算相似程度,最后得到特征相关图的大小为h*w*(h*w),具体计算公式如下:

在这里插入图片描述

  1. 得到特征相关图 C A , B C_{A,B} CA,B后,对相关图中每个像素点在通道维(h*w)上进行归一化,首先使用Relu函数来消除负相关性,最后再使用一个L2标准化。其L2标准化主要作用是:对于那些在通道维上只有一个正相关的像素点,放大其相关程度,而对于那些在通道维上有多个正相关的像素点,缩小其相关程度。(假设B上一个像素点只于A上一个点之间存在正相关,则其在特征相关图上对应点通道维的形式可假设为[0,0,0.2,0],经过L2标准化后会变成[0,0,1,0],而如果B上一个像素点与A上多个点之间存在正相关,其在特征相关图上对应点通道维上形式可假设为[0,0.7,0.7,0,0],则其经过L2标准化后会变成[0,0.5,0.5,0,0],这种相关程度就会缩小,因为出现多个匹配点情况往往是因为杂乱无章或者重复图样的存在,因此要抑制这种相关。)

  2. 在得到归一化的特征相关图后,将其输入到一个回归网络中计算出两幅图像之间的仿射变化参数。

  3. 在得到仿射变化参数后将其应用在图像A上的仿射变化后A的图像,将仿射变化后A的图像和图像B在输入一个相同的网络结构中,进行一致的操作后得到两者之间薄板样条插值变化所需的参数。

几何匹配器所做的事情实际就是先用一个仿射变化去在大层度使得源点和目标点尽可能接近,但是由于仿射变化比较粗糙,所以变化的源点和目标之间肯定还是存在差距,但是这个时候的差距比较小了,这个时候再去用TPS样本条插值去拟合这种小差距,得到更加接近的源点和目标点。

在这里插入图片描述

更加详细的描述可见如下两篇博客:

【文献阅读笔记】2017-CVPR-Convolutional neural network architecture for geometric matching - 简书 (jianshu.com)

【论文笔记】Convolutional neural network architecture for geometric matching - 简书 (jianshu.com)

本文作者在使用几何匹配器得到仿射变化和薄板样条插值的参数后将二者结合起来以变化网格形式输出。(如何通过这两个变化得到变化网格我就不太清楚了,如果是我可能会这样做:一个图片我给划分成25*25的网格后,将计算出的变化应用在这些网格上后就可以得到变化网格,在特征图上应用变化网格时,就利用网格之间对应映射关系来得到变化后的特征图,比如1号格在源特征图上的(0,0)位置,变化网格中的1号格在(2,2)位置,利用这种映射关系将源特征图中1号格的值移到(2,2)这个位置上)

注:薄板样条插值TPS详细解释可见此博客薄板样条插值(Thin Plate Spline) - 知乎 (zhihu.com),其用来计算变化过程中的一些非刚性的变化。

Soft-gated Warping-Block

在这里插入图片描述

在经过几何匹配器得到变化网格Transformation Grid后,作者使用上图所示的一个warping-Block来对特征图进行变化,以消除特征图中因为人体姿态变化所导致的导致不对齐问题,其所进行操作如下公式所示:

在这里插入图片描述

Φ ( I ) Φ(I) Φ(I)表示从图片提取特征图, R ( Φ ( I ) ) R(Φ(I)) R(Φ(I)) R R R函数表示通过使用卷积层从 Φ ( I ) Φ(I) Φ(I)中进一步提取特征图。 W ( I ) W(I) W(I)表示根据得到的变化网格所进行的变化操作(与特征图做矩阵乘法),最后再将利用残差结构将 Φ ( I ) Φ(I) Φ(I)和变化后的特征结合起来。

这里有一个问题是如果只从上述网络结构中是看不出软门控制这个机制的,作者在论文也只是说在 W ( I ) W(I) W(I)中有一个参数e(取值范围为0-1)来根据源人体和目标人体姿态之间的差异程度来调节变化幅度,但是文中并没有说明这个e是如何起作用,也没有开源代码可供参考,个人猜测可能有2种实现途径:

  1. e是直接作用几何匹配器所得到整个变化上,即 e ( 仿射变化 + T P S ) e(仿射变化+TPS) e(仿射变化+TPS)
  2. e是用来调节TPS和仿射变化之间在整个变化中占据的比例的,即 e 仿射变化 + ( 1 − e ) T P S e仿射变化+(1-e)TPS e仿射变化+(1e)TPS 或者 仿射变化 + e T P S 仿射变化+eTPS 仿射变化+eTPS这种形式

这边还有一个不确定的地方这个 e e e是学出来的还是人为给定的,个人倾向于应该是人为给定的,因为文章并没有网络中哪一个地方可以提供这个e,并且从文中描述来看应该是使用者可以根据姿态差异程度去调整这种变化。但是这就有另一个问题,如果认为设定的话,在训练过程中要给每一对样本对设置这样的一个参数,这样又有点不合理了。

辨别器

需要强调的文章的两个阶段都是采用GAN的架构,生成器部分都是类似于pix2pix网络的生成器架构,在阶段一中增加了残差块,在阶段二中增加了warping-block。

两个阶段的辨别器结构一致,一个类金字塔结构的辨别器,,输入和一般condition GAN的输入没啥区别,比如在阶段一种负样本用(源图像,目标姿态关键点图,源人体分割图,合成的人体分割图,生成的目标人体图像),正样本用(源图像,目标姿态关键点图,源人体分割图,合成的人体分割图,目标人体图像)。

在这里插入图片描述

特别一点是上图的卷积层产生的特征图Feature map 0,1,2会被用在生成器的损失函数中来帮助生成器训练。

损失函数

辨别器的损失函数就是二分类的损失函数,生成器部分除了必需的对抗损失函数外,还包含以下三个损失函数:

  1. pixel-wise loss 这里应该就是L1LOSS
  2. perceptual loss L p e r c e p t u a l Lperceptual Lperceptual :一般叫感知损失,就是使用一个现成训练好的VGG网络去分别提取真实图和生成图片的特征图,计算二者特征图的之间的差异作为损失
  3. pyramidal hierarchy loss L P H LPH LPH:其实和上面的感知损失没啥大的区别,就是使用辨别器提取出的特征图来计算损失,就是把上面的VGG换成了我们自己的辨别器。计算公式如下,就是使用L1loss计算特征图之间的差异,并使用权重a来加权求和,这里n=3,因为作者选了3个层次的特征图。

L P H = ∑ i = 0 n α i ‖ F i ( I ˆ ) − F i ( I ) ‖ 1 LPH = ∑_{i=0}^{n} α_{i}‖Fi(I^{ˆ}) − Fi(I)‖_{1} LPH=i=0nαiFi(Iˆ)Fi(I)1

最终的损失函数如下:

在这里插入图片描述

写在最后

这篇论文实验部分没有特别有特色的地方,就不在叙述了,这篇论文感觉有点承上启下的味道了,他继承前面论文的思想,然后不同与之前只使用人体关键点的图来学习姿态变化关系,这里使用人体语义分割图这种更强的约束,同时使用了神经网络去学习变化关系,我觉的这对后面基于3D人体模型来做的论文也算一个启发,特别生成目标人体语义分割图那块的想法我觉得很不错,但是文章感觉有些没有讲的很清楚,可能是我理解的问题,然后很可惜也没有开源代码。

然后论文笔记自己觉得太费时间了,所以中间有3周时间吧,虽然也看了7,8篇论文,但是都没有做笔记了,然后发现单纯的看论文效果还是没有写笔记时那样能够对论文核心思想有更深的理解,所以后面还是论文笔记还是得写的,但是应该会挑着写,然后重点写方法,实验部分主要看看有没有新的实验设计和指标吧,然后论文也尽量选择一部分写,然后剩下的论文考虑写那种一段话的总结就ok了。

任重而道远!
果还是没有写笔记时那样能够对论文核心思想有更深的理解,所以后面还是论文笔记还是得写的,但是应该会挑着写,然后重点写方法,实验部分主要看看有没有新的实验设计和指标吧,然后论文也尽量选择一部分写,然后剩下的论文考虑写那种一段话的总结就ok了。

任重而道远!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值