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

article/2025/8/26 22:21:35

 本文长期不定时更新最新知识,防止迷路记得收藏哦!

还未了解基础GAN的,可以先看下面两篇文章:

GNA笔记--GAN生成式对抗网络原理以及数学表达式解剖

入门GAN实战---生成MNIST手写数据集代码实现pytorch

背景介绍 

2016年,Alec等人发表的论文《UNSUPERVISED REPRESENTATION LEARNING WITH DEEP CONVOLUTIONAL GENERATIVE ADVERSARIAL NETWORKS》(简称DCGAN),首次提出将卷积神经网络应用到GAN生成对抗网络的模型中,从而代替全连接层。这篇论文中讨论了GAN特征的可视化、潜在空间差值等。本文知识总结来源也是这篇论文。 

 从大型未标记数据集中学习可重用的特征表示一直是一个活跃的研究领域。在计算机视觉环境中,人们可以利用几乎无限量的未标记图像和视频来学习良好的中间表示,然后可以将其用于各种有监督的学习任务,如图像分类。建立良好图像表示的一种方法是训练生成性对抗网(GANs),然后将生成器和鉴别器网络的一部分重新用作监督任务的特征提取器。GANs为最大似然法提供了一种有吸引力的替代方法。此外,人们可以认为,他们的学习过程和缺乏启发式成本函数(如像素独立均方误差)对表征学习很有吸引力。众所周知,GANs的训练不稳定,常常导致发电机产生无意义的输出。在试图理解和可视化GANs学习的内容以及多层GANs的中间表示方面,已经发表的研究非常有限。 

一、什么是DCGAN?

DCGAN是GAN的一个变体,DCGAN就是将CNN和原始的GAN结合到一起,生成网络和鉴别网络都运用到了深度卷积神经网络。DCGAN提高了基础GAN的稳定性和生成结果质量。

二、与基础GAN相比,改进方面?

DCGAN主要是在网络架构上改进了原始GAN,DCGAN的生成器和鉴别器都利用CNN架构替换了原始GAN的全连接网络,主要改进之处有如下几个方面:

  1. DCGAN的生成器和鉴别器都舍弃了CNN的pooling层(池化层),鉴别器保留CNN的整体架构,生成器则是将卷积层替换成了反卷积层(ConvTranspose2d)
  2. 在鉴别器和生成器中使用了BN(Batch Normalization)层,加速模型训练,提升了训练的稳定性。但是在生成器的输出层和鉴别器的输入层不使用BN层【直接应用batchnorm到所有层会导致样本振荡和模型不稳定】
  3. 生成器网络中使用ReLU作为激活函数,最后一层使用Tanh()【使用有界激活(a bounded activation)可以让模型更快地学习,以饱和和覆盖训练分布的颜色空间】
  4. 鉴别器网络中使用LeakyReLU作为激活函数
  5. 使用Adam优化器,一阶矩估计的指数衰减率的值设置为0.5

三、论文中一些参数推荐

  1.  所有模型均采用小批量随机梯度下降(SGD)训练,Batch_size大小为128。
  2.  所有权重均根据零中心正态分布进行初始化,标准偏差为0.02。
  3. 在LeakyReLU中,斜率均设置为0.2。
  4. 使用了Adam优化器并调整超参数。基础GAN中建议的学习率0.001太高了,改为使用0.0002。
  5. 此外,将动量项β1保留在建议值0.9会导致训练振荡和不稳定性,而将其降低到0.5有助于稳定训练。 

四、论文中提及到的训练

论文中提到模型在三个数据集上对DCGANs进行了训练,即大规模场景理解(LSUN)、Imagenet-1k和一个新组装的人脸数据集。下面给出了每个数据集的训练细节

1.LSUN

随着生成图像模型样本的视觉质量的提高,对训练样本的过度拟合和记忆的担忧也随之增加。为了观察训练的模型如何随着更多数据和更高分辨率的生成而扩展,在包含300多万个训练示例的LSUN Bedrooms数据集上训练了一个模型。实验证明,模型的学习速度与其泛化性能之间存在直接联系。  【没有对图像进行数据增强】

上图为1个训练时期的样本

上图为 5个epoch后的结果

2.FACES

这个数据集有来自1万人的300万张图片。我们在这些图像上运行OpenCV人脸检测器,使检测保持足够高的分辨率,这为我们提供了大约350000个face boxes,我们用这些face boxes来训练。

3.IMAGENET-1K

使用Imagenet-1k 作为无监督训练的自然图像源,We train on 32 × 32 min-resized center crops

五、对DCGAN能力的证明

评估无监督表示学习算法质量的一种常用技术是将其作为有监督数据集的特征提取器应用,并评估基于这些特征的线性模型的性能。

使用GANS作为特征提取器对CIFAR-10进行分类(DCGAN不是在CIFAR-10上预训练的,而是在Imagenet-1k上训练的,这些特征用于对CIFAR-10图像进行分类 )实验结果如下图所示

 当使用大量特征图(4800)时,K-means可达到80.6%的准确率,DCGAN达到了82.8%的准确率,超过了所有基于K均值的方法。值得注意的是,与基于K-means的技术相比,鉴别器的特征图要少得多(最高层为512),但由于有4×4个空间位置的多个层,鉴别器确实会导致更大的总特征向量大小。DCGANs的性能仍然低于样本CNN。

六、操纵生成器表示 

1.忘记画某些物体

除了鉴别器学习的表征外,还有一个问题,即生成器学习什么表征。采样的质量表明,生成器可以学习主要场景组件(如床、窗、灯、门和其他家具)的特定对象表示。使用这个简单的模型,从所有空间位置删除权重大于零的所有特征图。然后在去除和不去除特征映射的情况下生成随机新样本。从下图可以看到,上面一行图片都是有窗户的,下面一行通过语义遮罩的方式拿掉了窗户,有趣的是网络大多忘记在卧室中绘制窗口,而是用其他对象替换它们。  

 2.人脸样本的矢量算法

简单的算术运算揭示了表征空间中丰富的线性结构,一个典型的例子表明

the vector(”King”) - vector(”Man”) + vector(”Woman”) 

将该思想引入到图像生成当中,实验结果效果如下:

 

 

 一个“转向”向量是从四个平均的左看和右看的人脸样本中创建的。通过向随机样本添加沿该轴的插值,我们能够可靠地变换它们的姿势。 

七、结论和今后的工作

文章提出了一套更稳定的生成性对抗网络训练体系结构,并证明了对抗性网络能够学习良好的图像表示,用于监督学习和生成性model。但是仍然存在一些不稳定性——随着模型训练时间的延长,它们有时会将滤波器子集折叠为单一振荡模式。需要进一步的工作来解决这一不稳定因素。我们认为,将这个框架扩展到其他领域,比如视频(用于帧预测)和音频(用于语音合成的预训练功能)应该是非常有趣的。进一步研究学习到的潜在空间的性质也会很有趣。 当我们训练一个模型的数据集不够的时候,非常建议大家利用DCGAN来对我们的实验数据集进行扩充!

 八、应用

1. GAN本身是一种生成式模型,所以在数据生成上用的是最普遍的,最常见的是图片生成,常用的有DCGAN WGAN,BEGAN,个人感觉在BEGAN的效果最好而且最简单。

2. GAN本身也是一种无监督学习的典范,因此它在无监督学习,半监督学习领域都有广泛的应用,比较好的论文有Improved Techniques for Training GANs、Bayesian GAN(最新)

3. 不仅在生成领域,GAN在分类领域也占有一席之地,简单来说,就是替换判别器为一个分类器,做多分类任务,而生成器仍然做生成任务,辅助分类器训练。

4. GAN可以和强化学习结合,目前一个比较好的例子就是序列对抗网络Seq GAN。

5. 目前比较有意思的应用就是GAN用在图像风格迁移,图像降噪修复,图像超分辨率了,都有比较好的结果,详见pix2pix GAN 和cycle GAN。但是GAN目前在视频生成上和预测上还不是很好。

6. 目前也有研究者将GAN用在对抗性攻击上,具体就是训练GAN生成对抗文本,有针对或者无针对的欺骗分类器或者检测系统等等,但是目前没有见到很典范的文章。

九、其他知识

1.无监督表征学习的经典方法是对数据进行聚类(例如k-means),另一种方法是训练自动编码器(auto-encoder)还有深度置信网络。

2.生成图像模型大致可以分为两类:参数模型和非参数模型

非参数模型:通常从现有图像数据库中进行匹配,通常是匹配patch of images

参数模型:①生成图像的变分采样方法(variational sampling),缺点是会出现模糊图像

                  ②使用迭代的正向扩散过程生成images

                  ③GAN生成,但是噪声多。拉普拉斯金字塔扩展后得到了更高质量图像,但仍有噪声产生的影响。

                  ④递归网络和反卷积网络方法

3. 判别式模型: • 线性回归 • 逻辑回归 • K近邻(KNN) • 支持向量机(SVM) • 决策树 • 条件随机场(CRF) • boosting方法

4. 生成式模型:  • 朴素贝叶斯 • 混合高斯模型 • 隐马尔科夫模型(HMM) • 贝叶斯网络 • 马尔可夫随机场 • 深度信念网络(DBN) • 变分自编码器

十、数据集不足时的处理方法

具体到图像分类任务中,在保持图像类别不变的前提下,可以对训练集中的每一幅图像进行一下变换:

  1. 一定程度内的随机旋转、平移、缩放、剪裁、填充、左右翻转等,这些变换对应着同一个目标在不同角度的观察结果。
  2. 对图像中的像素添加噪声扰动,比如椒盐噪声、高斯白噪声等。
  3. 颜色变换。
  4. 改变图像的亮度、清晰度、对比度、锐度等。

       除了直接在图像空间进行变换,还可以先对图像进行特征提取,然后在图像的特征空间内进行变换,利用一些通用的数据扩充或上采样技术,例如SMOTE(Synthetic  Minority Over-sampling Technique)算法。抛开上述这些启发式的变换方法,使用生成模型也可以合成一些新样本,例如当今非常流行的生成式对抗网络模型。

十一、实战

DCGAN实战(1)---生成MNIST手写数字代码实现pytorch版

十二、总结

如果将目前对于GAN的研究方向进行划分的话,可以大致分为以下两个方向:

1.对各种GAN的实际应用研究,比如有意思的应用在图像风格的迁移:pix2pixGAN和CycleGAN

可参考:1.GAN系列之 pix2pixGAN 网络原理介绍以及论文解读

              2.GAN实战之Pytorch使用pix2pixGAN生成建筑物Label to Facade

              3.一文看懂CycleGAN网络原理以及论文精华解读              4. GAN项目实战 使用CycleGAN将苹果变成橙子Pytorch版

2.关于如何稳定GAN的训练进行研究,可参考WGAN

一文看懂GAN系列之WGAN(Wasserstein GAN)原理

 

 


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

相关文章

Pix2Pix和CycleGAN

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

PyTorch 实现Image to Image (pix2pix)

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

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

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

Pix2Pix代码解析

参考链接: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(马尔科夫判别器) 1、pix2pix 简单粗暴的办法 如何解决模糊呢? 其他tricks 2、pix2pixHD 高分辨率图像生成 模型结构 Loss设计 使用Instance-map的图像进行训练 语义编辑 总结 …

Tensorflow2.0之Pix2pix

文章目录 Pix2pix介绍Pix2pix应用Pix2pix生成器及判别器网络结构代码实现1、导入需要的库2、下载数据包3、加载并展示数据包中的图片4、处理图片4.1 将图像调整为更大的高度和宽度4.2 随机裁剪到目标尺寸4.3 随机将图像做水平镜像处理4.4 图像归一化4.5 处理训练集图片4.6 处理…

pix2pix算法笔记

论文:Image-to-Image Translation with Conditional Adversarial Networks 论文链接:https://arxiv.org/abs/1611.07004 代码链接:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix 这篇论文发表在CVPR2017,简称pix2pix,是将GAN应用于有监督的图像到图像翻译的经…

Pix2Pix原理解析以及代码流程

文章目录 1、网络搭建2、反向传播过程3、PatchGAN4.与CGAN的不同之处 1、网络搭建 class UnetGenerator(nn.Module):"""Create a Unet-based generator"""def __init__(self, input_nc, output_nc, num_downs, ngf64, norm_layernn.BatchNorm2d…

图像翻译网络模型Pix2Pix

Pix2pix算法(Image-to-Image Translation,图像翻译),它的核心技术有三点:基于条件GAN的损失函数,基于U-Net的生成器和基于PatchGAN的判别器。Pix2Pix能够在诸多图像翻译任务上取得令人惊艳的效果,但因为它的输入是图像对&#xff…

GAN系列之pix2pix、pix2pixHD

1. 摘要 图像处理的很多问题都是将一张输入的图片转变为一张对应的输出图片,比如灰度图、梯度图、彩色图之间的转换等。通常每一种问题都使用特定的算法(如:使用CNN来解决图像转换问题时,要根据每个问题设定一个特定的loss funct…

Pix2Pix原理解析

1.网络搭建 class UnetGenerator(nn.Module):"""Create a Unet-based generator"""def __init__(self, input_nc, output_nc, num_downs, ngf64, norm_layernn.BatchNorm2d, use_dropoutFalse):"""Construct a Unet generatorPa…

如何利用Pix2Pix将黑白图片自动变成彩色图片

实现黑白图片自动变成彩色图片 如果你有一幅黑白图片,你该如何上色让他变成彩色的呢?通常做法可能是使用PS工具来进行上色。那么,有没有什么办法进行自动上色呢?自动将黑白图片变成彩色图片?答案是有的,使用深度学习中的Pix2Pix网络就可以实现这一功能。 如图所示,我们…

Pix2Pix进一步了解

参考:Pix2Pix视频解读 一、Pix2Pix是输入图片矩阵而不是标签向量 1、生成器方面 Pix2Pix与CGAN之间的联系:CGAN生成器输入的是一个label,而我们现在要做的是把这个lable换成一个图片,如下所示。这个图片是一个建筑物的模…

CycleGAN与pix2pix训练自己的数据集-Pytorch

github:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix 参考:https://blog.csdn.net/Gavinmiaoc/article/details/80585531 文章目录 CycleganDownload&Prerequisitesbefore your work数据集训练测试 pix2pix数据集训练测试 Cyclegan Do…

pix2pix学习系列(1):预训练模型测试pix2pix

pix2pix学习系列(1):预训练模型测试pix2pix 参考文献: [Pytorch系列-66]:生成对抗网络GAN - 图像生成开源项目pytorch-CycleGAN-and-pix2pix - 使用预训练模型测试pix2pix模型 运行环境 win 10 1、代码下载 Gith…

pix2pix简要笔记

参考(40条消息) 全文翻译&杂记《Image-to-Image Translation with Conditional Adversarial NetWorks》_Maples丶丶的博客-CSDN博客_image-to-image translation 图像到图像通常有特定方法(没有通用),但本质是像素到像素的映射问题。本文…

简单理解Pix2Pix

论文名:Image-to-Image Translation with Conditional Adversarial Networks 论文地址:https://arxiv.org/abs/1611.07004 代码链接:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix Pix2Pix是做什么的 图像风格迁移,一…

Pix2pix网络的基本实现

Pix2pix Gan 主要用于图像之间的转换,又称图像翻译《Image-to-Image Translation with Conditional Adversarial Networks》 普通的GAN接受的G部分的输入是随机向量,输出的是图像。D部分接受的输入是图像(生成的或是真实的)&…

Pix2Pix(2017)+CycleGAN+Pix2PixHD

GAN 常规的深度学习任务如图像分类、目标检测以及语义分割或者实例分割,这些任务的结果都可以归结为预测。图像分类是预测单一的类别,目标检测是预测Bbox和类别,语义分割或者实例分割是预测每个像素的类别。而GAN是生成一个新的东西如一张图…

经典论文pix2pix详解

Image-to-Image Translation with Conditional Adversarial Networks https://phillipi.github.io/pix2pix/ https://arxiv.org/pdf/1611.07004.pdf https://github.com/phillipi/pix2pix https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix 摘要:我们研…