最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Stable Diffusion原理詳解

2023-05-25 15:19 作者:AI精品課程搬運(yùn)工  | 我要投稿

最近AI圖像生成異?;鸨?,聽說鵝廠都開始用AI圖像生成做前期設(shè)定了,小廠更是直接用AI替代了原畫師的崗位。這一張張豐富細(xì)膩、風(fēng)格各異、以假亂真的AI生成圖像,背后離不開Stable Diffusion算法。


Stable Diffusion是stability.ai開源的圖像生成模型,可以說Stable Diffusion的發(fā)布將AI圖像生成提高到了全新高度,其效果和影響不亞于Open AI發(fā)布ChatGPT。今天我們就一起學(xué)習(xí)一下Stable Diffusion的原理。

文章目錄


    • 潛在空間(Lantent Space)

    • Latent Diffusion


    • 整體架構(gòu)

    • 感知壓縮

    • 語義壓縮

    • 感知損失

    • 擴(kuò)散損失

    • 條件擴(kuò)散

    • 注意力機(jī)制

    • 文本-圖像合成

    • 圖像-圖像合成

    • 圖像生成的發(fā)展

    • 擴(kuò)散模型

    • Transformer

    • Stable Diffusion


    • 總結(jié)

圖像生成的發(fā)展

在Stable Diffusion誕生之前,計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)方面最重要的突破是 GAN(Generative Adversarial Networks 生成對抗網(wǎng)絡(luò))。GAN讓超越訓(xùn)練數(shù)據(jù)已有內(nèi)容成為可能,從而打開了一個全新領(lǐng)域——現(xiàn)在稱之為生成建模。


然而,在經(jīng)歷了一段蓬勃發(fā)展后,GAN開始暴露出一些瓶頸和弊病,大家傾注了很多心血努力解決對抗性方法所面臨的一些瓶頸,但是鮮有突破,GAN由此進(jìn)入平臺期。GAN的主要問題在于:


圖像生成缺乏多樣性

模式崩潰

多模態(tài)分布學(xué)習(xí)困難

訓(xùn)練時(shí)間長

由于問題表述的對抗性,不容易訓(xùn)練

另外,還有一條基于似然(例如,馬爾可夫隨機(jī)場)的技術(shù)路線,盡管已經(jīng)存在很久,但由于對每個問題的實(shí)施和制定都很復(fù)雜,因此未能產(chǎn)生重大影響。


近幾年,隨著算力的增長,一些過去算力無法滿足的復(fù)雜算法得以實(shí)現(xiàn),其中有一種方法叫“擴(kuò)散模型”——一種從氣體擴(kuò)散的物理過程中汲取靈感并試圖在多個科學(xué)領(lǐng)域模擬相同現(xiàn)象的方法。該模型在圖像生成領(lǐng)域展現(xiàn)了巨大的潛力,成為今天Stable Diffusion的基礎(chǔ)。


擴(kuò)散模型

擴(kuò)散模型是一種生成模型,用于生成與訓(xùn)練數(shù)據(jù)相似的數(shù)據(jù)。簡單的說,擴(kuò)散模型的工作方式是通過迭代添加高斯噪聲來“破壞”訓(xùn)練數(shù)據(jù),然后學(xué)習(xí)如何消除噪聲來恢復(fù)數(shù)據(jù)。


一個標(biāo)準(zhǔn)擴(kuò)散模型有兩個主要過程:正向擴(kuò)散和反向擴(kuò)散。


在正向擴(kuò)散階段,通過逐漸引入噪聲來破壞圖像,直到圖像變成完全隨機(jī)的噪聲。


在反向擴(kuò)散階段,使用一系列馬爾可夫鏈逐步去除預(yù)測噪聲,從高斯噪聲中恢復(fù)數(shù)據(jù)1。

通過緩慢添加(去除)噪聲來生成樣本的正向(反向)擴(kuò)散過程的馬爾可夫鏈(圖片來源: Jonathan Ho, Ajay Jain, Pieter Abbeel. 2020)

對于噪聲的估計(jì)和去除,最常使用的是 U-Net。該神經(jīng)網(wǎng)絡(luò)的架構(gòu)看起來像字母 U,由此得名。U-Net 是一個全連接卷積神經(jīng)網(wǎng)絡(luò),這使得它對圖像處理非常有用。U-Net的特點(diǎn)在于它能夠?qū)D像作為入口,并通過減少采樣來找到該圖像的低維表示,這使得它更適合處理和查找重要屬性,然后通過增加采樣將圖像恢復(fù)回來。


一個典型的U-Net架構(gòu)實(shí)例

具體的說,所謂去除噪聲就是從時(shí)間幀 t tt 向時(shí)間幀 t ? 1 t-1t?1 的變換,其中 t tt 是 t 0 t_0t?

0


? (沒有噪聲)到 t m a x t_{max}t?

max


?(完全噪聲)之間的任意時(shí)間幀。變換規(guī)則為:


輸入時(shí)間幀 t tt 的圖像,并且在該時(shí)間幀上圖像存在特定噪聲;

使用 U-Net 預(yù)測總噪聲量;

然后在時(shí)間幀 t tt 的圖像中去除總噪聲的“一部分”,得到噪聲較少的時(shí)間幀 t ? 1 t-1t?1 的圖像。

向圖片逐步增加/刪除噪聲

從數(shù)學(xué)上講,執(zhí)行此上述方法 T TT 次比嘗試消除整個噪聲更有意義。通過重復(fù)這個過程,噪聲會逐漸被去除,我們會得到一個更“干凈”的圖像。比如對于帶有噪聲的圖,我們通過在初始圖像上添加完全噪聲,然后再迭代地去除它來生成沒有噪聲的圖像,效果比直接在原圖上去除噪聲要好。


近幾年,擴(kuò)散模型在圖像生成任務(wù)中表現(xiàn)出突出的性能,并在圖像合成等多個任務(wù)中取代了GAN。由于擴(kuò)散模型能夠保持?jǐn)?shù)據(jù)的語義結(jié)構(gòu),因此不會受到模式崩潰的影響。


然而,實(shí)現(xiàn)擴(kuò)散模型存在一些困難。因?yàn)樗旭R爾可夫狀態(tài)都需要一直在內(nèi)存中進(jìn)行預(yù)測,這意味著內(nèi)存中要一直保存多個大型深度網(wǎng)絡(luò)的實(shí)例,從而導(dǎo)致擴(kuò)散模型非常吃內(nèi)存。此外,擴(kuò)散模型可能會陷入圖像數(shù)據(jù)中難以察覺的細(xì)粒度復(fù)雜性中,導(dǎo)致訓(xùn)練時(shí)間變得太長(幾天到幾個月)。矛盾的是,細(xì)粒度圖像生成是擴(kuò)散模型的主要優(yōu)勢之一,我們無法避免這個“甜蜜的煩惱”。由于擴(kuò)散模型對計(jì)算要求非常高,訓(xùn)練需要非常大的內(nèi)存和電量,這使得早前大多數(shù)研究人員無法在現(xiàn)實(shí)中實(shí)現(xiàn)該模型。


Transformer

Transformer是來自 NLP 領(lǐng)域的非常著名的模型方法。Transformer在語言建模和構(gòu)建對話式 AI 工具方面取得了巨大成功。 在視覺應(yīng)用中,Transformer 表現(xiàn)出了泛化和自適應(yīng)的優(yōu)勢,這使得它們非常適合通用學(xué)習(xí)。 它們比其他技術(shù)能夠更好地捕捉文本甚至圖像中的語義結(jié)構(gòu)。 然而,Transformers 需要大量數(shù)據(jù),并且與其他方法相比,在許多視覺領(lǐng)域的性能方面也面臨著平臺期。


Transformer可以與擴(kuò)散模型結(jié)合,通過Transformer的“詞嵌入”可以將文本插入到模型中。這意味著將詞Token化后,然后將這種文本表示添加到U-Net的輸入(圖像)中,經(jīng)過每一層U-Net神經(jīng)網(wǎng)絡(luò)與圖像一起進(jìn)行變換。從第一次迭代開始到之后的每一次迭代都加入相同的文本,從而讓文本“作為指南”生成圖像,從有完整噪聲的第一次迭代開始,然后進(jìn)一步向下應(yīng)用到整個迭代。

Stable Diffusion

擴(kuò)散模型最大的問題是它的時(shí)間成本和經(jīng)濟(jì)成本都極其“昂貴”。Stable Diffusion的出現(xiàn)就是為了解決上述問題。如果我們想要生成一張 1024 × 1024 1024 \times 10241024×1024 尺寸的圖像,U-Net 會使用 1024 × 1024 1024 \times 10241024×1024 尺寸的噪聲,然后從中生成圖像。這里做一步擴(kuò)散的計(jì)算量就很大,更別說要循環(huán)迭代多次直到100%。一個解決方法是將大圖片拆分為若干小分辨率的圖片進(jìn)行訓(xùn)練,然后再使用一個額外的神經(jīng)網(wǎng)絡(luò)來產(chǎn)生更大分辨率的圖像(超分辨率擴(kuò)散)。


2021年發(fā)布的Latent Diffusion模型給出了不一樣的方法。 Latent Diffusion模型不直接在操作圖像,而是在潛在空間中進(jìn)行操作。通過將原始數(shù)據(jù)編碼到更小的空間中,讓U-Net可以在低維表示上添加和刪除噪聲。


潛在空間(Lantent Space)

潛在空間簡單的說是對壓縮數(shù)據(jù)的表示。所謂壓縮指的是用比原始表示更小的數(shù)位來編碼信息的過程。比如我們用一個顏色通道(黑白灰)來表示原來由RGB三原色構(gòu)成的圖片,此時(shí)每個像素點(diǎn)的顏色向量由3維變成了1維度。維度降低會丟失一部分信息,然而在某些情況下,降維不是件壞事。通過降維我們可以過濾掉一些不太重要的信息你,只保留最重要的信息。


假設(shè)我們像通過全連接的卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練一個圖像分類模型。當(dāng)我們說模型在學(xué)習(xí)時(shí),我們的意思是它在學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)每一層的特定屬性,比如邊緣、角度、形狀等……每當(dāng)模型使用數(shù)據(jù)(已經(jīng)存在的圖像)學(xué)習(xí)時(shí),都會將圖像的尺寸先減小再恢復(fù)到原始尺寸。最后,模型使用解碼器從壓縮數(shù)據(jù)中重建圖像,同時(shí)學(xué)習(xí)之前的所有相關(guān)信息。因此,空間變小,以便提取和保留最重要的屬性。這就是潛在空間適用于擴(kuò)散模型的原因。

利用卷積神經(jīng)網(wǎng)絡(luò)提取最重要的屬性

Latent Diffusion

“潛在擴(kuò)散模型”(Latent Diffusion Model)將GAN的感知能力、擴(kuò)散模型的細(xì)節(jié)保存能力和Transformer的語義能力三者結(jié)合,創(chuàng)造出比上述所有模型更穩(wěn)健和高效的生成模型。與其他方法相比,Latent Diffusion不僅節(jié)省了內(nèi)存,而且生成的圖像保持了多樣性和高細(xì)節(jié)度,同時(shí)圖像還保留了數(shù)據(jù)的語義結(jié)構(gòu)。


任何生成性學(xué)習(xí)方法都有兩個主要階段:感知壓縮和語義壓縮。


感知壓縮

在感知壓縮學(xué)習(xí)階段,學(xué)習(xí)方法必須去除高頻細(xì)節(jié)將數(shù)據(jù)封裝到抽象表示中。此步驟對構(gòu)建一個穩(wěn)定、魯棒的環(huán)境表示是必要的。GAN 擅長感知壓縮,通過將高維冗余數(shù)據(jù)從像素空間投影到潛在空間的超空間來實(shí)現(xiàn)這一點(diǎn)。潛在空間中的潛在向量是原始像素圖像的壓縮形式,可以有效地代替原始圖像。


更具體地說,用自動編碼器 (Auto Encoder) 結(jié)構(gòu)捕獲感知壓縮。 自動編碼器中的編碼器將高維數(shù)據(jù)投影到潛在空間,解碼器從潛在空間恢復(fù)圖像。

自動編碼器和解碼器構(gòu)成感知壓縮

語義壓縮

在學(xué)習(xí)的第二階段,圖像生成方法必須能夠捕獲數(shù)據(jù)中存在的語義結(jié)構(gòu)。 這種概念和語義結(jié)構(gòu)提供了圖像中各種對象的上下文和相互關(guān)系的保存。 Transformer擅長捕捉文本和圖像中的語義結(jié)構(gòu)。 Transformer的泛化能力和擴(kuò)散模型的細(xì)節(jié)保存能力相結(jié)合,提供了兩全其美的方法,并提供了一種生成細(xì)粒度的高度細(xì)節(jié)圖像的方法,同時(shí)保留圖像中的語義結(jié)構(gòu)。


感知損失

潛在擴(kuò)散模型中的自動編碼器通過將數(shù)據(jù)投影到潛在空間來捕獲數(shù)據(jù)的感知結(jié)構(gòu)。論文作者使用一種特殊的損失函數(shù)來訓(xùn)練這種稱為“感知損失”的自動編碼器。該損失函數(shù)確保重建限制在圖像流形內(nèi),并減少使用像素空間損失(例如 L1/L2 損失)時(shí)出現(xiàn)的模糊。


擴(kuò)散損失

擴(kuò)散模型通過從正態(tài)分布變量中逐步去除噪聲來學(xué)習(xí)數(shù)據(jù)分布。換句話說,擴(kuò)散模型使用長度為 T TT 的反向馬爾可夫鏈。這也意味著擴(kuò)散模型可以建模為時(shí)間步長為 t = 1 , … , T t =1,\dots,Tt=1,…,T 的一系列“T”去噪自動編碼器。由下方公式中的 ? θ \epsilon_\theta??

θ


?表示:

L?

DM


?=E?

x,?~N(0,1),t


?[∣∣????

θ


?(x?

t


?,t)∣∣?

2

2


?](1)


公式(1)給出了擴(kuò)散模型的損失函數(shù)。在潛在擴(kuò)散模型中,損失函數(shù)取決于潛在向量而不是像素空間。我們將像素空間元素x xx替換成潛在向量ε ( x ) \varepsilon(x)ε(x),將t時(shí)間的狀態(tài)x t x_tx?

t


?替換為去噪U(xiǎn)-Net在時(shí)間t的潛在狀態(tài)z t z_tz?

t


?,即可得到潛在擴(kuò)散模型的損失函數(shù),見公式(2):


L L D M : = E ε ( x ) , ? ~ N ( 0 , 1 ) , t [ ∣ ∣ ? ? ? θ ( z t , t ) ∣ ∣ 2 2 ] (2) L_{LDM} := \mathbb{E}_{\varepsilon(x), \epsilon\sim \mathcal{N}(0, 1), t} \Big\lbrack||\epsilon-\epsilon_\theta(z_t, t)||_2^2\Big\rbrack \tag{2}

L?

LDM


?:=E?

ε(x),?~N(0,1),t


?[∣∣????

θ


?(z?

t


?,t)∣∣?

2

2


?](2)


將公式(2)寫成條件損失函數(shù),得到公式(3):


L L D M : = E ε ( x ) , y , ? ~ N ( 0 , 1 ) , t [ ∣ ∣ ? ? ? θ ( z t , t ) , τ θ ( y ) ∣ ∣ 2 2 ] (3) L_{LDM} := \mathbb{E}_{\varepsilon(x), y, \epsilon\sim \mathcal{N}(0, 1), t} \Big\lbrack||\epsilon-\epsilon_\theta(z_t, t),\tau_\theta(y)||_2^2 \Big\rbrack \tag{3}

L?

LDM


?:=E?

ε(x),y,?~N(0,1),t


?[∣∣????

θ


?(z?

t


?,t),τ?

θ


?(y)∣∣?

2

2


?](3)


其中τ θ ( y ) \tau_\theta(y)τ?

θ


?(y)是條件y yy下的領(lǐng)域?qū)S镁幋a器(比如Transformer)。


條件擴(kuò)散

擴(kuò)散模型是依賴于先驗(yàn)的條件模型。在圖像生成任務(wù)中,先驗(yàn)通常是文本、圖像或語義圖。為了獲得先驗(yàn)的潛在表示,需要使用轉(zhuǎn)換器(例如 CLIP)將文本/圖像嵌入到潛在向量τ \tauτ中。因此,最終的損失函數(shù)不僅取決于原始圖像的潛在空間,還取決于條件的潛在嵌入。


注意力機(jī)制

潛在擴(kuò)散模型的主干是具有稀疏連接的 U-Net 自動編碼器,提供交叉注意力機(jī)制2。Transformer 網(wǎng)絡(luò)將條件文本/圖像編碼為潛在嵌入,后者又通過交叉注意力層映射到 U-Net 的中間層。這個交叉注意力層實(shí)現(xiàn)了注意力 ( Q , K , V ) = s o f t m a x ( Q K T / d ) V (Q,K,V) = softmax(QKT/\sqrts0sssss00s) V(Q,K,V)=softmax(QKT/?

d


?)V,其中 Q、K 和 V 是可學(xué)習(xí)的投影矩陣


文本-圖像合成

在 Python 實(shí)現(xiàn)中,我們可以使用使用 LDM v4 的最新官方實(shí)現(xiàn)來生成圖像。 在文本到圖像的合成中,潛在擴(kuò)散模型使用預(yù)訓(xùn)練的 CLIP 模型3,該模型為文本和圖像等多種模態(tài)提供基于Transformer的通用嵌入。 然后將Transformer模型的輸出輸入到稱為“diffusers”的潛在擴(kuò)散模型Python API,同時(shí)還可以設(shè)置一些參數(shù)(例如,擴(kuò)散步數(shù)、隨機(jī)數(shù)種子、圖像大小等)。


圖像-圖像合成

相同的方法同樣適用于圖像到圖像的合成,不同的是需要輸入樣本圖像作為參考圖像。生成的圖像在語義和視覺上與作為參考給出的圖像相似。這個過程在概念上類似于基于樣式的 GAN 模型,但它在保留圖像的語義結(jié)構(gòu)方面做得更好。


整體架構(gòu)

上面介紹了潛在擴(kuò)散模型的各個主要技術(shù)部分,下面我們將它們合成一個整理,看一下潛在擴(kuò)散模型的完整工作流程。

潛在擴(kuò)散模型的架構(gòu)(圖片來源:Rombach & Blattmann, et al. 2022)

上圖中 x xx 表示輸入圖像,x ~ \tilde{x}?

x

~

? 表示生成的圖像;ε \varepsilonε 是編碼器,D \cal{D}D 是解碼器,二者共同構(gòu)成了感知壓縮;z zz 是潛在向量;z T z_Tz?

T


? 是增加噪聲后的潛在向量;τ θ \tau_\thetaτ?

θ


? 是文本/圖像的編碼器(比如Transformer或CLIP),實(shí)現(xiàn)了語義壓縮。


總結(jié)

本文向大家介紹了圖像生成領(lǐng)域最前沿的Stable Diffusion模型。本質(zhì)上Stable Diffusion屬于潛在擴(kuò)散模型(Latent Diffusion Model)。潛在擴(kuò)散模型在生成細(xì)節(jié)豐富的不同背景的高分辨率圖像方面非常穩(wěn)健,同時(shí)還保留了圖像的語義結(jié)構(gòu)。 因此,潛在擴(kuò)散模型是圖像生成即深度學(xué)習(xí)領(lǐng)域的一項(xiàng)重大進(jìn)步。 Stable Diffusion只是將潛在擴(kuò)散模型應(yīng)用于高分辨率圖像,同時(shí)使用 CLIP 作為文本編碼器。


說了這么多理論,想必大家已經(jīng)迫不及待躍躍欲試了。別著急,后面我會手把手教大家搭建Stable Diffusion本地環(huán)境,讓大家可以親手體驗(yàn)Stable Diffusion的威力。

為大家準(zhǔn)備了深度學(xué)習(xí)以及計(jì)算機(jī)視覺學(xué)習(xí)資料

可添加VX公眾號:咕泡AI,回復(fù)333免費(fèi)領(lǐng)學(xué)習(xí)資料!


【1】人工智能學(xué)習(xí)課程及配套資料

【2】超詳解人工智能學(xué)習(xí)路線圖及學(xué)習(xí)大綱

【3】學(xué)人工智能必看優(yōu)質(zhì)書籍電子書匯總

【4】人工智能面試題庫大全以及問題總結(jié)

【5】人工智能經(jīng)典論文100篇+解讀+復(fù)現(xiàn)教程

【6】計(jì)算機(jī)視覺技術(shù)教學(xué)課程+YOLO等項(xiàng)目教學(xué)

【7】人工智能最新行業(yè)報(bào)告 作者:OpenCV圖像處理?


Stable Diffusion原理詳解的評論 (共 條)

分享到微博請遵守國家法律
普洱| 方山县| 弋阳县| 元阳县| 桃园市| 峨边| 恩平市| 宜兰市| 沙洋县| 崇义县| 旬邑县| 绥宁县| 甘孜| 石河子市| 双桥区| 昌黎县| 沙坪坝区| 福鼎市| 大丰市| 平果县| 凌海市| 铅山县| 中阳县| 琼中| 漠河县| 鄂伦春自治旗| 舟曲县| 天津市| 夏津县| 祁东县| 衡南县| 常州市| 兴安县| 阆中市| 盐源县| 洛浦县| 新乡县| 德州市| 南汇区| 施秉县| 三穗县|