李宏毅对抗生成网络 (GAN)教程(3)Unsupervised Conditional Generation

2023-11-01


之前做的都是监督学习,收集了很多每个图片都有对应的文字

本节是unsupervised的。
以风格迁移(领域迁移)为例:你可能有一些风景照和一些复古照,但他们彼此之间没有联系,你希望把风景照转换成复古照。
在这里插入图片描述

两大类做法

在这里插入图片描述
Approach 1: Direct Transformation 直接转

直接学习一个 generator ,输入x domain 的东西,想办法转成 Y domain。
如果要做这种 direct transformation,input output没有办法差太多。generator通常只能小改输入。如果是影像的话,它通常能够改的就是颜色质地。所以如果是画风转换,真实的图片转成画作,比较有可能用第一个方法来实现。假设要转的 input output差距很大,不是只有在颜色纹理上面的转换的话,就要用到第二个方法。

Approach 2: Projection to Common Space 投影到公共空间

先学习一个 encoder ,输入一张人脸的图,把人脸的特征抽出来,比如说这是男的,有戴眼镜的。之后输入Y domain 的decoder,生成动漫图。适用于输入与输出差距很大的情况。

一、Direct Transformation

在这里插入图片描述
我们要learn一个生成器,他可以将X domain的东西转换为 Y domain的东西;现在我们X domain的东西有一堆,Y domain的东西有一堆,但是合起来的pair没有。那生成器怎么知道给定X domain的东西输出Y domain的东西呢?

  • 这个时候就需要一个Y domain的判别器,这个判别器他看过很多Y domian的图片,所以给它一张image,他可以鉴别这个image是不是Y domian的image。
  • 生成器要做的就是想办法去骗过判别器,这样就生成Y domain的东西。
  • 但是还要注意生成器生成的东西要与输入有关;因此生成器不仅要骗过判别器,还要让输出的东西与输入有关

如何让输入与输出有关?

两种做法:

  1. 直接无视,不加额外constrain:如果generator不是很深的话,原图变化不会太大
    在这里插入图片描述
  2. 拿一个pre-trained好的network, 比如VGG。把生成器的输入和输出image,统统丢给这个pre-train好的网络,就会输出两个embedding vector;接下来在训练的时候,一方面生成器要骗过判别器,同时希望两个embedding的vector不要差太多。
    在这里插入图片描述
  3. Cycle GAN
  • 如果你想train一个X domain到Y domain的生成器,你需要同时train一个Y domain到X domain的生成器;第一个生成器用于将风景画变成复古画,第二个用于将复古画还原为原来一模一样的图;然后目标是两次转换以后的图越接近越好。(这个路径叫做cycle consistency)
  • 同时训练Y domain的判别器;
  • 重复上面的X domain转换为Y domain;我们再训练一个Y domain到X domain同样的结构;
  • 这就是cycle-GAN

除了骗过discriminator以外,generator得到了一个新的任务,要让 input 跟 output 越像越好。不可以在中间产生一个完全无关的图,这张图片必须要保留有原来输入的资讯。
在这里插入图片描述
双向的:把两个 generator 两个discriminator一起训练
在这里插入图片描述
在这里插入图片描述
隐藏建筑,还原后屋顶还是有黑点:generator 有很强的能力把资讯藏在人看不出来的地方,比如中间 image 的资讯可能是用非常非常小的数值藏在 image 里面,让你看不出来。这样也许这个屋顶上仍然是有黑点的,只是看不出来而已。

如果generator很擅长藏资讯并且自己解回来,cycle consistency中,中间的图片就有可能和原图差距很大了(尚待研究)。cycle consistency不一定有用,machine可能会自己学到一些方法去避开 cycle consistency 带给你的 constrain

几乎相同的方法:
在这里插入图片描述

Star GAN

在这里插入图片描述
只学习一个generator 就可以多个domain互转
在这里插入图片描述
一个discriminator,要做的事:鉴别图片是否真实、来自哪个domain
一个generator :输入一张图&目标domain,输出一张生成的图片
然后再给同样的generator,输入fake image和目标domain,合成回之前的图片,越接近越好

下面是实际的例子: 判别器做的事是首先判断它是real的还是fake;然后还有判断它是不是目标的domain;domain的表示是很多属性编码的,目标domain中:第一个10011黑色头发男性年轻、00000表示没有情绪、10表示只表示前面没有情绪;原始domian中:00101表示棕色女性年轻,00000表示没有情绪,10表示不显示情绪;

  • 首先让生成器将棕色女和目标domain转成黑色男,然后黑色男和原始domain通过同样的生成器转换为棕色女然后你希望输入和输出的棕色女越接近越好;(cycle consistency的loss)
  • 接下来你要确保输出的黑色男image是real的并且是和目标domain是一样的

在这里插入图片描述
并不是只有几个domain,而是每个domain都有一个编码,代表一些不同特征。discriminator要判断这些特征
在这里插入图片描述

二、Projection to Common Space

在这里插入图片描述
在这里插入图片描述
把输入的object投影到某一个latent的space,再用decoder把它合回來。需要一个X domian的encoder,看到一张真正的头像,就把它的特征抽出来······

unsupervised的问题只有X domain的图片。
在这里插入图片描述
可以让encoder和decoder组合成auto-encoder,输入一张Xdomain的图,让他reconstruction之前一样的图;Ydomain同理。它們都是要minimize reconstruction error。但是这样得到的两个 encoder和两个 decoder 之间没有任何关联。还可以把discriminator加进来,鉴别是否属于某一个风格,避免模糊。

E N X + D E X + D X = V A E   G A N ,   E N Y + D E Y + D Y = V A E   G A N EN_X+DE_X+D_X = VAE\ GAN, \ EN_Y+DE_Y+D_Y = VAE\ GAN ENX+DEX+DX=VAE GAN, ENY+DEY+DY=VAE GAN
在这里插入图片描述
由于两个auto-encoder是分开训练的,所以两者之间是没有关联的;例如当你丢个X domain的人脸进去,变成一个vector,当输如Y domain的encoder中时,可能出现一个截然不同的卡通人物。因为是分开训练的,所以在latent space中每个维度的表示属性是不一样的,如上面的auto-encoder用第一维代表性别,而下面一组则用其他代表性别;

解决方法:

1、共享参数

在这里插入图片描述encoder和decoder都有很多hidden layer,可以把不同domain的encoder、decoder的参数联系在一起。encoder前几层可以不同,**后几层要共用;decoder前几层要共用,**后几层可以不一样.

也许会因为最后几个 hide layer 的共用,让这两个 encoder 把 image压到latent space的时候,用同样的 dimension 来表示同样的人脸的特征。最极端的状况是两个encoder他们参数完全一样,只是给他们不同的 input 让他们知道现在是不同的domain.

2、加一个domain discriminator

在这里插入图片描述
还可以加一个domain的discriminator,判断属于vector来自X domain还是Y domain的image。两个 encoder的工作就是去骗过这个discriminator,让它无法判断来自哪一边,这就意味着两个domain变成vector时distribution是一样的(同样的维度就代表了同样的意思)

3、Cycle Consistency

在这里插入图片描述
使input和output接近,与cycle GAN类似。将一张image经过X encoder变成code;再经过Y docoder把它解回来;然后再丢给Y domain的encoder,再透过X domain的decoder把它解回来;然后希望input和output越接近越好。
但是cycle GAN中说X domain到y domain generator是一个network,没有把切成encoder跟decoder,但这里会把X domain到y domain的network切成x domain encoder和y domain decoder

4、Semantic Consistency

在这里插入图片描述
在latent space看consistency
使中间的code接近。不同之处:图像与图像对比时是基于像素的,不用考虑semantic像不像,只考虑表象(有什么区别?),而在中间code考虑时要考虑semantic像不像

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

李宏毅对抗生成网络 (GAN)教程(3)Unsupervised Conditional Generation 的相关文章

  • 百奥赛图财报解读:CRO业务枝繁叶茂,“千鼠万抗”遍地生花

    命运对勇士说 你无法抵御风暴 勇士回应 我就是风暴 这段对话是对中国创新药行业最好的诠释 回顾中国创新药近十年高速发展期 上千家创新药公司先后诞生 行业被资本推动一路 狂飙 根据医药魔方数据 创新药一级市场报道的融资额从2013年的36亿元
  • 计算机毕业设计-基于SSM的音乐播放器管理系统

    项目摘要 随着社会的发展 计算机的优势和普及使得音乐播放器管理系统的开发成为必需 音乐播放器管理系统主要是借助计算机 通过对首页 音乐推荐 付费音乐 论坛信息 个人中心 后台管理等信息进行管理 减少管理员的工作 同时也方便广大用户对个人所需
  • openGL增强表面细节--高度贴图

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 高度贴图原理 二 代码实现 1 c 主程序 2 着色器程序 运行效果 源码下载 前言 现在我们扩展法线贴图的概念 从纹理图像用于扰动法向量到扰乱顶点位置本身 实 际上

随机推荐

  • 深度学习环境配置5——windows下的torch-cpu=1.2.0环境配置

    深度学习环境配置5 windows下的torch cpu 1 2 0环境配置 注意事项 一 2021 10 8更新 学习前言 各个版本pytorch的配置教程 环境内容 环境配置 一 Anaconda安装 1 Anaconda的下载 2 A
  • SystemServer启动服务

    一 启动流程 SystemServer的在Android体系中所处的地位 SystemServer由Zygote fork生成的 进程名为system server 该进程承载着framework的核心服务 startSystemServe
  • 超强语义分割算法!基于语义流的快速而准确的场景解析

    论文地址 https arxiv org abs 2002 10120 代码地址 https github com donnyyou torchcv 该论文提出了一种有效且快速的场景解析方法 通常 提高场景解析或语义分割性能的常用方法是获得
  • C语言图形库——EasyX基本贴图

    在C语言的学习过程中 接触最多的就是黑乎乎的DOS窗口 这也是在消磨学习者的兴趣 学到最后可能还不知道C语言到底能做什么 难道就是输入输出数据吗 当然不是 C的用处很广泛 这里不做讨论 我们能不能用C语言做些好玩的东西 当然可以 我们可以做
  • 玩转oled屏(基于SPI协议)

    玩转OLED屏 一 简介 一 SPI协议简介 二 OLED简介 二 OLED滚动显示长字符 一 常用OLED滚屏命令 1 水平左 右移 2 垂直和水平移动 二 取字模 三 OLED屏滑动演示 三 OLED显示温湿度 总结 一 简介 一 SP
  • 爬虫漫游指南:加速乐__jsl_clearance破解

    爬虫漫游指南 JS破解之加速乐 本文会介绍加速乐cookie中的 jsl clearance的生成方式 纯粹技术讨论 如果侵害到任何人的利益 请联系本人邮箱yu haojia foxmail com 会立刻删除 如何识别加速乐 使用加速乐的
  • @RefreshScope工作原理

    本文主要从两个层次来分析 RefreshScope 1 加了 RefreshScope注解的bean是如何注入到IOC容器中的 2 触发 RefreshScope后IOC容器是如何工作的 注 本文不讨论 RefreshScope是如何触发的
  • Vue项目中使用Mapbox完成GIS可视化

    1 项目准备 首先准备好Vue项目 然后安装mapbox依赖 npm install save mapbox gl 项目结构 首先需要引用mapbox的css样式 虽然在index html里面直接引用cdn也有效果 但是不建议直接修改in
  • 计算机毕业论文选题

    今天给大家整理了关于计算机毕业设计选题 供大家参考 教学进度管理系统设计与实现 基于SSM的学科竞赛管理系统 办公管理系统设计与实现 库存管理系统设计与实现 人事管理系统设计与实现 财务管理系统设计与实现 基于jsp和ssm的客户关系管理系
  • 每天一个面试知识点Java(6)java中堆内存、栈内存、常量池详细讲解,学完就考同事

    Java程序是运行在JVM Java虚拟机 上的 因此Java的内存分配是在JVM中进行的 JVM是内存分配的基础和前提 Java程序的运行会涉及以下的内存区域 寄存器 JVM内部虚拟寄存器 存取速度非常快 程序不可控制 栈 存放基本类型的
  • Springboot框架整合jsp开发【干货满满】

    晚安独角兽 hello你好我是独角兽 很高兴你能来阅读 昵称是希望自己能不断精进 向着优秀程序员前行 博客来源于项目以及编程中遇到的问题总结 偶尔会有读书分享 我会陆续更新Java前端 后台 数据库 项目案例等相关知识点总结 感谢你的阅读和
  • verilog中的基本数据类型

    Verilog 最常用的 2 种数据类型就是线网 wire 与寄存器 reg 其余类型可以理解为这两种数据类型的扩展或辅助 一 线网 wire wire 类型表示硬件单元之间的物理连线 由其连接的器件输出端连续驱动 如果没有驱动元件连接到
  • 炫酷的登录界面--20230907

    Login Form with floating placeholder and light button HTML div class login box h2 Login h2 div
  • docker安装ElasticSearch8.x和Kibana8.x

    安装es和kibana 1 访问镜像官网 https hub docker com 搜索elasticsearch kibana进行查找 选择合适的版本 这里选择 elasticsearch 8 8 0和 kibana 8 8 0 2 下载
  • 编写程序,由键盘输入三个整数分别存入变量num1,num2,num3,对他们进行排序,并且从小到大输出。

    var num1 prompt 请输入数字1 var num2 prompt 请输入数字2 var num3 prompt 请输入数字3 prompt 返回的值类型是string 用 将num先转换成number再比较 if num1 lt
  • GitHub上README.md文章的上传图片和图片大小尺寸

    看到别人的仓库里的readme md有图文介绍 自己试了一下 发现并不成功 学习了一下 主要有以下几个步骤 1 上传图片到github 并且要Commit changes 2 返回仓库目录打开刚才上传的图片 复制此时的网页地址栏连接 例如这
  • CAN15765和1939协议

    1 15765协议介绍 简单的来说 15765协议指的是 基于CAN2 0A B 协议 也可以叫做ISO11898协议 链路层 硬件接口的 应用层 通讯协议 它用于实现通用的车辆诊断服务 ISO11898协议参考下图 参考搜索到的 CAN总
  • STC15F2K60S2单片机的串口通信程序及相关知识

    一 STC15F2K60S2单片机简介 中国深圳宏晶STC系列单片机是2005年推出中国本土的第一款具有全球竞争力的 且与MCS 51兼容的STC系列单片机 它完全兼容51单片机 是新一代增强型单片机 速度快 抗干扰性强 加密性强 带ADC
  • 解决WIN10 ,在资源管理器搜索文件时,必须按回车才能开始搜索的问题

    解决WIN10 在资源管理器搜索文件时 必须按回车才能开始搜索的问题 在使用WIN10中 在资源管理器中经常搜索文件 而每次搜索文件时 必须按回车才能开始搜索 不像WIN7那个 每输入一个字符 就自动搜索所输入的字符或字条串 如果偶尔用一下
  • 李宏毅对抗生成网络 (GAN)教程(3)Unsupervised Conditional Generation

    文章目录 两大类做法 一 Direct Transformation Cycle GAN Star GAN 二 Projection to Common Space 1 共享参数 2 加一个domain discriminator 3 Cy