---
# System prepended metadata

title: SD-30 Diffusion Model穩定擴散模型
tags: [Decoder, Stable Diffusion Model, Encoder, embedding, clip]

---

**SD-30 Diffusion Model穩定擴散模型**
![SD-30 Stable Diffusion Model穩定擴散模型](https://hackmd.io/_uploads/BkXoD5dEA.png)


推薦學習影片
**【生成式AI導論 2024】台大李宏毅教授線上課程**

* 【生成式AI導論 2024】第15講：為什麼語言模型用文字接龍，圖片生成不用像素接龍呢？— 淺談生成式人工智慧的生成策略
https://www.youtube.com/watch?v=QbwQR9sjWbs&t=4s

![螢幕擷取畫面 2024-05-19 202556](https://hackmd.io/_uploads/rJ9QCsUV0.png)

![螢幕擷取畫面 2024-05-19 202615](https://hackmd.io/_uploads/By_x0oUVR.png)

![螢幕擷取畫面 2024-05-19 210256](https://hackmd.io/_uploads/rJmWAoU4R.png)


* 【生成式AI導論 2024】第17講：
* 有關影像的生成式AI (上) — AI 如何產生圖片和影片 (Sora 背後可能用的原理)
![image](https://hackmd.io/_uploads/BkAtB9_V0.png)

在深度學習技術蓬勃發展之前，影像處理往往需要按照人為制定的特徵抽取方式，先將影像轉換成特徵，再以這些特徵作為模型的輸入。這種處理方式需要將影像處理拆解成多個步驟。隨著深度學習的興起，類神經網路可以直接使用最原始的像素作為輸入，無需再將影像處理切分成多個步驟。但是，為了生成更高清、更細緻的影像，在 "patch" 上進行處理又成為了必要的步驟，這種做法似乎讓我們重新回到了過去需要抽取特徵的框架中，然而，與傳統方法不同的是，這次的 "patch" 特徵是由另一個類神經網路自動學習和提取的，而非依賴人工設計。

* 【生成式AI導論 2024】第18講：
有關影像的生成式AI (下) — 快速導讀經典影像生成方法 (VAE, Flow, Diffusion, GAN) 以及與生成的影片互動
![image](https://hackmd.io/_uploads/SkvBP9c4A.png)

![image](https://hackmd.io/_uploads/rkW7v5qEA.png)

* **穩定擴散：AI 如何將文字轉換為圖像**
文章連結網址:
https://levelup.gitconnected.com/stable-diffusion-how-ai-converts-text-to-images-68943171bd8a
![image](https://hackmd.io/_uploads/ryyEITLEC.png)

中文摘要
穩定擴散模型的最終目標是根據文字提示產生圖像。這種類型的圖像生成是有條件的，這是意味著我們在圖像生成中添加了一個條件（文字提示）。為了幫助我們理解，讓我們從無條件生成開始，它不使用文字提示。

無條件生成仍然需要訓練，因此為了理解這一點，讓我們來看一張起始圖像：
![image](https://hackmd.io/_uploads/SyA8jjLVR.png)

上面的圖像位於我們所說的像素空間。所有這一切真正意味著圖像以像素表示。為了舉例說明，假設影像的尺寸為 1024x1024 像素。理解這個圖像對我們來說很簡單，但是對於機器來說，這實際上非常複雜。這就是穩定擴散管道的第一部分Encoder（編碼）發揮作用的地方。

在編碼過程中，圖像被傳遞到圖像編碼器，圖像編碼器將它們傳輸到潛在空間。與像素空間相比，潛在空間對我們來說更難理解，但對於管道中的計算卻容易得多。在潛在空間中，模型開始理解影像的特徵而不是像素。例如，它可以學習臉部特徵。在此階段，圖像被表示為張量，您可能從其他項目或套件（例如tensorflow）中聽說過它。隨後，解碼器將影像從潛在空間解碼回像素空間。那是很多步驟；讓我們用一個快速的圖表來回顧一下：

![image](https://hackmd.io/_uploads/B1w6oo8E0.png)

上圖應該看得更清楚；如果我們忽略穩定擴散，編碼器和解碼器實際上只是接收影像，學習潛在特徵，然後從這些特徵再現相同的影像。重要的是，潛在特徵可以用來表示然後再現影像。

在潛在空間中，我們開始執行穩定擴散的「擴散」部分。這些範例將展示在像素空間中發生的情況，這更容易表示。擴散過程利用高斯雜訊為影像添加隨機性。這種情況發生在許多時間步長上，時間步長與添加的噪音量有關。例如：

![image](https://hackmd.io/_uploads/ryd1njUEA.png)

時間步數越多，影像看起來就越不像一開始的樣子，或是變得越吵雜。但這有什麼幫助呢？這是有趣的一點；雜訊影像被傳遞給預測器，該預測器嘗試猜測影像中存在多少雜訊。這樣我們就得到了噪音的表示。這是一個複雜的過程，讓我們回顧一下到目前為止的過程：

![image](https://hackmd.io/_uploads/SyrZ2o8E0.png)

這可能聽起來令人困惑，因為我們想要的是一個預測器來告訴我們影像是什麼樣子，而不是雜訊是什麼樣子！然而，透過成功預測添加到影像中的雜訊量，我們可以開始從雜訊影像中減去該雜訊。所以實際上我們只是做了與之前相反的操作，但這次將圖像從嘈雜的圖像變為原始圖像的新版本：

![image](https://hackmd.io/_uploads/BkPunsIVR.png)

這就是無條件影像生成的真正目的。我們現在可以從完整的噪聲或隨機張量開始，然後預測並減去噪聲，直到我們最終得到一張像訓練中使用的圖像一樣的圖像。

在調節開始之前，模型需要理解用於調節圖像的文字。首先，文字提示被標記並傳遞到嵌入。嵌入將單字表示為數字向量，其中相似的單字靠得更近。例如，“女王”對應“國王”，就像“女人”對應“男人”一樣。以圖表的形式思考這些嵌入也很有幫助，這比實際情況簡單得多：

![image](https://hackmd.io/_uploads/rkVinsU4C.png)

這種嵌入幾乎可以用來指導（或條件）影像生成。但在此之前，它會被傳遞給轉換器，幫助管道理解提示中單字的上下文。此步驟的輸出是轉換後的提示，現在可以用於調節。此轉換步驟還涉及將文字表示為張量，這與先前圖像的情況非常相似。

產生的調節部分使用了一種稱為交叉注意力的技術，該技術基本上正如其聽起來的那樣。在生成過程中，隨著雜訊圖像變成新圖像，管道同時專注於圖像和文字。因此，無論提示有何要求，該模型都會起到降噪作用。現在已經按照文字提示的指導對雜訊影像進行了去噪！

當然，在大規模網路中，尤其是在大型人工智慧公司使用的網路中，還有更多步驟。例如，從使用者那裡獲取有關最佳圖像的回饋，然後將這些資料回饋到訓練過程中。

* **Stable Diffusion 原理**
(Visualization of stable diffusion, what's inside?)
https://www.youtube.com/watch?v=ezgKJhi0Czc

大概過程就是
第一步，利用Transformer模型（後面為了敘述方便，簡稱變壓器模型，或變模），把圖片盡可能分成無數小塊，然後對圖片從清晰到模糊，又從模糊到清晰來回訓練，這個過程中並不是簡單加噪點，而是利用算法去歸納物體邊緣，簡單來說就好像我們睡得迷迷糊糊，然後睜眼看人，在這個過程中，就是從一大團模模糊糊的圖像到清晰圖像的過程。這個過程在我們大腦裡其實是用神經計算的。AI也是類似的。
第二步，用diffusion模型，簡稱擴展模型，或擴模，不斷預測或生成新圖像，類似人類看見一個從遠處走來的物體，或者從拐角走出來的物體，我們會逐漸認清是一個動物還是一個人什麼的，擴模其實也是AⅠ一步一步生成人類認可與熟悉的圖像，這個過程需要無數次訓練。
第三步，以前變模與擴模需要大量人工標註，但後來加入了自註意力機制，電腦可以自己生成，自己訓練自己，結果速度大大加快，當然，模型會不會自己越訓練越錯，理論上是有可能的，就像一個學走路的小孩，開頭我們牽著他手走一段後，然後放手讓他自己走，他一開始就會摔倒，聰明的小孩就會爬起來繼續走，那麼他遇到坑，或者突起，或者轉彎，他都會自己摸索繞過，但笨的小孩可能就會趴在地上慢慢的爬，或者是躺在地上不走了。總之，人類有了大量的數據餵給模型訓練之後，模型出錯的機會就變少了。
第四步，如果要生成視頻，只要加上時間軸線訓練就行了。
上面幾個步驟就是來回跌代，調參數，調模型。


* **DIT架構**
https://www.youtube.com/watch?v=PIGAPe8C0-I