Paper reading:DCGAN

1.Introduction

1.1 提出一种可以训练大多数数据集的稳定的结构

1.2 用训练好的判别器来进行图片分类任务,表现出优秀的结果。

1.3 可视化了GANs学习到的fliters并展示特定的filters学会生成特定的objects。

1.4 生成器具有向量算术属性,允许对生成样本的一些语义成分[semantic qualities]进行简单操作。

2.Related work

无标签数据的表示学习

2.1 无监督表示的典型方法是在数据上聚类(比如K-means)、auto-encoders和深度信念网络

2.2 在图片任务中(in the context of images),图片块儿的层级聚类(hieratchical clusteirng of image pathes)可以学习到更强劲的图片表示。

2.3 另一个方法是训练自编码器(auto-encoders)

2.4 深度信念网络可以很好的学习层级表示。

生成自然图像

2.5 无参数模型应用:用已有(存在)数据集上的图像碎片进行match,应用在纹理合成、高分辨图像上。

2.6 有参数模型:

GAN生成的图像往往有噪声和无法理解的特征这些缺陷。

laplacian pyramid的应用可以产生很高质量的图片但由于噪声输入了连接的多重模型,结果会出现振荡的现象。

CNN可视化

2.7 使用反卷积和过滤最高响应(filtering the maximal activations)的方法,可以可视化每个卷积层的模板的作用。同样,在输入上使用梯度下降可以检测激活过滤器特定子集的理想图片。

3.Approach and Model Architecture

3.1 判别器和生成器中,在下采样时用可学习的卷积步长取代确定性的最大池化(最大池化无学习参数),从而让网络可以自己学习下采样。

Q:Stride convolution中参数学习到的是什么?

3.2 在卷积特征层上逐渐消除全连接层,取而代之为全局平均池化GAP:增加了模型的稳定性但降低了收敛速度。折中的方式为将最高卷积层特征分别与生成器和判别器的输入和输出直接连接。

在生成器中,随机噪声作为输入通过一层全连接并变为4维tensor,并作为卷积层的起始输入。

对于判别器,最后一层卷积层被拉平然后输入到标量的sigmoid输出。

3.3 批量归一化BN:为了稳定学习,将每个单元的输入归一化为0均值和1方差,有助于改善初始化不当的问题并且将梯度传到更深的模型层里。并被证明可以防止模式崩塌。

但直接将所有的层加上BN层反而会导致样本震荡(sample oscillation)训练不稳定。

可通过在生成器的输出层和判别器的输入层加入BN层来避免以上问题。

3.4 使用有界激活函数可以使模型更快得学习饱和(收敛?)和覆盖训练分布的颜色空间

在判别器中LeakyReLU效果很好,可以防止梯度稀疏,尤其对于高分辨率模型。

4.稳定DCGANs的结构特征

4.1 对于判别器,将所有的池化层替换为stride convolutions步长卷积(下采样)

      对于生成器,将所有的池化层替换为franctional-strided convolutions(上采样)

4.2 在生成器的输出层和判别器的输入层中使用BN层

4.3 在更深层的结构中移除全连接隐藏层

4.4 在生成器的所有层中使用ReLU,输出层使用Tanh

4.5 在判别器的所有层中使用LeakyReLU

5.Details of training

5.1 除了将数据压缩到[-1,1]之外没有其他预处理

#all_images原始图片[0,255]#将图片数值变成[-1,1]

all_images = (all_images - 127.5) / 127.5

5.2 所有的模型使用随机梯度下降训练batch size为128的mini-batch

5.3 所有的权重初始化为以0为中心的正态分布,标准差为0.02

5.4LeakyReLU中,leak的参数为0.2

5.5 以前的GAN使用动量来加速训练,本文实验中使用Adam优化器,0.001的学习率太高,使用0.0002的学习率。预设的动量β1=0.9会使训练震荡,使用动量β1=0.5,β2=0.999

6.在数据集上训练

6.1 LSUN数据集 | overfitting

为了证实模型可以处理更多的数据并且生成高分辨率的图像,使用模型在LSUN的包含三百万的训练样本的bedrooom数据集上进行训练。证明模型并不是简单的记住了训练样本(即过拟合)。过程中没有进行数据增强。

??图2图3证明了什么?

6.1.1 去重复

do:

We fit a 3072-128-3072 de-noising dropout regularized RELU autoencoder on 32x32 downsampled center-crops of training examples. The resulting code layer activations are then binarized via thresholding the ReLU activation

为了进一步降低生成器记忆输入样本的可能性,执行一个简单的消除(样本)图像重复的过程。

图2:理论上,模型可以学习记忆训练样本,但在经验上当使用小学习率和minibatchSGD训练时是不太可能的。

[??]provides a convenient form of semantic-hashing, allowing for linear time de-duplication

提供一种方便的语义哈希形式,允许线性时间去重复 

这种技术检测并移除了样本中将近275000个重复。

8.3 人脸数据库,从10k个人中采集到三百万张人脸照片。在这些照片上使用OpenCV人脸检测,保证这些检测有足够的分辨率,最后得到350000个脸部检测框。使用这些检测框(boxes)进行训练,这个过程中没有使用数据增强。

8.4 使用Imagenet-1K作为自然图片来源来做无监督训练。在重新调整大小至32*32并center crops后进行训练。没有使用数据增强。

Center Crop:

(1)当图片大于ImageView的宽高:以图片的中心点和ImageView的中心点为基准,按比例缩小图片,直到图片的宽高有一边等于ImageView的宽高,则对于另一边,图片的长度大于或等于ImageView的长度,最后用ImageView的大小居中截取该图片。

(2)当图片小于ImageView的宽高:以图片的中心店和ImageView的中心点为基准,按比例扩大图片,直到图片的宽高都大于或等于ImageView的宽高,并按ImageView的大小居中截取该图片。

9.DCGANs性能的验证

9.1 在CIFAR-10的分类任务上使用GANs作为特征提取器

估计无监督学习算法性能的一个常用方法是将它们作为特征提取器应用到用于有监督学习的数据集上,并评估在这些特征之上拟合的线性模型的性能[??]

在CIFAR-10数据集上,表现的基本准线被作为特征学习算法的单层特征提取算法K-means算法证实。

当使用数量非常大的特征图时,如4800个,这个技术达到了80.6%的准确率。一个无监督多层的改进算法达到了82.0%的准确率。

为了估计DCGANs的在有监督任务上的表示学习能力,本文在Imagnet-1K上训练然后使用判别器的所有卷积特征,在每层上使用最大池化来产生4*4的空间网格。这些特征接着被拉平然后通过全连接层生成28672维的向量,并使用L2正则化的SVM.达到了82.8%的准确率,胜过所有的K-means基本方法。值得注意的是,比起K-means,判别器生成更少的特征图(最多的层生成512个),但也由于许多层4*4的空间位置导致了更大的总和向量尺寸。

DCGANs的表现仍然不及作为范例的CNNs。

此外,因为之前并没有在CIFAR-10上训练过,因此也验证了这个学习特征的领域鲁棒性。DCGAN在Imagenet-1K上进行训练,然后在CIFAR-10上测试。

[??]since our DCGAN was never trained on CIFAR-10 this experiment also demonstrates the domain robustness of the learned features.

9.2 在SVHM分类数据集上使用GANs作为特征提取器

在SVHN(StreetView House Numbers dataset)数据集上,当有标签数据缺失时,我们在有监督目标上使用DCGAN的分类器特征。

进行与在CIFAR-10上相似的数据集处理,划分出一个含有类别分布均匀的1000个样本的验证集,验证所有的超参数和模型模块。达到了22.48%的测试错误。

另外,我们通过在相同的数据集上训练纯有监督的、结构相同的CNN模型,验证了DCGAN里的CNN结构不是模型表现的关键因素,经过了64次的随机超参数搜索,最终得到了28.87%的验证集错误率,要高于之前得22.48%。

10.探索并可视化网络内部

10.1 [??]We do not do any kind of nearest neighbor search on the training set. Nearest neighbors in pixel or feature space are trivially fooled  by small image transforms.

在训练集上没有做任何邻近搜索,因为像素或特征空间中的近邻很容易被小的图像变换所欺骗。

也没有使用对数似然[log-likelihood]度量来定量评估模型,因为它是一个很差的度量。

10.2 潜在空间(latent space)

walking on the manifold 可以得知是否发生了记忆样本的现象(如果出现了很尖锐(不平滑)的改变如突然出现某个特征)和图片分层崩塌的现象。如果生成的图片在语义上发生了变化(比如某个目标出现或者消失了),就可以推断模型学到了相关特征。

Z(随即噪声)中的9个随机点之间的插值表明,学习的空间有平滑的过渡,空间中的每一张图像看起来都像是卧室。在第六排,会看到一个没有窗户的房间慢慢变成一个有大窗户的房间。在第十排,会看到一个看起来像电视的东西慢慢地变成了一扇窗户。

10.3 可视化判别器特征

本实验证明了无监督DCGAN在大型数据集上也可以像CNN一样学习感兴趣的层次结构特征。

下图为被卧室里一部分典型结构(如床、窗户)激活的判别器学到的特征。作为对比,在相同的图里,采用了随机初始化特征,这些特征在语义上没有被相关或者感兴趣区域激活。

​ 左图是一个随机的过滤器baseline。与刚刚的响应相比,几乎没有歧视和随机结构。

右图中,从鉴别器的最后一个卷积层中学习到的前6个卷积特征的最大轴对齐响应的特定反向传播可视化。注意到有一小部分特征响应于床——LSUN卧室数据集中的中心对象。

 10.4 操作生成器表示

10.4.1 生成器学到了什么表示?让生成器生成丢掉特定目标的图片

样本的质量提供了一个线索,生成器会学习对于主要场景组成部分(major scene components)特定结构的表示,例如床、窗户、落地灯。

为了探索这些表示学到的模式,下面做一个试验来从生成的图片中完全移除窗户。

在150个样本上,其中52个中人工标定了窗户边界框。在倒数第二层卷积层特征上,逻辑回归被用来预测一个窗口中是否存在特征,使用的标准是,在人工标定的边界框内的激活是正的,同一个图片的其他部分是负的。使用这种简单模型,所有权重大于零(总共有200个)的特征图被从空间位置丢弃。然后在特征图去除和不去除的情况下,生成新的随机样本。

图6展示了移除窗口和没有移除窗口的生成图片,有趣的是,该网络经常忘记在卧室里画窗户,而是用其他物体代替它们

 上面一行是修改前的模型生成的样本。

下面一行是生成器生成的相同样本,但是丢弃了“窗户”过滤器。一些窗户被丢掉了,另外一些被其他目标取代。这表明生成器在分离场景表示中有很好的表现,并能实现目标表示。

10.4.2 人脸样本向量算法(Vector arithmetic on face samples)

之前有论文揭示了单词在表达空间中满足简单的算术操作,这表明其具有良好的线性性质。在拥有视觉概念样本集合的Z向量上使用相似算法。每个视觉概念(visual concepts)都在单一样本上进行实验结果不稳定,但换为三个样本的均值表现出了不错的稳定性并且在语义上遵循算术运算。

结果表明,面部姿态在Z空间中也是线性的。

对于每一列,样本的Z向量做了平均,平均向量为Y。图片右边中心图片是将Y放入生成器得到的结果,为了证实生成器的插值能力(interpolation capabilities),在Y上加上尺度为+-0.25的均匀噪声,得到另外8个样本。

相同的算法在像素空间中的应用, 会由于不对齐而导致有噪声的重叠。

生成器在以前被证实可以很好的学习改变目标的属性如尺寸、旋转和位置。

未来方向:特征的矢量运算可以极大的减少训练条件GANs生成器所需要的拥有复杂图像分布的数据量。

11. 总结和展望

11.1 不稳定:在模型训练时间很长时,有时部分过滤器会表现出单一的振荡模式(停止继续学习的意思?)。

we noticed as models are trained longer they sometimes collapse a subset of filters to a single oscillating mode.

11.2 通过插值实现面部姿态的转换

实验部分:

1. DCGAN是无监督学习算法,不需要网络学习,但是在keras中为了区分真图与生成器生成的假图,我们必须用标签进行区分,原则上假图应该全部赋值为0,真图赋值为1,但是为了使得模型更加鲁棒,通常使用0-0.3的随随机数代表假图,0.7-1.2的随机数代表真图,随机数的生成都是用截断正态分布​

2. DCGAN训练过程中,通常是训练判别器,然后训练整个DCGAN。并且DCGAN训练中,判别器不能更新参数(先训练生成器,使其能够生成一定质量的图片),因此必须冻结所有层。为了加快网络训练,通常是训练多次判别器,然后训练一次生成器,这样能提高网络训练速率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值