文章目录

  • 前言
  • 监督对抗性自动编码器 SAAE 风格和内容的分离
  • SAAE 训练结果
  • AE AAE SAAE 实验对比结果
  • 恢复效果对比
  • 从随机数重建图像的效果
  • 这部分实验代码


前言

先来看看实验:

我们使用 MNIST 手写数字,测试通过自动编码器和对抗性自动编码器学习重建恢复效果。

  • 原始图像:
  • 自动编码器重建效果
  • 对抗性自动编码器重建效果
  • 有监督对抗性自动编码器重建效果

虽然这里看到,自动编码器和对抗性自动编码器重建出来的能力差不多,有监督对抗性自动编码器基本上重建出来的图像和输入基本对的上。他们的差别有何不同呢,通过之后几章的学习,大家会有体会。

我们学习自动编码器有什么用?
重建图像本身自然是没有任何意义的,但是能把图像重建出来,说明模型学到了输入图像集的分布和特征。

  • 提取图像特征,特征我们可以拿来做影像组学。
  • 异常检测,图像的分布可以拿来做异常检测。
  • 图像去噪,其中可以使用有噪声的图像生成清晰的无噪声图像。
  • 语义散列可以使用降维来加快信息检索速度。
  • 最近,以对抗方式训练的自动编码器可以用作生成模型(我们稍后会深入探讨)。

具体地, 我们将从以下几部分来介绍:

  1. 自动编码器重建 MNIST 手写数字
  2. 对抗性自动编码器重建 MNIST 手写数字
  3. 监督自动编码器重建 MNIST 手写数字
  4. 使用自动编码器对 MNIST 进行分类

这是本系列第三个类容:监督对抗性自动编码器

如果你已经阅读了前两部分,你会觉得实施这一部分很简单

监督对抗性自动编码器 SAAE 风格和内容的分离

第 1 部分和第 2 部分主要关注 AE 和 AAE 的入门。我们从一个简单的 AE(原版)开始,对其架构和训练算法进行了一些更改,最终得到了 AAE。这部分通过改变 AAE 的架构以及对其训练方式的微小变化来延续这一趋势。

我们每个人都有自己独特的写作风格,无论是写信还是签名。我们书写某些字符的方式、我们经常用来造句的词,甚至一个人在纸上施加的压力都是定义独特笔迹的特征。

随着所有这些事情的发生,伪造笔迹会变得非常困难和昂贵。让我们尝试从 MNIST 数据集中学习写作风格,并使用它来输出具有相同风格的图像。我们将只关注写作风格,而不关注句子的构架方式或作者经历的思维过程。

要清楚地了解什么是 风格和内容,请查看下图:

对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_人工智能


每行文本都有相同的内容“Autoencoder”,但风格不同。我们现在的任务是从图像中分离风格和内容。

Autoencoder 和 Adversarial Autoencoder 都是以无监督的方式训练的(训练期间没有使用任何标签)。使用图像的标签信息允许 AAE 专注于学习提取图像中的样式,而无需考虑其内容。利用图像标签使其成为监督模型。

我们实现这一目标所需的架构与我们在第 2 部分中看到的非常相似

对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_编码器_02


在这里,我们不是直接使用 z 作为 Decoder 输入图像,而是把图像标签(y, one-hot形式)和 z 一起作为输入给 Decoder。因此,Decoder 输入有两部分:

  1. The latent code z from the encoder
  2. One-hot representation of the image label(y)

除了 Decoder 的输入改成了 y+z (y是one-hot形式,有 10 个数字,就是 10 个神经元,z 假设是 2 个神经元,因此,输入就是 12 个神经元), 其余(训练,损失函数)都同第二部分一样。

对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_深度学习_03

通过把标签作为 Decoder 的输入,就可以强迫 Decoder 生成我们想要的数字。

到底能不能像我们想的这样呢?

对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_编码器_04

SAAE 训练结果

对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_随机数_05


对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_深度学习_06


对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_编码器_07


对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_人工智能_08


对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_深度学习_09

AE AAE SAAE 实验对比结果

恢复效果对比

这个对比实验在 前言 就给到大家了。这里,我们在仔细分析一下。

实验过程:我们从测试集随机选取了一个 batch x,通过 Encoder 和 Decoder 得到最后的重建图像 x_hat. 然后我们比较 AE AAE SAAE的恢复效果。

x > encoder > decoder > x_hat

实验结果

原始图像

对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_随机数_10


每个图像上方的label就是数字对应的标签。AE 结果

对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_编码器_11

AAE 结果

对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_计算机视觉_12

SAAE 结果

对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_深度学习_13

对恢复性能的分析:AE 和 AAE 恢复性能差不多,都会有重建错误的图像,AAE 相对好些。但是二者恢复出来的图像都比 SAAE 模糊。而且,SAAE 基本上不会有重建错误的图像。

从随机数重建图像的效果

实验过程: 我们从高斯分布中随机取一个 batch z, 直接给 Decoder 重建出来。

z_guass = torch.randn(128, 2)

z > decoder > x_hat

实验结果

AE 结果

对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_人工智能_14


AAE 结果

对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_编码器_15


SAAE 结果

对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字_编码器_16


这里的SAAE 是有标签的,因为它的Decoder接收的是 标签和Z。

随机数重建效果的分析:给定一个随机数,AE 和 AAE 可能会重建出任何数字,但是给定一个随机数和一个标签,SAAE 能重建出我们想要的数字。比如,随机数加数字 7 的标签,SAAE 就能重建出 7. 从图像上来看,SAAE 基本都能重建正确。说明有监督的训练确实要强于 AE 和 AAE。


关于第四部分,使用自动编码器对 MNIST 进行分类,就不再讨论了,如果感兴趣,请自学。这一系列到这里就结束了。实践中遇到问题欢迎咨询哦

这部分实验代码


  • GitHub上提供了详细的代码说明。

文章持续更新,可以关注微信公众号【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的公众号。坚持已实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~

我是Tina, 我们下篇博客见~

白天工作晚上写文,呕心沥血

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6