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

2023-10-12 11:59

本文主要是介绍GAN在图像转译领域的应用-CycleGANPix2Pix,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        在之前的博客中向大家介绍了生成对抗网络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等等,在后续的分享中也会向大家介绍,也欢迎大家一起交流学习~

这篇关于GAN在图像转译领域的应用-CycleGANPix2Pix的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/195667

相关文章

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件