背景
Ai作圖從Diffusion模型開始,作圖進(jìn)入穩(wěn)步發(fā)展快車道。然后用過diffusion系列作圖的同學(xué)對產(chǎn)圖穩(wěn)定性,以及可控性都會頗有微詞。diffusion系列作圖方法在宏觀層面上確實能夠比較好的做出看上去還不錯的圖。然后當(dāng)你細(xì)摳細(xì)節(jié)時候,發(fā)現(xiàn)這東西太不可控了:
1.位置關(guān)系經(jīng)常搞錯
2.prompt描述不符合人類習(xí)慣
3.無法比較好get人類意圖
4.兩張畫之間角色不穩(wěn)定
5.一些細(xì)粒度的特征不好控制(比如表情、衣服顏色、色系)
6.動作控制極不方便
7.動態(tài)效果表示很不容易
8.圖分區(qū)域控制極不方便
為了讓diffusion系列模型變的更可控,各企業(yè)、實驗室和科研人員可謂下足功夫。這篇文章整理了在可控圖生成方面近期比較大的、個人覺得比較有前景的幾個方向做介紹。
1.介紹diffusion model的模型結(jié)構(gòu),以及它的一些數(shù)學(xué)理論
2.用文字來控制作圖SD模型
3.讓作圖在結(jié)構(gòu)層面可控的controlnet
4.給參考例子讓模型仿照作圖,promptdiffusion
5.讓文本字典更適合人類習(xí)慣,perfDiffusion
從更宏觀視角來看,解決文本生成圖的思路就三大類:
1.引入更多的信息
2.讓控制指令結(jié)構(gòu)化,統(tǒng)一化,減少數(shù)據(jù)稀疏行;調(diào)整圖文映射空間,讓文本指令能夠更好表達(dá)人類意圖
3.incontext learn,給例子讓模型造樣作圖
controlnet、image2image的思路就是引入更多的圖結(jié)構(gòu)畫的信息,讓圖的布局更可控,讓圖的生成有上下文;promptdiffusion已經(jīng)有incontext learn的意思,給例子讓模型造樣作圖;prompt2prompt的思路就是讓文本控制指令結(jié)構(gòu)化,對文本生成圖更結(jié)構(gòu)化,抽象出一個作圖描述的結(jié)構(gòu),讓稀疏數(shù)據(jù)聚成一類,讓生成過程更可控;風(fēng)格化lora、textual做法就是拉齊圖文映射空間距離,讓輸入的詞更能夠表達(dá)用戶意圖,以便更好的畫出符合人類心理預(yù)期的畫。MJ現(xiàn)在的做法會更進(jìn)一步,把上面的各種思路融合在一起,直接用一個多模態(tài)模型來解決多個思路需要多個模型分開解決的問題,從數(shù)據(jù)收集、到訓(xùn)練數(shù)據(jù)整理做格式化,讓模型從設(shè)計、訓(xùn)練就能滿足用戶需求,所以用戶使用體感就是,它懂我能夠比較精準(zhǔn)把握心理想要做出圖的預(yù)期,并且在審美上超越我。
模型介紹
圖生成的數(shù)據(jù)建模如上:
1.Z就是圖空間,就是這張圖片在現(xiàn)實中出現(xiàn)的概率分布
2.Network是對圖pixel空間分布建模,就是每張圖的構(gòu)成是由各種特征符合一定數(shù)學(xué)分布構(gòu)造出來的
3.x是對pixel空間產(chǎn)出現(xiàn)實中圖的分布映射,也就是pixel特征分布構(gòu)造出來的圖的分布
Z、X空間每種算法基本差異不大,大部分的差異在于Network部分,不同的思路就是對pixel像素空間構(gòu)圖的物理建模理解差異。比如VAE的假設(shè)是,pixel的特征是符合multi-gussion分布的,也就是一張圖其實就是多種特征的不同高斯組合出來的,每張圖都可以分解成不同特征的、每個特征的高斯分布(成分差異)差異導(dǎo)致圖片差異。Diffusion模型的假設(shè)是圖的生成過程是一個隨機(jī)過程,由一個序列的隨機(jī)分布層組成,多個層合并在一起就構(gòu)成差異化的圖,每個隨機(jī)分布層也是有pixel特征的不同高斯分布(成分差異)組成,換句話說就是Diffusion其實是一個序列的VAE過程。
利用上面圖生成的數(shù)學(xué)建模,只要能夠把每個階段的分布參數(shù)學(xué)到,那么這個數(shù)學(xué)模型就是確定的。也就是整個圖的生成過程就是可控的,可以在數(shù)學(xué)模型的任何過程和階段給些input,那就能夠按要求產(chǎn)出想要的圖。求解這個數(shù)學(xué)模型參數(shù)的過程,就是模型訓(xùn)練過程。類似高中、大學(xué)求解方程組,只要給到足夠的X、Y對那么方程的隱參數(shù)就是可以求解出來的。
Diffusion
擴(kuò)散模型包括兩個過程:前向過程(forward process)和反向過程(reverse process),其中前向過程又稱為為擴(kuò)散過程(diffusion process)。無論是前向過程還是反向過程都是一個參數(shù)化的馬爾可夫鏈(Markov chain),其中反向過程可以用來生成數(shù)據(jù),通過變分推斷來進(jìn)行建模和求解。
前向過程
擴(kuò)散過程是指的對數(shù)據(jù)逐漸增加高斯噪音直至數(shù)據(jù)變成隨機(jī)噪音的過程。對于原始數(shù)據(jù),總共包含步的擴(kuò)散過程的每一步都是對上一步得到的數(shù)據(jù)按如下方式增加高斯噪音:
這里為每一步所采用的方差,它介于0~1之間。對于擴(kuò)散模型,往往稱不同step的方差設(shè)定為variance schedule或者noise schedule,通常情況下,越后面的step會采用更大的方差,即滿足。在一個設(shè)計好的variance schedule下,的如果擴(kuò)散步數(shù)足夠大,那么最終得到的就完全丟失了原始數(shù)據(jù)而變成了一個隨機(jī)噪音。 擴(kuò)散過程的每一步都生成一個帶噪音的數(shù)據(jù),整個擴(kuò)散過程也就是一個馬爾卡夫鏈:
反向過程
擴(kuò)散過程是將數(shù)據(jù)噪音化,那么反向過程就是一個去噪的過程,如果知道反向過程的每一步的真實分布,那么從一個隨機(jī)噪音開始,逐漸去噪就能生成一個真實的樣本,所以反向過程也就是生成數(shù)據(jù)的過程。
估計分布需要用到整個訓(xùn)練樣本,可以用神經(jīng)網(wǎng)絡(luò)來估計這些分布。這里,將反向過程也定義為一個馬爾卡夫鏈,只不過它是由一系列用神經(jīng)網(wǎng)絡(luò)參數(shù)化的高斯分布來組成:
擴(kuò)散模型就是要得到這些訓(xùn)練好的網(wǎng)絡(luò),因為它們構(gòu)成了最終的生成模型。
經(jīng)過復(fù)雜的假設(shè)和推導(dǎo),可以得出求解方程如上。具體的求解推導(dǎo)過程可以參考下面論文:
https://arxiv.org/pdf/2208.11970.pdf
雖然擴(kuò)散模型背后的推導(dǎo)比較復(fù)雜,但是最終得到的優(yōu)化目標(biāo)非常簡單,就是讓網(wǎng)絡(luò)預(yù)測的噪音和真實的噪音一致。DDPM的訓(xùn)練過程也非常簡單,如下圖所示:隨機(jī)選擇一個訓(xùn)練樣本->從1-T隨機(jī)抽樣一個t->隨機(jī)產(chǎn)生噪音-計算當(dāng)前所產(chǎn)生的帶噪音數(shù)據(jù)(紅色框所示)->輸入網(wǎng)絡(luò)預(yù)測噪音->計算產(chǎn)生的噪音和預(yù)測的噪音的L2損失->計算梯度并更新網(wǎng)絡(luò)。
一旦訓(xùn)練完成,其采樣過程也非常簡單,如上所示:從一個隨機(jī)噪音開始,并用訓(xùn)練好的網(wǎng)絡(luò)預(yù)測噪音,然后計算條件分布的均值(紅色框部分),然后用均值加標(biāo)準(zhǔn)差乘以一個隨機(jī)噪音,直至t=0完成新樣本的生成(最后一步不加噪音)。不過實際的代碼實現(xiàn)和上述過程略有區(qū)別(見https://github.com/hojonathanho/diffusion/issues/5:先基于預(yù)測的噪音生成,并進(jìn)行了clip處理(范圍[-1, 1],原始數(shù)據(jù)歸一化到這個范圍),然后再計算均值。我個人的理解這應(yīng)該算是一種約束,既然模型預(yù)測的是噪音,那么也希望用預(yù)測噪音重構(gòu)處理的原始數(shù)據(jù)也應(yīng)該滿足范圍要求。
用圖來更直觀的表示前向和反向推理過程下面圖,具體可以參考李宏毅老師最新的講解diffusion model的視頻。
訓(xùn)練部分
推理部分
模型設(shè)計
前面介紹了擴(kuò)散模型的原理以及優(yōu)化目標(biāo),那么擴(kuò)散模型的核心就在于訓(xùn)練噪音預(yù)測模型,由于噪音和原始數(shù)據(jù)是同維度的,所以可以選擇采用AutoEncoder架構(gòu)來作為噪音預(yù)測模型。DDPM所采用的模型是一個基于residual block和attention block的U-Net模型。如下所示:
U-Net屬于encoder-decoder架構(gòu),其中encoder分成不同的stages,每個stage都包含下采樣模塊來降低特征的空間大?。℉和W),然后decoder和encoder相反,是將encoder壓縮的特征逐漸恢復(fù)。U-Net在decoder模塊中還引入了skip connection,即concat了encoder中間得到的同維度特征,這有利于網(wǎng)絡(luò)優(yōu)化。DDPM所采用的U-Net每個stage包含2個residual block,而且部分stage還加入了self-attention模塊增加網(wǎng)絡(luò)的全局建模能力。 另外,擴(kuò)散模型其實需要的是個噪音預(yù)測模型,實際處理時,可以增加一個time embedding(類似transformer中的position embedding)來將timestep編碼到網(wǎng)絡(luò)中,從而只需要訓(xùn)練一個共享的U-Net模型。具體地,DDPM在各個residual block都引入了time embedding,如上圖所示。
StableDiffusion
Diffussion Model其實是一個產(chǎn)圖的數(shù)學(xué)建??蚣?,輸入可以是直接像素級別的圖做生成,也可以是把像素空間圖壓倒latent空間。最開始Diffusion的模型還真是直接把像素級別的圖輸入訓(xùn)練模型,一張圖的數(shù)據(jù)量是很大的,所以為了讓模型可以訓(xùn)練輸入的圖都是小尺寸圖,生成后在做圖超分生成大圖?,F(xiàn)實中的圖其實尺寸是各異的、并且圖也比較大,并非所有的圖都適合壓縮尺寸然后拿來訓(xùn)練,所以為了解決這一現(xiàn)實問題stablediffusion 提出把圖用圖特征抽取模型抽取latent特征來做訓(xùn)練。
(下面部分參考自硬核解讀Stable Diffusion(系列一))
SD是一個基于latent的擴(kuò)散模型,它在UNet中引入text condition來實現(xiàn)基于文本生成圖像。SD的核心來源于Latent Diffusion這個工作,常規(guī)的擴(kuò)散模型是基于pixel的生成模型,而Latent Diffusion是基于latent的生成模型,它先采用一個autoencoder將圖像壓縮到latent空間,然后用擴(kuò)散模型來生成圖像的latents,最后送入autoencoder的decoder模塊就可以得到生成的圖像。
基于latent的擴(kuò)散模型的優(yōu)勢在于計算效率更高效,因為圖像的latent空間要比圖像pixel空間要小,這也是SD的核心優(yōu)勢。文生圖模型往往參數(shù)量比較大,基于pixel的方法往往限于算力只生成64x64大小的圖像,比如OpenAI的DALL-E2和谷歌的Imagen,然后再通過超分辨模型將圖像分辨率提升至256x256和1024x1024;而基于latent的SD是在latent空間操作的,它可以直接生成256x256和512x512甚至更高分辨率的圖像。
SD模型的主體結(jié)構(gòu)如下圖所示,主要包括三個模型:
- autoencoder:encoder將圖像壓縮到latent空間,而decoder將latent解碼為圖像;
- CLIP text encoder:提取輸入text的text embeddings,通過cross attention方式送入擴(kuò)散模型的UNet中作為condition;
- UNet:擴(kuò)散模型的主體,用來實現(xiàn)文本引導(dǎo)下的latent生成。
對于SD模型,其autoencoder模型參數(shù)大小為84M,CLIP text encoder模型大小為123M,而UNet參數(shù)大小為860M,所以SD模型的總參數(shù)量約為1B。
autoencoder
autoencoder是一個基于encoder-decoder架構(gòu)的圖像壓縮模型,對于一個大小為的輸入圖像,encoder模塊將其編碼為一個大小為的latent,其中為下采樣率(downsampling factor)。在訓(xùn)練autoencoder過程中,除了采用L1重建損失外,還增加了感知損失(perceptual loss,即LPIPS,具體見論文The Unreasonable Effectiveness of Deep Features as a Perceptual Metric)以及基于patch的對抗訓(xùn)練。輔助loss主要是為了確保重建的圖像局部真實性以及避免模糊,具體損失函數(shù)見latent diffusion的loss部分。同時為了防止得到的latent的標(biāo)準(zhǔn)差過大,采用了兩種正則化方法:第一種是KL-reg,類似VAE增加一個latent和標(biāo)準(zhǔn)正態(tài)分布的KL loss,不過這里為了保證重建效果,采用比較小的權(quán)重(~10e-6);第二種是VQ-reg,引入一個VQ (vector quantization)layer,此時的模型可以看成是一個VQ-GAN,不過VQ層是在decoder模塊中,這里VQ的codebook采樣較高的維度(8192)來降低正則化對重建效果的影響。latent diffusion論文中實驗了不同參數(shù)下的autoencoder模型,如下表所示,可以看到當(dāng)較小和較大時,重建效果越好(PSNR越大),這也比較符合預(yù)期,畢竟此時壓縮率小。
論文進(jìn)一步將不同的autoencoder在擴(kuò)散模型上進(jìn)行實驗,在ImageNet數(shù)據(jù)集上訓(xùn)練同樣的步數(shù)(2M steps),其訓(xùn)練過程的生成質(zhì)量如下所示,可以看到過小的(比如1和2)下收斂速度慢,此時圖像的感知壓縮率較小,擴(kuò)散模型需要較長的學(xué)習(xí);而過大的其生成質(zhì)量較差,此時壓縮損失過大。
當(dāng)在4~16時,可以取得相對好的效果。SD采用基于KL-reg的autoencoder,其中下采樣率,特征維度為,當(dāng)輸入圖像為512x512大小時將得到64x64x4大小的latent。autoencoder模型時在OpenImages數(shù)據(jù)集上基于256x256大小訓(xùn)練的,但是由于autoencoder的模型是全卷積結(jié)構(gòu)的(基于ResnetBlock),所以它可以擴(kuò)展應(yīng)用在尺寸>256的圖像上。
CLIP text encoder
SD采用CLIP text encoder來對輸入text提取text embeddings,具體的是采用目前OpenAI所開源的最大CLIP模型:clip-vit-large-patch14,這個CLIP的text encoder是一個transformer模型(只有encoder模塊):層數(shù)為12,特征維度為768,模型參數(shù)大小是123M。對于輸入text,送入CLIP text encoder后得到最后的hidden states(即最后一個transformer block得到的特征),其特征維度大小為77x768(77是token的數(shù)量),這個細(xì)粒度的text embeddings將以cross attention的方式送入UNet中。
值得注意的是,這里的tokenizer最大長度為77(CLIP訓(xùn)練時所采用的設(shè)置),當(dāng)輸入text的tokens數(shù)量超過77后,將進(jìn)行截斷,如果不足則進(jìn)行paddings,這樣將保證無論輸入任何長度的文本(甚至是空文本)都得到77x768大小的特征。在訓(xùn)練SD的過程中,CLIP text encoder模型是凍結(jié)的。在早期的工作中,比如OpenAI的GLIDE和latent diffusion中的LDM均采用一個隨機(jī)初始化的tranformer模型來提取text的特征,但是最新的工作都是采用預(yù)訓(xùn)練好的text model。比如谷歌的Imagen采用純文本模型T5 encoder來提出文本特征,而SD則采用CLIP text encoder,預(yù)訓(xùn)練好的模型往往已經(jīng)在大規(guī)模數(shù)據(jù)集上進(jìn)行了訓(xùn)練,它們要比直接采用一個從零訓(xùn)練好的模型要好。
UNet
SD的擴(kuò)散模型是一個860M的UNet,其主要結(jié)構(gòu)如下圖所示(這里以輸入的latent為64x64x4維度為例),其中encoder部分包括3個CrossAttnDownBlock2D模塊和1個DownBlock2D模塊,而decoder部分包括1個UpBlock2D模塊和3個CrossAttnUpBlock2D模塊,中間還有一個UNetMidBlock2DCrossAttn模塊。encoder和decoder兩個部分是完全對應(yīng)的,中間存在skip connection。注意3個CrossAttnDownBlock2D模塊最后均有一個2x的downsample操作,而DownBlock2D模塊是不包含下采樣的。
其中CrossAttnDownBlock2D模塊的主要結(jié)構(gòu)如下圖所示,text condition將通過CrossAttention模塊嵌入進(jìn)來,此時Attention的query是UNet的中間特征,而key和value則是text embeddings。SD和DDPM一樣采用預(yù)測noise的方法來訓(xùn)練UNet,其訓(xùn)練損失也和DDPM一樣:這里的為text embeddings,此時的模型是一個條件擴(kuò)散模型。
在訓(xùn)練條件擴(kuò)散模型時,往往會采用Classifier-Free Guidance(這里簡稱為CFG),所謂的CFG簡單來說就是在訓(xùn)練條件擴(kuò)散模型的同時也訓(xùn)練一個無條件的擴(kuò)散模型,同時在采樣階段將條件控制下預(yù)測的噪音和無條件下的預(yù)測噪音組合在一起來確定最終的噪音,具體的計算公式如下所示:
這里的為guidance scale,當(dāng)越大時,condition起的作用越大,即生成的圖像其更和輸入文本一致。CFG的具體實現(xiàn)非常簡單,在訓(xùn)練過程中,只需要以一定的概率(比如10%)隨機(jī)drop掉text即可,這里可以將text置為空字符串(前面說過此時依然能夠提取text embeddings)。這里并沒有介紹CLF背后的技術(shù)原理,感興趣的可以閱讀CFG的論文Classifier-Free Diffusion Guidance以及guided diffusion的論文Diffusion Models Beat GANs on Image Synthesis。CFG對于提升條件擴(kuò)散模型的圖像生成效果是至關(guān)重要的。
Controlnet
ControlNet,用于控制預(yù)訓(xùn)練的大型擴(kuò)散模型,以支持額外的輸入條件。ControlNet以端到端的方式學(xué)習(xí)任務(wù)特定的條件,即使訓(xùn)練數(shù)據(jù)集很?。?lt; 50k),學(xué)習(xí)也很穩(wěn)健。此外,訓(xùn)練ControlNet與微調(diào)擴(kuò)散模型一樣快,而且模型可以在個人設(shè)備上進(jìn)行訓(xùn)練。如果有強(qiáng)大的計算集群可用,模型可以擴(kuò)展到大量(百萬到十億)的數(shù)據(jù)。我們報告說,像穩(wěn)定擴(kuò)散這樣的大型擴(kuò)散模型可以通過ControlNet增強(qiáng),以實現(xiàn)條件輸入,如邊緣圖、分割圖、關(guān)鍵點(diǎn)等。這可能豐富了控制大型擴(kuò)散模型的方法,并進(jìn)一步促進(jìn)相關(guān)應(yīng)用。
大型文本到圖像模型的出現(xiàn),生成視覺上吸引人的圖像可能只需要用戶輸入一段簡短的描述性提示。在輸入一些文本并獲取圖像后,我們可能會自然地想到幾個問題:這種基于提示的控制是否滿足我們的需求?例如,在圖像處理中,考慮到許多有明確問題表述的長期任務(wù),這些大型模型是否可以應(yīng)用于促進(jìn)這些特定任務(wù)?我們應(yīng)該構(gòu)建什么樣的框架來處理廣泛的問題條件和用戶控制?在特定任務(wù)中,大型模型是否能保持從數(shù)十億張圖像中獲得的優(yōu)勢和能力? 首先,在特定領(lǐng)域的任務(wù)中,可用的數(shù)據(jù)規(guī)模并不總是與一般的圖像文本領(lǐng)域一樣大。許多特定問題(如物體形狀/法線、姿態(tài)理解等)的最大數(shù)據(jù)集大小通常在10萬以下,即比LAION5B小5 × 104倍。這就需要穩(wěn)健的神經(jīng)網(wǎng)絡(luò)訓(xùn)練方法,以避免過擬合,并在大型模型被訓(xùn)練用于特定問題時保持泛化能力。 其次,當(dāng)圖像處理任務(wù)采用數(shù)據(jù)驅(qū)動的解決方案時,并不總是有大型計算集群可用。這使得快速訓(xùn)練方法對于在可接受的時間和內(nèi)存空間內(nèi)(例如,在個人設(shè)備上)優(yōu)化大型模型到特定任務(wù)非常重要。這進(jìn)一步要求利用預(yù)訓(xùn)練的權(quán)重,以及微調(diào)策略或遷移學(xué)習(xí)。 第三,各種圖像處理問題有不同形式的問題定義、用戶控制或圖像注釋。在解決這些問題時,雖然可以以“程序化”的方式調(diào)節(jié)圖像擴(kuò)散算法,例如,約束去噪過程、編輯多頭注意力激活等。
controlNet,用于控制大型圖像擴(kuò)散模型(如穩(wěn)定擴(kuò)散),以學(xué)習(xí)任務(wù)特定的輸入條件。ControlNet將大型擴(kuò)散模型的權(quán)重克隆為“可訓(xùn)練副本”和“鎖定副本”:鎖定副本保留了從數(shù)十億張圖像中學(xué)習(xí)的網(wǎng)絡(luò)能力,而可訓(xùn)練副本則在特定任務(wù)的數(shù)據(jù)集上進(jìn)行訓(xùn)練,以學(xué)習(xí)條件控制??捎?xùn)練和鎖定的神經(jīng)網(wǎng)絡(luò)塊通過一種獨(dú)特類型的卷積層連接,稱為“零卷積”,其中卷積權(quán)重以學(xué)習(xí)的方式從零逐漸增長到優(yōu)化參數(shù)。由于生產(chǎn)就緒的權(quán)重被保留,因此訓(xùn)練在不同規(guī)模的數(shù)據(jù)集上是穩(wěn)健的。由于零卷積不會向深層特征添加新的噪聲,因此訓(xùn)練與微調(diào)擴(kuò)散模型一樣快,相比之下,從頭開始訓(xùn)練新層。 我們使用不同條件的各種數(shù)據(jù)集訓(xùn)練了幾個ControlNet,例如,Canny邊緣、Hough線、用戶涂鴉、人體關(guān)鍵點(diǎn)、分割圖、形狀法線、深度等。我們還用小數(shù)據(jù)集(樣本數(shù)小于5萬甚至1千)和大數(shù)據(jù)集(百萬級樣本)實驗了ControlNet。我們還展示了在一些像深度到圖像這樣的任務(wù)中,使用個人計算機(jī)(一臺Nvidia RTX 3090TI)訓(xùn)練ControlNet可以達(dá)到與商業(yè)模型競爭的結(jié)果,而這些商業(yè)模型是在擁有太字節(jié)級GPU內(nèi)存和數(shù)千個GPU小時的大型計算集群上訓(xùn)練的。
Canny邊緣
我們使用Canny邊緣檢測器[5](隨機(jī)閾值)從互聯(lián)網(wǎng)上獲取300萬個邊緣圖像標(biāo)題對。該模型使用Nvidia A100 80G訓(xùn)練了600個GPU小時?;A(chǔ)模型是穩(wěn)定擴(kuò)散1.5。
Canny邊緣(Alter)
對上述Canny邊緣數(shù)據(jù)集的圖像分辨率進(jìn)行排序,并采樣了幾個子集,其中包含1k、10k、50k、500k個樣本。我們使用相同的實驗設(shè)置來測試數(shù)據(jù)集規(guī)模的影響。
Hough線
使用基于學(xué)習(xí)的深度霍夫變換[13]從Places2 [66]中檢測直線,然后使用BLIP [34]生成標(biāo)題。獲得了60萬個邊緣圖像標(biāo)題對。使用上述Canny模型作為起始檢查點(diǎn),并使用Nvidia A100 80G訓(xùn)練了150個GPU小時。
HED邊界
使用HED邊界檢測[62]從互聯(lián)網(wǎng)上獲取300萬個邊緣圖像標(biāo)題對。該模型使用Nvidia A100 80G訓(xùn)練了300個GPU小時?;A(chǔ)模型是穩(wěn)定擴(kuò)散1.5。
用戶素描
使用HED邊界檢測[62]和一組強(qiáng)大的數(shù)據(jù)增強(qiáng)(隨機(jī)閾值、隨機(jī)屏蔽掉一定百分比的涂鴉、隨機(jī)形態(tài)變換和隨機(jī)非最大抑制)的組合從圖像中合成人類涂鴉。從互聯(lián)網(wǎng)上獲得了50萬個涂鴉圖像標(biāo)題對。使用上述Canny模型作為起始檢查點(diǎn),并使用Nvidia A100 80G訓(xùn)練了150個GPU小時。也嘗試了一種更“人性化”的合成方法[57],但這種方法比簡單的HED慢得多,而且我們沒有注意到明顯的改進(jìn)。
人體姿態(tài)(Openpose)
使用基于學(xué)習(xí)的姿態(tài)估計方法[6]來從互聯(lián)網(wǎng)上找到人類,使用與上述Openpifpaf設(shè)置相同的規(guī)則。我們獲得了20萬個姿態(tài)圖像標(biāo)題對。注意,我們直接使用帶有人體骨架的可視化姿態(tài)圖像作為訓(xùn)練條件。該模型使用Nvidia A100 80G訓(xùn)練了300個GPU小時。其他設(shè)置與上述Openpifpaf相同。
語義分割(COCO)
COCO-Stuff數(shù)據(jù)集4由BLIP[34]標(biāo)注。獲得了164K分割圖像標(biāo)題對。該模型使用Nvidia RTX 3090TI訓(xùn)練了400個GPU小時?;A(chǔ)模型是穩(wěn)定擴(kuò)散1.5。語義分割(ADE20K) ADE20K數(shù)據(jù)集[67]由BLIP[34]標(biāo)注。獲得了164K分割圖像標(biāo)題對。該模型使用Nvidia A100 80G訓(xùn)練了200個GPU小時?;A(chǔ)模型是穩(wěn)定擴(kuò)散1.5。
深度(大規(guī)模)
使用Midas [30]從互聯(lián)網(wǎng)上獲得300萬個深度圖像標(biāo)題對。該模型使用Nvidia A100 80G訓(xùn)練了500個GPU小時。基礎(chǔ)模型是穩(wěn)定擴(kuò)散1.5。
深度(小規(guī)模)
對上述深度數(shù)據(jù)集的圖像分辨率進(jìn)行排序,以采樣一個包含20萬對的子集。這個集合用于實驗訓(xùn)練模型所需的最小數(shù)據(jù)集大小。
法線圖
使用DIODE數(shù)據(jù)集[56],由BLIP[34]標(biāo)注。獲得了25,452個法線圖像標(biāo)題對。該模型使用Nvidia A100 80G訓(xùn)練了100個GPU小時?;A(chǔ)模型是穩(wěn)定擴(kuò)散1.5。
法線圖(擴(kuò)展)
使用Midas [30]計算深度圖,然后進(jìn)行法線-距離轉(zhuǎn)換,得到“粗糙”的法線圖。使用上述法線模型作為起始檢查點(diǎn),并使用Nvidia A100 80G訓(xùn)練了200個GPU小時。
卡通線條繪畫
使用一種卡通線條繪畫提取方法[61]從互聯(lián)網(wǎng)上的卡通插畫中提取線條繪畫。通過按照流行度對卡通圖像進(jìn)行排序,獲得了前100萬個線條-卡通-標(biāo)題對。該模型使用Nvidia A100 80G訓(xùn)練了300個GPU小時?;A(chǔ)模型是Waifu Diffusion(一個有趣的社區(qū)開發(fā)的變體模型,來自穩(wěn)定擴(kuò)散[36])。)
PromptDiffusion
大語言模型(LLM)比如GPT的一個很重要的能力是它的In-Context Learning能力,所謂In-Context Learning是指只需要給定一個任務(wù)的一些具體例子(包含輸入和輸出)作為context,模型就能夠?qū)π吕樱ㄝ斎耄﹫?zhí)行這個任務(wù)(輸出),下圖是GPT-3論文中的In-Context Learning方法,這里的任務(wù)是機(jī)器翻譯(將英語翻譯成法語),這里的輸入其實包含了“任務(wù)描述”+“任務(wù)例子”+“prompt”,這里的prompt就是這個任務(wù)的一個新輸入。當(dāng)任務(wù)例子只有一個時,In-Context Learning其實就變成了one-shot learning,而任務(wù)例子超過1個時,其實就是few-shot learning。注意In-Context Learning是利用LLM本身預(yù)訓(xùn)練學(xué)習(xí)到的知識而不需要去finetune模型。
PromptDiffusion就是讓文生圖模型Stable Diffusion擁有這樣的In-Context Learning。PromptDiffusion的目標(biāo)是通過實現(xiàn)In-Context Learning能力,達(dá)到和ControlNet一樣的可控生成效果。這里設(shè)計的prompt如下所示,其中“exmaple: (image1 → image2)”就是任務(wù)的一個具體示例,比如這里的任務(wù)實現(xiàn)從hed map到圖像的生成,而“image3”是這個任務(wù)的一個新輸入(一個hed map),然后再給定對應(yīng)的“text-guidance”,模型就能夠生成和“image3”以及“text-guidance”匹配的圖像。
PromptDiffusion其實設(shè)計的是一個one-shot learning,原始的SD并沒有這樣的能力,所以PromptDiffusion設(shè)計了一個具體的數(shù)據(jù)集(或者說instruction dataset)來finetune SD。這里選擇的是6個任務(wù),包括depth map -> image,hed map -> image,segmentation map -> image以及它們對應(yīng)的逆任務(wù),如下所示:
訓(xùn)練數(shù)據(jù)集是采用InstructPix2Pix中使用的圖像文本對數(shù)據(jù)集,共包含310k個樣本,訓(xùn)練過程每個樣本只需要隨機(jī)選擇一個任務(wù)構(gòu)建具體的prompt,對于map -> image的任務(wù),其對應(yīng)的prompt的text guidance是image caption,而逆任務(wù)的text guidance則是map的描述,比如“hed maps”。
原始的SD只接受text輸入,而現(xiàn)在還要接受3個額外的圖像,所以需要模型架構(gòu)上也要進(jìn)行調(diào)整,這里借鑒了ControlNet,如下所示:
這里也像ControlNet一樣復(fù)制了一個UNet的encoder,不過是額外增加了兩個輕量級的網(wǎng)絡(luò)(stacked convolutional layers)將example和image query映射到和UNet的輸入同空間維度大小的特征上。具體的,是將example中的兩個圖像拼接在一起通過第一個網(wǎng)絡(luò)得到特征,然后image query通過第二個網(wǎng)絡(luò)得到特征,兩個特征加在一起再送入ControlNet中。要注意的是,這里只freeze了原始UNet的encoder,而其它模塊是進(jìn)行微調(diào)的。 在具體效果上,PromptDiffusion在訓(xùn)練過程中見過的這6個任務(wù)上表現(xiàn)還是比較好的,如下所示:
PromptDiffusion選擇了3個新的任務(wù)(scribble -> image,canny edge -> image,normal map -> image)來評測泛化能力,如下所示,可以看到模型是能夠泛化到新的生成任務(wù)上的:
另外PromptDiffusion可以用于圖像編輯任務(wù),當(dāng)只輸入image query時(不輸入examle),模型其實也是可以生成匹配的圖像的,如下圖中的one-step,利用這個功能就可以實現(xiàn)圖像編輯:給定圖像,首先生成對應(yīng)的condition map,然后再根據(jù)condition map+text生成編輯后的圖像。不過,這個沒看出來具體的優(yōu)勢,因為直接拿圖像對應(yīng)的condition map也可以生成比較一致的圖像。
PerDiffusion
文本到圖像模型(T2I)通過允許用戶通過自然語言指導(dǎo)創(chuàng)作過程,提供了一種新的靈活性。然而,將這些模型個性化以與用戶提供的視覺概念保持一致仍然是一個具有挑戰(zhàn)性的問題。T2I個性化的任務(wù)提出了多個難題,例如在保持高視覺保真度的同時允許創(chuàng)意控制,將多個個性化概念結(jié)合在一張圖像中,以及保持小型模型大小。提出了Perfusion,一種T2I個性化方法,它使用動態(tài)秩-1更新來解決這些挑戰(zhàn)。Perfusion通過引入一種新的機(jī)制,將新概念的交叉注意力鍵“鎖定”到它們的超類別,避免了過擬合。此外,開發(fā)了一種門控秩-1方法,使能夠在推理時控制學(xué)習(xí)概念的影響,并結(jié)合多個概念。這使得在運(yùn)行時有效地平衡視覺保真度和文本對齊度成為可能,而只需要一個100KB的訓(xùn)練模型,比當(dāng)前最先進(jìn)的技術(shù)小五個數(shù)量級。此外,它還可以在不需要額外訓(xùn)練的情況下,平衡用戶不同描述對應(yīng)圖片表達(dá),有較強(qiáng)泛化性。最后,展示了Perfusion在定性和定量方面都優(yōu)于強(qiáng)基線。重要的是,與傳統(tǒng)方法相比,鍵鎖定導(dǎo)致了新穎的結(jié)果,使得能夠以前所未有的方式描繪個性化對象之間的交互,即使是在單次設(shè)置中也是如此。
架構(gòu)概述(A):一個提示被轉(zhuǎn)換為一系列編碼。每個編碼都被輸入到擴(kuò)散U-Net去噪器的一組交叉注意力模塊(紫色塊)。放大的紫色模塊顯示了Key和Value路徑如何受文本編碼的影響。Key驅(qū)動注意力圖,然后調(diào)制Value路徑。門控秩-1編輯(B):頂部:K路徑被鎖定,所以任何到達(dá)????的??_Hugsy編碼都被映射到超類別??_teddy的鍵。底部:任何到達(dá)????的??_Hugsy編碼,都被映射到??_Hugsy,它是學(xué)習(xí)得到的。這種更新的門控特性允許只對必要的編碼進(jìn)行選擇性應(yīng)用,并提供了調(diào)節(jié)學(xué)習(xí)概念強(qiáng)度的方法,如輸出圖像中所表現(xiàn)的。
以一種富有表現(xiàn)力和高效的方式對模型進(jìn)行個性化。texual_inverse,容易出現(xiàn)過擬合,即學(xué)習(xí)到的概念通過改變包含它的提示很難修改。這個問題源于注意力機(jī)制,因為新的概念引起了超出其視覺范圍的注意力。texual_inverse中典型的過擬合,是由學(xué)習(xí)嵌入的注意力占據(jù)整個圖像造成的。這里可視化了與“dog*”單詞對應(yīng)的注意力圖。TI注意力區(qū)域(右面板)分布在整個圖像上,而不是聚焦在對象上。這導(dǎo)致生成過程忽略了提示的其余部分,只描繪了“dog*”概念。 接下來,描述Perfusion,一種通過秩-1層編輯來克服這個問題的方法。概述了一種門控機(jī)制,它提供了更好的推理時控制,并描述了如何利用它來組合孤立學(xué)習(xí)的概念。
“在哪里”路徑"和“是什么”路徑。為了同時提高這兩個目標(biāo),的關(guān)鍵洞察是,模型需要將生成的內(nèi)容與生成的位置分離開來,利用交叉注意力機(jī)制的解釋。??路徑——與“鍵”相關(guān)聯(lián)的那個路徑,與創(chuàng)建注意力圖有關(guān)。它因此充當(dāng)控制最終圖像中對象位置的路徑。相比之下,??路徑負(fù)責(zé)向每個區(qū)域添加特征。從這個意義上說,它可以控制最終圖像中出現(xiàn)的內(nèi)容。將??映射解釋為一個“在哪里”的路徑,將??映射解釋為一個“是什么”的路徑。
避免過擬合。在初步實驗中注意到,當(dāng)從有限數(shù)量的示例中學(xué)習(xí)個性化概念時,“在哪里”路徑(?? ?? )的模型權(quán)重容易過擬合到這些示例中看到的圖像布局。顯示了個性化示例可能“占據(jù)”整個注意力圖,并阻止其他單詞影響合成的圖像。因此通過限制“在哪里”路徑來防止這種基于注意力的過擬合。
保持身份。在Image2StyleGAN中,Abdal等人[2019]提出了一種分層潛在表示,以更有效地捕捉身份。在那里,他們不是在生成器的輸入空間預(yù)測一個單一的潛在代碼,而是對合成過程中的每個分辨率預(yù)測一個不同的代碼。將What(V)路徑激活作為一個類似的潛在空間,考慮到它們的緊湊性和底層U-Net去噪器的多分辨率結(jié)構(gòu)。 為了滿足這兩個目標(biāo),考慮這樣一個簡單的解決方案:每當(dāng)編碼包含目標(biāo)概念時,確保它的交叉注意力鍵與其超類別匹配。
零鏡頭加權(quán)損失:使用少量圖像示例進(jìn)行訓(xùn)練容易學(xué)習(xí)圖像背景中的假相關(guān)。為了將概念與其背景解耦,通過從零鏡頭圖像分割模型[Lu?ddecke and Ecker 2021]獲得的軟分割掩碼來加權(quán)標(biāo)準(zhǔn)條件擴(kuò)散損失。掩碼值按其最大值進(jìn)行歸一化。 將Perfusion應(yīng)用于多層:類似于[Gal et al. 2022],對于每個概念,為一個超類別名稱選擇一個單詞。使用該單詞來初始化其詞嵌入,并將嵌入視為學(xué)習(xí)參數(shù)。將Perfusion編輯應(yīng)用于UNet去噪器的所有交叉注意力層。對于每個 K路徑層(??),預(yù)先計算并凍結(jié)????:?? ? 為 ????:?? = ???? ?? ,其中提示說“一張<超級 ? ?? 超類別 class_word>的照片”,并且更新???隨著訓(xùn)練的進(jìn)行。在每個V路徑層上,將???? :??視為學(xué)習(xí)參數(shù)。 ? 訓(xùn)練細(xì)節(jié):用0.03的學(xué)習(xí)率訓(xùn)練???,對于嵌入,設(shè)置了0.006的學(xué)習(xí)率。使用Flash-Attention [Dao et al. 2022; Lefaudeux et al. 2022]使用16的批量大小。只使用翻轉(zhuǎn)增強(qiáng)?? = 50%。不翻轉(zhuǎn)不對稱的對象。使用一個由8個提示組成的驗證集,每25個訓(xùn)練步驟采樣一次,并選擇具有最大化CLIP圖像相似度得分和CLIP文本相似度得分之間諧波平均值的模型的步驟。在實驗細(xì)節(jié)中更詳細(xì)地描述了CLIP指標(biāo)。為了調(diào)節(jié)生成,隨機(jī)采樣中性上下文文本,這些文本是從CLIP ImageNet模板[Radford et al. 2021]派生的。模板列表提供在補(bǔ)充材料中。 的方法在單個A100 GPU上訓(xùn)練平均210步,花費(fèi)約4分鐘,最多400步(約7 分鐘)。
這篇文章主要的工作就是,想讓圖文特征在映射空間對的更齊,更容易被操控,發(fā)現(xiàn)以前texual_inverse文本latent特征和圖的latent特征在融合、映射時候注意力不夠精準(zhǔn),所以設(shè)計了一種新的融合框架,可以更細(xì)粒度的對齊文本和圖特征,讓模型具有更好的文本控制力、并且有zero-shot的泛化能力。
小結(jié)
1.介紹了文本生成圖提高可控性的幾種思路
2.介紹了市面主流的可控模型幾個解決方案
3.回歸到問題本質(zhì),更細(xì)粒度的控制更精準(zhǔn)的控制才是未來文章來源:http://www.zghlxwxcb.cn/news/detail-453438.html
4.多模態(tài)和數(shù)據(jù)的規(guī)范化是未來競爭實力文章來源地址http://www.zghlxwxcb.cn/news/detail-453438.html
到了這里,關(guān)于Ai作圖可控性演進(jìn)——從SD到MJ的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!