/images/avatar.jpg

我的个人博客

SSIM,IS等生成图像评价指标

IS参考 Inception Score 的基本原理 众所周知,评价一个生成模型,我们需要考验它两方面性能:1. 生成的图片是否清晰 2. 生成的图片是否多样。生成的图片不够清晰,显然说明生成模型表现欠佳;生成的图片够清晰了,我们还要看是不是能生成足够多样的图片,有些生成模型只能生成有限的几种清晰图片,陷入了所谓 mode collapse,也不是好的模型。 Inception Score 是这样考虑这两个方面的: 清晰度:把生成的一张图片 输入 Inception V3 中,将输出1000维的向量 ,向量的每个维度的值对应图片属于某类的概率。对于一个清晰的图片,它属于某一类的概率应该非常大,而属于其它类的概率应该很小(这个假设本身是有问题的,有可能有些图片很清晰,但是具体属于哪个类却是模棱两可的)。用专业术语说, 的熵应该很小(熵代表混乱度,均匀分布的混乱度最大,熵最大)。 多样性:如果一个模型能生成足够多样的图片,那么它生成的图片在各个类别中的分布应该是平均的,假设生成了 10000 张图片,那么最理想的情况是,1000类中每类生成了10张。转换成术语,就是生成图片在所有类别概率的边缘分布 熵很大(均匀分布)。具体计算时,可以先用生成器生成 N 张图片,然后用公式 (1) 的经验分布来代替: 综合上面两方面,Inception Score 的公式为: :仅仅是为了好看,没有具体含义 :表示从生成器中生成图片 :把生成的图片 输入到 Inception V3,得到一个 1000 维的向量 ,也就是该图片属于各个类别的概率分布。IS 提出者的假设是,对于清晰的生成图片,这个向量的某个维度值格外大,而其余的维度值格外小(也就是概率密度图十分尖)。 :N个生成的图片(N 通常取5000),每个生成图片都输入到 Inception V3 中,各自得到一个自己的概率分布向量,把这些向量求一个平均,得到生成器生成的图片全体在所有类别上的边缘分布,见公式 (1)。 :对 和 求 KL 散度。KL 散度离散形式的公式如下: KL 散度用以衡量两个概率分布的距离,它是非负的,值越大说明这两个概率分布越不像。但这个距离不是对称的,观察公式, 很大 很小的地方对 KL 距离贡献很大,而 很小 很大的地方对 KL 距离的贡献很小。我们预期 的某个维度值很大,而 总体均匀,因此需要把 放在公式 (2) 中双竖线的前面。放到后面可能会造成 的极端值被忽略,而正是这个极端值的存在告诉了我们这个生成的图片是否清晰。

STN的理解

网络结构 网络分为三个部分:Localisation net、Grid generator以及Sampler 输入为feature map UU,输出为feature map VV。 Localisation net 以UU为输入,经过卷积层或者全连接层输出仿射参数θ(2,3)\theta \in (2,3) 假设θ=[θ11θ12θ13 θ21θ22θ23]\theta=\begin{bmatrix}\theta_{11}&\theta_{12}&\theta_{13}\ \theta_{21}&\theta_{22}&\theta_{23} \end{bmatrix} 在编程实现中最好将θ\theta进行初始化为$\begin{bmatrix}1&0&0\0&1&0\end{bmatrix}$ Grid generator 已知VV的坐标,使用仿射变换求出UU中对应的坐标。 在编程实现中需要预先定义VV的shape, pytorch会根据shape的大小自动初始化一个坐标 假设VV的坐标为$\begin{bmatrix}x^t\y^t\1 \end{bmatrix}$ ,UU中对应的坐标为$\begin{bmatrix}x^s\y^s \end{bmatrix}$。则两者之间的关系为 $$ \begin{bmatrix}x^s\y^s \end{bmatrix}=\begin{bmatrix}\theta_{11}&\theta_{12}&\theta_{13}\ \theta_{21}&\theta_{22}&\theta_{23} \end{bmatrix}\begin{bmatrix}x^t\y^t\1 \end{bmatrix} $$ 注意此处的目标坐标和原坐标的对应关系,这里使用的是图像变换中的向后映射,参考5 图像变换的本质是将像素点的坐标通过一种函数关系映射到另外的位置,并根据对应关系进行采样 向前映射:已知原图像上的坐标,并且已知原图像坐标到目标图像坐标的映射关系,因此可以求得原图像上一点经过映射后在目标图像上的位置。 向后映射:已知目标图像上的坐标,并且已知目标图像坐标到原图像坐标的映射关系,因此可以求得目标图像上一点经过映射后在原图像上的位置。 插值:通常情况下一个整数的坐标(x,y)(x,y)经过映射后往往都位于非整数位置,此时就要采用插值方法进行采样。(此处以双线性插值为例) 针对前向映射的插值方法:当输入图像上的整数坐标(x,y)(x,y)经过映射后,对应的目标图像上的坐标(x,y)(x’,y’)为非整数,需要将其像素值按照一定的权重分配到其周围的四个像素点上。因此输出图像上的整数坐标的像素值是由多个输入图像像素点映射并按照一定权重叠加的结果。 针对后向映射的插值方法:当输出图像上的整数坐标(x,y)(x’,y’)经过映射后,对应的原图像上的坐标(x,y)(x,y)为非整数,利用其周围整数点位置的输入图像像素值进行插值,就得到了该点的像素值。我们遍历输出图像,经过坐标变换、插值两步操作,我们就能将其像素值一个个地计算出来,因此向后映射又叫图像填充映射。如下图所示。 Sampler 由于计算得到的$\begin{bmatrix}x^s\y^s \end{bmatrix}$为浮点数时会造成无法进行梯度传播,因此使用双线性插值进行采样: 其中UnmcU_{nm}^c表示距离(xs,ys)(x^s,y^s)最近的四个坐标所对应的UU中的像素值,VicV_i^c表示使用双线性插值后VV中某点像素值。 反向传播 前向的传递过程为UU\rightarrow^{}Localisation net θ\rightarrow^{\Large\theta} Grid generator $\rightarrow^{\Large\begin{bmatrix}x^s\y^s\end{bmatrix}}$ Sampler Vic\rightarrow^{\Large V_i^c} 因此反向传播的过程需要先计算出VicV_i^c关于$\begin{bmatrix}x^s\y^s\end{bmatrix}$的梯度,再计算出$\begin{bmatrix}x^s\y^s\end{bmatrix}$关于θ\theta的梯度。 同理可以计算出VicV_i^c关于ysy^s的导数,以及$\begin{bmatrix}x^s\y^s\end{bmatrix}$关于θ\theta的导数(这个比较简单) 通过以上的前向传播以及反向传播可以学习到仿射参数θ\theta,进而通过双线性插值得到经过warp后的特征。

SwapNet: Image Based Garment Transfer

该文提出了Swapnet,能够实现任意姿态下的虚拟换装。 网络分为两阶段: warping : 将desired clothing根据pose进行warping,生成clothing segmentation。 texturing : 利用desired clothing information 对clothing segmentation进行细节的服装纹理合成。 给定包含desired clothing的图像A,以及包含desired pose的图像B,目标是生成具有B的姿态且有A的服装的图像BB' (B中的人物穿上了A的服装)。 Warping Module 以A的语义分割图AcsA_{cs}和B的语义分割图BcsB_{cs}为输入,合成BCSB’_{CS},其同时具有A的语义形状、标签以及B的体型和姿态。 生成的结果strongly conditioned on the body segmentation以及weakly conditioned on the clothing segmentation。这是通过将 clothing segmentation经过下采样再上采样的操作(?)。这种设计网络结构的好处在于:(?) 损失函数部分: 没看懂 Texturing Module 损失函数: LL1=fgA1 Lfeat=lλlϕl(fg)ϕl(A)2 LGANs \mathcal{L}{L1}=|| f_g-A ||_1 \ \mathcal{L}{feat}=\sum_l\lambda_l || \phi_l(f_g)-\phi_l(A) ||_2 \ \mathcal{L}_{GAN}s

The Contextual Loss for Image Transformation with Non-Aligned Data

前馈卷积神经网络用于图像翻译任务时的一个关键在于损失函数能够准确的度量真实图像和生成图像之间的相似性。大多数的损失函数假设真实图像和生成图像在空间上是对齐的,直接比较在相应位置pixel的相似性。然而在大多数任务中,在空间上对齐的训练数据对是难以得到的。 该文提出了一种不需要对齐训练数据对的损失函数,该损失函数基于content和semantics–在考虑整张图像的content的同时比较具有相似semantics meaning的区域。 Introduction 在图像翻译任务中常用的损失函数有: (1)pixel-to-pixel 损失函数,在在相应的空间位置进行比较。包括了L1,L2和感知损失函数。 (2)Global 损失函数,例如Gram 损失函数能够通过比较整张图像的统计特性来很好的捕获风格和纹理。 (3)对抗损失函数(GAN) 存在问题: pixel-to-pixel 损失函数适用与生成图像和目标图像在空间上是对齐的情况,对于风格迁移等任务不是特别适合。 该损失函数的关键思想是将图像作为特征的集合,在忽视特征的空间位置,基于特征之间的相似性的基础上进行图像相似性的度量。我们在度量生成图像特征和真实图像特征相似性时考虑了生成图像的所有特征,因此将整张图像的语境(global image content)合并到了相似性度量中。两张图像的相似性是通过匹配的特征的相似性来定义的。 感知损失函数的一大优点是能够保证目标图像的外观。 Method 3.1 contextual similarity between images 将每一张图像表示为一系列高维的点(特征),如果两张图像相应的点是相似的则认为两张图像是相似的。我们认为如果两张图像大多数特征相似,则认为两张图像相似。 假设生成图像为xx,目标图像为yy,将其表示为一系列的点(特征,可以通过预训练的VGG来提取):X=xi,Y=yiX={ x_i },Y={ y_i },并假设Y=X=N|Y|=|X|=N(有NN个点)。我们为每一个yiy_iX=xiX={ x_i}中寻找最相似的xix_i,然后将所有yiy_i相应的特征相似值进行相加: CX(x,y)=CX(X,Y)=1NjmaxiCXi,j CX(x,y)=CX(X,Y)=\frac{1}{N}\sum_j \max_i CX_{i,j} 其中CXi,jCX_{i,j}定义的是xix_iyjy_j之间的相似性。 通过CXi,jCX_{i,j}将整张图像的语境(global image content)引入。 我们称xix_iyjy_j是contextually similar的,如果xix_iYY中其他点相比与yjy_j更加的接近。当xix_iYY中所有的点都不接近时,CXi,jCX_{i,j}会非常的的小。 设di,jd_{i,j}xix_iyjy_j的余弦距离,当di,j«di,k,kjd_{i,j}«d_{i,k},k \neq j时我们认为xix_iyjy_j是相似的。 pytorch 实现

Towards Multi-pose Guided Virtual Try-on Network

Contribution We introduce a novel task of virtual try-on conditioned on multiple poses, and collect a new dataset that covers different poses and various clothes. We propose a novel Multi-pose Guided Virtual Try-On Network (MG-VTON) that handles large pose varia- tions by disentangling the warping of clothes appear- ance and the pose manipulation in multiple stages. Specifically, we propose a pose-clothes guided human parsing network to first synthesize the human parsing with the desired clothes and pose, which effectively guides the virtual try-on to achieve reasonable results via the correct region parts.