一、什么是pix2pix GAN
论文:《Image-to-Image Translation with Conditional Adversarial Networks》
pix2pix GAN主要用于图像之间的转换,又称图像翻译。图像处理的很多问题都是将一张输入的图片转变为一张对应的输出图片,端到端的训练。 如果要根据每个问题设定一个特定的loss function 来让CNN去优化,通常都是训练CNN去缩小输入跟输出的欧氏距离,但这样通常会得到比较模糊的输出。
普通的GAN接收的G部分的输入是随机向量,输出是图像; D部分接收的输入是图像(生成的或是真实的),输出是对或者错 。这样G和D联手就能输出真实的图像。
Pix2pixgan本质上是一个cgan,图片 x 作为此cGAN的条件, 需要输入到G和D中。 G的输入是x(x 是需要转换的图片),输出是生成的图片G(x)。 D则需要分辨出{x,G(x)}和{x, y}。
二、生成器的设计
对于图像翻译任务来说,它的G输入显然应该是一张图x, 输出当然也是一张图y, 可以不添加随机输入 z, 添加 z 可以带来多样性。对于图像翻译这些任务来说,输入和输出之间会共享很多 的信息。比如轮廓信息是共享的。
如果使用普通的卷积神经网络,那么会导致每一层都承载 保存着所有的信息,这样神经网络很容易出错。
加入跳跃连接的原因:论文作者提到,对于图像翻译这些任务来说,输入和输出之间会共享很多的信息。比如图像着色来说,轮廓信息是共享的。随着我们网络的层次的加深,这些共享的信息可能会丢失。
U-Net也是Encoder-Decoder模型,是变形的EncoderDecoder模型。 所谓的U-Net是将第i层拼接到第n-i层,这样做是因为第i层 和第n-i层的图像大小是一致的,可以认为他们承载着类似的信息。
没有z作为输入,网络仍然可以学习从x→y的映射,但会产生确定性输出。在GAN、DCGAN中,我们都使用随机的高斯噪声z作为生成器的输入,以带来多样性。 但在pix2pixgan论文中指出,此策略没有效果------生成器会学习忽略噪声输入,对于pix2pixgan模型,通过在生成器的各层之间添加 dropout来增加随机性,当然,这样的效果也很有限。
三、判别器的设计
对于判别器的设计问题,判别器的输入却应该发生一些变化,因为除了要生成真实图 像之外,还要保证生成的图像和输入图像是匹配的。 于是D的输入就做了一些变动。 D中要输入成对的图像。这类似于conditonal GAN。
Pix2Pix中的D被论文中被实现为Patch-D,所谓Patch,是 指无论生成的图像有多大,将其切分为多个固定大小的 Patch输入进D去判断。 这样设计的好处是: D的输入变小,计算量小,训练速度快。
为什么选择PatchGAN?(马尔可夫判别器)
为了能更好得对图像的局部做判断,作者提出PatchGAN的结构,也就是说把图像等分成patch,分别判断每个Patch的真假,最后再取平均!作者最后说,文章提出的这个PatchGAN可以看成所以另一种形式的纹理损失或样式损失。在具体实验时,不同尺寸的patch,最后发现70x70的尺寸比较合适。
四、损失函数的定义
鉴别器网络损失函数:
- 输入真实的成对图像希望判定为1
- 输入生成图像与原图像希望判定为0
生成器网络损失函数: 输入生成图像与原图像希望判定为1
对于图像翻译任务而言,G的输入和输出之间其实共享了很 多信息,比如图像上色任务,输入和输出之间就共享了边信 息。因而为了保证输入图像和输出图像之间的相似度,还加 入了L1loss。
用L1和L2 loss重建的图像很模糊,也就是说L1和L2并不能很好的恢复图像的高频部分(图像中的边缘等),但能较好地恢复图像的低频部分(图像中的色块)。
在pix2pix中,作者就是把L1 loss 和GAN loss相结合使用,因为作者认为L1 loss 可以恢复图像的低频部分,而GAN loss可以恢复图像的高频部分。
五、Pix2Pix论文中的要点总结
- cGAN,输入为图像而不是随机向量
- U-Net,使用skip-connection来共享更多的信息
- Pair输入到D来保证映射
- Patch-D来降低计算量提升效果
- L1损失函数的加入来保证输入和输出之间的一致性
六、实战代码
实战项目参考:GAN实战之Pytorch 使用pix2pixGAN生成建筑物图片
目前关于GAN应用,比较有意思的应用就是GAN用在图像风格迁移,图像降噪修复,图像超分辨率了,都有比较好的结果,详见pix2pix GAN 和cycle GAN。
pix2pixGAN有一个明显的缺点就是,在进行训练的时候必须提供成对的数据集。比如当我们想生成梵高风格的画时,梵高本人画的作品肯定是相对较少的,这个时候就可以考虑使用cycleGAN。参考如下:
一文看懂CycleGAN网络原理以及论文精华解读
GAN项目实战 使用CycleGAN将苹果变成橙子Pytorch版
版权归原作者 码农男孩 所有, 如有侵权,请联系我们删除。