一、什么是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的映射,但会产生确定性输出。我们之前使用随机的高斯噪声z作为生成器的输入,以带来多样性。 但在pix2pixgan论文中指出,此策略没有效果------生成器会学习忽略噪声输入,对于pix2pixgan模型,通过在生成器的各层之间添加 dropout来增加随机性,当然,这样的效果也很有限。
三、判别器的设计
对于判别器的设计问题,判别器的输入却应该发生一些变化,因为除了要生成真实图 像之外,还要保证生成的图像和输入图像是匹配的。 于是D的输入就做了一些变动。 D中要输入成对的图像。这类似于conditonal GAN。
Pix2Pix中的D被论文中被实现为Patch-D,所谓Patch,是 指无论生成的图像有多大,将其切分为多个固定大小的 Patch输入进D去判断。 这样设计的好处是: D的输入变小,计算量小,训练速度快。
四、损失函数的定义
鉴别器网络损失函数:
- 输入真实的成对图像希望判定为1
- 输入生成图像与原图像希望判定为0
生成器网络损失函数: 输入生成图像与原图像希望判定为1
对于图像翻译任务而言,G的输入和输出之间其实共享了很 多信息,比如图像上色任务,输入和输出之间就共享了边信 息。因而为了保证输入图像和输出图像之间的相似度,还加 入了L1 Los对于图像翻译任务而言,G的输入和输出之间其实共享了很 多信息,比如图像上色任务,输入和输出之间就共享了边信息。因而为了保证输入图像和输出图像之间的相似度,还加 入了L1 Loss
五、Pix2Pix论文中的要点总结
- cGAN,输入为图像而不是随机向量
- U-Net,使用skip-connection来共享更多的信息
- Pair输入到D来保证映射
- Patch-D来降低计算量提升效果
- L1损失函数的加入来保证输入和输出之间的一致性