社群計算機視覺課程文件

使用 DCGAN 生成合成資料

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

使用 DCGAN 生成合成資料

我們在第五單元瞭解到,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),幷包含每個影像類別(肺炎/正常)的子資料夾。有 5,863 張 X 射線影像(JPEG)和 2 個類別(肺炎/正常)。

  • 胸部 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 個 epoch。

讓我們視覺化進度

trainig-gif

我們做得怎麼樣?

以下是 64 張“好的”合成影像,它們被判別器以 70% 的機率標記為“真實”。

lung-images

我們可以看到一些合成的肺部影像看起來不錯,但另一些則比較模糊。有幾點重要的事情需要提及。首先,生成合成醫學影像的研究人員通常會採用“中間人”——在本例中是專業的放射科醫生——來評估合成影像。然後,只有那些能騙過專家的影像才會被包含在真實資料中用於訓練模型。其次,那些看起來還算正常(至少對業餘人士而言)的生成影像看起來非常相似。這是 GAN 的另一個已知問題——它們可能會遭受“模式崩潰”。本質上,當生成器開始產生相同型別的輸出時,就會發生這種情況。可以將其想象成一個因製作巧克力曲奇餅乾而受到很多讚揚的人,因此他變得非常非常擅長製作這種曲奇餅乾,但卻無法制作任何其他型別的曲奇餅乾。

鑑於使用 GAN 訓練高質量醫學影像所面臨的已知挑戰,一些研究人員探索了使用擴散模型生成肺部影像。Medfusion 是一種用於醫學影像的條件潛在 DDPM,在 擴散機率模型在醫學 2D 影像上擊敗 GAN 中被提出。Khosravi 等人 在 合成增強:揭示合成數據在醫學影像研究中的潛力 中發現,使用真實影像和透過擴散過程生成的合成肺部影像的混合物可以提高模型效能。

資源和進一步閱讀

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.