Stable diffusion技術(shù)原理手冊_第1頁
Stable diffusion技術(shù)原理手冊_第2頁
Stable diffusion技術(shù)原理手冊_第3頁
Stable diffusion技術(shù)原理手冊_第4頁
Stable diffusion技術(shù)原理手冊_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Stablediffusion原理介紹了StableDiffusion,這是一種用于AI繪畫的算法,它是由CompVis和Runway團(tuán)隊在2021年12月提出的“潛在擴(kuò)散模型”(LDM/LatentDiffusionModel)的變體,基于2015年提出的擴(kuò)散模型(DM/DiffusionModel)。文章中將深入介紹StableDiffusion的技術(shù)細(xì)節(jié),但是不會出現(xiàn)太多的數(shù)學(xué)公式或未解釋的概念名詞。stablediffusion早已不是一個新鮮話題,從2022年8月開源以來,有關(guān)stablediffusion的原理介紹、應(yīng)用方法的資料數(shù)不勝數(shù),我在之前

ai繪畫是怎么畫的?ai繪畫算法揭秘、一文講透ai作畫原理技術(shù)

兩篇文章中也介紹過AI繪畫的通用原理,但沒有深入到StableDiffusion的技術(shù)細(xì)節(jié),今天就來填這個坑。本文依舊是科普文,文中盡量不會出現(xiàn)數(shù)學(xué)公式或者未經(jīng)解釋的概念名詞,大家可以放心食用。我會先用一段話介紹stablediffusion的算法原理,這段話里出現(xiàn)的概念名詞后文會逐一解釋。StableDiffusion算法上來自CompVis和Runway團(tuán)隊于2021年12月提出的“潛在擴(kuò)散模型”(LDM/LatentDiffusionModel),這個模型又是基于2015年提出的擴(kuò)散模型(DM/DiffusionModel)。參考論文中介紹算法核心邏輯的插圖,StableDiffusion的數(shù)據(jù)會在像素空間(PixelSpace)、潛在空間(LatentSpace)、條件(Conditioning)三部分之間流轉(zhuǎn),其算法邏輯大概分這幾步(可以按??順序?qū)φ障聢D):圖像編碼器將圖像從像素空間(PixelSpace)壓縮到更小維度的潛在空間(LatentSpace),捕捉圖像更本質(zhì)的信息;對潛在空間中的圖片添加噪聲,進(jìn)行擴(kuò)散過程(DiffusionProcess);通過CLIP文本編碼器將輸入的描述語轉(zhuǎn)換為去噪過程的條件(Conditioning);基于一些條件對圖像進(jìn)行去噪(Denoising)以獲得生成圖片的潛在表示,去噪步驟可以靈活地以文本、圖像和其他形式為條件(以文本為條件即text2img、以圖像為條件即img2img);圖像解碼器通過將圖像從潛在空間轉(zhuǎn)換回像素空間來生成最終圖像。擴(kuò)散模型(DM/DiffusionModel)“擴(kuò)散”來自一個物理現(xiàn)象:當(dāng)我們把墨汁滴入水中,墨汁會均勻散開;這個過程一般不能逆轉(zhuǎn),那AI可以做到么?(AI:我太難了)當(dāng)墨汁剛滴入水中時,我們能區(qū)分哪里是墨哪里是水,信息是非常集中的;當(dāng)墨汁擴(kuò)散開來,墨和水就難分彼此了,信息是分散的。類比于圖片,這個墨汁擴(kuò)散的過程就是圖片逐漸變成噪點的過程:從信息集中的圖片變成信息分散、沒有信息的噪點圖很簡單,逆轉(zhuǎn)這個過程就需要AI的加持了。研究人員對圖片加噪點,讓圖片逐漸變成純噪點圖;再讓AI學(xué)習(xí)這個過程的逆過程,也就是如何從一張噪點圖得到一張有信息的高清圖。這個模型就是AI繪畫中各種算法,如DiscoDiffusion、StableDiffusion中的??蛿U(kuò)散模型(DiffusionModel)。潛在擴(kuò)散模型(LDM/LatentDiffusionModel)在計算機(jī)眼中,一張512x512分辨率的圖片,就是一組512*512*3的數(shù)字,如果直接對圖片進(jìn)行學(xué)習(xí),相當(dāng)于AI要處理786432維的數(shù)據(jù),這對算力、計算機(jī)性能要求很高。CompVis的研究人員提出,可以將圖片映射到潛在空間(LatentSpace)后進(jìn)行擴(kuò)散和逆擴(kuò)散學(xué)習(xí)。如何理解“潛在空間”呢?大家都有自己的身份證號碼,前6位代表地區(qū)、中間8位代表生日、后4位代表個人其他信息。放到空間上如圖所示,這個空間就是「人類潛在空間」。這個空間上相近的人,可能就是生日、地區(qū)接近的人。人可以對應(yīng)為這個空間的一個點,這個空間的一個點也對應(yīng)一個人。如果在空間中我的附近找一個點,對應(yīng)的人可能跟我非常相似,沒準(zhǔn)就是我失散多年的兄弟hhAI就是通過學(xué)習(xí)找到了一個「圖片潛在空間」,每張圖片都可以對應(yīng)到其中一個點,相近的兩個點可能就是內(nèi)容、風(fēng)格相似的圖片。同時這個“潛在空間”的維度(比如可能是768)遠(yuǎn)小于“像素維度”(786432),AI處理起來會更加得心應(yīng)手,在保持效果相同甚至更好的情況下,潛在擴(kuò)散模型對算力、顯卡性能的要求顯著降低。這也就是為什么StableDiffusion能在消費級顯卡上運行,從而讓AI繪畫“飛入尋常百姓家”。說句題外話,我非常想知道為什么StableDiffusion叫StableDiffusion,但沒找到官方說明,這里做一個猜測:之所以這個基于LatentDiffusion的模型叫StableDiffusion,可能一方面表示這個模型效果很穩(wěn)定(Stable),另一方面是致敬一下(算力&數(shù)據(jù)上的)金主爸爸Stability.ai。CLIP(ContrastiveLanguage-ImagePre-Training)如果讓你把左側(cè)三張圖和右側(cè)三句話配對,你可以輕松完成這個連線。但對AI來說,圖片就是一系列像素點,文本就是一串字符,要完成這個工作可不簡單。這需要AI在海量「文本-圖片」數(shù)據(jù)上學(xué)習(xí)圖片和文本的匹配。圖中綠色方塊是「圖片潛在空間」的N張圖片,紫色方塊是「文本潛在空間」的N句描述語。AI會努力將對應(yīng)的I1與T1(藍(lán)色方塊)匹配,而不是I2與T3(灰色方塊)匹配。這個AI就是廣泛被用在AI作畫中的

CLIP(ContrastiveLanguage-ImagePre-Training/對比式語言-文字預(yù)訓(xùn)練)。當(dāng)AI能成功完成這個連線,也就意味著AI建立了「文字潛在空間」到「圖片潛在空間」的對應(yīng)關(guān)系,這樣才能通過文字控制圖片的去噪過程,實現(xiàn)通過文字描述左右圖像的生成??偨Y(jié)本文對一些技術(shù)細(xì)節(jié)做了簡化,只保留StableDiffusion最核心的算法邏輯為大家做了簡明的介紹。深入理解stablediffusion原理,不僅有助于我們掌握AI繪畫模型的基本原理,而且還能為我們在工作和學(xué)習(xí)中應(yīng)用AI繪畫帶來更多的便利。/post/7224036325350621221近年來,圖像生成技術(shù)發(fā)展迅速,越來越多的人開始關(guān)注和探索各種圖像生成模型。而DiffusionModel作為其中的一種,其在生成高質(zhì)量圖像方面具有重要意義。在本次分享中,我們將探討DiffusionModel的原理和實現(xiàn)方式。希望本次分享能夠幫助大家更深入地了解這一領(lǐng)域的技術(shù)和方法,以及啟發(fā)您進(jìn)一步探索和研究。1.什么是DiffusionModel,它是如何生成圖像的?在介紹DiffusionModel之前,我們先來了解一下生成模型。通俗來說,生成模型是一種人工智能算法,其基本思想是讓計算機(jī)自動學(xué)習(xí)一些數(shù)據(jù)的統(tǒng)計規(guī)律,并利用這些規(guī)律生成新的數(shù)據(jù),比如圖像、音頻等。這種技術(shù)的應(yīng)用非常廣泛,比如可以用于文本生成、圖像生成、視頻生成等領(lǐng)域。而DiffusionModel是一種比較新的圖像生成模型,其最大的特點就是可以生成高質(zhì)量的圖像。它的生成原理非常有趣,實際上,DiffusionModel是一種基于去噪技術(shù)的圖像生成DenoiseModel。這就意味著,在生成圖像的過程中,它實際上是在不斷地去除噪聲和隨機(jī)性的影響,從而逐漸得到一個越來越真實、越來越精細(xì)的圖像。1.1DiffusionModel原理首先,DenoiseModel需要一個起始的噪聲圖像作為輸入。這個噪聲圖像可以是完全隨機(jī)的,也可以是一些特定的模式(如高斯分布)或者形狀。接下來,隨著denoise的不斷進(jìn)行,圖像的細(xì)節(jié)信息會逐漸浮現(xiàn)出來。這個過程有點像沖洗照片,每次沖洗都會逐漸浮現(xiàn)出照片中的細(xì)節(jié)和色彩。denoise的次數(shù)越多,生成的圖像就越清晰、越細(xì)膩。最后,DenoiseModel會根據(jù)用戶的需求輸出最終的圖像。Denoise過程中,用的都是同一個DenoiseModel。為了讓DiffusionModel知道當(dāng)前是在哪個Step輸入的圖片,實際操作過程中會把Step數(shù)字作為輸入傳遞給模型。這樣,模型就能夠根據(jù)當(dāng)前的Step來判斷圖像的噪聲程度,從而進(jìn)行更加精細(xì)的去噪操作。1.2DenoiseModel的內(nèi)部實際上,DenoiseModel內(nèi)部做了一些非常有趣的事情來生成高質(zhì)量的圖像。首先,由于讓模型直接預(yù)測出去噪后的圖片是比較困難的事情,所以DenoiseModel做了兩件事情:首先,它會把噪音圖片和當(dāng)前的Step一起輸入到一個叫做NoisePredicter的模塊中,這個模塊會預(yù)測出當(dāng)前圖片的噪音。接下來,模型會對初步的去噪圖片進(jìn)行修正,以達(dá)到去噪效果。具體來說,模型會通過像素值減去噪音的方式來進(jìn)一步去除噪音。1.3如何訓(xùn)練NoisePredictor?要訓(xùn)練NoisePredictor,我們需要有Groundtruth的噪音作為label進(jìn)行有監(jiān)督的學(xué)習(xí)。那么,各個Step的Groundtruth從哪里來呢?我們可以通過隨機(jī)產(chǎn)生噪音的方式來模擬擴(kuò)散過程(DiffusionProcess)。具體來說,我們從原始圖像開始,不斷地加入隨機(jī)噪音,得到一系列加噪后的圖像。這些加噪后的圖像和當(dāng)前的Step就是DenoiseModel的輸入,而加入的噪音則是Groundtruth。我們可以用這些Groundtruth數(shù)據(jù)來訓(xùn)練NoisePredictor,以便它能夠更好地預(yù)測出當(dāng)前圖像的噪音。1.4Text-to-Image有些同學(xué)問了:我見到的DiffusionModel是Text-to-imageGenerator,基于文本生成圖片。為什么你這個沒有文本的輸入呢?確實,有些DiffusionModel是基于文本生成圖片的,這意味著我們可以將文本作為輸入來生成圖片。每一個step,文本都可以作為DenoiseModel的輸入,這樣可以讓模型知道當(dāng)前應(yīng)該生成什么樣的圖片。具體來說,我們可以將文本輸入到NoisePredictor中,以便預(yù)測出噪音來去噪。2.StableDiffusion、DALL-E、Imagen背后共同的套路是什么?StableDiffusion、DALL-E、Imagen這些模型的共同之處在于它們都使用了三個模塊來生成圖像:首先,通過TextEncoder模塊,將輸入的文本編碼成為一個表征向量。然后,GenerationModel模塊會利用這個表征向量生成一個圖像表征向量,可以把它看作是圖像的壓縮版本。最后,通過Decoder模塊,將這個圖像表征向量解碼為一張清晰的圖像。2.1StableDiffusionStableDiffusion是一個比較熱門的開源DiffusionModel,它的架構(gòu)如上圖所示。它的Encoder輸入可以不僅僅是文本,還可以是圖像等條件。它的GenerationModel使用的是DenoisingU-Net,引入了交叉注意力機(jī)制(crossattention),以加入多模態(tài)的條件。同時,它還使用了預(yù)訓(xùn)練的通用VAE,將輸入的圖片壓縮到潛空間(latentspace),然后再進(jìn)行擴(kuò)散過程。2.2DALL-EDALL-E是由OpenAI發(fā)布的一種DiffusionModel,它的架構(gòu)如上圖所示。它利用CLIP方法得到文本和圖像的表征向量。CLIPobjective是一種對比學(xué)習(xí)方法,通過訓(xùn)練模型使其同時理解文本和圖像,以便將文本描述和對應(yīng)的圖像緊密聯(lián)系起來。在訓(xùn)練過程中,模型會從數(shù)據(jù)集中隨機(jī)選擇一個文本描述和對應(yīng)的圖片作為正樣本,隨機(jī)選擇另一個文本描述和不屬于該文本描述的圖片作為負(fù)樣本。模型的目標(biāo)是使正樣本的相似度高于負(fù)樣本的相似度。DALL-E利用CLIPobjective實現(xiàn)了文本和圖像之間的交互,即給定一個文本描述,DALL-E可以生成與該描述相符合的圖像。具體而言,DALL-E的生成過程如下:首先將給定的文本描述編碼成文本表征向量然后將該向量輸入到DALL-E的生成模型(prior模塊)中,生成一個圖像表征向量。最后,將該圖像表征向量輸入到DALL-E的解碼器中,生成最終的圖像。DALL-E的生成模型有兩種實現(xiàn)方式:第一種是利用Autoregressive模型(例如GPT),輸入文本表征,生成圖像表征向量降維(如PCA)后的表征第二種是利用Diffusion,輸入文本表征,生成大小一致的圖像表征向量。2.3ImagenImagen是Google發(fā)布的一種文本到圖像生成的DiffusionModel,它可以根據(jù)給定的文本描述生成一張高清晰度的圖片。整個生成過程包含三個主要模塊:FrozenTextEncoder、Text-to-ImageDiffusionModel和Super-ResolutionModel。首先,F(xiàn)rozenTextEncoder將輸入的文本描述編碼成一個TextEmbedding然后Text-to-ImageDiffusionModel根據(jù)TextEmbedding從隨機(jī)噪聲圖開始,不斷迭代產(chǎn)生一張與輸入描述匹配的64x64小圖再由Super-Resolution模塊根據(jù)TextEmbedding放大到256x256的中等尺寸圖像,最終通過另一個Super-Resolution模塊根據(jù)TextEmbedding產(chǎn)生1024x1024的高清晰度圖像。為了實現(xiàn)更好的生成效果,Imagen采用了一些優(yōu)化措施。其中,textencoder采用T5模型的encoder,測試結(jié)果表明T5-XXL效果最佳,其對應(yīng)參數(shù)量為4.6B。Text-to-ImageDiffusionModel使用U-Net結(jié)構(gòu),并插入一些注意力層,以更好地利用文本信息。而Super-Resolution模塊同樣使用U-Net結(jié)構(gòu),為減少顯存占用、加速收斂、提升推理速度,Imagen對其進(jìn)行了優(yōu)化,稱為EfficientU-Net。具體來說,EfficientU-Net采用了更多的ResNetBlock在低分辨率部分,使得模型參數(shù)量分布偏向低分辨率部分同時將skipconnections縮放一個系數(shù)1/sqrt(2),有助于模型更快收斂并且采用了先降采樣再卷積的DBlock模塊和先卷積再上采樣的UBlock模塊,以提升模型的推理速度3.Dreambooth和LoRA是什么?它們?nèi)绾谓淌谀P托碌母拍??如何生成小鵬P7的圖像?現(xiàn)在我們有了DiffusionModel(如開源的StableDiffusion),可以生成與文字描述匹配的圖像。那該如何教授模型新的概念,讓它生成我們自己領(lǐng)域內(nèi)的圖像呢?比如我們可以輸入“小鵬汽車P7”相關(guān)的文字描述,它就能生成一張符合這個描述的圖片。當(dāng)然,我們可以finetue模型,喂給模型“小鵬汽車P7”的<image,text>pair訓(xùn)練數(shù)據(jù)。但是直接微調(diào)大模型可能有兩個問題:過度擬合。因為我們的訓(xùn)練數(shù)據(jù)集非常小,直接用這個模型可能會過于專注于輸入圖像的主體上下文和外觀,而且可能會將訓(xùn)練圖像的一些特定姿勢或背景等特征過度擬合到生成的圖像中,導(dǎo)致生成的圖像看起來不自然、失去多樣性。如下圖第二行,狗的姿勢被固定了,趴在一個東西上。語言漂移。因為Diffusion模型是基于大量語料庫訓(xùn)練的,但在生成具體領(lǐng)域的圖像時需要特定的領(lǐng)域知識,如果直接微調(diào)大模型可能會導(dǎo)致模型失去特定于領(lǐng)域的先驗知識。具體來說,由于文本提示同時包含[identifier](如“小鵬汽車P7”)和[classnoun](“汽車”),當(dāng)擴(kuò)散模型在進(jìn)行微調(diào)時,我們觀察到它會慢慢忘記如何生成同一類的主題并逐漸忘記特定于class的先驗知識,并且不能生成相關(guān)類的不同實例(即所有的“汽車”可能都變成了“小鵬汽車P7”)。如上圖第二行顯示了在特定的“XX狗”圖像上對模型進(jìn)行微調(diào)后生成的“狗”圖像的一些示例。結(jié)果清楚地表明,這個模型由于這次的微調(diào)失去了生成一般的狗圖像的能力3.1Dreambooth:學(xué)了新的,不忘了舊的我們有了一種文本到圖像的擴(kuò)散模型,可以根據(jù)輸入的文本生成相應(yīng)的圖像。但是,如果我們只有三到五張?zhí)囟▽ο蟮膱D片,我們可以通過給模型輸入這些圖片的同時,加上一個包含特定對象的名稱和類別的文本提示來微調(diào)模型,例如“一只[V]狗”。同時,我們還可以應(yīng)用一種特定于類別的先驗保護(hù)損失(aclass-specificpriorpreservationloss),它利用模型對該類別的語義先驗,并鼓勵模型生成多樣的屬于該類別的實例,例如在文本提示中輸入“一只狗”。這樣可以讓模型更好地生成與特定對象相似的圖像。3.2LoRA:不想訓(xùn)練大模型?加個旁路如果我們不想給大模型做“大手術(shù)”——finetue訓(xùn)練大模型(成本太高了==),畢竟我們只是僅僅想教授模型一個新的概念,其他預(yù)訓(xùn)練的先驗知識都不用變動。那應(yīng)該如何做到呢?可以嘗試LoRA(Low-RankAdaptation)!LoRA是一種低秩適應(yīng)方法,可以用于神經(jīng)網(wǎng)絡(luò)的微調(diào)和適應(yīng)。其主要原理是,在微調(diào)神經(jīng)網(wǎng)絡(luò)時,只優(yōu)化低秩分解矩陣,而保持預(yù)訓(xùn)練的權(quán)重不變。具體來說,LoRA允許我們通過優(yōu)化自適應(yīng)期間密集層(denselayers)變化的秩分解矩陣,來間接訓(xùn)練神經(jīng)網(wǎng)絡(luò)中的一些密集層,同時保持預(yù)訓(xùn)練的權(quán)重凍結(jié):如上圖所示,我們只訓(xùn)練A和B部分的參數(shù),其中,r遠(yuǎn)小于d。A部分參數(shù)初始化符合高斯分布。為了讓訓(xùn)練最初輸出的h的值和預(yù)訓(xùn)練大模型輸出相同,B部分參數(shù)的初始化為0。上圖為GPT-3175B驗證精度與WikiSQL和MNLI匹配上的幾種自適應(yīng)方法的可訓(xùn)練參數(shù)數(shù)量的關(guān)系。LoRA表現(xiàn)出更好的可擴(kuò)展性和任務(wù)性能。使用LoRA,175B的GPT-3只需18MTrainableParameters就能有很好的表現(xiàn)了??偟膩碚f,LoRA具有以下優(yōu)點:可以共享預(yù)訓(xùn)練模型并用于構(gòu)建許多不同任務(wù)的小型LoRA模塊。通過凍結(jié)共享模型,我們可以通過替換上圖中的矩陣A和B來高效地切換任務(wù),從而大大降低存儲要求和任務(wù)切換開銷。LoRA使得訓(xùn)練更加高效,并且可以降低硬件要求,使得使用自適應(yīng)優(yōu)化器時,計算梯度或維護(hù)優(yōu)化器狀態(tài)的大部分參數(shù)不再需要。相反,LoRA僅優(yōu)化注入的、更小的低秩矩陣,從而使得訓(xùn)練更加高效。LoRA的簡單的**“旁路”線性設(shè)計使得我們可以在部署時將可訓(xùn)練的矩陣與凍結(jié)的權(quán)重合并**,(相比“串聯(lián)”的添加額外模塊)不會引入推理延遲。LoRA與許多先前的模型訓(xùn)練方法無縫對接,如prefix-tuning等。3.3小Demo3.3.1小鵬P7我們嘗試?yán)檬畮讖垺靶※iP7汽車”相關(guān)的圖像樣本,基于開源的中文Stable-Diffusion(\o"https://huggingface.co/spaces/IDEA-CCNL/Taiyi-Stable-Diffusion-Chinese"IDEA-CCNL/Taiyi-Stable-Diffusion-Chinese)基礎(chǔ)上進(jìn)行了(Dreambooth+LoRA)微調(diào),Trainable模型文件大小只有3M。我們把prompt設(shè)置為:小鵬P7汽車,藍(lán)天,草地,4K照片,高清來分別看下開源的中文Stable-Diffusion以及其經(jīng)過訓(xùn)練后的效果:\o"https://huggingface.co/spaces/IDEA-CCNL/Taiyi-Stable-Diffusion-Chinese"IDEA-CCNL/Taiyi-Stable-Diffusion-Chinese:IDEA-CCNL/Taiyi-Stable-Diffusion-Chinese+Dreambooth+LoRA:可以對比發(fā)現(xiàn):經(jīng)過微調(diào)的模型,基本上能夠?qū)W到“小鵬P7汽車”的車身外形,雖然看起來有點變形==由于prompt沒有明確車身顏色,模型泛化出了“小鵬P7汽車”實際上不存在的顏色,如微調(diào)后生成的第3、第4張圖。在細(xì)節(jié)方面,模型學(xué)習(xí)的了小鵬汽車的車標(biāo)“X”,但是車牌上的數(shù)字學(xué)不到,如微調(diào)后生成的第3張圖??赡艿脑蚴牵河?xùn)練數(shù)據(jù)的每張圖片車牌內(nèi)容不一樣,模型比較難學(xué)看到微調(diào)前生成圖像車牌也是模糊的,所以才可能是隱私的緣故,預(yù)訓(xùn)練大模型的訓(xùn)練數(shù)據(jù)中的車牌可能就已經(jīng)做了去隱私處理了。3.3.2寶可夢最后再安利一下最開始的可愛的寶可夢demo:\o"https://huggingface.co/souljoy/sd-pokemon-model-lora-zh"Model、\o"https://huggingface.co/spaces/souljoy/Pokemon-Stable-Diffusion-Chinese"Space求贊:python復(fù)制代碼fromdiffusersimportStableDiffusionPipelineimporttorchpipe=StableDiffusionPipeline.from_pretrained("IDEA-CCNL/Taiyi-Stable-Diffusion-1B-Anime-Chinese-v0.1",torch_dtype=torch.float16)model_path="souljoy/sd-pokemon-model-lora-zh"pipe.unet.load_attn_procs(model_path)pipe.to("cuda")pipe.safety_checker=lambdaimages,clip_input:(images,False)prompt="粉色的蝴蝶,小精靈,卡通"image=pipe(prompt,num_inference_steps=50,guidance_scale=7.5).images[0]imageprompt="可愛的狗,小精靈,卡通"image=pipe(prompt,num_inference_steps=50,guidance_scale=7.5).images[0]imageprompt="漂亮的貓,小精靈,卡通"image=pipe(prompt,num_inference_steps=50,guidance_scale=7.5).images[0]image分類作者:小爺毛毛_卓壽杰

鏈接:/post/7224036325350621221

來源:稀土掘金

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。1.Diffusion文字生成圖片——整體結(jié)構(gòu)1.1整個生成過程我們知道在使用Diffusion的時候,是通過文字生成圖片,但是上一篇文章中講的Diffusion模型輸入只有隨機(jī)高斯噪聲和timestep。那么文字是怎么轉(zhuǎn)換成Diffusion的輸入的呢?加入文字后Diffusion又有哪些改變?下圖可以找到答案。文字生成圖片全過程實際上Diffusion是使用TextEncoder生成文字對應(yīng)的embedding(TextEncoder使用CLIP模型),然后和隨機(jī)噪聲embedding,timestepembedding一起作為Diffusion的輸入,最后生成理想的圖片。我們看一下完整的圖:tokenembedding、隨機(jī)噪聲embedding、timeembedding一起輸入diffusion上圖我們看到了Diffusion的輸入為tokenembedding和隨機(jī)embedding,timeembedding沒有畫出來。中間的ImageInformationCreator是由多個UNet模型組成,更詳細(xì)的圖如下:更詳細(xì)的結(jié)構(gòu)可以看到中間的ImageInformationCreator是由多個UNet組合而成的,關(guān)于UNet的結(jié)構(gòu)我們放在后面來講。現(xiàn)在我們了解了加入文字embedding后Diffusion的結(jié)構(gòu),那么文字的embedding是如何生成的?接下來我們介紹下如何使用CLIP模型生成文字embedding。1.2使用CLIP模型生成輸入文字embeddingCLIP在圖像及其描述的數(shù)據(jù)集上進(jìn)行訓(xùn)練。想象一個看起來像這樣的數(shù)據(jù)集,包含4億張圖片及其說明:圖像及其文字說明實際上CLIP是根據(jù)從網(wǎng)絡(luò)上抓取的圖像及其文字說明進(jìn)行訓(xùn)練的。CLIP是圖像編碼器和文本編碼器的組合,它的訓(xùn)練過程可以簡化為給圖片加上文字說明。首先分別使用圖像和文本編碼器對它們進(jìn)行編碼。然后使用余弦相似度刻畫是否匹配。最開始訓(xùn)練時,相似度會很低。然后計算loss,更新模型參數(shù),得到新的圖片embedding和文字embedding通過在訓(xùn)練集上訓(xùn)練模型,最終得到文字的embedding和圖片的embedding。有關(guān)CLIP模型的細(xì)節(jié),可以參考對應(yīng)的論文。1.3UNet網(wǎng)絡(luò)中如何使用文字embedding前面已經(jīng)介紹了如何生成輸入文字embedding,那么UNet網(wǎng)絡(luò)又是如何使用的?實際上是在UNet的每個ResNet之間添加一個Attention,而Attention一端的輸入便是文字embedding。如下圖所示。更詳細(xì)的圖如下:2.擴(kuò)散模型Diffusion前面介紹了Diffusion是如何根據(jù)輸入文字生成圖片的,讓大家有個大概的了解,接下來會詳細(xì)介紹擴(kuò)散模型Diffusion是如何訓(xùn)練的,又是如何生成圖片的。2.1擴(kuò)散模型Duffison的訓(xùn)練過程擴(kuò)散模型DiffusionDiffusion模型的訓(xùn)練可以分為兩個部分:前向擴(kuò)散過程(ForwardDiffusionProcess)

圖片中添加噪聲反向擴(kuò)散過程(ReverseDiffusionProcess)

去除圖片中的噪聲2.2前向擴(kuò)散過程前向擴(kuò)散過程是不斷往輸入圖片中添加高斯噪聲。2.3反向擴(kuò)散過程反向擴(kuò)散過程是將噪聲不斷還原為原始圖片。2.4訓(xùn)練過程在每一輪的訓(xùn)練過程中,包含以下內(nèi)容:每一個訓(xùn)練樣本選擇一個隨機(jī)時間步長

t將timestep

t

對應(yīng)的高斯噪聲應(yīng)用到圖片中將t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論