(原)GAN之pix2pix
转载请注明出处:
https://www.cnblogs.com/darkknightzh/p/9175281.html
论文:
Image-to-Image Translation with Conditional Adversarial Networks
https://arxiv.org/pdf/1611.07004v1.pdf
代码:
官方project:https://phillipi.github.io/pix2pix/
官方torch代码:https://github.com/phillipi/pix2pix
官方pytorch代码(CycleGAN、pix2pix):https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
第三方的tensorflow版本:https://github.com/yenchenlin/pix2pix-tensorflow
pix2pix使用的是Conditional GAN(cGAN)。传统的GAN通过随机向量z学习到图像y:$G:z\to y$;cGAN则是通过输入图像x及随机向量z学到图像y:$G:\{x,z\}\to y$。其目标函数是
${{L}_{cGAN}}(G,D)={{E}_{x,y\sim {{p}_{data}}(x,y)}}\left[ \log D(x,y) \right]+{{E}_{x\sim {{p}_{data}}(x),z\sim {{p}_{z}}(z)}}\left[ \log (1-D(x,G(x,z))) \right]$
如下图所示,左侧为正样本,右侧为负样本。其中真实图像为y,真是图像对应的航空图像为x,这两张图像通过判别器,得到正样本。右图中将航空图像x通过生成器G,得到重建的图像G(x,z),而后将重构图像及真实航空图像输入判别器D,作为负样本。
由于以前的研究中发现,对于cGAN,增加一个额外的损失,如L2距离(真实图像和生成图像),效果更好。此时判别器的损失不变,生成器的损失变了。该论文中使用L1距离,原因是相比于L2距离,L1距离产生的模糊更小。
${{L}_{L1}}(G)={{E}_{x,y\sim {{p}_{data}}(x,y),z\sim {{p}_{z}}(z)}}\left[ {{\left\| y-G(x,z) \right\|}_{1}} \right]$
因而,pix2pix最终的目标函数是:
${{G}^{*}}=\arg \underset{G}{\mathop{\min }}\,\underset{D}{\mathop{\max }}\,{{L}_{cGAN}}(G,D)+\lambda {{L}_{L1}}(G)$
pix2pix未使用传统的encoder-decoder的模式(下图左侧),而是使用了U-Net(下图右侧)网络。U-Net论文为:U-net: Convolutional networks for biomedical image segmentation。U-net在decoder部分,每个conv层之前将输入和decoder对应的镜像层进行了拼接,因而输入的通道数增加了1倍,但是不严谨的说,输入的通道数不会影响卷积的输出维度,因而网络不会出问题。
网络中的判别器结构比较容易理解,生成器按照上面U-Net理解之后,也比较容易理解(开始没有理解U-Net,导致对生成器中encoder的理解有困难)。具体网络结构如下图所示(对应于第三方的tensorflow代码)。当输入为256*256的图像时,第一行为图像宽高(未考虑batchsize及channel),第二行中e1…e8和第三行d1…d8为generator函数中对应的变量。第三行d1t…d7t为generator函数中encoder的临时变量。其和e8…e2在channel维度进行concat后得到最终的d1…d7。最终d8经过tanh后,得到输入范围为[-1,1]之内的生成图像。
(原)GAN之pix2pix的更多相关文章
- pix2pix&Cycle GAN&pix2pix HD
这里简短地谈一下如题的三篇论文: 参考:https://blog.csdn.net/gdymind/article/details/82696481 (1)pix2pix:从一张图片生成另一张图片 p ...
- GAN生成图像论文总结
GAN Theory Modifyingthe Optimization of GAN 题目 内容 GAN DCGAN WGAN Least-square GAN Loss Sensi ...
- 生成对抗网络(GAN)的18个绝妙应用
https://juejin.im/post/5d3fb44e6fb9a06b2e3ccd4e 生成对抗网络(GAN)是生成模型的一种神经网络架构. 生成模型指在现存样本的基础上,使用模型来生成新案例 ...
- Generative Adversarial Networks overview(3)
Libo1575899134@outlook.com Libo (原创文章,转发请注明作者) 本文章主要介绍Gan的应用篇,3,主要介绍图像应用,4, 主要介绍文本以及医药化学其他领域应用 原理篇请看 ...
- Pytorch 分割模型构建和训练【直播】2019 年县域农业大脑AI挑战赛---(四)模型构建和网络训练
对于分割网络,如果当成一个黑箱就是:输入一个3x1024x1024 输出4x1024x1024. 我没有使用二分类,直接使用了四分类. 分类网络使用了SegNet,没有加载预训练模型,参数也是默认初始 ...
- 热点 | 四月最佳Github项目库与最有趣Reddit热点讨论
来源:Analytics Vidhya 编译:磐石 [磐创AI导读]:Github是全球最大的开源代码社区,Reddit是最受大家欢迎的热点讨论交流平台.接下来磐创AI将为大家带来四月份Github最 ...
- 生成对抗网络(Generative Adversarial Networks,GAN)初探
1. 从纳什均衡(Nash equilibrium)说起 我们先来看看纳什均衡的经济学定义: 所谓纳什均衡,指的是参与人的这样一种策略组合,在该策略组合上,任何参与人单独改变策略都不会得到好处.换句话 ...
- 学习GAN必须阅读的10篇论文
本文转载自:魔图互联.欢迎访问网站查看详细教程:Tensorflow(pytorch)系列教程 生成对抗网络是深度学习中最有趣和最受欢迎的应用之一.本文将列出 10 篇关于 GAN 的论文,这些论文详 ...
- 提高驾驶技术:用GAN去除(爱情)动作片中的马赛克和衣服
同步自我的知乎专栏:https://zhuanlan.zhihu.com/p/27199954 作为一名久经片场的老司机,早就想写一些探讨驾驶技术的文章.这篇就介绍利用生成式对抗网络(GAN)的两个基 ...
随机推荐
- oneinstack如何安装ssl证书和配置Let's Encrypt免费SSL证书教程汇总(转)
OneinStack包含以下组合:lnmp(Linux + Nginx+ MySQL+ PHP) LNMP安装SSL安全证书 部署HTTPS:https://www.gworg.com/ssl/309 ...
- ORACLE分页查询SQL语法——高效的分页
--1:无ORDER BY排序的写法.(效率最高)--(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ...
- python常用内建模块--datetime
datetime模块中的datetime类: 获取当前时间:datetime.now() 当前操作系统时区时间,date.utctime(UTC时间) 转换成时间戳:timestamp() 和具体时区 ...
- Codeforces 788C The Great Mixing
The Great Mixing 化简一下公式后发现, 问题变成了, 取最少多少数能使其和为1, bitset优化一下背包就好啦. 题解中介绍了一种bfs的方法没, 感觉比较巧妙. #include& ...
- Jenkins Pipline语法
引用自:http://baijiahao.baidu.com/s?id=1582812185263227836&wfr=spider&for=pc 引用自:https://www.cn ...
- 聊聊Java 8 Lambda 表达式
早在2014年oracle发布了jdk 8,在里面增加了lambda模块.于是java程序员们又多了一种新的编程方式:函数式编程,也就是lambda表达式.我自己用lambda表达式也差不多快4年 ...
- macos 下安装virtualenv,virtualenvwrapper,然后在pycharm中正常配置方法日志
1.安装virtualenv或virtualenvwrapper pip install virtualenv pip install virtualenvwraper 注意pip的版本号(查看 pi ...
- 条件随机场之CRF++源码详解-开篇
介绍 最近在用条件随机场做切分标注相关的工作,系统学习了下条件随机场模型.能够理解推导过程,但还是比较抽象.因此想研究下模型实现的具体过程,比如:1) 状态特征和转移特征具体是什么以及如何构造 2)前 ...
- js数据结构之集合的详细实现方法
数据结构中的集合,类似于数学中常说的集合,是一类数据的群组.集合与集合之间还存在交集,并集,补集的运算. ***集合为无序,集合内元素不重复 ***js的set基于数组, 使用SetClass为类名, ...
- 18,EasyNetQ-使用替代DI容器
EasyNetQ由独立组件组成. 它在内部使用称为DefaultServiceProvider的小型内部DI(IoC)容器. 如果您查看用于创建核心IBus接口实例的静态RabbitHutch类的代码 ...