[论文笔记]Deformable GANs for Pose-based Human Image Generation

Deformable GANs for Pose-based Human Image Generation

摘要

本文主要解决在给定姿态情况下的人体图像生成问题。这类问题基本思路都是基于condition gan 或者 condition vae来做的,但是这类方法不能够很好地处理condition image 和 target image 之间存在大幅度空间上的形变的情况,特别是对于U-NET而言,其跳跃链接只是单纯地将编码器生成的特征图x复制给解码器,解码器将自身上采样出的特征图y和x链接起来,这里实际上隐含着x和y是大致对齐的,但是这样的假设在面对原图像和目标图像间存在大幅度空间形变的情况下很难被满足。因此作者提出了在生成器中增加可形变的跳跃连接和使用最近邻损失来替换之前采用的L1LOSS和L2LOSS的方法来解决这种不对齐的图像生成问题。

在这里插入图片描述

创新点

  1. 本文提出一个端到端的(one stage)的基于姿态的人体图像生成方法,与之前的方法(PG2)相比取得了领先的性能。
  2. 本文通过在网络中增加可形变的跳跃链接和使用最近邻损失的方法来解决之前的方法在面对condition image和target image存在大幅度空间形变 时表现不佳的问题。
  3. 本文提取方法虽然在人体图像生成问题上做了测试,但是由于本文提出的方法并未做很多与人体相关的假设,因此能够被很好地迁移到其它的存在大幅度形变的物体图像生成问题上。

网络结构

在这里插入图片描述

总体网络结构

本文的总体结构类似于基于U-NET的condition GAN,主要不同时增加可形变的跳跃连接。

生成器

本文生成器主要基于U-NET网络结构 ,U-NET网络中的下采样部分被视为编码器,上采样部分被视为解码器部分,编码器和解码器之间存在着跳跃连接和可形变的跳跃连接来将编码器中各层卷积提取出特征图传递给解码器中对应的卷积层。

输入

生成器的输入主要由两部分组成:

  1. 从高斯分布中采样出的随机噪声 z z z
  2. 源图像 x a x_a xa,原图像中的人体姿态 H a H_a Ha,目标人体姿态 H B H_B HB,即 ( x a , H a , H b ) (x_a,H_a,H_b) (xa,Ha,Hb)

这里关于人体姿态信息的表达方式基本和PG2那篇论文中所使用的方法一致,只在热力图的生成上存在着一定的差别:

  1. 首先和PG2使用相同的Human Pose Estimator(HPE)来对人体图像中的姿态信息进行提取,得到 P ( X ) = ( p 1 , p 2 , . . . , p k ) P(X)=(p_1,p_2,...,p_k) P(X)=(p1,p2,...,pk),其中每个 p p p都代表一个人体关键点,这里k与之前的论文一致为18,即得到人体18个关键点的信息来作为人体姿态信息。

  2. 在得到人体姿态信息后需要将其转换成与之前论文中类似的18张热力图的形式,这里使用 H a = H ( P ( x a ) ) H_a=H(P(x_a)) Ha=H(P(xa))来代表从源图像中获取的人体姿态信息的热力图。其计算方式与之前略有区别,之前的方法主要以关键点的位置为圆心,然后给定半径区域内像素值为1区域外的像素点的像素值为0,而这里并未采用二值化的方式,而是根据与关键点的距离来决定像素值的大小,计算公式如下图所示, p p p表示任意像素点, p j p_j pj表示特定关键点,作者认为相较于二值图像的方式,这重方法能够提供更加广泛的关于关键点的位置信息。

在这里插入图片描述

生成器的网络结构

在这里插入图片描述

考虑到源图像 x a x_a xa和目标姿态 H b H_b Hb之间存在空间上的不对齐的情况(这重不对齐信息可以这样理解,原图像中(x,y)位置的纹理信息可与目标姿态图中(x,y)的所代表的部位不匹配),当这种不对齐的情况比较严重时(即目标姿态和源图像人体姿态间差距较大时),即使将二者连接起来,由于卷积核的观察区域有限,也很难源图像中的人体纹理信息和目标姿态上的位置信息结合起来。所以这里作者在编码器部分使用了两个权值不共享的卷积流来分别提取 H b H_b Hb ( x a , H a ) (x_a,H_a) (xa,Ha)的特征信息。如图中红蓝两个分支所示。 ( x a , H a ) (x_a,H_a) (xa,Ha)所在分支提取出特征图最终还要通过可变形跳跃连接在解码器部分与 H b H_b Hb所在分支提取出的特征图进行融合,但是这种不对齐仍然会存在于两个分支所提取的特征图中,因此可变形的跳跃连接中需要存在一个机制来解决两个分支特征图不对齐的问题。

解码器部分主要由反卷积层组成,和一般U-NET网络结构的解码器部分类似,但是这里需要主要解码器中第一个反卷积层的输入只来源于编码器的目标姿态分支,每个反卷积层输入除了上一层输出以外,还包括解码器部分通过跳跃连接传递过来的特征图,只不过这里的特征图来自于编码器中的两个独立的分支。

辨别器

辨别器主要沿用的一般condition GAN中采用的全卷积网络结构,网络的输入为 ( x a , H a , y , H b ) (x_a,H_a,y,H_b) (xa,Ha,y,Hb),对于真实图片而言 y = x b y=x_b y=xb,对生成图片(伪造图片)而言 y = G ( z , x a , H a , H b ) y=G(z,x_a,H_a,H_b) y=G(z,xa,Ha,Hb),输出则是输入的 y y y为真实图片的概率。

可变形的跳跃链接

基于U-NET架构的生成器,需要通过跳跃连接来将编码器提取的特征信息直接传递给解码器中的对应层,但是由于这里我们的源图片特征图和目标姿态的特征图之间存在着不对齐的问题,这种不对齐导致网络难以同时处理源图片特征图中的纹理信息和其对应于目标姿态特征图中的位置信息,因此这里不能直接使用跳跃连接来将源图片提取和特征图传递给解码器部分(因为解码器部分是基于目标姿态分支来做的,其初始的输入只来源于编码器目标姿态的分支)。因此作者提出了可变形的跳跃链接,跳跃链接主要做了如下几步事情:

  1. 将完整的人体分解成一个由一系列刚性的子部位,实际上就是将人体分解成功各个可视为刚体的部位,如躯干,四肢等等,
  2. 依据这些分解出的人体部位来将全局人体姿态变化分解成各个源人体部位和对应目标人体部位之间的仿射变换
  3. 根据计算出的各个人体部位的仿射变换来对提取出源图像特征图进行进行变化,使得源图像的特征图的纹理信息和目标姿态的特征图的位置信息能够相互对应。(简单点说就是源特征图上(x,y)位置上的纹理信息能够和目标姿态特征图上(x,y)位置所代表部位(人体部位的位置信息即姿态信息)相对应。
  4. 将对齐后源图像的特征图通过跳跃链接传递给解码器的对应层

在这里插入图片描述

人体分解

作者将人体分解成10个子部位:头部,躯干以及四肢(由于四肢每一个可分为上下两部分,故总共10个人体部位,每个子部位都会对应一些人体关键点,利用每个子部位包含的关键点信息,我们可以生成对应每个部位的矩形区域,具体生成方式如下:

  1. 对于头部区域,其被简单定义为所有相应头部关节轴对齐的封闭矩形(不太懂啥意思,后续可以看一下代码,但是这个并不重要)
  2. 对于躯干区域,作者则是直接使用了一个包含整个图像的矩形区域来作为躯干区域,作者认为这样可以将源图像的背景信息传递给解码器(我感觉这样做实际上有点粗糙了,可能是我理解的问题,感觉需要去代码里看一下具体如何做的·
  3. 对于8个肢体区域,每个肢体区域仅仅包含2个关键点,因此作者以这两点的连线为长轴,短轴与长轴垂直相交,短轴的长度为所有躯干对角线长度的均值的1/3。

在得到每个人体部位的区域矩形后,可以用矩形的4个顶点来表示出这个矩形,如 R h a = { p 1 , p 2 , p 3 , p 4 } R_{h}^{a}=\{p_1,p_2,p_3,p_4\} Rha={p1,p2,p3,p4}来表示图像 x a x_a xa中的第 h h h个矩形区域的4个顶点。同理我们可以对应的 R h b = { q 1 , q 2 , q 3 , q 4 } R_{h}^{b}=\{q_1,q_2,q_3,q_4\} Rhb={q1,q2,q3,q4},后面就可以利用 R h a R_{h}^{a} Rha R h b R_{h}^{b} Rhb之间的对应关系来计算出相应部位所需要进行仿射变换。同时通过这样4个顶点描述出的顶点信息可以很容易定生成表示每个人体部位的区域掩码 M h ( p ) M_{h}(p) Mh(p),其中只有当 p p p位于 R h a R_{h}^{a} Rha内部时该点的像素值才为1,否则像素值为0。

在获取人体部位的区域矩形,如果 x a x_a xa x b x_b xb(这里用 x b x_b xb实际上不恰当,因为真实使用可能时是没有 x b x_b xb的,但是只用目标姿态生成的图片也可以到对应部位矩形)中存在无法检测到人体部位的情况时,则对应于该部位的 R h R_h Rh会被视为空,对应与该部位的仿射变换也不在需要计算。以上是对于一般情况,作者在补充材料里说明一个特殊的情况,即当如果缺失的人体部位是源图像 x a x_a xa中的一个对称的身体部位时,比如左手上肢时,则可以直接使用对应身体部位右手上肢的的矩形来作为左手上肢矩形区域,在计算仿射变换时,右上肢需要和目标的左右手上肢所对应的矩形区域分别做一次反射变化

计算各个人体部位的仿射变换

在得到各个人体部位矩形区域后,就可以将全局的人体姿态变化分解成对应于每一个人体部位的仿射变换上。具体计算方式就是使用 R h a R_{h}^{a} Rha R h b R_{h}^{b} Rhb中4个对应点坐标信息,通过最小化一个平方误差来得到一个包含有6个参数的仿射变换函数(因为反射变化矩阵需要6个参数,所以这里仿射变换的函数由6个参数组成) f h ( . ; k h ) f_h(.;k_h) fh(.;kh)函数:

在这里插入图片描述

实际上理论上只需要3个对应的点就能计算出一组仿射变换矩阵,但是因为这里有4个点,所以只使用其中三个点计算出的仿射变换矩阵在应用到第四个点上计算出的位置可能目标点之间存在误差,因此作者这里就用最小化上述的误差来求解一个最佳的仿射变换矩阵,来使得变化后的到的4个点的坐标和目标4个点的误差最小。

对特征图进行仿射变换

经过上述的两个步骤我们得到了各个人体部位的掩码 M h {M_h} Mh和仿射变换 f h ( ) f_{h}() fh(),就可以根据如下公式来计算得到各个身体部位进行仿射变换后的特征图:

在这里插入图片描述

最后对得到的各个部位的变化后特征图进行汇总得到最终全局的人体图像特征图(此时的特征图已经和目标姿态信息进行了对齐),汇总的方法如下:

在这里插入图片描述

本质上就是对于全局的人体特征图的每个特征通道上每个像素点像素值是通过在10个局部的特征图的对应通道的对应像素点的像素值中取最大来得到。因为在 F h ′ F^{'}_{h} Fh中,非第 h h h个部位所在区域的像素值都是0值( M h M_h Mh的作用),因此变化后两个区域如果不重叠,就可以通过取最大值的方法将每个部位的特征值赋给全局特征图 F F F上的对应位置,但是对于那些变化后发生重叠的部位而言,重叠区域的像素值这里就通过比较各个部位在重叠位置上的像素值大小的方式来决定。(这种方式并不能很好地处理重叠的问题,我觉得是不是可以在表示姿态信息时除了位置信息以外增加一个描述可见性的信息。

需要注意的时掩码 M h {M_h} Mh和仿射变换 f h ( ) f_{h}() fh()初始计算都是在原始图像的分辨率上计算的,后面要根据不同的分辨率进行微调以适应不同分辨率的特征图,同时由于训练时图像都是固定的成对的图像,所以只需要在训练开始前计算一次就行。

损失函数

本文与其他condition GAN的损失函数类似,对于辨别器而言其损失只包含对抗性损失部分:

在这里插入图片描述

而生成器的损失除了对抗性损失外还包含一个衡量生成图像和目标图像之间差异损失,通常使用L1_LOSS和L2_LOSS来衡量这种差异。但是这两个损失往往会导致生成比较模糊图像。**作者认为导致这种现象的原因就是这两种损失函数都是计算逐个对应像素之间的差异,而这种对应关系是由位置信息决定的,而不是语义信息。因此即使目标图像和生成图像之间只存在着很小的空间上差异(不对齐),都会导致计算出很大损失,而实际上从语义层面看二者基本没有区别,而这种不对齐和前面因为姿态变化所致的不对齐存在区别,即使生成图像和目标图像的姿态一致,这种不对齐依旧会存在。**因此作者在L1_LOSS的基础上提出了一个最近邻损失来避免这种差异所导致的损失失真,最近邻损失的定义如下:

在这里插入图片描述

实际上的损失的计算方式从原来L1_LOSS中生成图像的一个点与目标图像上同位置的一个点之间计算差异变成了生成图像上一个点与目标图像相同位置的一个领域内的每一个点都计算一次损失,去其中最小损失来作为作为该点的损失。实际应用上并不是用目标图像和生成图像来计算,而是使用二者提取出的特征图来计算差异,因此公式中存在 g ( ) g() g(),实际实现如下:

在这里插入图片描述

本文实际上使用一个在ImageNet上预训练好的VGG19网络的前两个卷积层来生成图像和目标图像提取特征,这前两个卷积层的stride都为1,因此生成特征图的大小是和原图一致的,因此使用这样特征图来计算差异并不会存在空间上的误差。同时对于生成图像上的点 p p p而言,其对应于特征图上的特征值实际上是包含了生成图像上点 p p p周围5*5范围内信息,这一点其实是和最近邻损失中使用一个领域来计算损失想法类似。本质上都是鼓励使用一个区域而不是精确到具体到某一个点来计算差异,因为只有在区域存在才能差异导致语义层面上出现明显的差异,单个点之间差异对于语义信息的影响比较小。

最终生成器的损失函数如下:

在这里插入图片描述

实验

数据集

数据集和之前方法类似,主要也是使用了DeepFashion和Market1501这两个数据集,作者在在划分数据集时会避免训练集和验证集出现同一个人物(避免数据泄露)。

定量评估

使用指标

作者也是使用了SSIM,IS,Mask-SSIM以及Mask-IS这些指标,但是这些指标在评估我们生成的人体图片时都存在着一定缺陷的,SSIM的缺陷在之前的paper笔记中以及提到过,这里来说明IS指标的缺陷,之前评估IS指标说过影响IS指标主要有两方面:1.对于一张图像,其属于某个特定类别的置信度应该尽可能高;2. 对于大量生成的图片而言,生成的图片属于不同类别的概率应该尽可能平均。但是这个指标在遇到人体图像生成这一类只有一个物体类别的问题时就会显得不够准确了(难以满足第二条)。

因此作者使用另一个名为检测得分(DS detection score)的来评估图片的质量,这个指标实际上就是使用一个当时表现比较好的人体检测器来对生成图片检测,检测器会给出每一张图片中存在人体的置信度,最后对所有生成图片的置信度求平均即可以得DS指标。

除了对生成图片计算这些指标,作者还进一步对原始的真实图片计算了这些指标来做为一个参考

补充材料

除了以上指标外,作者还采用了和前面那篇将图片分解成三元素的文章中类似的评估方法:即使用一个RE-ID模型在生成的图片进行训练,评估最终的训练结果,并将结果和在真实数据集上的训练结果相比较。

定量评估结构

作者主要是将自己的方法和之前的PG2进行几个定量指标的对比:在一些指标上本文提出的Pose GAN还是要优于之前提出的PG2。
在这里插入图片描述

作者还进行了和PG2类似的人工评估的方法,这里就不在介绍了

消融研究和定性评估

作者主要从以有无可形变的跳跃连接和最近邻损失评估本文提出的改进是否真的有效,主要分为以下4类:

  • baseline:无可形变的跳跃链接和最近邻损失,生成器中编码器也没有双分支了。
  • DSC:增加跳跃链接,但是损失函数为L1_LOSS
  • preLOSS:只要是本文提出的计算方法上除去了与最近邻的所有点计算差异取最小的方法
  • full:即本文提出的完整方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结

本文主要提出了可变形的跳跃链接来解决U-NET在生成这类存在大幅度物体形变图像时的缺陷,同时使用一个局部最近邻的损失函数解决生成图片和目标图片之间存在的不对齐问题。同时作者认为本文提出的方法能够很好地应该其他物体图像的生成上。

个人感觉本文的跳跃链接实际上做的工作就是进行姿态的变化,实际上将通过手动映射的方式来实现姿态的迁移而不是使用深度神经网络来实现对姿态变化,而网络更多的是去调整细节,这样做实际上也是将姿态变化和图片生成进行了一个分离。本文的一个特色是使用最近邻的损失来去解决传统L1_LOSS因为不对齐问题所带来模糊现象。个人感觉文章中这使用矩形区域来进行人体部位划分的方法是可以使用图像分割的方法去替代,这样能够划分出更加精细的人体部位,同时本文相较于之前的方法考虑了部位遮挡的问题,但是解决方法感觉不是特别合理,感觉在描述姿态信息时可以增加关于是否可见的信息,同样本文也反映了一个问题,就是人体图像生成这一块缺乏一个很好的定量指标对生成的结果进行定量评估,这也是目前图像生成领域普遍存在的一个问题吧

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值