[记录]GAN学习之路[持续更新]

2023-11-02

目录

一、原始GAN

二、WGAN(GP)

三、pix2pix

四、CycleGAN


一、原始GAN

        通俗解释:

        GAN由生成器(Generator)和判别器(Discriminator)组成,生成器负责生成假的图片来骗过判别器,而判别器需要不断从真实图片上学习特征来提高自己的判别能力。

        GAN本质是一个博弈的过程,首先生成器G将输入的随机噪声通过神经网络生成一张图,判别网络D会对G生成的假图进行打分(分值越接近0表示图片越假,越接近1表示图片越真),从而引导G生成更真的图(既然判别器D要引导生成器G变得更好,那么D的判别能力起到至关重要的作用,因此判别器D也在不断学习真实图片的特征,从而提高自己的判别能力)

        理论解释:

        实际上,我们的真实样本是服从某种分布的(分布很复杂,无法用具体表达式写出),这里记为P_{data}^{},我们输入的噪声z通过G之后生成的图片也是服从某种分布的,这里记为P_{g},我们的目的是让P_{g}不断逼近 P_{data}^{},如下图所示。而如何才能知道这两种分布的相似程度(fGAN总结了各种衡量分布差异的方式),通过JS散度来衡量两种概率分布的差异divergence(后面简记为div)。因此目的就很明确,要让P_{g}P_{data}^{}的div最小(原始GAN是用JS散度来作为两种分布的div)。

         实际逼近过程中,我们不可能在全部样本上做处理,而是通过采样,在真实样本中采集m个样本,同时生成m个输入噪声z(这些噪声服从同一种分布),然后去使两个分布逼近,因此优化目标如下图G*所示。

        通过一系列验证,将优化目标G*变成

        之后,GAN的一系列操作均是为了寻找上述方程的最优解。关于训练过程中先训练k次D再训练G,这里给出很直观的答案,我们希望找到V(G0,D)的最大值(这里G0是固定的),这个最大值才是表征两个分布的div。

        存在的问题:

        由于 P_{g}和 P_{data}^{}最初开始训练时候可能是完全不重合的,而这种情况下JS散度来衡量两者的差异 div是一个定值log2,也就是此时即便  P_{g} 已经有在逼近P_{data}^{},但实际梯度是无法进行更新的(因为网络在这种情况认定两种状态是一致的),因此GAN很难达到收敛。

二、WGAN(GP)

        解决的问题:

        为了解决原始GAN使用JS散度衡量两种分布差异时带来收敛慢的问题,WGAN引入了一种新的度量差异的方式。

        通俗解释:

        已知P_{g}和 P_{data}^{}的分布,如何衡量两者之间的div。可以用一个土堆转移来形象说明该问题,要使分布P变成分布Q,如下图所示有很多种方案,WGAN将这种转移需要的最小平均距离定义为wasserstein distance。因此现在目标就是从多种方案中找到距离最小的一种。

        理论解释:

        上述问题可以用公式W(P,Q)来表示,B(\gamma)表示任意一种方案\gamma 对应的平均距离,W(P,Q)的目的就是从各种方案中找到最优方案(即平均距离最短)。

        将其转换到GAN的优化目标上,等同于给D增加一个一阶lipschitz条件(||f(x_{1})-f(x_{2}))||\leqslant K*||x_{1}-x_{2}||),目的是使得当输入变化较小的时候,D给出的分差不会太大,即变化更加平缓。

        给D增加限制后如何进行更新的,最初的WGAN通过Weight Clipping(即将参数w限制在某个区域内,实际是存在一些问题的),因此又引入了WGAN-GP,这种方法对D的限制条件进行了转换,变成||\triangledown D(x)||\leqslant 1,其中x是任意的,而实验表明只需要将x限制在 P_{g}和 P_{data}^{} 之间即可,因为目的是要让 P_{g}去逼近P_{data}^{},只有介于该部分之间的x才会影响结果,实验同时说明其实当D(x)梯度越接近1收敛越快。

        实际实现:

        WGAN相对于原始GAN主要有以下变动:

        1、将损失中log全部去掉了,拿V~来说,mean_D=\frac{1}{m}\sum_{i=1}^{m} D(x^{i})这部分相当于判别器D输出的均值,我们希望D(x^{i})越大越好,也就是meanD越大越好,由于采用的是梯度下降法,我们希望其负数越小越好(因此在代码中这部分loss应该等于-D(x).mean()),而后面那部分我们希望其越小越好(因此在代码中这部分loss应该等于D(x~).mean());在更新G时候,我们希望mean_G=\frac{1}{m}\sum_{i=1}^{m} D(G(x^{i}))越大越好,也就是其负数越小越好(因此在代码中这部分loss应该等于-D(G(z)).mean()),因此总loss=-mean_D-mean_G+mean_D~

        2、V~部分增加了weight clipping 或Gradient Penalty;

        3、去除了判别器D最后的sigmod;

三、pix2pix

        实现的功能:

        pix2pix实现图片到图片的转变,可以用来做画风迁移、图像上色、图像修复等等。

        代码实现细节:

        首先,在数据集方面,训练样本必须是成对的(其实这种样本获取是很不方便的,需要一一匹配,后续Cycle GAN中貌似解决了这个问题)。

        其次,对于生成网络G来说,采用了经典的U-net网络,本质就是一个编解码的过程。G的输入不再是噪声,而是fecade 图片,噪声通过dropout层体现,G生成的图片一方面要尽可能骗过D,另一方面要尽可能逼近fecade图片对应的真实图片(通过L1 loss体现) 。另一方面,对于判别器D来说,采用的Patch GAN,即D要对最终输出的N*N个Patch进行打分,D的训练损失与原始GAN相同。

        具体可参考我另一篇博文:PyTorch 实现Image to Image (pix2pix)

四、CycleGAN

        解决的问题:

        由于pix2pix对数据集的要求较高,需要成对的样本,而这种样本的获取往往需要很大的成本,CycleGAN可以实现两种风格的数据进行风格转变,只需要准备两种风格的样本(Domain X、Domain Y),两个domain之间并不需要一一对应。

        代码实现细节:

       在网络结构上,生成器G采用了ResNet结构,网络的padding方式(ReflectionPad)与原始GAN不同,判别器D与pix2pix类似,最终同样是对每个Patch进行打分;损失函数方面,判别器D的目的是尽可能区分真假图片,生成器G的损失包括三部分:GAN_loss、Cycle_loss、id_loss。其中,GAN_loss就是传统GAN的loss,目的是使G生成的图片尽可能真,Cycle_loss是重建的图片与原始图片之间的L1损失,id_loss是为了保证G不去随意改变图片的色调(即便判别器告诉你另外一种色调也服从Domain Y的分布,但为了仅仅改变风格不改变别的因素,因此引入了该损失)。

        具体可参考我另一篇博文:PyTorch 实现CycleGAN 风格迁移

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[记录]GAN学习之路[持续更新] 的相关文章

  • 4.20/21实习总结:k8s

    文章目录 什么是k8s 是个软件系统 容器集群管理工具 提供了应用部署 规划 更新 维护的一种机制 1 k8s组件 2 k8s对象 都可以在yaml文件中作为一种API类型来配置 3 namespace名称空间 通过名称空间在同一个物理集群
  • Android开发技巧(三)—— 创建定时任务

    每种手机都有自己的休眠策略 Android手机在长时间不操作时会自动让CPU进入睡眠状态 这就导致JAVA原生Timer的定时任务无法运行 所以我们需要借助Alarm唤醒CPU 一 Alarm机制 Alarm借助了AlermManager类

随机推荐

  • React 常用生命周期函数

    文章目录 React 生命周期图示 创建 constructor render componentDidMount 更新 render componentDidUpdate prevProps prevState 卸载 componentW
  • P2597 [ZJOI2012]灾难【支配树】

    题目链接 这是一道支配树的模板题了 然后写一下我初见支配树的理解 第一次碰到支配树是在昨天的多校第三场的1002 当时我推了个拓扑排序加上LCA的求差 dp a dp b dp lca a b 来解这个问题 然后为了处理出来每个的dp值 我
  • caret教程10:随机森林示例

    我们今天给大家演示下caret包做随机森林分类的一个小例子 同时也给大家看看做预处理和不做预处理两种情况下的模型表现 加载R包和数据 rm list ls library caret Loading required package ggp
  • Jmeter分布式测试的各种坑

    第一坑 启动压力机的时候 直接 jmeter server 会报如下错误 错误原因 127 0 0 1是本机 一个回路地址 没有指定地址 正确的启动方式 启动命令加一个参数 IP地址写压力机对应的地址 jmeter server D jav
  • python爬虫之逆向破解_Python爬虫:一个反爬 JS 逆向分析的例子

    挺久没发爬虫相关的教程啦 今天给大伙分享一下关于网站反爬对请求参数值的加密分析例子 主要还是看看思路 定位加密点 在某网站中进行登录请求 简单抓下包 点击登录按钮之后 可以在浏览器的控制台中看到相关的请求 接着往下拉 可以看到 POST 请
  • 实时CPU设计

    Patmos with Chisel https github com t crest patmos
  • Wireshark使用详解

    文章目录 wireshark简介 抓包原理 抓包 抓包窗口介绍 封包详细信息 Packet Details Pane 过滤信息介绍 显示过滤 抓包过滤 高级功能 数据流追踪 wireshark简介 wireshark是捕获机器上的某一块网卡
  • smart doc:自动生成接口文档拓展

    smart doc 作为一个接口文档生成工具 可以根据代码的java doc注释 生成接口文档 同时已经对接到Torna接口平台 鉴于大家用的接口平台五花八门 Torna的功能可能不符合大家的需求 研究下是否可以基于smart doc 拓展
  • 百度UE富文本编辑器设置自适应大小和滚动条等

    其实真特么简单 一开始还试着自己设置 弄来弄去都不合适 最后发现你想要的人家其实都有 你只需要设置就好了 后知后觉啊 你想要的效果可能在文件夹下config js里边都有 只需要在界面中实例化页面的那行代码里边设置就好了 代码如下 var
  • ubuntu下redis安装配置

    为什么80 的码农都做不了架构师 gt gt gt ubuntu下redis安装配置 一 redis介绍 redis是一个key value存储系统 与memcached类似 但是解决了断电后数据完全丢失的现象 支持数据类型有string
  • 数学-麦克劳林公式

    麦克劳林公式是泰勒公式 在 记 的一种特殊形式 在不需要余项的精确表达式时 n阶泰勒公式也可写成 由此得近似公式 误差估计式变为 在麦克劳林公式中 误差 R x 是当x 0时比x 高阶的无穷小 若函数f x 在开区间 a b 有直到n 1阶
  • DiffusionDet: Diffusion Model for Object Detection

    DiffusionDet Diffusion Model for Object Detection 论文概述 不同之处 整体流程 论文题目 DiffusionDet Diffusion Model for Object Detection
  • C#连接sql的两种方法

    数据库连接 方法1 using System using System Collections Generic using System Linq using System Text using System Threading Tasks
  • H - Nine Packs Kattis - ninepacks

    题目链接 题意就是在a数组中找出x个数 b数组中找出y个数 且x个数之和等于y个数之和 本想着用暴力的写法 但是出来之后不对 因为此题并不是连续的 还可以跳着取数 下面是WA的代码 include
  • 基于Web的网络在线考试系统

    基于Web的网络在线考试系统 一 系统简介 本系统是一种基于Web的网络在线考试系统 各个模块主要从JSP Servlet JDBC JavaBean四部分技术角度出发搭建框架 其中Servlet是运行在服务器端的程序 被Web服务器 To
  • YARN 状态机的原理和使用

    有了异步处理 为什么还需要状态机 可以保存对象当前的状态 当接收到一个事件后 可以根据不同的状态 可以方便的决定怎么处理 如接收到用户发送的KILL事件时 当Job的状态为正在初始化时 只要把启动的进程kill就可以 当Job的状态为正在运
  • 快手app sig3 42位、48位参数分析

    免责任声明 任何可操作性的内容与本文无关 文章内容仅供参考学习 如有侵权 损害贵公司利益 请联系作者 会立刻马上进行删除 在抓包的时候 会发现有几个非常重要的参数 sig 和 sig3 然后sig参数的计算逻辑大概就是对请求url 后面的参
  • 1:1病例对照匹配的Python实现步骤详解

    这周接到一个活 因为某个课题研究需要 须把脑卒中患者的名单和一份健康人 对照 名单按照 性别相同 乡镇地址相同 年龄相差3岁以内 作为匹配条件进行1 1的匹配 现将思考及实现的过程逐一记录并在此分享 希望能给大家有所借鉴与帮助 拿到这份数据
  • VM-基本功能

    VMware专题 介绍 VM 基本功能 一 VMware Tools基本特性 二 快照功能 三 Template技术介绍 1 用Template技术批量部署虚拟机 先创建自定义规范 2 部署虚拟机 四 创建虚拟机参数说明 五 虚拟机内存技术
  • [记录]GAN学习之路[持续更新]

    目录 一 原始GAN 二 WGAN GP 三 pix2pix 四 CycleGAN 一 原始GAN 通俗解释 GAN由生成器 Generator 和判别器 Discriminator 组成 生成器负责生成假的图片来骗过判别器 而判别器需要不