使用 DCGAN 生成合成数据
我们在单元 5 中了解到,GAN 是机器学习中的一个框架,其中两个神经网络(生成器和判别器)处于持续的对抗状态。生成器创建合成图像,而判别器试图区分真实图像和假图像。它们通过这种对抗过程不断改进,生成器在创建逼真的图像方面变得更好,而判别器在区分假图像和真图像方面变得更好。
现在我们将研究如何使用 GAN 生成医学图像,这是一个数据量小、隐私问题和带注释样本数量有限的领域。研究人员已经使用 GAN 生成合成图像,例如肺部 X 光图像、视网膜图像、脑部扫描和肝脏图像。在 基于 GAN 的合成脑 PET 图像生成 中,作者为阿尔茨海默病的三个不同阶段创建了脑 PET 图像。 基于 GAN 的合成医学图像增强,提高了肝脏病变分类中 CNN 的性能 生成了合成肝脏图像。 BrainGAN:使用 GAN 架构和 CNN 模型的脑 MRI 图像生成和分类框架 开发了一个使用多个 GAN 架构生成脑 MRI 图像的框架,以及 基于 DCGAN 和深度迁移学习的新型 COVID-19 检测模型 使用 DCGAN 生成合成肺部 X 光图像,以帮助检测 COVID-19。
DCGAN(深度卷积生成对抗网络)
DCGAN 由 Radford 等人提出,在 使用深度卷积生成对抗网络进行无监督表示学习 中提出,是许多研究人员用来生成合成医学图像的模型。我们将使用它来生成合成肺部图像。在使用 DCGAN 训练模型之前,我们将简要回顾一下它的架构。生成器网络以随机噪声作为输入,并生成合成肺部图像,而判别器网络试图区分真实图像和合成图像。它在生成器和判别器中都使用卷积层来有效地捕获空间特征。DCGAN 还使用带步长的卷积来代替最大池化以对空间维度进行降采样。
生成器具有以下模型架构
- 输入是一个 100 个随机数的向量,输出是一个大小为 128 * 128 * 3 的图像。
- 该模型有 4 个卷积层
- Conv2D 层
- 批量归一化层
- ReLU 激活函数
- 具有 Tanh 激活函数的 Conv2D 层
判别器具有以下模型架构
- 输入是一个图像,输出是表示图像是否为假或真的概率。
- 该模型有一个卷积层
- Conv2D 层
- Leaky ReLU 激活函数
- 三个具有以下功能的卷积层
- Conv2D 层
- 批量归一化层
- Leaky ReLU 激活函数
- 具有 Sigmoid 的 Conv2D 层
数据收集
首先,我们需要获取一个 真实肺部图像数据集。我们将从 Hugging Face Hub 下载 胸部 X 光图像(肺炎) 数据集。
以下是有关该数据集的一些信息
该数据集被组织成 3 个文件夹(train、test、val),并包含每个图像类别的子文件夹(Pneumonia/Normal)。有 5,863 张 X 光图像(JPEG)和 2 个类别(Pneumonia/Normal)。
胸部 X 光图像(前后位)是从广州妇女儿童医疗中心的 1 至 5 岁的儿童患者的回顾性队列中选择的。所有胸部 X 光成像均作为患者常规临床护理的一部分进行。
为了分析胸部 X 光图像,所有胸部 X 光片最初都经过质量控制筛选,以去除所有质量低下或无法读取的扫描。然后,两名专家医师对图像的诊断进行分级,然后才能清除以训练 AI 系统。为了解决任何分级错误,第三名专家也检查了评估集。
我们将首先登录 Hugging Face Hub。
from huggingface_hub import notebook_login
notebook_login()
接下来,我们将加载数据集。
from datasets import load_dataset
dataset = load_dataset("hf-vision/chest-xray-pneumonia")
我们将通过调整大小和规范化像素值来预处理肺部图像。
import torchvision.transforms as transforms
from torchvision.transforms import CenterCrop, Compose, Normalize, Resize, ToTensor
transform = Compose(
[
transforms.Resize(image_size),
transforms.CenterCrop(image_size),
transforms.ToTensor(),
]
)
在训练期间,生成器的目标是生成与真实图像无法区分的合成肺部图像,而判别器学习将图像正确分类为真实或合成。我们首先用随机噪声初始化生成器,并将训练 100 个 epochs。
让我们可视化进度
我们做得怎么样?
这里有 64 张“良好”的合成图像,定义为从判别器那里获得“真实”标签,概率为 70%。
我们可以看到,一些合成肺部图像看起来不错,但另一些则很模糊。有一些重要的事情需要提及。首先,生成合成医学图像的研究人员通常会采用“中间人”——在这种情况下,是专家放射科医师——来评估合成图像。然后,只有能欺骗专家的图像才会被包含在真实数据中以训练模型。其次,看起来还可以(至少对业余爱好者来说)的生成图像看起来非常相似。这是 GAN 的另一个已知问题——它们可能受到“模式崩溃”的困扰。本质上,当生成器开始产生相同类型的输出时,就会发生这种情况。把它想象成一个人因为制作巧克力曲奇而受到很多赞扬,因此他变得非常非常擅长制作这种曲奇,但不能制作任何其他类型的曲奇。
鉴于使用 GAN 训练高质量医学图像所面临的已知挑战,一些研究人员已经探索使用扩散模型来生成肺部图像。Medfusion 是一个用于医学图像的条件性潜在 DDPM,在 扩散概率模型在医学 2D 图像中胜过 GAN 中提出。 合成增强:揭示合成数据在医学影像研究中的潜力,Khosravi 等人发现,使用扩散过程生成的真实和合成肺部图像混合,可以提高模型性能。
资源和进一步阅读
- 基于 DCGAN 和深度迁移学习的 COVID-19 新型检测模型
- Augmentation_Gan
- BrainGAN:利用 GAN 架构和 CNN 模型的脑部 MRI 图像生成和分类框架
- 通过基于图像的深度学习识别医疗诊断和可治疗疾病
- 扩散概率模型在医学图像方面胜过 GAN
- DR-DCGAN:用于糖尿病视网膜病变图像合成的深度卷积生成对抗网络 (DC-GAN)
- 用于改进脑肿瘤分割的 Deepfake 图像生成
- GAN 实验室
- 用于医学图像合成的 GAN:实证研究
- Medfusion Github 代码库
- 生成对抗网络潜在空间中的医学图像编辑
- 具有上下文感知生成对抗网络的医学图像合成
- MedSynAnalyzerdcgan_faces_tutorial
- pytorch-fid
- StudioGAN:图像合成 GAN 的分类和基准测试
- PyTorch-StudioGAN
- 使用深度卷积生成对抗网络的无监督表示学习