新智元报道
来源:tfhub.dev
编辑:小芹
【新智元导读】近日,DeepMind发布了预训练的BigBiGAN表示学习模型,该模型基于最先进的 BigGAN 模型构建,通过添加编码器和修改鉴别器将其扩展到表示学习。>>>来新智元AI朋友圈查看代码~
DeepMind表示学习模型BigBiGAN终于开源了!
近日,DeepMind发布了预训练的BigBiGAN表示学习模型,开源代码可以在TF Hub上找到。
BigBiGAN 模型基于DeepMind 最先进的 BigGAN 模型构建,通过添加编码器和修改鉴别器将其扩展到表示学习。这篇题为《大规模对抗性表示学习》的论文在发布时受到很大关注。
论文链接:
https://arxiv.org/pdf/1907.02544.pdf
BigBiGAN 表明,“图像生成质量的进步转化为了表示学习性能的显著提高”。
研究人员广泛评估了 BigBiGAN 模型的表示学习和生成性能,证明这些基于生成的模型在 ImageNet 上的无监督表示学习和无条件图像生成方面都达到了 state of the art 的水平。
总结而言,这篇论文展示了 GAN 可以用于无监督表示学习,并在 ImageNet 上获得了最先进的结果。
下面是 BigBiGAN 生成的一些重建样本,可以看到,重建是倾向于强调高级语义,而不是像素级的细节。
BigBiGAN代码开源,TensorFlow实现
bigbigan-revnet50
在 ImageNet 上使用较小的(ResNet-50)编码器结构进行训练的无监督 BigBiGAN 图像生成和表示学习模型。
这是论文中所描述的无监督 BigBiGAN 图像生成器和表示学习模型,对应于论文表 1 的倒数第二行(“ ResNet(↑ Encoder LR)”)和表 2 的 “ BigBiGAN / ResNet-50” 行。
使用示例:
代码语言:javascript复制# Load BigBiGAN module.
module = hub.Module('https://tfhub.dev/deepmind/bigbigan-resnet50/1')
# Sample a batch of 8 random latent vectors (z) from the Gaussian prior. Then
# call the generator on the latent samples to generate a batch of images with
# shape [8, 128, 128, 3] and range [-1, 1].
z = tf.random.normal([8, 120]) # latent samples
gen_samples = module(z, signature='generate')
# Given a batch of 256x256 RGB images in range [-1, 1], call the encoder to
# compute predicted latents z and other features (e.g. for use in downstream
# recognition tasks).
images = tf.placeholder(tf.float32, shape=[None, 256, 256, 3])
features = module(images, signature='encode', as_dict=True)
# Get the predicted latent sample `z_sample` from the dict of features.
# Other available features include `avepool_feat` and `bn_crelu_feat`, used in
# the representation learning results.
z_sample = features['z_sample'] # shape [?, 120]
# Compute reconstructions of the input `images` by passing the encoder's output
# `z_sample` back through the generator. Note that raw generator outputs are
# half the resolution of encoder inputs (128x128). To get upsampled generator
# outputs matching the encoder input resolution (256x256), instead use:
# recons = module(z_sample, signature='generate', as_dict=True)['upsampled']
recons = module(z_sample, signature='generate') # shape [?, 128, 128, 3]
bigbigan-revnet50×4
ImageNet 上使用较大的(RevNet-50x4)编码器结构训练的无监督 BigBiGAN 图像生成和表示学习模型。
这个模型对应于对应于表 1 的最后一行(“ RevNet x4(↑ Encoder LR)”)和表 2 的 “ BigBiGAN / RevNet-50 x4” 行 。
使用示例
代码语言:javascript复制# Load BigBiGAN module.
module = hub.Module('https://tfhub.dev/deepmind/bigbigan-revnet50x4/1')
# Sample a batch of 8 random latent vectors (z) from the Gaussian prior. Then
# call the generator on the latent samples to generate a batch of images with
# shape [8, 128, 128, 3] and range [-1, 1].
z = tf.random.normal([8, 120]) # latent samples
gen_samples = module(z, signature='generate')
# Given a batch of 256x256 RGB images in range [-1, 1], call the encoder to
# compute predicted latents z and other features (e.g. for use in downstream
# recognition tasks).
images = tf.placeholder(tf.float32, shape=[None, 256, 256, 3])
features = module(images, signature='encode', as_dict=True)
# Get the predicted latent sample `z_sample` from the dict of features.
# Other available features include `avepool_feat` and `bn_crelu_feat`, used in
# the representation learning results.
z_sample = features['z_sample'] # shape [?, 120]
# Compute reconstructions of the input `images` by passing the encoder's output
# `z_sample` back through the generator. Note that raw generator outputs are
# half the resolution of encoder inputs (128x128). To get upsampled generator
# outputs matching the encoder input resolution (256x256), instead use:
# recons = module(z_sample, signature='generate', as_dict=True)['upsampled']
recons = module(z_sample, signature='generate') # shape [?, 128, 128, 3]
更详细的示例使用,请参见这个Colab notebook demo:
https://t.co/ixQZJaABRJ?amp=1
接下来,本文带来对BigBiGAN论文的解读。
基于 BigGAN 打造 BigBiGAN:学习高级语义,而非细节
近年来,我们已经看到视觉数据生成模型的快速发展。虽然这些模型以前局限于模式单一或少模式、结构简单、分辨率低的领域,但随着建模和硬件的进步,它们已经获得了令人信服地生成复杂、多模态、高分辨率图像分布的能力。
直观地说,在特定域中生成数据的能力需要高度理解所述域的语义。这一想法长期以来颇具吸引力,因为原始数据既便宜 —— 可以从互联网等来源获得几乎无限的供应 —— 又丰富,图像包含的信息远远超过典型的机器学习模型训练用来预测的类别标签。
然而,尽管生成模型取得的进展不可否认,但仍然存在一些令人困扰的问题:这些模型学到了什么语义,以及如何利用它们进行表示学习?
仅凭原始数据就能真正理解生成这个梦想几乎不可能实现。相反,最成功的无监督学习方法利用了监督学习领域的技术,这是一种被称为自监督学习 (self-supervised learnin) 的方法。
这些方法通常涉及以某种方式更改或保留数据的某些方面,并训练模型来预测或生成缺失信息的某些方面。
例如,Richard Zhang 等人的研究 (CVPR 2016) 提出了一种非监督学习的图像着色方法,在这种方法中,模型被给予输入图像中颜色通道的子集,并经过训练来预测缺失的通道。
作为无监督学习手段的生成模型为 self-supervised 的任务提供了一个很有吸引力的替代方案,因为它们经过训练,可以对整个数据分布建模,而不需要修改原始数据。
GAN 是一类应用于表示学习的生成模型。GAN 框架中的生成器是一个从随机采样的潜在变量 (也称为 “噪声”) 到生成数据的前馈映射,其中学习信号由经过训练的鉴别器提供,用来区分真实数据和生成的数据样本,引导生成器的输出跟随数据分布。
作为 GAN 框架的扩展,Vincent Dumoulin 等人 (ICLR 2017) 提出 adversarially learned inference(ALI)[7],或 Jeff Donahue 等人 (ICLR 2017) 提出 bidirectional GAN (BiGAN)[4] 方法,这些方法通过编码器模块将实际数据映射到潜在数据 (与生成器学习的映射相反) 来增强标准 GAN。
在最优判别器的极限下,[4] 论文表明确定性 BiGAN 的行为类似于自编码器,最大限度地降低了重建成本 l₀;然而,重建误差曲面的形状是由参数鉴别器决定的,而不是像误差 l₂这样的简单像素级度量。
由于鉴别器通常是一个功能强大的神经网络,我们希望它能产生一个误差曲面,在重建时强调 “语义” 误差,而不是强调低层次的细节。
BigBiGAN 重建的更多图像
论文证明了通过 BiGAN 或 ALI 框架学习的编码器是在 ImageNet 上学习下游任务的一种有效的视觉表示方法。然而,它使用了 DCGAN 风格的生成器,无法在这个数据集上生成高质量的图像,因此编码器能够建模的语义也相当有限。
在这项工作中,我们再次使用 BigGAN 作为生成器,这是一个能够捕获 ImageNet 图像中的许多模式和结构的先进模型。我们的贡献如下:
- 我们证明了 BigBiGAN (BiGAN with BigGAN generator) 与 ImageNet 上无监督表示学习的最先进技术相匹敌。
- 我们为 BigBiGAN 提出了一个更稳定的联合鉴别器。
- 我们对模型设计选择进行了全面的实证分析和消融研究。
- 我们证明,表示学习目标还有助于无条件生成图像,并展示了无条件生成 ImageNet 的最先进结果。
BigBiGAN 框架的结构
BigBiGAN 框架的结构
BigBiGAN 框架的结构如上图所示。
联合判别器 D 用于计算损失 l。其输入是 data-latent pairs, 可以是从数据分布
和编码器
输出采样的
,或从生成器 G 输入和潜在分布
采样的
。损失 l 包括一元数据项
和一元潜在项
,以及将数据和潜在分布联系起来的共同项
。
评估和结果:表示学习、图像生成实现最优性能
表示学习
我们现在从上述简化学习结果中获取基于 train-val 分类精度的最优模型,在官方 ImageNet 验证集上得出结果,并与最近的无监督学习研究文献中的现有技术水平进行比较。
为了进行这些比较,我们还提供了基于规模较小的 ResNet-50 的最佳性能 GAN 变种的分类结果。详细比较结果在表 2 中给出。
与当前许多自监督学习方法相比,本文中采用的纯基于生成模型的 BigBiGAN 方法在表示学习方面表现良好,在最近的无监督学习任务上的表现达到了 SOTA 水平,最近公布的结果显示,本文中的方法在使用表 2 的 AvePool 相同的表示学习架构和特征的旋转预测预训练任务中,将 top-1 精度由 55.4%提高到 60.8%。
表 1:多个 BigBiGAN 变体的性能结果,在生成图像的初始分数(IS)和 Fréchet 初始距离(FID),监督式逻辑回归分类器 ImageNet top-1 精度百分比(Cls。)由编码器特征训练,并基于从训练集中随机抽样的 10K 图像进行分割计算,我们将其称为 “train-val” 分割。
表 2:在官方 ImageNet 验证集上对 BigBiGAN 模型与最近的基于监督式逻辑回归分类器的其他方法的对比。
表 3:我们的 BigBiGAN 与无监督(无条件)生成方法、以及之前报告的无监督 BigGAN 的性能结果对比。
无监督式图像生成
表 3 所示为 BigBiGAN 进行无监督生成的结果,与基于 BigGAN 的无监督生成结果做比较。请注意,这些结果与表 1 中的结果不同,因为使用的是数据增强方法(而非表 1 中的用于所有结果的 ResNet 样式预处理方法)。
这些结果表明,BigBiGAN 显著提升了以 IS 和 FID 为量度的基线无条件 BigGAN 生成结果的性能。
图 2:从无监督的 BigBiGAN 模型中选择的图像重建结果。上面一行的图像是真实图像(x~Px),下面一行图像是由 G(E(x))计算出的这些图像的重建结果。与大多数显式重建成本(例如像素数量)不同,由(Big)BiGAN 实现隐式最小化的重建成本更多倾向于强调图像的语义及其他更高级的细节。
图像重建:更偏重高级语义,而非像素细节
图 2 中所示的图像重建在像素上远达不到完美,可能部分原因是目标没有明确强制执行重建成本,在训练时甚至对重建模型进行计算。然而,它们可以为编码器 ε 学习建模的特征提供一些帮助。
比如,当输入图像中包含狗、人或食物时,重建结果通常是姿势、位置和纹理等相同特征 “类别” 的不同实例。例如,脸朝同一方向的另一只类似的狗。重建结果倾向于保留输入的高级语义,而不是低级细节,这表明 BigBiGAN 的训练在鼓励编码器对前者进行建模,而不是后者。