GAN系列之 pix2pixGAN 网络原理介绍以及论文解读

article/2025/8/27 4:47:04

一、什么是pix2pix GAN

论文:《Image-to-Image Translation with Conditional Adversarial Networks》

       pix2pix GAN主要用于图像之间的转换,又称图像翻译。图像处理的很多问题都是将一张输入的图片转变为一张对应的输出图片,端到端的训练。 如果要根据每个问题设定一个特定的loss function 来让CNN去优化,通常都是训练CNN去缩小输入跟输出的欧氏距离,但这样通常会得到比较模糊的输出。

 普通的GAN接收的G部分的输入是随机向量,输出是图像; D部分接收的输入是图像(生成的或是真实的),输出是对或者错 。这样G和D联手就能输出真实的图像。

Pix2pixgan本质上是一个cgan,图片 x 作为此cGAN的条件, 需要输入到G和D中。 G的输入是x(x 是需要转换的图片),输出是生成的图片G(x)。 D则需要分辨出{x,G(x)}和{x, y}。

二、生成器的设计 

对于图像翻译任务来说,它的G输入显然应该是一张图x, 输出当然也是一张图y, 可以不添加随机输入 z, 添加 z 可以带来多样性。对于图像翻译这些任务来说,输入和输出之间会共享很多 的信息。比如轮廓信息是共享的。

 如果使用普通的卷积神经网络,那么会导致每一层都承载 保存着所有的信息,这样神经网络很容易出错。

加入跳跃连接的原因:论文作者提到,对于图像翻译这些任务来说,输入和输出之间会共享很多的信息。比如图像着色来说,轮廓信息是共享的。随着我们网络的层次的加深,这些共享的信息可能会丢失。 

U-Net也是Encoder-Decoder模型,是变形的EncoderDecoder模型。 所谓的U-Net是将第i层拼接到第n-i层,这样做是因为第i层 和第n-i层的图像大小是一致的,可以认为他们承载着类似的信息。 

没有z作为输入,网络仍然可以学习从x→y的映射,但会产生确定性输出。在GAN、DCGAN中,我们都使用随机的高斯噪声z作为生成器的输入,以带来多样性。 但在pix2pixgan论文中指出,此策略没有效果------生成器会学习忽略噪声输入,对于pix2pixgan模型,通过在生成器的各层之间添加 dropout来增加随机性,当然,这样的效果也很有限。 

三、判别器的设计 

        对于判别器的设计问题,判别器的输入却应该发生一些变化,因为除了要生成真实图 像之外,还要保证生成的图像和输入图像是匹配的。 于是D的输入就做了一些变动。 D中要输入成对的图像。这类似于conditonal GAN。

Pix2Pix中的D被论文中被实现为Patch-D,所谓Patch,是 指无论生成的图像有多大,将其切分为多个固定大小的 Patch输入进D去判断。 这样设计的好处是: D的输入变小,计算量小,训练速度快。

为什么选择PatchGAN?(马尔可夫判别器)

      为了能更好得对图像的局部做判断,作者提出PatchGAN的结构,也就是说把图像等分成patch,分别判断每个Patch的真假,最后再取平均!作者最后说,文章提出的这个PatchGAN可以看成所以另一种形式的纹理损失或样式损失。在具体实验时,不同尺寸的patch,最后发现70x70的尺寸比较合适。

四、损失函数的定义

鉴别器网络损失函数:

  1. 输入真实的成对图像希望判定为1
  2. 输入生成图像与原图像希望判定为0

生成器网络损失函数: 输入生成图像与原图像希望判定为1

对于图像翻译任务而言,G的输入和输出之间其实共享了很 多信息,比如图像上色任务,输入和输出之间就共享了边信 息。因而为了保证输入图像和输出图像之间的相似度,还加 入了L1loss。

用L1和L2 loss重建的图像很模糊,也就是说L1和L2并不能很好的恢复图像的高频部分(图像中的边缘等),但能较好地恢复图像的低频部分(图像中的色块)。

pix2pix中,作者就是把L1 loss GAN loss相结合使用,因为作者认为L1 loss 可以恢复图像的低频部分,而GAN loss可以恢复图像的高频部分。

 五、Pix2Pix论文中的要点总结

  1. cGAN,输入为图像而不是随机向量
  2. U-Net,使用skip-connection来共享更多的信息
  3. Pair输入到D来保证映射
  4. Patch-D来降低计算量提升效果
  5. L1损失函数的加入来保证输入和输出之间的一致性

六、实战代码

实战项目参考:GAN实战之Pytorch 使用pix2pixGAN生成建筑物图片

目前关于GAN应用,比较有意思的应用就是GAN用在图像风格迁移,图像降噪修复,图像超分辨率了,都有比较好的结果,详见pix2pix GAN 和cycle GAN。

      pix2pixGAN有一个明显的缺点就是,在进行训练的时候必须提供成对的数据集。比如当我们想生成梵高风格的画时,梵高本人画的作品肯定是相对较少的,这个时候就可以考虑使用cycleGAN。参考如下:

一文看懂CycleGAN网络原理以及论文精华解读

GAN项目实战 使用CycleGAN将苹果变成橙子Pytorch版


http://chatgpt.dhexx.cn/article/hDdLJ4Pm.shtml

相关文章

pix2pix算法原理与实现

一、算法名称 Pix2pix算法(Image-to-Image Translation,图像翻译) 来源于论文:Image-to-Image Translation with Conditional Adversarial Networks 二、算法简要介绍、研究背景与意义 2.1介绍 图像处理、图形学和视觉中的许多问题都涉及到将输入图像转换为相应…

Java字符串按照字节数进行截取

本文为joshua317原创文章,转载请注明:转载自joshua317博客 Java字符串按照字节数进行截取 - joshua317的博客 一、问题 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个&#xff0…

JAVA中截取字符串中指定字符串

JAVA中截取指定字符串 举个例子,需要截取“abcdef”中的“cde”。 场景1:获取该字符串的下标。输出“cde”。 public static void main(String[] args) {// TODO Auto-generated method stubString data "abcdef";String out data.substri…

Java字符串截取 方法

在 String 中提供了两个截取字符串的方法,一个是从指定位置截取到字符串结尾,另一个是截取指定范围的内容。 方法的重载: public String substring(int beginIndex) {}public String substring(int beginIndex, int endIndex) {}例子演示&am…

java截取某个字符之前的字符串

1.截取"-"之前字符串 代码如下(示例): //java截取某个字符之前的字符串 public static void substringTest01(){String str "1627579713907351556-202302200018";//截取-之前字符串String str1 str.substring(0, str.…

java中字符串截取,调用substring()方法

substring() 方法返回字符串的子字符串。在java中 substring()方法有两种用法, 第一种 public String substring(int beginIndex) 第二种 public String substring(int beginIndex, int endIndex) 参数的意思 beginIndex -- 起始索引(包括&#xff09…

java截取指定字符串中的某段字符

利用字符串的substring函数来进行截取。 其中,substring函数有两个参数: 1、第一个参数是开始截取的字符位置。(从0开始) 2、第二个参数是结束字符的位置1。(从0开始) indexof函数的作用是查找该字符串中…

Java截取某个特殊字符前后的字符串

思路:想要根据某个特殊字符进行截取字符串,最终是要用到substring()函数,那么关键,是要找到特殊字符所在的位置,也就是要用到函数indexOf()和laseIndexOf()两个函数。 举例: String str "abc_def_gh…

java字符串截取后几位

字符串中截取后几位,或从后面数第几位到第几位! public class demo4 {public static void main(String[] args) {String str "(P)UA000110222(S)4123222200005";//截取后四位String substring str.substring(str.length() - 4);System.out.…

Java字符串截取,截取某个字符之前或者之后的字符串

提示:java截取某个字符之前或者之后的字符串 文章目录 一、java截取某个字符之前或者之后的字符串:1. 截取"_"之前字符串2. 截取"_"之后字符串 二、截取正数第二个"_"后面的内容 一、java截取某个字符之前或者之后的字符串: 1. 截取…

java实现爬虫_手把手教你从零开始用Java写爬虫

本文将手把手地教大家从零开始用Java写一个简单地爬虫! 目标 爬取全景网图片,并下载到本地 收获 通过本文,你将复习到: IDEA创建工程IDEA导入jar包爬虫的基本原理Jsoup的基本使用File的基本使用FileOutputStream的基本使用ArrayLi…

java爬虫 webcollector_Java爬虫-WebCollector | 学步园

爬虫简介: WebCollector是一个无须配置、便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫。 爬虫内核: WebCollector致力于维护一个稳定、可扩的爬虫内核,便于开发者进行…

Java爬虫高级教程-动力节点

作为网络爬虫的入门采用Java开发语言,内容涵盖了网络爬虫的原理以及开发逻辑,Java网络爬虫基础知识,网络抓包介绍,jsoup的介绍与使用,HttpClient的介绍与使用等内容。本课程在介绍网络爬虫基本原理的同时,注…

java 爬虫处理数据_Java语言实现爬虫实战

引言 网络上有许多信息,我们如何自动的获取这些信息呢?没错,网页爬虫~! 在这篇博文中,我将会使用java语言一步一步的编写一个原型的网页爬虫,其实网页爬虫并没有它听起来那么难。 紧跟我的教程,我相信你会在…

2021年Java爬虫技术教程(一小时实现)

Java爬虫开发 操作要点 正则表达式 Java网络通信:URL IO流 Map—HashMap 字符串操作 异常处理 项目已上传本人码云(gitee)传送门 如果这篇博客对你有一点点小帮助,希望您能给我来波一键三连; 前言 python优点&am…

java 爬虫大型教程(一)

java 爬虫大型教程(一) 写在开始前,既然是大型教程,那就从最初始的环境变量开始搭建说起。 电脑环境:我的电脑是macbook pro,因此系统环境变量配置是和Windows不一样的,如果你的电脑是Windows系统&#x…

java 爬虫 sessionid_java爬虫实战之模拟登陆

使用jsoup工具可以解析某个URL地址、HTML文本内容,是java爬虫很好的优势,也是我们在网络爬虫不可缺少的工具。本文小编带领大家使用jsoup 实现java爬虫模拟登陆,通过省力的API,很好的实现java爬虫模拟登陆。 一、使用工具&#xf…

java爬虫框架视频_Java爬虫博客采集系统视频教程

资源介绍 教程名称:Java爬虫博客采集系统视频教程xa0 教程目录: 【java爬虫博客采集系统】视频教程第00讲[20分钟] - 系统演示xa0 【java爬虫博客采集系统】视频教程第01讲[08分钟] - 博客爬虫模块Axa0 【java爬虫博客采集系统】视频教程第02讲[21分钟] …

Java版爬虫,爬网页,爬小说,完整教程,一看就会

昨天小编看到了一部不错的小说,但是没有办法下载,只能一页一页地看,于是想到了爬虫,现在Java也有了爬虫的框架,很简单,就算小白也能轻易入门,话不多说,直接上手。 1.首先引入相关依…

java-jsoup爬虫

1. 介绍 Jsoup是Java中的一个包,可以用于爬取页面中的数据 Jsoup爬取数据分为以下几个步骤: 1. 获取所爬取网页的Document对象 2. 找到所爬取数据所在的父级标签,将其从Document对象中解析出来,解析出来的内容放置在Element对象…