Deep Image Spatial Transformation for Person Image Generation
姿态引导下的图像生成研究就是要在保留原图像外观的同时将原图像中人物的姿态转换为目标姿态。这一任务需要对原图像进行空间转换。但实际上基于卷积的神经网络更擅长于特征的提取而不擅长于特征的空间转换,所以单纯的使用卷积神经网络并不能很好的完成这一任务。
这篇文章提出了一种global-flow local-attention 模型进行姿态应引导下的图像生成研究。具体来说第一步使用全局流场估计器计算原图像和目标图像之间的全局相关性,以此来预测flow fileds。第二步为使用从feature maps提取出来的flowed local patch pairs来计算局部注意力系数。第三步为使用局部注意力机制作为content aware sampling method来进行图像的外观渲染。
该文将注意力机制和流场操作相结合,使得每一个输出位置只与原图像的局部特征块相关
将目标图像视为原图像的变形结果
该文的观点是将目标图像视为原图像的变形结果,每一个输出位置只与原图像的局部特征相关。
Introduction
图像的空间转换可以用于解决许多输入图像和目标图像空间不对齐的图像生成任务,这些不对齐可能是由于姿态变换或者是视角的变换。这一类任务包括了姿态引导下的图像生成研究
卷积神经网络使用共享参数的卷积核来计算输出,这也是卷积神经网络的一个重要特性,称为平移等变(equivariance to transformation),这意味着当输入发生平移空间变化时,输出也会发生平移相同的空间变化。这一特性对于输入输出的空间结构是对齐的任务来说是十分有益的,例如图像分割,图像检测以及图像翻译。但是这一特性也限制了卷积神经网络对输入数据进行空间变换。
卷积神经网络具有平移等变得性质,但是并不能够对旋转、缩放等操作具有等变性,特别是对于人体这种非刚体,卷积神经网络并不能对输入数据进行空间变换
STN的通过引入空间转换模块来解决这一问题,该模块对全局转换参数进行回归,并通过仿射转换来扭曲输入特征。但是,由于它假定了源和目标之间的全局仿射变换,因此该方法无法处理非刚性对象的变换。
注意力机制通过利用非局部信息,建立特征之间的长程依赖。但是对于空间转换任务,目标图像和原图像在空间上是不对齐的,每一个输出图像上位置与原图像上的位置有明确的对应关系。因此原图像和目标图像之间的注意力权重矩阵应该是一个稀疏矩阵。
基于流场的操作通过为每一个输出位置采样一个局部的原图像块会迫使注意力权重矩阵变为稀疏矩阵。这些方法预测二维坐标偏移量,指定可以对源中的哪些位置进行采样以生成目标。
然而为了稳定训练,大多数的基于流场的方法会在像素级别扭曲数据,这会限制模型生成新的内容。由于需要生成全分辨率流场,因此难以提取大的运动。在特征级别进行输入数据的扭曲能够解决这一问题,然而,这些网络很容易陷入局部最小值由于以下两个原因:(1)输入特征和流场相互限制。没有准确的流场,输入特征无法获得合理的梯度,没有如果没有合理的特征,网络也无法提取相似性以生成正确的流场。(2)常用的双线性采样方法提供的不良梯度传播进一步导致训练中的不稳定。
Approach
对于姿态引导下的图像生成研究,目标图像是原图像的变形结果,这意味着目标图像中的每一个点是与原图像中的某个特定的局部区域唯一对应。
该文设计了global-flow local-attention 网络结构来合理的对原图像特征进行采样和重构。网络包含两个部分:全局流场估计器F和局部自然纹理渲染器G。F负责估计原图像和目标图像的运动(差别),其生成全局流场w和二进制掩模m。利用w和m,G利用局部注意力模块将原图像的纹理渲染在目标图像。
Global Flow Filed Estimator
$$ w,m=F(x_s,p_s,p_t) $$
其中$x_s$表示原图像,$p_s$表示原图像姿态,$p_t$表示目标姿态。$w$包含了原图像和目标图像的坐标偏移量。$m$的值在0至1之间,表示原图像中是否存在目标位置的信息。F为全卷积网络,w和m权重共享。
由于真实的坐标偏移量是未知的,这里使用了sampling correctness loss来计算$w$。$v_s,v_t$分别表示原图像和目标图像通过预训练的VGG19的特定层提取出来的特征。$v_{s,w}=w(v_s)$表示$v_s$通过$w$转换之后的结果。sampling correctness loss计算$v_{s,w}$和$v_t$之间的余弦相似性。 $$ \mathcal{L}_c=\frac{1}{N}\sum_{l\in \Omega}exp(-\frac{\mu(v_{s,w}^l,v_t^l)}{\mu_{max}^l}) $$ $\mu$表示余弦相似度。$\Omega$表示特征图中的所有的N个点,$l$表示其中的一个点$(x,y)$。$\mu_{max}^l$表示正则项。也就是说需要对**所有的点**计算余弦相似度,然后再求平均值。
sampling correctness loss能够限制流场采样语义相关的区域。由于图像领域之间的变形是高度相关的,如果能够将这种关系提取出来是十分有益的,因此进一步在流场中添加了正则项。令$c_t$表示目标特征的二位坐标。$\mathcal{N}(c_t,l)$表示$c_t$的$n\times n$个领域图像块,假设$\mathcal{N}(c_t,l)$和$\mathcal{N}(c s,l)$之间的变换为仿射变换 $$ T_l=A_l S_l $$ $T_l$表示$\mathcal{N}(C_l,l)$的坐标集合,$S_l$表示$\mathcal{N}(c_s,l)$的坐标集合,$A_l$表示仿射参数,通过最小二乘法计算出来 $$ \hat{A_l}=(S_l^HS_l)^{-1}S_l^HT_l $$ 因此正则损失函数为 $$ \mathcal{L}r=\sum{l\in\Omega}|| T_l-\hat{A}_lS_l ||^2 $$
Local Neural Texture Renderer
纹理渲染器的目标是将原图像中的信息进行空间转换,生成图像 $$ \hat{x}_t=G(x_s,p_t,w,m) $$ 信息转换在局部注意力模块中进行。这一模块的作用是将原图像的纹理渲染在目标姿态上。
令$f_t$和$f_s$分别表示$p_t$和$x_s$经过下采样提取出来的特征。首先通过双线性插值提取出局部图像块$\mathcal{N}(f_t,l)$和$\mathcal{N}(f_s,l+w^l)$。之后使用核预测网络(就是全连接层)来生成注意力权重矩阵$k_l$。 $$ k_l=M(\mathcal{N}(f_t,l),\mathcal{N}(f_s,l+w^l)) $$ 最后将对应的原图像块$\mathcal{N}(f_s,l+w^l)$与注意力权重矩阵相乘(注意此时只是将坐标$l$处的特征进行了处理) $$ f_{attn}^l=P(k_l\otimes \mathcal{N}(f_s,l+w^l)) $$ $P$表示平均池化操作。总的the warped feature map $f_{attn}$ 通过在每一个位置重复上述步骤获得。
由于遮挡的情况,原图像和目标图像之间并不是每一个位置都能对应。为了使这些不对应的地方生成新的内容,利用了之前获得的掩模$m$。(掩模的作用是当原图像和目标图像的位置对应时就在该位置为1,没有对应就为0)
$$
f_{out}=(1-m)*f_t+m*f_{attn}
$$
此处主要的贡献在于通过content-aware sampling operation(即引入了注意力机制)进行source feature的warping(代替了原先的双线性插值方法)
损失函数
略
实验的实施细节
实验前需要确定的是:局部注意力模块的个数;局部图像块$\mathcal{N}(f_t,l)$和$\mathcal{N}(f_s,l+w^l)$的大小;一个局部图像块要进行几次attention操作,即一个局部图像块要分隔成几部分(进行warped操作的小图像块大小)
对于Deepfashion,采用两个局部注意力模块;局部图像块的大小分别为64、 32;局部图像块进行warped操作的小图像块大小分别为3,5
分阶段训练:首先训练$F$,再训练整个模型
总结
1.通过这种仿射操作确实能够生成逼真的图片,但是这样将图像分成一个一个小图像块进行操作,计算量是不是太大了?
2.之前提到的稀疏注意力我认为指的是进行一个一个小图像块的注意力操作,而不是进行一整个图像的注意力操作
3.在局部注意力模块中,是以原图像路径作为主路径,因为实际上是将图像与注意力权矩阵进行了相乘,最后得到的是warped后的图像特征。个人认为这和PATN的想法基本上是一致的,不同的是在2中提到的,PATN进行的是一整个图像的注意力操作,而该问进行的是一个一个小图像块的操作。所以可以理解为这是对PATN方法的一个改进。
4.把local warp做的很细,做到每一个点进行warping(实际上是对小的patch进行warping)