论文解读——如何生成高分辨率图像PGGAN

论文:Progressive Growing of GANs for Improved Quality, Stability, and Variation(2017.10)
作者:Tero Karras, Timo Aila, Samuli Laine, Jaakko Lehtinen
链接:https://arxiv.org/abs/1710.10196
代码:https://github.com/tkarras/progressive_growing_of_gans

文章目录

  • 1、算法概述
  • 2、背景知识
  • 3、Progressive Growing of GANs细节
    • 3.1 Increasing Variation using Minibatch Standard Deviation
    • 3.2 生成器和鉴别器的规范化
    • 3.3 Multi-scale Statistical Similarity for Assessing GAN Results
  • 4、实验


1、算法概述

本文提出了一种新的训练GAN网络的方法,通过逐步增加生成器和判别器的网络层数,让网络先从生成低分辨率开始,逐步过渡到生成高分辨率,这样可以使得训练速度加快也能使得训练更加稳定。另外,作者还提出了一种数据增强方法可以使得生成图像产生多样性,并改善了生成器和判别器之间的不良竞争关系。通过上述改进,作者构建了CELEB A数据集的更高质量版本。


2、背景知识

高分辨率图像的生成是困难的,因为更高的分辨率使得更容易将生成的图像与训练图像区分开来,从而大大放大了梯度问题。而且高分辨率由于训练显存限制必须采用小batchsize训练,这就进一步导致训练过程不稳定。所以作者的想法是可以逐步增长生成器和鉴别器,从更容易的低分辨率图像开始,并随着训练的进行添加引入更高分辨率细节的新层。


3、Progressive Growing of GANs细节

该论文主要贡献点就是提出了一种通过渐进式增加生成器和判别器网络层数来稳定训练GANs网络的训练方法,如下图所示,这种增量性质允许训练首先发现图像分布的大规模结构,然后将注意力转移到越来越精细的尺度细节上,而不必同时学习所有尺度。
在这里插入图片描述
PGGANs中生成器和鉴别器网络,它们是彼此的镜像,并且总是同步增长。在整个训练过程中,两个网络中的所有现有层都是可训练的。当向网络中添加新层时,新的层平滑地进入网络参与训练,如图下图所示。这个例子说明了从16 × 16图像(a)到32 × 32图像©的过渡。在过渡(b)期间,作者将在更高分辨率上操作的层视为残差块,其权重α从0到1线性增加。这避免了对已经训练有素的小分辨率层的突然冲击。
在这里插入图片描述
这种方式的优势是,可以让训练更加稳定,因为从小分辨率开始,网络需要学习更少的类信息和更少的模式。另一个优势是可以减小训练时间,随着GAN的逐渐增长,大多数迭代都是在较低的分辨率下完成的,根据最终输出分辨率的不同,可比的结果质量通常要快2-6倍。

3.1 Increasing Variation using Minibatch Standard Deviation

GAN倾向于只捕获训练数据中发现变化的子集,Salimans等人(2016)建议将“小批量可辨别性”(minibatch discrimination)作为解决方案。它们不仅计算单个图像的特征统计,还计算整个小批图像的特征统计,从而鼓励生成的小批图像和训练图像显示相似的统计。这是通过在鉴别器的末尾添加一个minibatch层来实现的,该层学习一个大张量,将输入激活投影到统计数据数组。为minibatch中的每个示例生成一组单独的统计数据,并将其连接到层的输出,以便鉴别器可以在内部使用统计数据。

作者大大简化了这种方法,同时也改善了变化。作者首先计算minibatch上每个空间位置的每个特征的标准差。然后,将这些估计值平均到所有特征和空间位置上,以得到一个单一的值。然后复制该值并将其连接到所有空间位置和minibatch上,从而产生一个额外的(恒定的)特征图。通过实验发现,把这一层插入到鉴别器的最后一层效果最好。

3.2 生成器和鉴别器的规范化

由于两个网络之间的不健康竞争,GAN容易产生信号强度的升级。大多数早期的解决方案通过使用批处理规范化(batch normalization)的变体来阻止这种情况。这些归一化方法最初是为了消除协变量移位而引入的。然而,作者并不认为这在GAN中是一个问题,因为作者认为GAN的实际需求是限制信号的大小和竞争。作者使用了一种不同的方法,它由两种成分组成,这两种成分都不包括可学习的参数。

  • EQUALIZED 学习率
    作者使用简单的正态分布N(0,1)进行权重初始化,然后在运行时显式缩放权重。这种方法确保动态范围和学习速度对于所有权重都是相同的。
  • Pixelwise Feature Vector Normalization in Generator
    为了防止由于竞争导致生成器和鉴别器中的幅度螺旋失控的情况,作者在每个卷积层之后将每个像素中的特征向量归一化为生成器中的单位长度。类似于局部响应归一化(local response normalization)的变体:
    在这里插入图片描述
    这里ε=10-8,N代表特征图数量,ax,y代表在像素(x,y)处原来的特征向量,而bx,y代表在像素(x,y)处normalization后的特征向量。作者通过实验发现,这种严厉的约束似乎并没有以任何方式损害生成器,在大多数数据集上,它并没有改变结果多少,但它在需要时非常有效地防止了信号幅度的上升。

3.3 Multi-scale Statistical Similarity for Assessing GAN Results

一个好的生成器将产生其局部图像结构与所有尺度上的训练集相似的样本。作者基于这个观点提出:通过考虑从生成图像和目标图像中提取的局部图像块的拉普拉斯金字塔(Laplacian pyramid)表示分布之间的多尺度统计相似性来研究这一点。多尺度统计从16×16像素的低分辨率开始,按照标准做法,金字塔逐渐加倍,直到达到全分辨率,每一个连续的水平编码的差异到前一层的上采样版本。

直观上,较小的Wasserstein距离表明patch的分布相似,这意味着在该空间分辨率下,训练图像和生成器样本在外观和变化上都是相似的。特别是,从最低分辨率的16×16图像中提取的补丁集之间的距离表明了大尺度图像结构的相似性。


4、实验

消融实验
在这里插入图片描述

收敛情况和训练速度
在这里插入图片描述
高分辨率图片(1024x1024)生成结果(下图全是生成的假人脸)
在这里插入图片描述
LSUN 数据集结果
LSUN BEDROOM类别的生成结果如下
在这里插入图片描述
LSUN其他类别图片生成结果
在这里插入图片描述

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

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

相关文章

前端必知的跨站脚本攻击(XSS)示例与解决方案

跨站脚本攻击(Cross-Site Scripting,通常缩写为XSS)是一种常见的网络安全漏洞,它允许攻击者将恶意脚本注入到其他用户会浏览的页面中。 XSS攻击的示例代码可以帮助我们了解攻击者可能使用的技术。但请注意,了解这些示例…

MyBatis中resultMap与resultType区别

在MyBatis中,resultType 和 resultMap 都是用来定义查询结果如何被映射到Java对象上的,但它们的使用场景和方式有所不同。 resultType 含义: resultType 是一个简化的结果映射方式,用于直接将查询结果映射到一个已知类型的Java Bean或基本…

idea删除分支并同步到gitLab以及gitLab上的分支删除

目录 idea删除分支并同步到gitLab 方法一(推荐) 方法二(命令行) gitLab上的分支删除 前言-与正文无关 ​ 生活远不止眼前的苦劳与奔波,它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&…

初入Node.js必备知识

Node.js因什么而生,作用是干什么? Node.js是一个用c和c打造的一个引擎,他能够读懂JavaScript,并且让JavaScript能够和操作系统打交道的能力 JavaScript 原本只能在浏览器中运行,但随着Web应用程序越来越复杂,仅靠客户端JavaScri…

绩效管理,不再只是一串数字!

在数字化转型的大潮中,绩效管理不再只是枯燥的数字统计。搭贝的绩效管理系统,为企业提供灵活多样的考核模式与工具,助力实现科学、高效的管理。无论是KPI(关键绩效指标)还是OKR(目标与关键成果)…

EHS是什么意思啊?EHS系统有什么作用?

当你走进一家现代化的工厂或企业,你可能会好奇:这些繁忙的生产线和高效运转的设备背后,是如何确保员工的安全、环境的保护和产品的质量的?答案可能就藏在“EHS系统”这个名词里。 那么,EHS是什么意思啊?它…

数据结构第08小节:双端队列

双端队列(deque,double-ended queue)是一种具有队列和栈特性的数据结构,允许在其两端进行插入和删除操作。在Java中,java.util.Deque接口就是双端队列的实现,而ArrayDeque和LinkedList是其中的具体实现类。…

如何根据经纬度精确计算两点之间的距离

以下代码用python2运行 #!/usr/bin/python #codingutf-8 from __future__ import print_function import sys reload(sys) sys.setdefaultencoding("utf-8") import mathdef haversine_distance(lon1, lat1, lon2, lat2):# 将纬度和经度从度转换为弧度lat1_rad mat…

【C#】函数方法、属性分文件编写

1.思想 分文件编写是面向对象编程的重要思想,没有实际项目作为支撑很难理解该思想的精髓,换言之,一两个函数代码量因为太少无法体现分文件编写减少大量重复代码的优势。 2.项目结构介绍 整项目的名称叫AutoMetadata,是一个基于W…

JAVA:文件防重设计指南

1、简述 在现代应用程序中,处理文件上传是一个常见的需求。为了保证文件存储的高效性和一致性,避免重复存储相同的文件是一个重要的优化点。本文将介绍一种基于哈希值的文件防重设计,并详细列出实现步骤。 2、设计原理 文件防重的基本思路…

Dns被莫名篡改的逆向分析定位(笔记)

引言:最近发现用户的多台机器上出现了Dns被莫名修改的问题,从系统事件上看并未能正常确定到是那个具体软件所为,现在的需求就是确定和定位哪个软件具体所为。 解决思路: 首先到IPv4设置页面对Dns进行设置:通过ProcExp…

setjmp和longjmp函数使用

这里用最简单直接的描述&#xff1a;这两组函数是用于实现类似vscode全局的标签跳转功能&#xff0c;setjmp负责埋下标签&#xff0c;longjmp负责标签跳转。 #include <stdio.h> #include <stdlib.h> #include <setjmp.h>jmp_buf envbuf1; jmp_buf envbuf2;…

HttpServer内存马

HttpServer内存马 基础知识 一些基础的方法和类 HttpServer&#xff1a;HttpServer主要是通过带参的create方法来创建&#xff0c;第一个参数InetSocketAddress表示绑定的ip地址和端口号。第二个参数为int类型&#xff0c;表示允许排队的最大TCP连接数&#xff0c;如果该值小…

【面试系列】软件工程师高频面试题及详细解答

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

JAVA每日作业day7.4

ok了家人们今天学习了Date类和simpleDateformat类&#xff0c;话不多说我们一起看看吧 一.Date类 类 java.util.Date 表示特定的瞬间 ( 日期和时间 ) &#xff0c;精确到毫秒。 1.2 Date类的构造方法 public Date(): 用来创建当前系统时间对应的日期对象。 public Date(long …

【java开发环境】多版本jdk 自由切换window和linux

win10 一、准备 各种版本的jdk&#xff0c;按自己的需要下载。 我这里是需要jdk17和jdk8。 1、jdk17 下载&#xff1a;Java Downloads | Oracle&#xff0c;选择exe后缀文件 2、jdk8下 载&#xff1a;Java Downloads | Oracle&#xff0c;选择exe后缀文件 二、详细步骤 1、…

Linux线程:编织并发的梦幻世界

目录 &#x1f6a9;引言 &#x1f6a9;听故事&#xff0c;引概念 &#x1f6a9;生产者消费者模型 &#x1f680;再次理解生产消费模型 &#x1f680;挖掘特点 &#x1f6a9;条件变量 &#x1f680;条件变量常用接口 &#x1f680;条件变量的原理 &#x1f6a9;引言 上一篇…

Redis分布式锁代码实现详解

引言 在分布式系统中&#xff0c;资源竞争和数据一致性问题常常需要通过锁机制来解决。Redis作为一个高性能的键值存储系统&#xff0c;因其提供的原子操作、丰富的数据结构以及网络延迟低等特点&#xff0c;成为了实现分布式锁的理想选择。本文将详细介绍如何使用Redis来实现…

打卡第2天----数组双指针,滑动窗口

今天是参与训练营第二天&#xff0c;这几道题我都看懂了&#xff0c;自己也能写出来了&#xff0c;实现思路很重要&#xff0c;万事开头难&#xff0c;希望我可以坚持下去。希望最后的结果是量变带来质变。 一、理解双指针思想 leetcode编号&#xff1a;977 不止是在卡尔这里…

一篇文章说清楚Filter(过滤器)、Interceptor(拦截器)和AOP(切面儿)

文章目录 前言一、Filter&#xff08;过滤器&#xff09;1.说明2.实现filterChain.doFilter() 3.order优先级4.解决跨域5.拦截返回错误信息JSON 二、Interceptor&#xff08;拦截器&#xff09;1.说明2.实现preHandlepostHandleafterCompletion 3.执行顺序图4.排除特定路径拦截…