社群計算機視覺課程文件
使用擴散模型生成合成資料
並獲得增強的文件體驗
開始使用
使用擴散模型生成合成資料
想象一下,你正在嘗試訓練一個用於腫瘤分割的模型。由於醫學成像資料難以收集,模型很難收斂。理想情況下,我們期望至少有足夠的資料來建立一個簡單的基線,但是如果你只有幾個樣本怎麼辦?合成數據生成方法試圖解決這個困境,現在隨著生成模型的蓬勃發展,我們有了更多的選擇!
正如你在前幾節中所看到的,可以使用DCGAN等生成模型來生成合成影像。在本節中,我們將重點介紹使用diffusers的擴散模型!
擴散模型概述
擴散模型是近年來因其生成高質量影像的能力而廣受歡迎的生成模型。如今,它們廣泛應用於影像、影片和文字合成。
擴散模型透過逐步學習去噪隨機高斯噪聲來工作。訓練過程需要向輸入樣本新增高斯噪聲,並讓模型學習去噪。
擴散模型通常除了資料分佈之外還受某種輸入條件約束,例如文字提示、影像甚至音訊。此外,還可以構建一個無條件生成器。
模型內部工作原理背後有許多基本概念,但簡化版本與此類似:
首先,模型向輸入新增噪聲並進行處理。

然後模型學習去噪給定的資料分佈。

我們不會深入研究理論,但瞭解擴散模型的工作原理對於我們為特定用例選擇生成合成資料的技術將非常有幫助。
文字到影像擴散模型:Stable Diffusion
本質上,Stable Diffusion(SD)的工作方式與我們上面提到的相同。它使用三個主要元件來幫助它生成高質量的影像。
擴散過程: 輸入被多次處理,以生成有關影像的有用資訊。“有用性”是在訓練模型時學習到的。
影像編碼器和解碼器模型: 允許模型將影像從畫素空間壓縮到更小的維度空間,在抽象無意義資訊的同時提高效能。
可選的條件編碼器: 此元件用於根據輸入對生成過程進行條件設定。這個額外的輸入可以是文字提示、影像、音訊和其他表示。最初,它是一個文字編碼器。
所以,雖然一般的工作流程看起來像這樣:
最初,我們使用文字編碼器根據我們的提示對模型進行條件設定:
這個簡短的概述只是冰山一角!如果你想深入瞭解穩定擴散(或擴散模型)背後的理論,可以檢視延伸閱讀部分!
diffusers為我們提供了即插即用的管道,用於不同的任務,例如:
| 任務 | 描述 | 流水線 |
|---|---|---|
| 無條件影像生成 | 從高斯噪聲生成影像 | 無條件影像生成 |
| 文字引導影像生成 | 根據文字提示生成影像 | 條件影像生成 |
| 文字引導影像到影像翻譯 | 根據文字提示調整影像 | 影像到影像 |
| 文字引導影像修復 | 根據影像、遮罩和文字提示填充影像的遮罩部分 | 影像修復 |
| 文字引導深度到影像翻譯 | 根據文字提示調整影像部分,同時透過深度估計保留結構 | 深度到影像 |
你還可以在Diffusers摘要表中找到支援任務的完整列表。
這意味著我們有很多工具可以用來生成合成資料!
合成數據生成方法
通常有三種情況需要合成數據:
擴充套件現有資料集
- 樣本不足: 一個很好的例子是醫學成像資料集,例如DDSM(數字篩查乳腺攝影資料庫,約2500個樣本),少量樣本使得為進一步分析構建模型變得更加困難。構建此類醫學成像資料集也相當昂貴。
從頭建立資料集:
- 完全沒有樣本: 假設你想在CCTV影片流上構建一個武器檢測系統。但是你想要檢測的特定武器沒有任何樣本,你可以使用不同設定中的類似觀察結果來應用風格遷移,使它們看起來像CCTV流!
保護隱私:
- 醫院收集大量患者資料,監控攝像頭捕獲有關個人面部和活動的原始資訊,所有這些都可能侵犯隱私。我們可以使用擴散模型生成保護隱私的資料集來開發我們的解決方案,而無需放棄任何人的隱私權。
我們有不同的方法來利用文字到影像擴散模型生成定製輸出。例如,透過簡單地利用預訓練的擴散模型(例如Stable Diffusion XL),你可以嘗試構建一個好的提示來生成影像。但是生成影像的質量可能不一致,並且為你的特定用例構建這樣的提示可能非常困難。
通常需要更改模型的一些部分以生成你想要的個性化輸出,以下是一些可以使用的技術:
使用文字反轉進行訓練

文字反轉是一種透過干擾模型架構中的文字嵌入來工作的方法。你可以向詞彙表新增一個新標記,然後使用少量示例微調嵌入。
透過提供與新標記對應的樣本,我們嘗試最佳化嵌入以捕獲物件的特徵。
訓練LoRA (低秩適應) 模型
LoRA 旨在解決 LLM 微調的問題。它透過低秩分解將權重更新表示為兩個較小的更新矩陣,這大大減少了引數量。然後可以訓練這些矩陣以適應新資料!
基礎模型的權重在整個過程中保持凍結,因此我們只訓練新的更新矩陣。最後,將適應後的權重與原始權重結合。
這意味著訓練LoRA比完全模型微調要快得多!作為重要的一點,LoRA也可以與其他技術結合使用,因為它可以新增到模型本身之上。
使用DreamBooth進行訓練

DreamBooth 是一種微調模型以個性化輸出的技術。給定一個主體的幾張影像,它允許你微調一個預訓練的文字到影像模型。主要思想是將一個唯一識別符號與該特定主體關聯起來。
對於訓練,我們使用詞彙表中的標記,並最好使用一個稀有標記識別符號來構建資料集。因為如果你選擇一個相當常見的識別符號,模型也必須學習從其原始含義中解耦。
在原始論文中,作者在詞彙表中找到稀有標記,然後從中選擇識別符號。這降低了識別符號具有強先驗的風險。論文中還指出,透過微調模型的所有層可以獲得最佳結果。
使用Custom Diffusion進行訓練

Custom Diffusion 是一種非常強大的模型個性化技術。它只需要少量樣本,就像前面提到的方法一樣,但它的強大之處在於能夠同時學習多個概念!
它的工作原理是隻訓練擴散過程的一部分以及我們上面提到的文字編碼器,這意味著需要最佳化的引數更少。因此,這種方法也實現了快速微調!
使用擴散模型進行資料集生成的實際應用案例
在許多獨特的案例中,擴散模型被用於生成合成資料集!
請看下面。
關於Stable Diffusion的延伸閱讀
- 圖解Stable Diffusion
- 擴散直譯器:視覺化解釋Stable Diffusion
- 擴散模型簡介
- FastAI,面向程式設計師的實用深度學習 - 第9課:Stable Diffusion
- 原始論文