GAN论文阅读——DCGAN

article/2025/8/26 19:39:23

论文标题:Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks
论文链接:https://arxiv.org/abs/1511.06434
参考资料:http://blog.csdn.net/liuxiao214/article/details/73500737
     http://blog.csdn.net/solomon1558/article/details/52573596
     https://buptldy.github.io/2016/10/29/2016-10-29-deconv/


DCGAN的框架

在以往的尝试中,将CNN应用于GAN,都没有获得成功。但是经过一系列探索,我们找到一类结构,可以在分辨率更高、更深的生成模型上稳定地训练。

Historical attempts to scale up GANs using CNNs to model images have been unsuccessful. However, after extensive model exploration we identified a family of architectures that resulted in stable training across a range of datasets and allowed for training higher resolution and deeper generative models.

我们的方法基于对CNN的以下改进:

  • 全卷积网络(all convolutional net):用步幅卷积(strided convolutions)替代确定性空间池化函数(deterministic spatial pooling functions)(比如最大池化)。允许网络学习自身upsampling/downsampling方式(生成器G/判别器D)。在网络中,所有的pooling层使用步幅卷积(strided convolutions)(判别网络)和微步幅度卷积(fractional-strided convolutions)(生成网络)进行替换。

  • 在卷积特征之上消除全连接层:例如:全局平均池化(global average pooling),曾被应用于图像分类任务(Mordvintsev et al.)中。global average pooling虽然可以提高模型的稳定性,但是降低了收敛速度。图1所示为模型的框架。

  • 批量归一化(Batch Normalization):将每个单元的输入都标准化为0均值与单位方差。这样有助于解决poor initialization问题并帮助梯度流向更深的网络。防止G把所有rand input都折叠到一个点。但是,将所有层都进行Batch Normalization,会导致样本震荡和模型不稳定,因此,生成器(G)的输出层和辨别器(D)的输入层不采用Batch Normalization。

  • 激活函数:在生成器(G)中,输出层使用Tanh函数,其余层采用 ReLu 函数 ; 判别器(D)中都采用leaky rectified activation(Maas et al., 2013) (Xu et al., 2015) 。

Architecture guidelines for stable Deep Convolutional GANs

  • Replace any pooling layers with strided convolutions (discriminator) and fractional-strided convolutions (generator).
  • Use batchnorm in both the generator and the discriminator.
  • Remove fully connected hidden layers for deeper architectures.
  • Use ReLU activation in generator for all layers except for the output, which uses Tanh.
  • Use LeakyReLU activation in the discriminator for all layers.

Fractionally Strided Convolution )

反卷积(Fractionally Strided Convolution )也被称为:Transposed Convolution or Deconvolution。
【此处参考 Transposed Convolution, Fractionally Strided Convolution or Deconvolution】
先申明几个概念:(详见卷积神经网络)

  • 二维离散卷积( N=2 N = 2
  • 方形的特征输入( i1=i2=i i 1 = i 2 = i
  • 方形的卷积核尺寸( k1=k2=k k 1 = k 2 = k
  • 每个维度相同的步长( s1=s2=s s 1 = s 2 = s
  • 每个维度相同的padding( p1=p2=p p 1 = p 2 = p

在介绍反卷积之前,我们先来看看卷积运算和矩阵运算之间的关系。

卷积和矩阵相乘
考虑如下一个简单的卷积层运算,其参数为 i=1,k=3,s=1,p=0 i = 1 , k = 3 , s = 1 , p = 0 ,输出 o=2 o = 2

对于上述卷积运算,我们把上图所示的3×3卷积核展成一个如下所示的[4,16]的稀疏矩阵 C C ,其中,非0元素 wi,j 表示卷积核的第 i i 行,第 j 列。

我们再把4×4的输入特征展成[16,1]的矩阵 X X ,那么 Y=CX 则是一个[4,1]的输出特征矩阵,把它重新排列2×2的输出特征就得到最终的结果,从上述分析可以看出卷积层的计算其实是可以转化成矩阵相乘的。值得注意的是,在一些深度学习网络的开源框架中并不是通过这种这个转换方法来计算卷积的,因为这个转换会存在很多无用的0乘操作,Caffe中具体实现卷积计算的方法可参考Implementing convolution as a matrix multiplication。

通过上述的分析,我们已经知道卷积层的前向操作可以表示为和矩阵C相乘,那么 我们很容易得到卷积层的反向传播就是和C的转置相乘。

反卷积和卷积的关系
全面我们已经说过反卷积又被称为Transposed(转置) Convolution,我们可以看出其实卷积层的前向传播过程就是反卷积层的反向传播过程,卷积层的反向传播过程就是反卷积层的前向传播过程。因为卷积层的前向反向计算分别为乘 C C CT,而反卷积层的前向反向计算分别为乘 CT C T (CT)T ( C T ) T 。所以它们的前向传播和反向传播刚好交换过来。

下图表示一个和上图卷积计算对应的反卷积操作,其中他们的输入输出关系正好相反。如果不考虑通道以卷积运算的反向运算来计算反卷积运算的话,我们还可以通过离散卷积的方法来求反卷积(这里只是为了说明,实际工作中不会这么做)。

同样为了说明,定义反卷积操作参数如下:

  • 二维的离散卷积( N=2 N = 2
  • 方形的特征输入( i1=i2=i i 1 ′ = i 2 ′ = i ′
  • 方形的卷积核尺寸( k1=k2=k k 1 ′ = k 2 ′ = k ′
  • 每个维度相同的步长( s1=s2=s s 1 ′ = s 2 ′ = s ′
  • 每个维度相同的padding ( p1=p2=p p 1 ′ = p 2 ′ = p ′ )

下图表示的是参数为( i=2,k=3,s=1,p=2 i ′ = 2 , k ′ = 3 , s ′ = 1 , p ′ = 2 )的反卷积操作,其对应的卷积操作参数为 ( i=4,k=3,s=1,p=0 i = 4 , k = 3 , s = 1 , p = 0 )。我们可以发现对应的卷积和非卷积操作其 ( k=k,s=s k = k ′ , s = s ′ ),但是反卷积却多了 p=2 p ′ = 2 。通过对比我们可以发现卷积层中左上角的输入只对左上角的输出有贡献,所以反卷积层会出现 p=kp1=2 p ′ = k − p − 1 = 2 。通过示意图,我们可以发现,反卷积层的输入输出在 s=s=1 s = s ′ = 1 的情况下关系为:

o=ik+2p+1=i+(k1)2p o ′ = i ′ − k ′ + 2 p ′ + 1 = i ′ + ( k − 1 ) − 2 p

Fractionally Strided Convolution
上面也提到过反卷积有时候也被叫做Fractionally Strided Convolution,翻译过来大概意思就是小数步长的卷积。对于步长 s>1 s > 1 的卷积,我们可能会想到其对应的反卷积步长 s<1 s ′ < 1 。 如下图所示为一个参数为 i=5,k=3,s=2,p=1 i = 5 , k = 3 , s = 2 , p = 1 的卷积操作(就是第一张图所演示的)所对应的反卷积操作。对于反卷积操作的小数步长我们可以理解为:在其输入特征单元之间插入 s1 s − 1 个0,插入0后把其看出是新的特征输入,然后此时步长 s s ′ 不再是小数而是为1。因此,结合上面所得到的结论,我们可以得出Fractionally Strided Convolution的输入输出关系为:

o=s(i1)+k2p o ′ = s ( i ′ − 1 ) + k − 2 p

更多关于卷积和反卷积的可视化理解:https://github.com/vdumoulin/conv_arithmetic

训练细节及实验

详见论文


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

相关文章

DCGAN整理总结

DCGAN整理总结 GAN什么是GAN&#xff1f;GAN重要参数及损失函数 DCGAN什么是DCGAN&#xff1f;DCGAN结构TensorFlow版本MINIST手写体生成模型Pytorch版本人脸生成模型 GAN 什么是GAN&#xff1f; GAN是一个教深度学习模型捕捉训练数据的布局来从该布局中生成新数据的框架。最早…

DCGAN论文翻译

UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS &#xff08;使用DCGAN的无监督表示学习&#xff09; ABSTRACT&#xff08;摘要&#xff09; In recent years, supervised learning with convolutional networks (CNNs) h…

机器学习中的DCGAN-Tensorflow:用于更稳定的训练

https://www.toutiao.com/a6666031263536644621/ 自从Ian Goodfellow的论文以来&#xff0c;GAN已应用于许多领域&#xff0c;但其不稳定性一直存在问题。GAN必须解决极小极大&#xff08;鞍点&#xff09;问题&#xff0c;因此这个问题是固有的。 马鞍点的滑稽表示 许多研究人…

DCGAN 源码解析

为什么写Blog现在还没找到理由。不过用心看下去你会觉得更有意义。 我们以生成图片为例子: G就是一个生成图片的网络&#xff0c;它接受一个随机的噪声z&#xff0c;然后通过这个噪声生成图片&#xff0c;生成的数据记做G(z)。D是一个判别网络&#xff0c;判别一张图片是不是…

pytorch搭建DCGAN

我们知道gan的过程是对生成分布拟合真实分布的一个过程&#xff0c;理想目标是让判别器无法识别输入数据到底是来源于生成器生成的数据还是真实的数据。 当然这是一个博弈的过程并且相互促进的过程&#xff0c;其真实的过程在于首先判别器会先拟合真实数据的分布&#xff0c;然…

tensorflow实现DCGAN

1、DCGAN的简单总结 【Paper】 &#xff1a; http://arxiv.org/abs/1511.06434 【github】 : https://github.com/Newmu/dcgan_code theano https://github.com/carpedm20/DCGAN-tensorflow tensorflow https://github.com/jacobgil/keras-dcgan keras https://github.c…

DCGAN TUTORIAL

Introduction 本教程将通过一个示例对DCGAN进行介绍。在向其展示许多真实名人的照片之后&#xff0c;我们将训练一个生成对抗网络&#xff08;GAN&#xff09;来产生新名人。此处的大多数代码来自pytorch / examples中的dcgan实现 &#xff0c;并且本文档将对该实现进行详尽的…

DCGAN原文讲解

DCGAN的全称是Deep Convolution Generative Adversarial Networks(深度卷积生成对抗网络)。是2014年Ian J.Goodfellow 的那篇开创性的GAN论文之后一个新的提出将GAN和卷积网络结合起来&#xff0c;以解决GAN训练不稳定的问题的一篇paper. 关于基本的GAN的原理&#xff0c;可以…

DCGAN

转自&#xff1a;https://blog.csdn.net/liuxiao214/article/details/74502975 首先是各种参考博客、链接等&#xff0c;表示感谢。 1、参考博客1&#xff1a;地址 ——以下&#xff0c;开始正文。 2017/12/12 更新 解决训练不收敛的问题。 更新在最后面部分。 1、DCGAN的…

深度学习之DCGAN

这一此的博客我给大家介绍一下DCGAN的原理以及DCGAN的实战代码,今天我用最简单的语言给大家介绍DCGAN。 相信大家现在对深度学习有了一定的了解,对GAN也有了认识,如果不知道什么是GAN的可以去看我以前的博客,接下来我给大家介绍一下DCGAN的原理。 DCGAN DCGAN的全称是Deep Conv…

对抗神经网络(二)——DCGAN

一、DCGAN介绍 DCGAN即使用卷积网络的对抗网络&#xff0c;其原理和GAN一样&#xff0c;只是把CNN卷积技术用于GAN模式的网络里&#xff0c;G&#xff08;生成器&#xff09;网在生成数据时&#xff0c;使用反卷积的重构技术来重构原始图片。D&#xff08;判别器&#xff09;网…

对抗生成网络GAN系列——DCGAN简介及人脸图像生成案例

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;往期回顾&#xff1a;对抗生成网络GAN系列——GAN原理及手写数字生成小案例 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞…

DCGAN理论讲解及代码实现

目录 DCGAN理论讲解 DCGAN的改进&#xff1a; DCGAN的设计技巧 DCGAN纯代码实现 导入库 导入数据和归一化 定义生成器 定义鉴别器 初始化和 模型训练 运行结果 DCGAN理论讲解 DCGAN也叫深度卷积生成对抗网络&#xff0c;DCGAN就是将CNN与GAN结合在一起&#xff0c;生…

torch学习 (三十七):DCGAN详解

文章目录 引入1 生成器2 鉴别器3 模型训练&#xff1a;生成器与鉴别器的交互4 参数设置5 数据载入6 完整代码7 部分输出图像示意7.1 真实图像7.2 训练200个批次7.2 训练400个批次7.2 训练600个批次 引入 论文详解&#xff1a;Unsupervised representation learning with deep c…

GANs系列:DCGAN原理简介与基础GAN的区别对比

本文长期不定时更新最新知识&#xff0c;防止迷路记得收藏哦&#xff01; 还未了解基础GAN的&#xff0c;可以先看下面两篇文章&#xff1a; GNA笔记--GAN生成式对抗网络原理以及数学表达式解剖 入门GAN实战---生成MNIST手写数据集代码实现pytorch 背景介绍 2016年&#…

Pix2Pix和CycleGAN

GAN的局限性 即便如此&#xff0c;传统的GAN也不是万能的&#xff0c;它有下面两个不足&#xff1a; 1. 没有**用户控制&#xff08;user control&#xff09;**能力 在传统的GAN里&#xff0c;输入一个随机噪声&#xff0c;就会输出一幅随机图像。 但用户是有想法滴&#xff…

PyTorch 实现Image to Image (pix2pix)

目录 一、前言 二、数据集 三、网络结构 四、代码 &#xff08;一&#xff09;net &#xff08;二&#xff09;dataset &#xff08;三&#xff09;train &#xff08;四&#xff09;test 五、结果 &#xff08;一&#xff09;128*128 &#xff08;二&#xff09;256*256 …

pix2pix、pix2pixHD 通过损失日志进行训练可视化

目录 背景 代码 结果 总结 背景 pix2pix(HD)代码在训练时会自动保存一个损失变化的txt文件&#xff0c;通过该文件能够对训练过程进行一个简单的可视化&#xff0c;代码如下。 训练的损失文件如图&#xff0c;对其进行可视化。 代码 #coding:utf-8 ## #author: QQ&#x…

Pix2Pix代码解析

参考链接&#xff1a;https://github.com/yenchenlin/pix2pix-tensorflow https://blog.csdn.net/stdcoutzyx/article/details/78820728 utils.py from __future__ import division import math import json import random import pprint import scipy.misc import numpy as…

pix2pix 与 pix2pixHD的大致分析

目录 pix2pix与pix2pixHD的生成器 判别器 PatchGAN&#xff08;马尔科夫判别器&#xff09; 1、pix2pix 简单粗暴的办法 如何解决模糊呢&#xff1f; 其他tricks 2、pix2pixHD 高分辨率图像生成 模型结构 Loss设计 使用Instance-map的图像进行训练 语义编辑 总结 …