**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