GAN在图像转译领域的应用-CycleGANPix2Pix

news2024/11/29 6:34:41

        在之前的博客中向大家介绍了生成对抗网络GAN的相关概念以及条件GAN,DCGAN相关内容,需要的小伙伴可以点击以下链接了解~生成对抗网络GAN_生成对抗网络流程_春末的南方城市的博客-CSDN博客生成对抗网络Generative Adversarial Networks(GAN)包含生成模型(generative model)和判别模型(discriminative model)两个模型。生成模型的任务是生成和原始数据相似的实例,判别模型的任务是判断给定的实例是真实的还是伪造的。https://blog.csdn.net/xs1997/article/details/130277123?spm=1001.2014.3001.5501

生成对抗网络-Conditional GAN_春末的南方城市的博客-CSDN博客判别器的功能从一个变成两个,一是判断G生成的图片符合真实样本的程度,二是判断输入图片符合给定条件y的程度。输入为两个即潜在变量和控制条件。G的输入为z和y,y为条件,通常为一个数值或者one-hot向量(表示某种类别or。GAN是无监督的,输出是完全随机的,比如在人脸上训练好的网络,最后生成什么样的人脸是完全没办法控制的。在输入的时候加入了条件信息,可以根据条件信息指定生成某。特征),z为潜在向量。https://blog.csdn.net/xs1997/article/details/130278117?spm=1001.2014.3001.5501         这次主要向大家介绍GAN的一些新奇好玩的应用,比如风格迁移,简笔画生成,图像上色等等,一起探究这些应用实现的背后原理是什么以及GAN是如何设计的,ok,接下来进入正题。

GAN内容回顾        

GAN

        首先简单回顾一下GAN的基本内容,输入噪声z分布到生成器中,然后生成器生成假的样本,假的样本和真实的样本同时输入到判别器中,判别器进行判别输入的图像是真的图像还是伪造的图像,生成器再根据判别器的反馈不断修正生成数据的分布,知道判别器无法判断输入的图像是真还是假,此时,训练过程达到平衡状态。

判别器训练

1.对生成器输入一段噪音,输出一个符合某一分布的假数据(如一组图片的分布);

2.从生成的分布中抽取一些数据,标记为0,从真实样本集中抽取一些数据,标记为1;

3.将数据喂给判别器进行训练,使判别器能够很好的分辨数据的真伪,判别器训练完成。

生成器训练

4.将生成器与判别器进行逻辑连接,生成器产生的假数据全部标记为1喂给判别器;

5.喂给网络的数据产生的误差,通过误差反向传播算法传递给训练器,修正生成器的参数;

6.不断训练判别器和生成器,直到判别器无法分辨假数据和真实数据。

CGAN

        Conditional GAN是无监督的,输出是完全随机的,比如在人脸上训练好的网络,最后生成什么样的人脸是完全没办法控制的。CGAN在输入的时候加入了条件信息,可以根据条件信息指定生成某具体的图像所以CGAN有监督的GAN

         输入为两个即潜在变量和控制条件。G的输入为z和y,y为条件,通常为一个数值或者one-hot向量(表示某种类别or特征),z为潜在向量。

         判别器的功能从一个变成两个,一是判断G生成的图片符合真实样本的程度,二是判断输入图片符合给定条件y的程度。

DCGAN 

        原始GAN使用的是多层感知机作为D和G,深度卷积生成对抗网络-DCGAN是将CNN与GAN的一种结合,把GAN的G和D换成了两个CNN,利用CNN的特征提取能力来提高生成网络的学习效果。生成器输入一个向量,经过反卷积尺寸扩张,通道数减少,最后生成一张假图像判别器D是一个分类器,会逐步将生成的图片压缩成特征向量,通过特征向量进行分类

生成器网络:

判别器网络:

OK,接下来进入GAN的应用~

GAN的应用

CycleGAN

         CycleGAN能做些什么呢,如上图,风景照片转化为莫奈映像派油画,莫奈映像派油画转化为风景照片,斑马转化成野马,野马转化为斑马,夏天转换为冬天,冬天转换为夏天等等这样一些非常好玩的应用都是通过CycleGAN来实现的,那它背后的原理是什么呢,接下来就和大家一起学习。      

         CycleGAN由两个GAN组成了一个循环结构所以交CycleGAN,此外还包含了两个非常重要的损失函数cycle-consistency loss,因此我们可以简单理解为CycleGAN就是由两个GAN和两个循环一致性损失组成的一个循环结构。X由G生成假的Y’,DY判断图像是真还是假,同样,Y由F生成假的X’,DX判断图像是真还是假。两个GAN相互作用,保证了生成的图像与目标图像域的风格一致。此时,还不能保证生成的内容一致,比如X是输入一个橘子照片,生成了一个莫奈风格的苹果照片,此时DY判别器判别只要是莫奈风格的照片都可能会输出一个比较高的分数。但是它们的内容是不同的,这肯定不是我们期待的。因此,通过cycle-consistency loss,x由G生成的图像y,再通过另一个生成器F生成输入的图像x',如果能确保x和x'的内容尽可能接近,那么就可以保证图像生成的内容也尽可能的类似。通过这样一种方式,使得生成的图像既完成了风格之间的迁移,又保证了生成的内容的相似。

        CycleGAN的损失函数同样由两个GAN的损失和两个cycle-consistency loss组成,由于形式是一样的,这里只介绍一个GAN的对抗损失。对抗损失可以保证生成器和判别器相互进化,进而可以保证生成器能产生更真实的图片。

对抗损失:

        判别器D的目标是最大化后面这两项,DY(y)表示判别器判断y是真实图像的概率,因此是越大越好,DY(G(x))表示判别器判断G(x)是真实图像的概率,G(x)是生成的假图像,因此概率是越小越好,那么1-DY(G(x))这一项就是越大越好。因此生成器D的目标是最大化后面这两项。

        生成器G和真实图像是没有关系的,之和生成图像有关,因此对于后面的第一项是不需要考虑的,生成器的目标是欺骗愚弄判别器,因此,对于生成器来说,DY(G(x))这一项是越大越好,那么1-DY(G(x))就是越小越好。

循环一致性损失:

         该损失通过计算生成的图像与输入图像的L1范数,也就是逐元素作差取绝对值再求和,这样保证生成器的输出图像与输入图像只是风格不同,而内容相同。

 

        所以总的目标函数就是由两个GAN的损失和cycle-consistency loss组成。

 再来看一些CycleGAN的效果~

Pix2Pix

        Pix2pix是基于cGAN实现图像翻译,因为cGAN可以通过添加条件信息来指导图像生成,因此在图像翻译中就可以将输入图像作为条件,学习从输入图像到输出图像之间的映射,从而得到指定的输出图像。而其他基于GAN来做图像翻译的,因为GAN算法的生成器是基于一个随机噪声生成图像,难以控制输出,因此基本上都是通过其他约束条件来指导图像生成,而不是利用cGAN,这是pix2pix和其他基于GAN做图像翻译的差异。

 

         生成器采用U-Net,以图像对的形式输入,这是在图像分割领域应用非常广泛的网络结构,能够充分融合特征;而原本GAN中常用的生成器结构是encoder-decoder类型,采用skip-connection使得提取的特征不仅包含底层的斑块,颜色,边缘轮廓等信息,也包含高层的高级语义纹理信息。

         x作为生成器G的输入(随机噪声z在图中并未画出,去掉z不会对生成效果有太大影响,但假如将x和z合并在一起作为G的输入,可以得到更多样的输出)得到生成图像G(x),然后将G(x)和x基于通道维度合并在一起,最后作为判别器D的输入得到预测概率值,该预测概率值表示输入是否是一对真实图像,概率值越接近1表示判别器D越肯定输入是一对真实图像。另外真实图像y和x也基于通道维度合并在一起,作为判别器D的输入得到概率预测值。        

目标函数:

         z表示随机噪声,判别器D的优化目标是第一个式子的值越大越好,而生成器G的优化目标是使得公式1的log(1-D(x,G(x,z))越小越好。用L1距离来约束生成图像G(x, z)和真实图像y之间的差异。可以看到,Pix2Pix的目标函数总体上和CycleGAN类似~

        再来看一些Pix2Pix的效果~

总结

1.Pix2pix模型必须要求成对数据(paired data)。

2.CycleGAN利用非成对数据进行训练(unpaired data)。

3.Pix2Pix是有监督的条件GANCycleGAN是非条件GAN

4.Pix2Pix通过CGAN的形式使得生成的图像和两个图像域内容保持一致。

5.CycleGAN通过cycle consistance loss来控制生成的图像和两个图像域内容保持一致。

        OK,这次的分享就先到这,主要向大家介绍了一下CycleGAN和Pix2Pix的相关内容,GAN还有很好新奇好玩的应用,比如StyleGAN,AnimeGAN等等,在后续的分享中也会向大家介绍,也欢迎大家一起交流学习~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/576480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Docker安装Guacamole远程网关并配置录像回放

一、参考 guacamole配置guacamole使用Docker安装guacamole在浏览器中播放录像guacamole插件下载 二、环境 操作系统:Anolis OS 8.6 QU1 docker版本:23.0.5 docker compose版本:v2.17.3 docker-image-guacamole:1.5.1 docker-image…

线段树C++详细讲解和个人见解

问题引入 假设有这样的问题&#xff1a;有n个数&#xff0c;m次操作&#xff0c;操作分为&#xff1a;修改某一个数或者查询一段区间的值 数据范围是&#xff08;1 < n, m<1e9)。 这种题大家一看就知道打暴力&#xff0c;但是一看数据范围就知道只能得部分。 我们之前…

STM32F407单片机HAL库CAN2不能接收数据解决方法

最近在使用stm32F407的片子调试can通信&#xff0c;直接在正点原子的代码上修改调试&#xff0c;调试can1的时候&#xff0c;基本没啥问题&#xff0c;收发都正常&#xff0c;使用查询模式和中断模式都可以。但是当修改到can2的时候&#xff0c;可以正常发送数据&#xff0c;但…

@Transactional注解作用,不生效的场景,事务回滚

目录 一、Transactional注解二、注解失效问题1、Transactional 应用在非 public 修饰的方法上2、Transactional 注解属性 rollbackFor 设置错误3、同一个类中方法调用&#xff0c;导致Transactional失效4、捕获异常 三、Transactional回滚1、Transactional2、Transactional(rol…

HUD(抬头显示)的方案介绍

目录 一、基于DLP3030-Q1的HUD电路设计 二、DLP3030-Q1的介绍 三、DLP3030-Q1工作原理 四、DLPC120-Q1DMD 显示控制器 五、TMS320F2802332 位 MCU 六、 HUD显示实例 HUD主板实例 七、HUD的软件环境 一、基于DLP3030-Q1的HUD电路设计 本设计采用了DLP3030-Q1 芯片组&…

H3C IPSec IKE野蛮模式

这里使用H3C模拟器。 H3C IPSec IKE野蛮模式&#xff0c;又称为IKE Main Mode&#xff0c;主要是在第一阶段&#xff08;Phase 1&#xff09;的过程中提供身份保护。它主要用于VPN隧道建立过程中的密钥交换。以下是配置步骤&#xff1a; 创建IKE提案&#xff1a; system-view…

vite源码分析之dev

最近研究socket, 所以就顺便看了一下vite源码, vite的热更新就是根据socket实现的, 所以正好记录一下. 前端任何脚手架的入口,肯定是在package.json文件中,当我们输入script命令时, 会经历什么样的步骤呢? 接下来我们一起来探索一下~~~ 入口-package.json 看下面就是一个普…

【C++】string介绍

String 前言为什么学习string类&#xff1f;string类的常用接口说明string类对象的常见构造析构函数赋值运算符重载[ ] 重载size和length迭代器字符串追加关于容量的函数insert和erasefindreplacec_strrfindfind_first_offind_first_not_offind_last_ofsubstrgetlineto_string …

linux+onenet可视化(图形化步骤)

文章目录 一、ONENET项目搭建1.1 ONENET注册1.2 创建产品与设备1.3 添加数据流 二、可视化配置 OneNET是由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接&#xff0c;快速完成产品开发部署&#xff0c;为智能硬件、智能家居产品提供完善的物…

孤儿僵尸守护进程

孤儿僵尸守护进程 1. 孤儿进程&#xff1a;2. 僵尸进程&#xff1a;3. 守护进程&#xff1a;(重点) 1. 孤儿进程&#xff1a; 父进程退出,还没退出的子进程就变成了孤儿进程 不要怕,还有爷爷进程init: 孤儿进程将被init进程所收养&#xff0c;并由init进程对它们完成状态收集…

认识HTTP协议---2

hi,大家好,今天继续为大家带来HTTP协议相关的知识 认识请求报头 &#x1f440;1.header &#x1f440;2.Content-Type,Content-Length &#x1f440;3.User-Agent &#x1f440;4.Referer &#x1f440;5.Cookie机制 小复习 进入正题之前我们先回忆一下之前的知识 http报…

牛客小白月赛73

A&#xff1a;最小的数字 A-最小的数字_牛客小白月赛73 (nowcoder.com) #include<bits/stdc.h> #define endl \n #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define int long long using namespace std; int n, m, k, A, B, N, M, K; const int ma…

22种transforms数据预处理方法

来源&#xff1a;投稿 作者&#xff1a;阿克西 编辑&#xff1a;学姐 建议搭配视频学习↓ 视频链接&#xff1a;https://ai.deepshare.net/detail/p_5df0ad9a09d37_qYqVmt85/6 1.数据增强&#xff08;data augmentation&#xff09; 数据增强又称为数据增广&#xff0c;数据…

docker安装单机nacos、rocketmq、reids、xxl-job、minio、elasticsearch、kibana、gogs、nginx

目录在右侧中部 启动容器报错 直接删除那个name后边的就可以 安装nacos 首先需要拉取对应的镜像文件&#xff1a;docker pull nacos/nacos-server 挂载目录&#xff1a; mkdir -p /mydata/nacos/logs/ #新建logs目录mkdir -p /mydata/nacos/init.d/ …

最小二乘估计心得

基本思想 存在一组观察值 ( x i , y i ) (x_i, y_i) (xi​,yi​)&#xff0c;其中 y i y_i yi​和 x i x_i xi​之间满足一定的线性关系&#xff0c;如 y a 0 f 0 ( x ) a 1 f 1 ( x ) . . . a m − 1 f m − 1 ( x ) y a_0 f_0(x) a_1 f_1(x) ... a_{m-1} f_{m-1}(x…

改进YOLOv5/YOLOv8:结合华为诺亚VanillaNet Block模块:深度学习中极简主义的力量

YOLOv5结合华为诺亚VanillaNet Block模块 介绍核心代码加入YOLOv5yaml文件:运行结果论文: VanillaNet: the Power of Minimalism in Deep Learning 代码: https://link.zhihu.com/?target=https%3A//github.com/huawei-noah/VanillaNet 介绍 基础模型的核心是 "更多…

Terra-Luna归零一年后:信任重建、加密未来路在何方?

本月既是Terra-Luna归零的一周年&#xff0c;也是FTX崩溃的第六个月&#xff0c;而这两个事件分别代表着2022年加密市场连环爆的开始与高潮&#xff0c;引发了加密行业15年历史上最可怕的生存危机。 尽管今年市场行情有所回暖&#xff0c;比特币开年至今涨幅70%&#xff0c;以太…

【办公类-19-04】办公中的思考——幼儿姓名笔画数统计(单字、全名字)

结果展示--笔画数统计 背景需求 中6班幼儿都能够书写学号&#xff08;基本没有镜像了&#xff09;&#xff0c;于是我开始尝试让幼儿熟悉自己的“姓氏”&#xff0c;并书写姓氏&#xff08;单字&#xff09;。4位幼儿能够默写全名&#xff0c;3位幼儿可以默写名字中的某一个字…

3*5差值结构参照1分类迭代次数比较

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入有3个节点&#xff0c;训练集AB各由5张二值化的图片组成&#xff0c;让A中有6个1&#xff0c;B中全是1&#xff0c;排列组合A &#xff0c;统计迭代次数并排序。共收集到了181个不同的迭代次数&#xff0c;其中有4个 A-B 迭…

创建web后端程序(servlet程序搭建)

目录 一、Servlet概述 二、创建servlet程序 1.创建类继承HttpServlet 2.重写HttpServlet类中 service、destroy、init方法 3.重新启动服务器 一、Servlet概述 Server Applet的简称&#xff0c;用Java编写的服务器端的程序。它运行在web服务器中&#xff0c;web服务器负责…