# 生成式圖畫AI 原理(講不到的已劃掉) ### Diffusion model 1. Step 1:給一張完整的圖片(清楚說明) 2. Step 2:以高斯分布(常態分佈)的方式往圖片上加入隨機噪點,從一張圖到混亂雜訊,從混亂雜訊中生成圖 3. Step 3:不斷調整參數,以生成圖片(加入變方自編碼器) #### 專有名詞解釋 ##### 高斯分布(常態分佈)(Normal Distribution) 1. 很多隨機分布的結果產生的圖 ![image](https://hackmd.io/_uploads/B16wsprRa.png) ##### 變方自編碼器(Variational Auto-encoder ,VAE) ![image](https://hackmd.io/_uploads/Hk9Qa6H06.png) 1. 最大化生成數據的相似性 2. 可以解讀隱含向量中的每一個維度代表的意思 3. 編碼器:輸入數據映射到均值和變異數參數 4. Latent Space:壓縮數據後的存放空間 5. 解碼器:使用這些參數來生成新的樣本 6. 損失函數:實際值和預測值的殘差 1. 重建損失(Reconstruction Loss): a.用來衡量解碼器生成的數據與原始數據之間的差異 b.通常使用均方誤差或二元交叉熵 ⭑均方誤差(MSE):預測值和實際觀測值間差的平方的均值 ⭑二元交叉熵(binary cross entropy):當ya == 1,帶到橘色,以此類推 ⭑交叉熵(Cross Entropy):有K個類別,每個樣本有自己的標籤ya(e.g. y1、y2...),a為第a類的標籤 ![image](https://hackmd.io/_uploads/rku-cABAa.png) 2. 正則化損失(Regularization Loss):對損失函數中的某些參數做一些限制(懲罰項) ## 圖片生成framework > 【生成式AI】Stable Diffusion、DALL-E、Imagen 背後共同的套路 https://www.youtube.com/watch?v=JbfcAaBT66U ![image](https://hackmd.io/_uploads/H1zBPhG10.png) ### Text Encoder 1. 輸入文字 2. 文字模型對生成圖片結果影響較大 (a)為文字encoder model大小 * T5為Google用的encoder * 結果越往右下越好 (b)為Diffusion Model中的Noise Predicter大小 * 可見影響不大 ![螢幕擷取畫面 2024-03-19 104446](https://hackmd.io/_uploads/BJAE3_I0a.png) ### Generation Model 1. 用文字的representaiton產生中間產物圖片壓縮的結果,可以是小圖或是Latent Representation 2. 先從Normal Distribution裡Sample出Latent Representiton 3. 不斷加上文字(文字也是以Latent Representiton來表示),然後經過Denoise的Model去掉Noise 4. 反覆直到產出的結果夠好了 ### Decoder 1. 將中間產物轉為成圖片,可以是小圖或是Latent Representation 2. 如何訓練出Decoder模型 * 小圖 * 輸入小圖 * 再將它還原成一張圖片 * Latent Representation * 訓練Autoencoder * 先有encoder書一張圖片 * 將圖片轉變成一個Latent Representation * 用Decoder還原為原來的圖片,使輸入與輸出越近越好 ### 專有名詞介紹 #### ~~Frchét Inception Distance(FID)~~ 真實圖片與生成圖片兩者的距離,越小越好 ![螢幕擷取畫面 2024-03-19 110519](https://hackmd.io/_uploads/H17Z-KUAp.png) #### ~~Contrastive Language-Image Pre-Training(CLIP)~~ 內涵圖片與文字的兩個encoder,計算兩者向量的距離,結果算出,文字與圖片的對應關係越大越好 ![螢幕擷取畫面 2024-03-19 111058](https://hackmd.io/_uploads/Syr87FLAa.png) ## ~~~~生成方法~~~~ > 【生成式AI】生成式學習的兩種策略:要各個擊破,還是要一次到位 > https://www.youtube.com/watch?v=AihBniegMKg ### Autoregressive(AR)-各個擊破 * 一次產生一個元素,接著參考前面生出的繼續生成 * 非常花時間 * 品質好,因依序生成,導致生成關聯性較合理 ### Non-autoregressive(NAR)-一次到位 * 一次把所有像素Pixel產生出來 * 有足夠的平性運算能力,就能省很多時間 * 品質較差,因關聯性可能會出錯 ### 結合兩者優勢-N次到位 * 方法 1. 先用一次到位,生成較模糊的照片 2. 再用一次到位的方法將其變得更清楚 3. 接著不斷反覆 * 因優先決定好大致方向,較不會有邏輯奇怪的地方 ## Generation Model > ML Lecture 17: Unsupervised Learning - Deep Generative Model (Part I) > https://www.youtube.com/watch?v=YNUek8ioAJk&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49&index=26 > ML Lecture 18: Unsupervised Learning - Deep Generative Model (Part II) > https://www.youtube.com/watch?v=8zomhgKrsmQ&list=PLJV_el3uVTsPy9oCRY30oBPNLCo89yu49&index=28 >【生成式AI】速覽圖像生成常見模型 > https://www.youtube.com/watch?v=z83Edfvgd9g ### Autoencoder(AE)2006 > 【機器學習2021】自編碼器 (Auto-encoder) (上) – 基本概念 > https://www.youtube.com/watch?v=3oHlf8-J3Nc > 【機器學習2021】自編碼器 (Auto-encoder) (下) – 領結變聲器與更多應用 > https://www.youtube.com/watch?v=JZvEzb5PV3U * encoder 和 decoder 分別就是壓縮和解壓縮 * 輸入為一個高維度的圖片,中間被壓縮成低維度,最後再被解壓縮回高維度的圖 * 或是換一個說法,原本是很長的一串code,可能100行,然後壓縮成10行,最後解壓縮回100行 * 最後要讓他解壓縮回來的圖與原本的圖越像越好 #### 壓縮 如下圖,解釋為何可以壓縮與如何壓縮 * 假設我們用來訓練的圖形有四張3*3的圖形 * 我們可以發現他們有相似的地方,並歸類成兩類 * 接著,就可以將壓縮的結果就以1*2的圖形來表示,達到辨別的效果 ![image](https://hackmd.io/_uploads/H10MPSZx0.png) #### 應用 應用還蠻廣泛的,原理都是一樣的,都會有一個reconstruct的過程 ##### 語音 * 可以在中間vector的部份的時候,有一部分是存語音內容,另一部分是說話語氣、口吻或音調之類的(說話人的特色) * 接著,就是將兩段語音做結合 * 取甲的語音的說話人的特色再結合乙的語音中的內容,就可以做到變聲器的效果 * 該段語音就會聽起來像是甲說的 ![image](https://hackmd.io/_uploads/SJOatrZeA.png) ### Variational Autoencoder(VAE)2013 > [Day5] VAE,好久不見 >https://ithelp.ithome.com.tw/articles/10323542#vae%E4%BB%8B%E7%B4%B9 * 將圖片轉為code,加上noise,使一定的範圍內reconstruct回來都會是相同的圖 * 產生的圖會與原本的圖相似 * 較無創意,且相似的圖並不代表合理,僅為模仿 * 假設放入兩張圖進去(滿月與弦月)後,我們可以取他們兩者中間的地方,去生成由兩者結合出的圖片 ![螢幕擷取畫面 2024-03-21 230459](https://hackmd.io/_uploads/ryHhh6KAp.png) #### 下圖為VAE的問題 * 由VAE生成出兩張新的與real image{7}相似的圖 * 其中左圖試圖將7下擺延長,而右圖卻是再毫不相干的空白處點了一點 * 兩者同樣與real image相似,卻能看出右圖明顯不合理 ![螢幕擷取畫面 2024-03-22 123655](https://hackmd.io/_uploads/rJTZsYcCa.png) #### 優點 1. **良好的生成能力** VAE透過編碼和解碼流程,具有良好的資料產生能力。 2. **統計特性** VAE在統計上具有更好的解釋性,可提供資料的機率分佈。 #### 缺點 1. **產生樣本可能模糊** VAE在優化重構損失時,可能會過度平滑資料分佈,導致產生的樣本模糊,品質較低。 2. **計算複雜性** VAE的訓練過程可能涉及複雜的數學計算,增加了訓練難度。 ### Generative Adversarial Network(GAN)2014 > [Day6] GAN,聽說你最強,參數很難調 > https://ithelp.ithome.com.tw/articles/10324412 > Day 28:小學生談『生成對抗網路』(Generative Adversarial Network,GAN) > https://ithelp.ithome.com.tw/articles/10196257 > Generative Adversarial Network +(李鴻毅 > https://www.youtube.com/watch?v=0CKeqXl5IY0&list=PLJV_el3uVTsPMxPbjeX7PicgWbY7F8wW9 > Improved Generative Adversarial Network (李鴻毅 > https://www.youtube.com/watch?v=KSN4QYgAtao&list=PLJV_el3uVTsPMxPbjeX7PicgWbY7F8wW9&index=18 > Simple Generative Adversarial Network (GAN) (那個擺動圖 > https://www.youtube.com/watch?v=ebMei6bYeWw > MNIST GAN Training > https://www.youtube.com/watch?v=IUi0REAWj2c * 演化的概念 ![螢幕擷取畫面 2024-03-21 230307](https://hackmd.io/_uploads/H1sDnaFRp.png) * 會有好幾代的Generater與Discriminater * 兩者皆是neural network * 第一代Generater負責以某種distribution生成一些圖片 * 接著,第一代的Discriminater會根據real image跟Generater生成的圖片去調整它的參數 * Generater的output便是Discriminater的input * 將Generater生成的圖片都標示為fake,real image標示為1為real ![螢幕擷取畫面 2024-03-23 111326](https://hackmd.io/_uploads/HJ2mFajCT.png) * 第二代Generater就會依據第一代Discriminater去update,調整參數,最後調整至生成出的圖片可以去騙過第一代的Discriminater,讓它將第二代Generater的圖片判斷為real * 接著第二代Discriminater便同第一代的Discriminater的原理去調整參數 * 然後不斷反覆的建立新的Generater與Discriminater ![螢幕擷取畫面 2024-03-21 230745](https://hackmd.io/_uploads/SkK_apY0p.png) #### 優點: 1. **高品質的生成** GAN透過生成器與判別器的對抗訓練,能生成高品質、逼真的樣本。 2. **多樣性** GAN能夠捕捉到資料分佈的多樣性,產生豐富多樣的樣本。 #### 缺點: 1. **訓練不穩定** GAN的訓練過程可能非常不穩定,難以除錯。 2. **模式崩潰問題** 在某些情況下,GAN可能會遇到模式崩潰,導致產生的樣本品質下降。 ### VAE與GAN比較 > [Day 6] 如何評估 GAN 生成影像的表現? > https://ithelp.ithome.com.tw/articles/10318402 > 深度生成模型中的兩種方法GAN和VAE,各自的優缺點有哪些 > https://docs.pingcode.com/ask/48910.html | Model | VAE | GAN | | -------- | ---- | ---- | | 影像生成 | 更適用於需要統計建模的任務 | 更適用於產生高品質的影像 | | 訓練穩定性 | 訓練過程通常較穩定 | 可能需要更精細的調試 | | 複雜性與可解釋性 | 提供了更好的統計特性和解釋性 | 通常更難以理解和調試 | ### Diffusion model(2015) > 【生成式AI】Diffusion Model 原理剖析 (1/4) (optional) > https://www.youtube.com/watch?v=ifCDXFdeaaM > 【生成式AI】淺談圖像生成模型 Diffusion Model 原理 > https://www.youtube.com/watch?v=azBugJzmz-o * 首先會先有很多次的add noise的過程,稱為Forward Process(Diffusion Process) * 再來就是Reverse Process去做一樣很多次的Denoise的過程 * 希望最後Denoise的結果與最初add noise前的原圖越像越好 ![image](https://hackmd.io/_uploads/SkPuRNMgC.png) #### Add noise * 過程中除了add noise還會也一個step的標籤 * 標籤是為了記錄圖片被加過了幾次noise(也就是noise的嚴重程度),就像是給予ID一樣 * 也是為了方便之後denoise時使用 * 數字越小就代表他越接近原圖 * 數字越大代表雜訊越多 ![image](https://hackmd.io/_uploads/H1VyvVzxC.png) #### Denoise * Denoise是透過Noise predicter完成的 * Noise predicter的功能是預測出這張圖中的noise長怎麼樣 * 輸入為一張加過noise的圖與step * 輸出為它預測出來的noise圖 * 最終再將有noise的圖再減去生成出的noise圖,產生過濾的效果 * 結果就是noise稍微變淡一點的圖 * 要注意它不是一次就變成沒有noise的圖,是透過一步一步完成的 * 每次的denoise都是使用相同的Noise predicter * 可以輸出不同程度的noise圖,主要是因為輸入的step數字不同 ![image](https://hackmd.io/_uploads/HJlCHEGg0.png) #### Noise predicter * 因為直接輸出denoise過後的圖難度比較高,其實就相當它已經會產生一隻帶有noise的貓,也就幾乎等於它自己就會畫貓了 * 為了簡化難度才選擇讓它生成出一個noise的圖片 ![image](https://hackmd.io/_uploads/ByIgFVfxA.png) ## 我覺得寫的蠻有趣的參考資料 ### VAE GAN 優缺點 > 深度生成模型中的兩種方法GAN和VAE,各自的優缺點有哪些 > https://docs.pingcode.com/ask/48910.html ### Diffusion 我覺得很有趣 > 擴散模型 - 現代AI圖像生成的大躍進 > https://www.find.org.tw/index/tech_obser/browse/528ee009bdd5fdc88b41af7669010306/ ### Diffusion 和 GAN 這個也很有趣 > 眼見不一定為憑?生成式AI帶來的信任危機! > https://www.cmmedia.com.tw/home/articles/44235?utm_source=YH ### Diffusion 很長,但是詳細到炸裂,下面數學的部分根本看不懂可以略過 > 實作理解Diffusion Model: 來自DDPM的簡化概念 > https://medium.com/ai-blog-tw/%E9%82%8A%E5%AF%A6%E4%BD%9C%E9%82%8A%E5%AD%B8%E7%BF%92diffusion-model-%E5%BE%9Eddpm%E7%9A%84%E7%B0%A1%E5%8C%96%E6%A6%82%E5%BF%B5%E7%90%86%E8%A7%A3-4c565a1c09c ### Diffusion 和 GAN 很多幹話,但他融入的很多時事或是現實的東西來比喻 > Midjourney V5來了!透過 AI 繪圖原理,你就知道怎麼訓練做圖生成! > https://www.youtube.com/watch?v=EpoE7D2wOeU ### Model 合集 很多亂七八糟的東西,但有很多是參考李宏毅的寫的 > https://ithelp.ithome.com.tw/users/20120468/ironman/6878 > https://ithelp.ithome.com.tw/users/20162522/ironman/6400