---
# System prepended metadata

title: '【生成式AI導論 2024】第18講：有關影像的生成式AI (下) — 快速導讀經典影像生成方法 (VAE, Flow, Diffusion, GAN) 以及與生成的影片互動'
tags: [生成式AI導論 2024]

---

# 【生成式AI導論 2024】第18講：有關影像的生成式AI (下) — 快速導讀經典影像生成方法 (VAE, Flow, Diffusion, GAN) 以及與生成的影片互動

## 經典影像生成方法

* Variational Auto-encoder(VAE)
* Diffusion Method
    * 現今最常用的
    * Sora的方法
    * 從一堆雜訊生成就是Diffusion Method
* Generative Adversarial Network(GAN)

## 文字生影像的挑戰

### 訓練時資訊不足

* 文字的敘述通常沒辦法很完整的表達圖片內容
* 例如沒有敘述背景、沒有說名物體的顏色花樣。模型往往只拿到"狗"的敘述，就會將柴犬與哈士奇搞混，不知道要生成哪種patch的組合。![image](https://hackmd.io/_uploads/ByUQL4efle.png)
* 解決方法是給予更詳細的資訊![image](https://hackmd.io/_uploads/HykYLVgzee.png)
* 可以訓練一個模型(暫稱為抽取模型)來擷取更詳細的資訊![image](https://hackmd.io/_uploads/rJbO84gzxe.png)
* 抽取模型與生成模型是可以同步訓練的![image](https://hackmd.io/_uploads/Hkj2BVlGxg.png)
    1. 抽取模型從資料庫中取得照片與敘述，並抽取缺少的詳細資訊
    2. 生成模型使用照片敘述與抽取資訊進行影像生成
    3. 比對原始影像與生成影像，越接近越好
* 資訊抽取出來什麼資料不重要，目的是讓生成影像與原始影像相近就好。因此也是向量![image](https://hackmd.io/_uploads/rky_PNgfel.png)

> [!Note]
> 讓輸出與輸入相近的這個訓練框架名稱就是Auto-Encoder

### 實際生成時資訊不足

* 剛才提到訓練時可以抽取原始影像的資訊，取得缺少的詳細資訊![image](https://hackmd.io/_uploads/B1IVOElzxx.png)
* 而實際生成時，沒有實際影像可以抽取資訊。
* 因此可以用隨機值，決定中間的抽取資訊![image](https://hackmd.io/_uploads/B1cXOVefxe.png)
* 這種做法就是經典生成方法VAE![image](https://hackmd.io/_uploads/ByC2_VeGxx.png)
* 另一種Flow-based方法則是只使用Decoder，並將Decoder設計為Invertible![image](https://hackmd.io/_uploads/S1NpdVgzel.png)
* 我們通常將中間抽取出來的資訊叫做noise，noise中包含了很重要的資訊![image](https://hackmd.io/_uploads/rk4QF4eflx.png)我們甚至可以透過改造noise，生成不同的照片![image](https://hackmd.io/_uploads/SykCFVxzlg.png)![image](https://hackmd.io/_uploads/HywZcEgMlx.png)

## Diffusion Model

### 原理

(這是極度簡化後的講法，詳細說明請見[影片](https://www.youtube.com/watch?v=azBugJzmz-o&list=PLJV_el3uVTsNi7PgekEUFsyVllAJXRsP-&index=2))
* 反覆使用同一個Decoder(Denoise)，每次在生圖時Decoder就是負責去除雜訊![image](https://hackmd.io/_uploads/HJDE6Nlzgx.png)
* 通常會反覆進行下去，多次後就可以得到清晰的圖片。![image](https://hackmd.io/_uploads/S1gH6NgMxg.png)

### 訓練

* 將原始照片不停加上雜訊，就可以得到每個Denoise階段應該要有的樣子![image](https://hackmd.io/_uploads/rkE7CNezeg.png)
* 接著使用文字敘述+每個階段的照片，就可以訓練出Denoise。![image](https://hackmd.io/_uploads/ByCQR4lMxx.png)
* Diffusion model使用Transformer就是[Diffusion Transformer](https://arxiv.org/abs/2212.09748)，Sora就是使用這個技術![image](https://hackmd.io/_uploads/rJ2O0EgGgx.png)

## GAN

* GAN則無法跟上面的Auto Encoder架構類比
* GAN會先訓練一個Discriminator，用來評斷圖片與敘述匹配的好壞![image](https://hackmd.io/_uploads/SJGeFBezxl.png)
* Generator接下來不使用原始影像學習，則是透過Discriminator學習![image](https://hackmd.io/_uploads/B1wr5SgGeg.png)
* 這樣的好處是答案不再單一，不會只學習資料庫中有的影像
* Discriminator與Generator會互相交替訓練。兩者越來越強。
* 在使用Discriminator訓練的情況下，可以不使用雜訊統一圖片生成的統一性。這是老師的實驗結論。
* GAN只是一個工具強化外掛，可以跟其他方法結合![image](https://hackmd.io/_uploads/By4kiBxMgx.png)
