pix2pixHD笔记

举报
风吹稻花香 发表于 2021/06/04 23:08:03 2021/06/04
【摘要】 pix2pixHD是pix2pix的重要升级,可以实现高分辨率图像生成和图片的语义编辑。对于一个生成对抗网络(GAN),学习的关键就是理解生成器、判别器和损失函数这三部分。pix2pixHD的生成器和判别器都是多尺度的,单一尺度的生成器和判别器的结构和pix2pix是一样的。损失函数由GAN loss、Feature matching loss和Content loss组成。...

pix2pixHD是pix2pix的重要升级,可以实现高分辨率图像生成图片的语义编辑。对于一个生成对抗网络(GAN),学习的关键就是理解生成器、判别器和损失函数这三部分。pix2pixHD的生成器和判别器都是多尺度的,单一尺度的生成器和判别器的结构和pix2pix是一样的。损失函数由GAN loss、Feature matching loss和Content loss组成。

 

pix2pixHD论文官方介绍视频

回顾pix2pix

pix2pix提供了一个统一的图像翻译(image-to-image-translation)的框架,整体的结构是conditional GAN。和原始conditional GAN不同的是,pix2pix生成器的输入没有噪声信息,只有条件信息。

生成器

生成器的结构是U net。有的GAN使用的是encoder-decoder模型作为生成器,但是相比之下,U-net效果会更好。因为上采样时加入了底层的特征信息。假设总共有n层,那么第i层和第n-i层之间有跳远连接。注意U-Net的跳远连接和ResNet的不同,和DenseNet相同,是按通道拼接的。

Encoder-decoder和U-Net的结构 图片来自原论文

 

Encoder-decoder和U-Net生成图片效果对比 图片来自原论文

判别器 PatchGAN

不同于直接判断图片是否是真实的,PatchGAN会分别判断N x N个patch是否为真,然后求平均值输出。L1损失可以使模型学到低频的特征,PatchGAN的结构可以使模型学到高频的特征(因为它关注的是局部的信息)。而且,当N比原图的尺寸小得多时依然有效。

这种方式类似马尔科夫随机场,因为超出一个patch半径的像素是无关的,而这和纹理(texture)、风格(style)的特点比较符合。因此PatchGAN可以理解为一种texture/style loss。

损失函数

传统的conditional-GAN的目标函数为

生成器最小化目标函数,判别器最大化目标函数。

一般会在cGANloss的基础上给生成器添加一个L2 loss,生成器不仅要骗过判别器,而且其生成的图片和ground truth之间的L2 loss要足够小。但是,pix2pix作者比较了L1 loss和L2 loss的区别,发现L2 loss生成的更模糊一点。因此pix2pix的目标函数为原conditional GAN的loss和L1 loss之和

不同loss的效果对比 图片来自原论文

Dropout与多样性

原始cGAN的输入是条件x和噪声z两种信息,这里的生成器只使用了条件信息,因此不能生成多样性的结果。因此pix2pix在训练和测试时都使用了dropout,这样可以生成多样性的结果。

pix2pixHD

pix2pixHD的改进点有两个:

  1. 高分辨率图像的生成。
  2. 图片的语义编辑。

高分辨率图片的生成

为了生成高分辨率的图片,使用了:

  • coarse-to-fine的生成器。
  • multi-scale的判别器。这个比较简单,就是在三个不同尺度上判别,然后取平均。
  • 更好的loss设计,总loss = GAN loss + Feature matching loss + Content loss。
  • 使用Instance boundary map进行训练。

coarse-to-fine的生成器 图片来自原论文

如上图,生成的流程:图片先经过一个生成器 [公式] 的卷积层进行2倍下采样,然后使用另一个生成器 [公式] 生成低分辨率的图,将得到的结果和刚刚下采样得到的图进行element-wise的相加,然后输出到 [公式] 的后续网络生成高分辨率的图片。

这么做的好处是,低分辨率的生成器会学习到全局的连续性(越粗糙的尺度感受野越大,越重视全局一致性),高分辨率的生成器会学习到局部的精细特征,因此生成的图片会兼顾局部特征和全局特征的真实性。如果仅使用高分辨率的图生成的话,精细的局部特征可能比较真实,但是全局的特征就不那么真实了。

图片来自原论文

pix2pix使用语义分割图进行训练,但是对于同一类的相邻物体,如上图(a)中的相连的汽车,它们之间是没有边界的,这样生成的时候会导致模糊。因此使用实例分割的图进行训练,因为它包含了相邻同一类别的不同物体之间的边界,也可以说instance-level semantic label map包含了每一个物体的单独的ID。

Instance boundary map如何得到?对semantic label map的每一个像素进行扫描,如果它和周围的四个像素的任意一个类别不一致,那么该像素位置为1,否则就是0。

Instance boundary map如何使用?把它和semantic label map的one hot向量拼接,然后送到生成器里面。

从下图中可以看到添加了instance map的网络对紧挨着的相同类物体的生成更加真实。

图片来自于原论文

图片的语义编辑

图片的语义编辑是一个新的有趣功能。从语义图到真实图的生成是一个一对多的映射,理想的模型应该可以根据同一个语义图生成真实且多样的图片。pix2pix的解决方法是在输入中增加一个低维特征通道。

  1. 首先和GAN网络一起训练一个编码器。
  2. 原始图片经过编码器,然后进行instance-wise average pooling操作,对每一个目标实例计算平均特征(Features),来保证每个目标实例特征的一致性。这个平均特征会被broadcast到该实例的每一个像素位置上。
  3. 输入图像比较多时,Features的每一类像素的值就代表了这类物体的先验分布。 使用编码器对所有训练图像提取特征,再进行K-means聚类,得到K个聚类中心,以K个聚类中心代表不同的风格。
  4. 在推理阶段,从K个聚类中心选择某一个,和语义标签信息、实例信息结合作为输入,这样就能控制颜色/纹理风格。

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/106452273

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。