深度学习_GAN_Pix2Pix
匹配数据的图像转换
Pix2Pix在图像到图像的转换这个领域中有很好的应用,它能够面向所有匹配图像数据集的训练和生成。
匹配数据集是指在训练集中两个互相转换的领域之间有很明确的一一对应数据。比如下面的三个例子:
在工程实践中研究者需要自己收集这些匹配数据,但有时同时采集两个不同领域的匹配数据是非常麻烦的,通常采用的方案是从更完整的数据中还原简单数据。
有了匹配数据集的存在,深度学习领域的研究者已经尝试使用卷积神经网路来解决这类“图像翻译问题”,但是最终的图像转换会非常模糊,因为卷积神经网络会试图让最终的输出接近所有相类似的结果。而以生成对抗网络为基础的Pix2Pix可以很好地避免这一问题。
Pix2Pix的理论基础
Pix2Pix采用了CGAN的思想,将输入的图像作为生成对抗网络的条件。在网络结构的设计上,Pix2Pix基本参考了DCGAN的结构,使用了卷积层、BN层以及ReLU激活函数。
CGAN相关知识
DCGAN相关知识
如上图所示,手绘鞋子和真实鞋子图像是一组配对数据,生成器通过作为条件的手绘数据生成了左图中的鞋子,然后我们将两者放入两者放入判别器中,判别器应该判断为假,而当我们将真实的配对数据输入时,判别器应该判断为真。
Pix2Pix的目标函数
Pix2Pix的目标函数由两部分组成,分别是CGAN的目标函数和L1损失函数。
CGAN目标函数:
LCGAN(G,D)=minGmaxDV(D,G)=Ex∼pdata(x)[logD(x,y)]+Ez∼pz(z)[log(1−D(x,G(z,x)))]L_{CGAN}(G,D)=\mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) = {\rm E}_{x\sim{p_{data}(x)}}[\log D(x,y)] + {\rm E}_{z\sim{p_z}(z)}[\log (1 - D(x,G(z,x)))]LCGAN(G,D)=GminDmaxV(D,G)=Ex∼pdata(x)[logD(x,y)]+Ez∼pz(z)[log(1−D(x,G(z,x)))]
上式中D(x,y)D(x,y)D(x,y)表示真实配对数据输入图像x与输出图像y对于判别器D的结果,而D(x,G(x,z))D(x,G(x,z))D(x,G(x,z))则是x经过生成器产生的图像G(x,z)G(x,z)G(x,z)对于判别器判断的结果。
L1损失函数:
LL1(G)=Ex,y,z[∣∣y−G(x,z)∣∣1]L_{L1}(G) = {\rm E}_{x,y,z} [||y - G(x,z)||_{1}]LL1(G)=Ex,y,z[∣∣y−G(x,z)∣∣1]
Pix2Pix最终的目标函数为:
G∗=argminGmaxDV(D,G)+λLL1(G)G^{*} = arg\mathop {\min }\limits_G \mathop {\max }\limits_D V(D,G) + \lambda L_{L1}(G)G∗=argGminDmaxV(D,G)+λLL1(G)
其中λ\lambdaλ为超参数,可以根据情况调节,当λ=0\lambda=0λ=0时表示不采用L1损失函数。
下图是不同目标函数状态下的测试结果:
可以看出L1 + CGAN的组合是最接近理想状态的。
PatchGAN的思想
我们可以总结出L1损失函数用于生成图像的大致结构、轮廓等,也可以说是图像的低频部分。而CGAN则主要用于生成细节,是图像的高频部分。
Pix2Pix认为既然GAN仅用于高频部分的生成,那么在训练过程中也没有必要把整个图像都拿出来做训练,仅需把图像的一部分作为判别器的接受区域即可,这也就是PatchGAN的思想。由于参数更少,PatchGAN可以使得训练过程变得更加高效,同时也可以针对更大的图像数据集进行训练。
下图为不同Patch进行测试的结果,其中1 * 1像素称为PixelGAN,全图像素称为ImageGAN。
可以看出70 * 70的PatchGAN取得了最好的成绩。
生成器结构设计
在生成器结构设计上,最简单的想法是下图左边的编/解码器网络,通过左侧的不断下采样到达中间的隐含编码层,然后再通过右侧的上采样来还原图像。这样的结构似乎少利用一些匹配图像数据中已有的信息。为了可以利用这样的信息,我们也可以使用下图右边的U-Net结构。它与自动编码器网络不同的是,左侧和右侧的网络追安添加了很多跳跃连接,可以将部分有用的重复信息直接共享到生成器中。
U-Net相关知识
下图比较了不同网络之间的差别,使用U-Net的L1+CGAN的方案表现最优
一些例子
深度学习_GAN_Pix2Pix相关推荐
- 从2012年到现在深度学习领域标志成果
2006年,Hinton 发表了一篇论文<A Fast Learning Algorithm for Deep Belief Nets>,提出了降维和逐层预训练方法,该方法可成功运用于训练 ...
- 各种优化算法公式快速回忆优化器-深度学习
本文是Deep Learning 之 最优化方法系列文章的RMSProp方法.主要参考Deep Learning 一书. 整个优化系列文章列表: Deep Learning 之 最优化方法 Deep ...
- 卷积神经网络之卷积计算、作用与思想 深度学习
博客:blog.shinelee.me | 博客园 | CSDN 卷积运算与相关运算 在计算机视觉领域,卷积核.滤波器通常为较小尺寸的矩阵,比如3×33×3.从这个角度看,多层卷积是在进行逐层映射,整 ...
- 矩阵的卷积核运算(一个简单小例子的讲解)深度学习
卷积运算:假设有一个卷积核h,就一般为3*3的矩阵: 有一个待处理矩阵A: h*A的计算过程分为三步 第一步,将卷积核翻转180°,也就是成为了 第二步,将卷积核h的中心对准x的第一个元素,然后对应元 ...
- 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法
深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...
- transformer bert seq2seq 深度学习 编码和解码的逻辑-重点
参考文献: 详解从 Seq2Seq模型.RNN结构.Encoder-Decoder模型 到 Attention模型 [NLP]Attention Model(注意力模型)学习总结(https://ww ...
- 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题
入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...
- 深度学习的分布式训练--数据并行和模型并行
<div class="htmledit_views"> 在深度学习这一领域经常涉及到模型的分布式训练(包括一机多GPU的情况).我自己在刚刚接触到一机多卡,或者分布式 ...
- 1-1 机器学习和深度学习综述-paddle
课程>我的课程>百度架构师手把手教深度学习>1-1 机器学习和深度学习综述> 1-1 机器学习和深度学习综述 paddle初级课程 王然(学生) Notebook 教育 初级深 ...
最新文章
- python 获取mp3时长(时间长度)
- 每日一皮:鼓励师招到了,原来是这样的...
- 小甲鱼OD学习第21讲
- python中循环遍历字典
- 【NLP】医学AI又一突破,微软开源生物医学NLP基准:BLURB
- Java8-如何构建一个Stream
- ConcurrentLinkedHashMap v 1.0.1发布
- basic与java,[求助]郁闷啊~!有没有会BASIC和JAVA的!帮帮忙呀!
- 种草 ES2020 八大新功能
- c#软件操作-cmd命令全解
- 程序的内存分配----变量在可执行文件中的内存区分配
- Spring.NET教程(十五)——事务传播行为(基础篇)
- sqlserver 触发器语法
- GJB150.18A-2009机械冲击试验测试要求
- 极域电子教室超级管理员密码
- sqlhelper java_java版sqlhelper
- excel 两列数据合并去重取并集
- html转换vmax,CSS里px、em、rem、%、vw、vh、vmin、vmax这些单位的区别
- 2019年日本上班的你必须知道的社会保障和源泉所得税
- 第三章均数估计与假设检验例题及软件实现(SAS/R/STATA/SPSS)
热门文章
- 软件测试价值提升之路--第3部分“展露锋芒”-第7章“产品质量屏障”-读书笔记
- StringUtils.isNumeric判断是否是数字字符串
- 最小二乘法在回归分析中的演算过程
- 计算机浮点表示法 教案,计算机组成原理——浮点数表示方法(示例代码)
- bmp24位转bmp16 (888转565)
- python数据处理——同一行或同一列的错位相减法
- 浏览器打开后桌面上不显示
- ubuntu20.04 nat模式
- 第三局 猥琐发育 黑铁晋级赛了 加油
- 利用MSTP+VRRP+HRP+IP-LINK实现双机热备