Pix2Pix: Image

您所在的位置:网站首页 360度渲染 Pix2Pix: Image

Pix2Pix: Image

#Pix2Pix: Image| 来源: 网络整理| 查看: 265

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

摘要: Pix2Pix是一种基于cGAN的图像到图像转译的架构,其中生成器输入是一张我们需 要转换的图,输出是一张转译目标图;判别器输入一对图片配对 ( paired data),即转换图和 生成图的配对或者是转换图和原图的配对,输出这一配对是原图的概率。pix2pix算法能够实 现标签图到街景图,黑白图到彩色图,标签图到建筑图等任务的映射,是一个比较通用的图片 转译算法。 点个star:github.com/Bailey-24/p…

image.png

1. 前置知识 1.1 图片转译 Image translation

‌ 图片转译是基于一张输入图像得到想要的输出图像的过程,可以看做是图像和图像之间的 一种映射,例如轮廓图转彩色图,实现图像状态之间的转换,所以图片转译是一个图像生成任 务。

1.2 生成对抗模型GAN

‌ 对于图像生成任务,容易想到当时很流行的生成对抗模型 Generator Adversarial Networks (GAN). GAN包含生成器 G和判别器 D,具体流程如图1所示,G的作用是生成图 片,其输入是一个随机编码 z , 输出一个生成的图片;D 是用来判断的,其输入是生成器 G输 出的图片,输出这张图是真的概率,真的则输出1,假的输出0。

image.png 在训练过程中,两个网络的能力越来越强,即 G生成的图片越来越像真的图片,D也越来越会判断图片的真假。到了测试阶段,只使用 G作为图片生成器。 ‌ 下面是GAN的目标函数,也就是我们要在最大化 D的判断能力的前提下,G生成的图片要 骗过 D, 即最小化D对G的判断能力。

image.png

2. 算法原理

‌ 由于GAN算法的生长器是基础一个随机噪声生成图像,难以控制输出,所以需要一些约 束条件来指导图像生成,添加条件信息后的GAN称为Conditional GAN (cGAN). Pix2pix是 基于 cGAN实现图片转译,以用户输入的图片作为条件。 ‌ Pix2pix算法流程如图2所示,在图中以基于图像边缘生成图像为例。 ‌ 训练pix2pix数据需要一组配对的条件图像 x 和原始图像 y。

‌ 1) x 作为生成器 G的输入,得到生成图像G(x),然后将x 和 G(x)作为判别器的输入,得到 预测概率值,这个值表示输入是否是一对真实图像,概率值越接近1表示判别器越肯定输入的 是一对真实图像。 ‌ 2) 将原始图像y和条件图像x作为判别器D的输入,得到预测概率值。

image.png

2.1 目标函数

‌根据上面的的原理介绍,可以写出cGAN的目标函数,如下。

image.png 生成器 G 的作用就是迷惑 D,同时为了产生与ground truth很像的图像,缩小生成图像 和真实图像之间的差异,需要加上 L1 损失。

image.png 所以最终的目标函数可以表示为如下形式。

image.png

2.2 生成器 UNet

‌ 生成器采用UNet,因为作者认为输入和输出图像的外表面 (surface appearance) 应该不 同,而潜在的结构 (underlying structure) 应该相似,也就是输入和输出应该共享一些底层 信息,因此使用UNet这种跳层连接 (skip connection) 的方法,这里的跳层连接是第 i 层与第 n − i层相连,如下所示。

image.png

2.3 判别器 PatchGAN

‌ 因为目标函数中有 L1损失,这样能够较好地恢复图像的低频部分(图像中的色块),但 是不能很好地恢复图像的高频部分(图像中的边缘),所以为了更好地对图像的局部做判断, 作者用PatchGAN作为判别器,也就是把图像等分成patch大小,分别判断每个patch的真 假,最后再取平均,这个平均值作为整张图片的真假概率,而不是像GAN那样对整一张图片 判断真假。

image.png

3. 算法实现 3.1 实验环境

‌ 主机:ubuntu 18.04 ‌ 实现框架:jittor 和 pytorch ‌ ‌ 硬件 (服务器): 显卡:Nvidia TITAN V,12G ‌ CPU:Intel E5-2699 v4 @ 2.20GHz x88 ‌ 内存:220G

3.2 实现流程和核心代码

‌ 以下都是用jittor框架写的代码。 点个star:github.com/Bailey-24/p…

‌ 先训练判别器,后生成器前面;而且如果判别器太强大导致生成器学不到什么东西,可以 使判断器每两个epochs更新一次参数,或者调小判断器的学习率。 以下为训练核心代码。

image.png

image.png

4. 实验结果

实验目的:实现pix2pix算法并对比jittor和pytorch下的速度和效果,两种框架下的模 型架构和超参数相同。 ‌

在这种生成任务上,jittor跑的速度比pytorch快。在 facades 数据集上,训练集有 400张,jittor跑一个epoch平均需要24秒左右,pytorch则需要48秒左右,jittor比pytorch 足足快了两倍。 ‌ 但是用pytorch和jittor都是跑400 epochs情况下, pytorch的表现更加好一点,因为 jittor没学到一些外形建筑物,比如下图的柱子,而且jittor生成的图比pytorch模糊。用相同 的图片对pytorch和jittor测试,左边是原图,中间是生成图,右边是conditional image.

image.png

image.png

为了验证结果是否受训练时间影响,我在jittor运行800个epochs花费的时间跟在 pytorch运行 400个epochs时间差不多,以下是结果。结果跟运行400个epochs效果差不 多,比pytorch的效果要差。

image.png

image.png 后续工作:因为现实生活中很少这种配对的数据集,为了解决这个问题,后续工作提出了 Cycle-GAN,它只需要输入数据的一个集合和输出数据的一个集合,就可以做到样式迁移; pix2pix算法生成的图还是有点模糊,所以有人提出pix2pixHD算法来提高生成图片的质量。

5. 参考文献

‌ 1. pix2pix算法笔记 ‌ 2. 一文读懂GAN, pix2pix, CycleGAN和pix2pixHD ‌ 3. pix2pix算法原理与实现 ‌ 4. 官方代码 ‌ 5. jittor_GAN模型库 ‌ 6. pytorch_GAN模型库



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3