最近看到PatchGAN很是好奇原理是什么,发现网上很多介绍的并不清楚.故墙外墙内来回几次,大概是清楚了.

PatchGAN

PatchGAN其实指的是GAN的判别器,将判别器换成了全卷积网络.
这么说并不严谨,PatchGAN和普通GAN判别器是有区别的,普通的GAN判别器是将输入映射成一个实数,即输入样本为真样本的概率.PatchGAN将输入映射为NxN的patch(矩阵)X,XijX_{ij}Xij​的值代表每个patch为真样本的概率,将XijX_{ij}Xij​求均值,即为判别器最终输出,XXX其实就是卷积层输出的特征图.从这个特征图可以追溯到原始图像中的某一个位置,可以看出这个位置对最终输出结果的影响.

有什么好处呢?直观上理解就可以了,普通GAN输出一个数,像是一言堂,PatchGAN输出一个矩阵,最终结果求平均,考虑到图像的不同部分的影响,就像考虑了多人的建议然后给出决定。

实际上,一些研究表明对于要求高分辨率、高清细节的图像领域中,普通GAN判别器并不适合,由此引入了PatchGAN,它的感受域对于与输入中的一小块区域,也就是说,XijX_{ij}Xij​对应了判别器对输入图像的一小块的判别输出,这样训练使模型更能关注图像细节。

感受域

对CycleGAN来说,判别器输出大小30x30x1,论文中却指出PatchGAN输入图像处理为70x70patches,就是根据判别器最终输出的特征图进行回溯,最终对应到输入图像70x70的区域.

为了便于理解,看下面的代码,其计算感受域大小

def f(output_size, ksize, stride):return (output_size - 1) * stride + ksizelast_layer = f(output_size=1, ksize=4, stride=1)
# Receptive field: 4
fourth_layer = f(output_size=last_layer, ksize=4, stride=1)
# Receptive field: 7
third_layer = f(output_size=fourth_layer, ksize=4, stride=2)
# Receptive field: 16
second_layer = f(output_size=third_layer, ksize=4, stride=2)
# Receptive field: 34
first_layer = f(output_size=second_layer, ksize=4, stride=2)
# Receptive field: 70print(f'最后一层感受域大小:{last_layer}')
print(f'第一层感受域大小:{first_layer}')
#最后一层感受域大小:4
#第一层感受域大小:70

fff即为计算卷积感受域的公式,最后一层的感受域即为卷积核大小4,那么这个卷积核能够感受到原始输入图像多大的范围呢?是70,也就是CycleGAN所说的70x70patches.

综上,PatchGAN并不神秘,其只是一个全卷积网络而已,只是最终输出是一个特征图X,而非一个实数.它就相当于对图像先进行若干次70x70的随机剪裁,将剪裁后图像输入普通的判别器,然后对所有输出的实数值取平均.

实现

啰嗦了这么多,并没有什么感觉,还是给大家上代码吧,最后附上一个PatchGAN实现,可以看到,只是几层卷积而已.

class NLayerDiscriminator(nn.Module):"""Defines a PatchGAN discriminator"""def __init__(self, input_nc, ndf=64, n_layers=3, norm_layer=nn.BatchNorm2d):"""Construct a PatchGAN discriminatorParameters:input_nc (int)  -- the number of channels in input imagesndf (int)       -- the number of filters in the last conv layern_layers (int)  -- the number of conv layers in the discriminatornorm_layer      -- normalization layer"""super(NLayerDiscriminator, self).__init__()if type(norm_layer) == functools.partial:  # no need to use bias as BatchNorm2d has affine parametersuse_bias = norm_layer.func != nn.BatchNorm2delse:use_bias = norm_layer != nn.BatchNorm2dkw = 4padw = 1sequence = [nn.Conv2d(input_nc, ndf, kernel_size=kw, stride=2, padding=padw), nn.LeakyReLU(0.2, True)]nf_mult = 1nf_mult_prev = 1for n in range(1, n_layers):  # gradually increase the number of filtersnf_mult_prev = nf_multnf_mult = min(2 ** n, 8)sequence += [nn.Conv2d(ndf * nf_mult_prev, ndf * nf_mult, kernel_size=kw, stride=1, padding=padw, bias=use_bias),norm_layer(ndf * nf_mult),nn.LeakyReLU(0.2, True)]nf_mult_prev = nf_multnf_mult = min(2 ** n_layers, 8)sequence += [nn.Conv2d(ndf * nf_mult_prev, ndf * nf_mult, kernel_size=kw, stride=1, padding=padw, bias=use_bias),norm_layer(ndf * nf_mult),nn.LeakyReLU(0.2, True)]sequence += [nn.Conv2d(ndf * nf_mult, 1, kernel_size=kw, stride=1, padding=padw)]  # output 1 channel prediction mapself.model = nn.Sequential(*sequence)def forward(self, input):"""Standard forward."""print(input.shape)return self.model(input)

参考

https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix/issues/39
https://github.com/ChengBinJin/V-GAN-tensorflow
https://blog.csdn.net/baidu_33256174/article/details/88726427

一文看懂PatchGAN相关推荐

  1. 一文看懂 AI 训练集、验证集、测试集(附:分割方法+交叉验证)

    2019-12-20 20:01:00 数据在人工智能技术里是非常重要的!本篇文章将详细给大家介绍3种数据集:训练集.验证集.测试集. 同时还会介绍如何更合理的讲数据划分为3种数据集.最后给大家介绍一 ...

  2. 一文看懂计算机视觉-CV(基本原理+2大挑战+8大任务+4个应用)

    2020-03-06 20:00:00 计算机视觉(Computer Vision)是人工智能领域的一个重要分支.它的目的是:看懂图片里的内容. 本文将介绍计算机视觉的基本概念.实现原理.8 个任务和 ...

  3. 一文看懂人脸识别(4个特点+4个实现步骤+5个难点+算法发展轨迹)

    2020-03-09 20:01:00 人脸识别是身份识别的一种方式,目的就是要判断图片和视频中人脸的身份时什么. 本文将详细介绍人脸识别的4个特点.4个步骤.5个难点及算法的发展轨迹. 什么是人脸识 ...

  4. 一文看懂卷积神经网络-CNN(基本原理+独特价值+实际应用)

    http://blog.itpub.net/29829936/viewspace-2648775/ 2019-06-25 21:31:18 卷积神经网络 – CNN 最擅长的就是图片的处理.它受到人类 ...

  5. 【深度学习理论】一文看懂卷积神经网络

    [深度学习理论]一文看懂卷积神经网络 https://mp.weixin.qq.com/s/wzpMtMFkVDDH6scVcAdhlA 选自Medium 作者: Pranjal Yadav 经机器之 ...

  6. python读取excelsheet-一文看懂用Python读取Excel数据

    原标题:一文看懂用Python读取Excel数据 导读:现有的Excel分为两种格式:xls(Excel 97-2003)和xlsx(Excel 2007及以上). Python处理Excel文件主要 ...

  7. ​【Python基础】一文看懂 Pandas 中的透视表

    作者:来源于读者投稿 出品:Python数据之道 一文看懂 Pandas 中的透视表 透视表在一种功能很强大的图表,用户可以从中读取到很多的信息.利用excel可以生成简单的透视表.本文中讲解的是如何 ...

  8. angular 字符串转换成数字_一文看懂Python列表、元组和字符串操作

    好文推荐,转自CSDN,原作星辰StarDust,感觉写的比自己清晰-大江狗荐语. 序列 序列是具有索引和切片能力的集合. 列表.元组和字符串具有通过索引访问某个具体的值,或通过切片返回一段切片的能力 ...

  9. 一文看懂深度学习——人工智能系列学习笔记

    深度学习有很好的表现,引领了第三次人工智能的浪潮.目前大部分表现优异的应用都用到了深度学习,大红大紫的 AlphaGo 就使用到了深度学习. 本文将详细的给大家介绍深度学习的基本概念.优缺点和主流的几 ...

最新文章

  1. matplotlib----初探------4折线图
  2. 定时任务 Crontab命令 详解
  3. oracle backup arch,一个数据库备份的例子
  4. 春天重试,因为冬天来了
  5. uniq 去除重复命令使用方法介绍
  6. 钉钉关键字回复功能_在家办公首日:钉钉、企业微信集体“崩溃”,只能选择 QQ、微信...
  7. ASP.NET初级传智播客.net第十季asp.net基础 文字总结(未完)
  8. Python是否支持短路?
  9. SAP系统的模块分类
  10. unity头顶状态制作_Unity中结合IK实现Lookat
  11. AHA加速器测试,安卓、IOS、windos、mac测试正常
  12. 30种已验证有效的WordPress博客网上赚钱方法
  13. 如何将CHM文件翻译成中文
  14. PacketTracer简单使用】
  15. python爬虫 - 爬取堆糖图片
  16. 原神 - 米游社 每日签到
  17. phalapi做登录检测_Phalapi使用教程
  18. 计算机云维护是做什么的,IT运维是什么?云时代下的运维人员是怎样的?
  19. html和php网站哪个好,HTML和PHP网站设计实例
  20. 新项目中用 C# or Java

热门文章

  1. [蓝桥杯]最后十天,冲刺进国赛
  2. 2020-01-15 Vba Union用法
  3. MFC-490CW 清零正解
  4. 大数据培训课程Yarn资源调度器作业提交全过程
  5. 启动3dMax时一直停留在启动屏幕并显示文本“starting 3ds Max…”怎么办?
  6. webpack 热更新原理解析
  7. 【头歌】科比投篮预测——可视化与探索性数据分析(一)
  8. electron-vue 软件自动更新
  9. 自然语言处理4——TF-IDF及特征提取
  10. 陕西省2019计算机软考试题,2019湖北襄阳计算机软考程序员考试真题及答案解析...