前言
終于開寫本CV多模態(tài)系列的核心主題:stable diffusion相關(guān)的了,為何執(zhí)著于想寫這個stable diffusion呢,源于三點
- 去年stable diffusion和midjourney很火的時候,就想寫,因為經(jīng)常被刷屏,但那會時間錯不開
- 去年11月底ChatGPT出來后,我今年1月初開始寫ChatGPT背后的技術(shù)原理,而今年2月份的時候,一讀者“天之驕子呃”在我這篇ChatGPT原理文章下面留言:“點贊,十年前看你的svm懂了,但感覺之后好多年沒寫了,還有最近的AI繪畫 stable diffusion 相關(guān)也可以寫一下以及相關(guān)的采樣加速算法
我當時回復(fù)到:哈,十年之前了啊,歡迎回來,感謝老讀者、老朋友
確實非常非常多的朋友都看過我那篇SVM筆記,影響力巨大,但SVM筆記之后,也還是寫了很多新的博客/文章滴,包括但不限于:xgboost、CNN、RNN、LSTM、BERT等
今后基本每季度都有更新的計劃,歡迎常來
關(guān)于Stable Diffusion,可以先看下這篇圖解Stable Diffusion的文章”(此篇文章也是本文的參考之一) - 今年3月中旬,當OpenAI宣稱GPT4具備了CV多模態(tài)的能力之后,讓我對AI繪畫和CV多模態(tài)有了更強的動力去研究探索,并把背后的技術(shù)細節(jié)寫出來
其實當時就想寫了,但當時因為寫各種開源平替模型的原理、部署、微調(diào)去了,所以一直沒來得及寫,包括之前計劃的100篇論文也因此耽擱
4.23,我所講的ChatGPT原理課開課之后,終于有時間開寫這篇多模態(tài)博客,然想寫清楚stable diffusion和midjourney背后的技術(shù)細節(jié),不得不先從擴散模型開始,于此便有了上一篇《AI繪畫能力的起源:從VAE、擴散模型DDPM、DETR到ViT/MAE/Swin transformer》「且如果你此前不了解何謂擴散模型、何謂DDPM,務(wù)必先看該文,不然沒法看懂本文」
援引上一篇文章的這段話“AI繪畫隨著去年stable diffusion和Midjourney的推出,使得文生圖火爆異常,各種游戲的角色設(shè)計、網(wǎng)上店鋪的商品/頁面設(shè)計都用上了AI繪畫這樣的工具,更有不少朋友利用AI繪畫取得了不少的創(chuàng)收,省時省力還能賺錢,真香”,此外,包括我司LLM項目團隊開發(fā)的AIGC模特生成系統(tǒng)也用到了這方面的技術(shù):基于SD二次開發(fā)
沿著上文之后,本文將寫清楚下面表格中帶下劃線的模型
1月 | 3月 | 4月 | 5月 | 6月 | 8月 | 9月 | 10月 | 11月 | |
20年 | DETR | DDPM | DDIM VisionTransf..? |
||||||
21年 | CLIP DALL·E |
SwinTransformer | MAE SwinTransf..V2 |
||||||
22年 | BLIP | DALL·E 2 | StableDiffusion? BEiT-3 Midjourney V3 |
||||||
23年 | BLIP2 | VisualChatGPT? GPT4 Midjourney V5 |
SAM(Segment Anything Model) | FastSAM (中科院版SAM) MobileSAM |
DALLE3 |
且過程中會順帶介紹MiniGPT-4、VisualGPT到HuggingGPT、AutoGPT這幾個模型
第一部分 從CLIP到BLIP1、BLIP2
1.1 CLIP:基于對比文本-圖像對的預(yù)訓(xùn)練方法
我第一次見識到CLIP這個論文的時候,當時的第一反應(yīng)是,特么也太強悍了.. ?
CLIP由OpenAI在2021年1月發(fā)布
- 通過超大規(guī)模模型預(yù)訓(xùn)練提取視覺特征,進行圖片和文本之間的對比學(xué)習(xí) (簡單粗暴理解就是發(fā)微博/朋友圈時,人喜歡發(fā)一段文字然后再配一張或幾張圖,CLIP便是學(xué)習(xí)這種對應(yīng)關(guān)系)
- 且預(yù)訓(xùn)練好之后不微調(diào)直接推理 (即zero-shot,用見過的圖片特征去判斷沒見過的圖片的類別,而不用下游任務(wù)訓(xùn)練集進行微調(diào))
使得在ImageNet數(shù)據(jù)集上,CLIP模型在不使用ImageNet數(shù)據(jù)集的任何一張圖片進行訓(xùn)練的的情況下,最終模型精度能跟一個有監(jiān)督的訓(xùn)練好的ResNet-50打成平手 (在ImageNet上zero-shot精度為76.2%,這在之前一度被認為是不可能的)??
為了訓(xùn)練CLIP,OpenAI從互聯(lián)網(wǎng)收集了共4個億的文本-圖像對,論文稱之為WIT(Web Image Text,WIT質(zhì)量很高,而且清理的非常好,其規(guī)模相當于JFT-300M,這也是CLIP如此強大的原因之一,后續(xù)在WIT上還孕育出了DALL-E模型)
其訓(xùn)練過程如下圖所示:
- 如下圖的第一步所示,CLIP的輸入是一對對配對好的的圖片-文本對(比如輸入是一張狗的圖片,對應(yīng)文本也表示這是一只狗),這些文本和圖片分別通過Text Encoder和Image Encoder輸出對應(yīng)的特征。然后在這些輸出的文字特征和圖片特征上進行對比學(xué)習(xí)
假如模型輸入的是對圖片-文本對,那么這對互相配對的圖像–文本對是正樣本(上圖輸出特征矩陣對角線上標識藍色的部位),其它對樣本都是負樣本,這樣模型的訓(xùn)練過程就是最大化個正樣本的相似度,同時最小化個負樣本的相似度
? Text Encoder可以采用NLP中常用的text transformer模型
? 而Image Encoder可以采用常用CNN模型或者vision transformer等模型
相似度是計算文本特征和圖像特征的余弦相似性cosine similarity
之后,CLIP可以直接實現(xiàn)zero-shot的圖像分類,即不需要任何訓(xùn)練和微調(diào),其實現(xiàn)zero-shot分類只需要簡單的兩步,如下第2、3點所示 - 根據(jù)任務(wù)的分類標簽構(gòu)建每個類別的描述文本:A photo of {label},然后將這些文本送入Text Encoder得到對應(yīng)的文本特征,如果類別數(shù)目為n,那么將得到n個文本特征
- 將要預(yù)測的圖像送入Image Encoder得到圖像特征,然后與n個文本特征計算縮放的余弦相似度(和訓(xùn)練過程保持一致),然后選擇相似度最大的文本對應(yīng)的類別作為圖像分類預(yù)測結(jié)果
進一步地,可以將這些相似度看成logits,送入softmax后可以到每個類別的預(yù)測概率
以下是對應(yīng)的偽代碼
# image_encoder - ResNet or Vision Transformer
# text_encoder - CBOW or Text Transformer
# I[n, h, w, c] - 輸入圖片維度
# T[n, l] - 輸入文本維度,l表示序列長度
# W_i[d_i, d_e] - learned proj of image to embed
# W_t[d_t, d_e] - learned proj of text to embed
# t - learned temperature parameter
# 分別提取圖像特征和文本特征
I_f = image_encoder(I) #[n, d_i]
T_f = text_encoder(T) #[n, d_t]
# 對兩個特征進行線性投射,得到相同維度的特征d_e,并進行l(wèi)2歸一化,保持數(shù)據(jù)尺度的一致性
# 多模態(tài)embedding [n, d_e]
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)
# 計算縮放的余弦相似度:[n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t)
# symmetric loss function
labels = np.arange(n) # 對角線元素的labels
loss_i = cross_entropy_loss(logits, labels, axis=0) # image loss
loss_t = cross_entropy_loss(logits, labels, axis=1) # text loss
loss = (loss_i + loss_t)/2 # 對稱式的目標函數(shù)
2021年10月,Accomplice發(fā)布的disco diffusion,便是第一個結(jié)合CLIP模型和diffusion模型的AI開源繪畫工具,其內(nèi)核便是采用的CLIP引導(dǎo)擴散模型(CLIP-Guided diffusion model)
且后續(xù)有很多基于CLIP的一系列改進模型,比如Lseg、GroupViT、ViLD、GLIP
1.2 從BLIP1、BLIP2到miniGPT4
1.2.1 BLIP1:ViT + BERT ——通過encoder-decoder統(tǒng)一理解與生成任務(wù)
隨著AI的迅速發(fā)展,多模態(tài)日漸成為一種趨勢,而「Vision-Language Pre-training (VLP) + Fine-tuning => Zero Shot / Few Shot」的模式是快速解決多下游任務(wù)的一個好的模式,VLP 是這個模式的開端,所以對于 VLP 的相關(guān)研究也很多。BLIP 是一個新的 VLP 架構(gòu),可以靈活、快速的應(yīng)用到下游任務(wù),如:圖像-文本檢索、圖像翻譯、以及 VQA 等
簡單來講,BLIP的主要特點是結(jié)合了encoder和decoder,形成了統(tǒng)一的理解和生成多模態(tài)模型。再利用BLIP進行后續(xù)工作的時候,既可以使用其理解的能力(encoder),又可以利用其生成的能力(decoder),拓展了多模態(tài)模型的應(yīng)用
1.2.1.1 BLIP的模型結(jié)構(gòu)
CLIP 采用了 image-encoder (ViT / ResNet) & text-encoder (transformer),然后直接拿 圖片特征 和 文本特征 做余弦相似度對比,得到結(jié)果,而BLIP 的做法要復(fù)雜挺多
如下圖所示,為了預(yù)訓(xùn)練一個同時具有理解和生成能力的統(tǒng)一模型,BLIP模型主要由4個部分組成,從左至右分別是
-
上圖第1部分:視覺編碼器Image Encoder(ViT)——提取圖片特征
視覺編碼器本質(zhì)就是?ViT 的架構(gòu):將輸入圖像分割成一個個的 Patch 并將它們編碼為一系列 Image Embedding,并使用額外的 [CLS] token 來表示全局的圖像特征 -
上圖第2部分:文本編碼器Text Encoder(BERT)——提取文本特征
文本編碼器就是 BERT 的架構(gòu),其中 [CLS] token 附加到文本輸入的開頭以總結(jié)句子,作用是提取文本特征與第1部分的圖像特征做對比學(xué)習(xí)
在這個過程中會訓(xùn)練一個對比學(xué)習(xí)目標函數(shù) (Image-Text Contrastive Loss, ITC)
ITC 作用于第1部分的視覺編碼器(ViT)和第2部分的文本編碼器(BERT),目標是對齊視覺和文本的特征空間,方法是使得正樣本圖文對的相似性更大,負樣本圖文對的相似性更低,在 ALBEF 里面也有使用到。作者在這里依然使用了 ALBEF 中的動量編碼器,它的目的是產(chǎn)生一些偽標簽,輔助模型的訓(xùn)練
為方便對比,把BLIP的模型結(jié)構(gòu)圖再貼一遍
-
上圖第3部分:視覺文本編碼器Image-grounded Text Encoder(變種 BERT)——BERT中插入交叉注意層,從而針對圖片特征和文本特征做二分類
視覺文本編碼器的具體做法是在文本編碼器比如BERT的每個transformer? block的自注意(Bi Self-Att)層和前饋網(wǎng)絡(luò)(Feed Forward)之間額外插入一個交叉注意(Cross-Attention),以引入視覺特征,作用是根據(jù) ViT 給的圖片特征和文本輸入做二分類,所以使用的是編碼器,且注意力部分是雙向的 Self-Attention,且添加一個額外的 [Encode] token,作為圖像文本的聯(lián)合表征
在這個過程中則訓(xùn)練一個圖文匹配目標函數(shù) (Image-Text Matching Loss, ITM)
ITM 作用于第1部分的視覺編碼器和第3部分的視覺文本編碼器,是一個二分類任務(wù),目標是學(xué)習(xí)圖像文本的聯(lián)合表征,使用一個分類頭來預(yù)測 image-text pair 的 正匹配 還是 負匹配,目的是學(xué)習(xí) image-text 的多模態(tài)表示,調(diào)整視覺和語言之間的細粒度對齊,作者在這里依然使用了 ALBEF 中的 hard negative mining 技術(shù)
-
上圖第4部分:視覺文本解碼器Image-grounded Text Decoder(變種 BERT)——根據(jù)圖片特征和文本特征做文本生成
視覺文本解碼器使用 Cross-Attention,作用是根據(jù) ViT 給的圖片特征和文本輸入做文本生成的任務(wù),所以使用的是解碼器,且將 上圖第3部分的 Image-grounded Text Encoder 結(jié)構(gòu)中的 Bi Self-Att 替換為 Causal Self-Att,目標是預(yù)測下一個 token,且添加一個額外的 [Decode] token 和結(jié)束 token,作為生成結(jié)果的起點和終點
一個需要注意的點是:相同顏色的部分是參數(shù)共享的,即視覺文本編碼器和視覺文本解碼器共享除 Self-Attention 層之外的所有參數(shù)。每個 image-text 在輸入時,image 部分只需要過一個 ViT 模型,text 部分需要過3次文本模型
過程中訓(xùn)練一個語言模型目標函數(shù) (Language Modeling Loss, LM)
畢竟由于BLIP 包含解碼器,用于生成任務(wù)。既然有這個任務(wù)需求,那就意味著需要一個針對于生成任務(wù)的語言模型目標函數(shù),LM 作用于第1部分的視覺編碼器和第4部分的視覺文本解碼器,目標是根據(jù)給定的圖像以自回歸方式來生成關(guān)于文本的描述。與 VLP 中廣泛使用的 MLM 損失(完形填空)相比,LM 使模型能夠?qū)⒁曈X信息轉(zhuǎn)換為連貫的字幕
1.2.1.2?BLIP的字幕與過濾器方法CapFiltg
上述整個過程中,有一個不可忽略的問題,即高質(zhì)量的人工注釋圖像-文本對(例如,COCO) 因為成本高昂所以數(shù)量不多
- CLIP 的數(shù)據(jù)來源于 Web 上爬來的 圖像-文本對,所以數(shù)據(jù)集很容易擴充的很大,而且采用 對比學(xué)習(xí)的方式,基本屬于自監(jiān)督了,不太需要做數(shù)據(jù)標注;
- BLIP 改進了 CLIP 直接從 Web 取數(shù)據(jù) 噪聲大 的缺點,提出了 Captioning and Filtering (CapFilt) 模塊,這個模塊就是用來 減小噪聲、豐富數(shù)據(jù)的,主要包括兩個模塊:即字幕與過濾器方法CapFilt (Captioning and Filtering)
如下圖所示
CapFilt 方法包含兩個模塊:
- 字幕器 Captioner:相當于給一張網(wǎng)絡(luò)圖片,生成字幕。它是一個視覺文本解碼器(對應(yīng)于上述BLIP模型結(jié)構(gòu)的第4部分),在 COCO數(shù)據(jù)集上使用 LM 目標函數(shù)微調(diào),對給定圖像的文本進行解碼,從而實現(xiàn)給定網(wǎng)絡(luò)圖片,Captioner 生成字幕的效果
-
過濾器 Filter:過濾掉噪聲圖文對image-text pair,它是一個視覺文本編碼器(對應(yīng)于上述BLIP模型結(jié)構(gòu)的第3部分),看文本是否與圖像匹配,在 COCO 數(shù)據(jù)集上使用 ITC 和 ITM 目標函數(shù)微調(diào)
Filter 刪除原始 Web 文本和合成文本 中的嘈雜文本,如果 ITM 頭將其預(yù)測為與圖像不匹配,則認為文本有噪聲
最后,將過濾后的圖像-文本對與人工注釋對相結(jié)合,形成一個新的數(shù)據(jù)集,作者用它來預(yù)訓(xùn)練一個新的模型
下圖展示了被過濾器接受和拒絕的文本可視化(綠色 文本是被 filter 認可的,而 紅色 文本是被 filter 拒絕的)
1.2.2 BLIP2:CLIP ViT-G/14 + Q-Former +?FLAN-T5
下圖是BLIP-2的模型結(jié)構(gòu) (論文地址:BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models),其中視覺側(cè)和文本側(cè)分別使用預(yù)訓(xùn)練的CLIP ViT-G/14模型和FLAN-T5模型,僅中間的起橋接作用的Q-Former參與訓(xùn)練,訓(xùn)練需要的成本和數(shù)據(jù)量進一步降低,BLIP-2的訓(xùn)練數(shù)據(jù)量僅129M,16卡A100訓(xùn)練9天
- 后來的LLAVA工作更是將這一思路簡化到極致,僅通過一個projection layer將CLIP ViT-L/14和Vicuna語言模型縫合在一起,訓(xùn)練數(shù)據(jù)僅用了595K圖文對以及158K指令微調(diào)數(shù)據(jù)
- miniGPT4則是在復(fù)用BLIP-2的vision encoder + Q-Former的基礎(chǔ)上,通過一層project layer縫合了Vicuna語言模型,訓(xùn)練數(shù)據(jù)僅用了5M的圖文對數(shù)據(jù)+3.5K的指令微調(diào)數(shù)據(jù)
1.2.3?MiniGPT4:基于LLaMA微調(diào)的Vicuna + BLIP2 + 線性投影層
MiniGPT-4具有許多類似于GPT-4所展示的功能,如詳細的圖像描述生成和從手寫草稿創(chuàng)建網(wǎng)站,以及根據(jù)給定圖像編寫靈感的故事和詩歌,為圖像中顯示的問題提供解決方案,比如教用戶如何根據(jù)食物照片烹飪等
模型結(jié)構(gòu)
miniGPT4的模型架構(gòu)由一個語言模型拼接一個視覺模型,最后加一個線性投影層來對齊,具體而言
-
它先是使用基于LLaMA微調(diào)的小羊駝Vicuna,作為語言解碼器
-
在視覺感知方面,采用了與BLIP-2相同的預(yù)訓(xùn)練視覺組件(該組件由EVA-CLIP[13]的ViT- G/14和Q-Former組成)
-
再之后,增加了一個單一的投影層,將編碼的視覺特征與語言模型小羊駝對齊,并凍結(jié)所有其他視覺和語言組件
模型訓(xùn)練:預(yù)訓(xùn)練(500萬圖像文本對)-微調(diào)
訓(xùn)練上,還是經(jīng)典的預(yù)訓(xùn)練-微調(diào)模式
- 在整個預(yù)訓(xùn)練過程中,無論是預(yù)訓(xùn)練的視覺編碼器還是LLM都保持凍結(jié)狀態(tài),只有線性投影層被預(yù)訓(xùn)練。具體是使用Conceptual Caption、SBU和LAION的組合數(shù)據(jù)集來訓(xùn)練我們的模型,歷經(jīng)2萬個訓(xùn)練步驟,批大小為256,覆蓋了大約500萬對圖像-文本,整個過程花費大約10小時,且使用的4個A100 (80GB) gpu
- 然而,簡單地將視覺特征與LLM對齊不足以訓(xùn)練出像聊天機器人那樣具有視覺會話能力的高性能模型,并且原始圖像-文本對背后的噪聲可能導(dǎo)致語言輸出不連貫。因此,我們收集了另外3500個高質(zhì)量對齊的圖像-文本對,用設(shè)計好的會話模板進一步微調(diào)模型(只需要400個訓(xùn)練步驟,批量大小為12,使用單個A100 GPU最終7分鐘即可完成),以提高生成語言的自然度及其可用性
第二部分 從DALLE到DALLE 2、DALLE 3
2.1 DALL-E:Zero-Shot Text-to-Image Generation
有趣的是,DALL-E和CLIP一樣,也是21年年初發(fā)布的,對應(yīng)論文為《Zero-Shot Text-to-Image Generation》,其參數(shù)大小有著12B,其數(shù)據(jù)集是2.5 億個圖像文本對
- 通過上一篇文章可知,VQ-VAE的生成模式是pixcl-CNN +codebook,其中pixcl-CNN就是一個自回歸模型
- OpenAI 將pixcl-CNN換成GPT,再加上那會多模態(tài)相關(guān)工作的火熱進展,可以考慮使用文本引導(dǎo)圖像生成,所以就有了DALL·E
DALL·E和VQ-VAE-2一樣,也是一個兩階段模型:
-
Stage1:Learning the Visual Codebook
先是輸入:一對圖像-文本對(訓(xùn)練時),之后編碼特征,具體編碼時涉及到兩個步驟
首先,文本經(jīng)過BPE編碼得到256維的特征
其次,256×256的圖像經(jīng)過VQ-VAE(將訓(xùn)練好的VQ-VAE的codebook直接拿來用),得到32×32的圖片特征
We train a discrete variational autoencoder (dVAE) to compress each 256×256 RGB image into a 32 × 32 grid of image tokens -
Stage2:Learning the Prior
重構(gòu)原圖
將拉直為1024維的tokens,然后連上256維的文本特征,這樣就得到了1280維的token序列,然后直接送入GPT(masked decoder)重構(gòu)原圖
推理時,輸入文本經(jīng)過編碼得到文本特征,再將文本通過GPT利用自回歸的方式生成圖片,生成的多張圖片會通過CLIP模型和輸入的文本進行相似度計算,然后調(diào)出最相似(描述最貼切)的圖像
2.2 DALLE 2:Hierarchical Text-Conditional Image Generation with CLIP Latents
對于DALL·E2而言,基本就是整合了CLIP和基于擴散模型的GLIDE,而后者則采用了兩階段的訓(xùn)練方式:文本 → 文本特征 → 圖片特征 → 圖片
-
CLIP訓(xùn)練過程:學(xué)習(xí)文字與圖片的對應(yīng)關(guān)系
如上圖所示,CLIP的輸入是一對對配對好的的圖片-文本對(根據(jù)對應(yīng)文本一條狗,去匹配一條狗的圖片),這些文本和圖片分別通過Text Encoder和Image Encoder輸出對應(yīng)的特征,然后在這些輸出的文字特征和圖片特征上進行對比學(xué)習(xí) -
DALL·E2:prior +?decoder
上面的CLIP訓(xùn)練好之后,就將其凍住了,不再參與任何訓(xùn)練和微調(diào),DALL·E2訓(xùn)練時,輸入也是文本-圖像對,下面就是DALL·E2的兩階段訓(xùn)練:
? 階段一 prior的訓(xùn)練:根據(jù)文本特征(即CLIP text encoder編碼后得到的文本特征),預(yù)測圖像特征(CLIP image encoder編碼后得到的圖片特征)
換言之,prior模型的輸入就是上面CLIP編碼的文本特征,然后利用文本特征預(yù)測圖片特征(說明白點,即圖中右側(cè)下半部分預(yù)測的圖片特征的ground truth,就是圖中右側(cè)上半部分經(jīng)過CLIP編碼的圖片特征),就完成了prior的訓(xùn)練
推理時,文本還是通過CLIP text encoder得到文本特征,然后根據(jù)訓(xùn)練好的prior得到類似CLIP生成的圖片特征,此時圖片特征應(yīng)該訓(xùn)練的非常好,不僅可以用來生成圖像,而且和文本聯(lián)系的非常緊(包含豐富的語義信息)
? 階段二 decoder生成圖:常規(guī)的擴散模型解碼器,解碼生成圖像
這里的decoder就是升級版的GLIDE(GLIDE基于擴散模型),所以說DALL·E2 = CLIP + GLIDE
2.3 DALLE 3:Improving Image Generation with Better Captions
我司LLM項目團隊于23年11月份在給一些B端客戶做文生圖的應(yīng)用時,對比了各種同類工具,發(fā)現(xiàn)DALLE 3確實強,加之也要在論文100課上講DALLE三代的三篇論文,故接下來,咱們結(jié)合DALLE 3和相關(guān)paper好好看下DALLE 3的訓(xùn)練細節(jié)
2.3.1 為提高文本圖像配對數(shù)據(jù)集的質(zhì)量:基于谷歌的CoCa?微調(diào)出圖像字幕生成器
目前文生圖模型的一個很大的問題是模型的文本理解能力,這個文本理解能力指的是生成的圖像是否能和文本保持一致,也就是論文里面所說的prompt following能力
如論文中所說
-
論文提出來字幕改進(caption improvement)的方法
畢竟現(xiàn)在text-to-image模型現(xiàn)存的一個基本問題便是:這些模型訓(xùn)練所用的文本-圖像配對數(shù)據(jù)的質(zhì)量較差
We hypothesize that a fundamental issue with existing text-to-image models is the poor quality of the text and image pairing of the datasets they were trained on -
故論文提出可以通過改進「文本-圖像配對數(shù)據(jù)集中的針對圖像的文本描述的質(zhì)量」來解決這個問題(We propose to address this by generating improved captions for the images in our dataset)
為實現(xiàn)這個目標,首先訓(xùn)練一個強大的圖像字幕生成器(image captioner),以生成詳細、準確的圖像描述,然后我們便可以把這個圖像字幕生成器應(yīng)用到已有的文本-圖像配對數(shù)據(jù)集中,以為各個圖像生成更詳細、準確的圖像描述或字幕,最后在改進的數(shù)據(jù)集上訓(xùn)練text-to-image模型
We do this by first learning a robust image captioner which produces detailed, accurate descriptions of images. We then apply this captioner to our dataset to produce more detailed captions. We finally train text-to-image models on our improved dataset.
總之,對于稍微復(fù)雜的文本,目前的文生圖模型生成的圖像往往會容易忽略部分文本描述,甚至無法生成文本所描述的圖像。這個問題主要還是由于訓(xùn)練數(shù)據(jù)集本身所造成的,更具體的是說是圖像caption不夠準確
- 一方面,圖像常規(guī)的文本描述往往過于簡單(比如COCO數(shù)據(jù)集),它們大部分只描述圖像中的主體而忽略圖像中其它的很多信息,比如背景,物體的位置和數(shù)量,圖像中的文字等
- 另外一方面,目前訓(xùn)練文生圖的圖像文本對數(shù)據(jù)集(比如LAION數(shù)據(jù)集)都是從網(wǎng)頁上爬取的,圖像的文本描述其實就是alt-text,但是這種文本描述很多是一些不太相關(guān)的東西,比如廣告。訓(xùn)練數(shù)據(jù)的caption不行,訓(xùn)練的模型也就自然而然無法充分學(xué)習(xí)到文本和圖像的對應(yīng)關(guān)系,那么prompt following能力必然存在問題
2.3.1.1 什么是谷歌的CoCa
OpenAI最終基于谷歌的CoCa來訓(xùn)練這個image captioner來合成圖像的caption,CoCa構(gòu)建在encoder-decoder的基礎(chǔ)上,其中Image Encoder和Text Decoder均采用Transformer模型,其中Image Encoder的參數(shù)量為1B,而Text Decoder的參數(shù)量達到1.1B,這樣整個CoCa模型的參數(shù)量為2.1B(對于圖像,其輸入大小為288×288,而patch size為18x18,這樣總共有256個image tokens。同時,這里也設(shè)計了兩個更小模型:CoCa-Base和CoCa-Large)
不過這里將text decoder均分成兩個部分:一個單模態(tài)解碼器unimodal text decoder和一個多模態(tài)解碼器multimodal text decoder,然后增加一個cls token在文本的最后(CoCa相比CLIP額外增加了一個Multimodel Text Encoder來生成caption,如此,它訓(xùn)練的損失包含了CLIP的對比損失和captioing的交叉熵損失,所以CoCa不僅可以像CLIP那樣進行多模態(tài)檢索,也可以用于caption生成)
具體而言,如下圖的左半部分所示
- unimodal text decoder不參與對圖像特征的cross-attention(We omit cross-attention in unimodal decoder layers to encode text-only representations,相當于把 Transformer Decoder 中的cross attention去掉,只保留 masked self-attention 和 FFNN)
??這樣cls token經(jīng)過unimodal text decoder之后就能夠得到整個句子的全局特征
? 同時采用attention pooling對image encoder得到特征提取圖像的全局特征(這里的attention pooling其實就是一個multi-head attention,只不過key和value是image encoder得到的特征,而query是預(yù)先定義的一個可訓(xùn)練的embedding,由于我們只需要提取一個全局特征,所以只需要定義一個query就好了)
兩個全局特征就可以實現(xiàn)圖像-文本的對比學(xué)習(xí)「相當于image encoder和unimodal text decoder的兩個[CLS]向量作為圖片和文本的表示,進行batch 內(nèi)對比學(xué)習(xí),同 CLIP」 - multimodal text decoder將用來執(zhí)行生成任務(wù),這里也通過一個attention pooling對image encoder得到的特征進行提取,不過這里query數(shù)量定義為256,這樣attention pooling可以得到256個特征,它作為multimodal text decoder的cross-attention的輸入(cascademultimodal decoder layers cross-attending to image encoder outputs to learn multimodal image-textrepresentations)
相當于就是正常的Transformer Decoder,包含masked self-attention、cross-attention、FFNN,用于融合圖片和文本信息,實現(xiàn)雙模態(tài),最后做文本生成 - 所以,CoCa將同時執(zhí)行對比學(xué)習(xí)和文本生成任務(wù),它的訓(xùn)練損失也包括兩個部分:
順帶說一句,這個CoCa和如下圖所示的ALBEF(這是其論文)還挺像的,所以有人評論它兩的關(guān)系就像BERT和RoBERTa(可以簡單理解為是對BERT的精調(diào))
- 但CoCa 與 ALBEF 最大的不同在于:CoCa 右側(cè)處理文本和進行多模態(tài)融合的網(wǎng)絡(luò)是一個 decoder,而非ALBEF那里是 encoder
- 再說一句,其實下圖的下半部分不就是類似一個CLIP么?^_^
2.1.1.2 分別通過短caption、長caption微調(diào)預(yù)訓(xùn)練好的image captioner
為了提升模型生成caption的質(zhì)量,OpenAI對預(yù)訓(xùn)練好的image captioner進行了進一步微調(diào),這個微調(diào)包括兩個不同的方案,兩個方案構(gòu)建的微調(diào)數(shù)據(jù)集不同
- 第一個方案的微調(diào)數(shù)據(jù)集是只描述圖像主體的短caption(類似COCO風(fēng)格的caption)
- 而第二個方案的微調(diào)數(shù)據(jù)集是詳細描述圖像內(nèi)容的長caption
相應(yīng)地,兩個微調(diào)模型分別可以生成:短caption(short synthetic captions,簡稱SSC)、長caption(descriptive synthetic captions,簡稱DSC)
下圖展示了三個樣例圖像各自的原始caption(ground-truth),以及生成的短caption、長caption
- 每個樣例圖像的原始caption是從網(wǎng)頁上得到的alt-text,其質(zhì)量較差
- 每個樣例圖像的合成的短caption簡潔地描述了圖像的主體內(nèi)容
- 每個樣例圖像的合成的長caption詳細描述了圖像的很多內(nèi)容,細節(jié)比較豐富
2.1.1.3 為提高合成caption對文生圖模型的性能:采用描述詳細的長caption,訓(xùn)練的混合比例高達95%
接下來要解決兩個問題
- 通過實驗來分析合成caption對文生圖模型性能的影響
- 另外一點是探討訓(xùn)練過程中合成caption和原始caption的最佳混合比例
這里之所以要混合合成caption和原始caption(opted to blend synthetic captions with ground truth captions),主要是為了防止模型過擬合到合成caption的某些范式
比如最常見的例子是合成的caption往往以"a"和"an"開頭,解決這個問題最好的方法便是:通過接近the style and formatting that humans might use,以regularize our inputs to a distribution of text
所以,我們在訓(xùn)練過程中,在合成caption中混入原始caption(human-written text),相當于一種模型正則化
首先是合成caption對模型性能的影響,這里共訓(xùn)練了三個模型,它們的差異是采用不同類型的caption,分別是
- 只用原始caption
- 5%的原始caption + 95%的合成短caption
- 5%的原始caption + 95%的合成長caption
通過上一節(jié)對DALLE 2的分析,我們得知最后的文生圖decoder模型是基于擴散模型的
而DALLE 3的論文中訓(xùn)練的文生圖是latent diffusion模型
- 其VAE和SD一樣都是8x下采樣
- 而text encoder采用T5-XXL,之所以用T5-XXL,可能主要有兩個原因,一方面T5-XXL可以編碼更長的文本,另外一方面是T5-XXL的文本編碼能力也更強
- 這里訓(xùn)練的圖像尺寸為256x256(這只是實驗,所以低分辨率訓(xùn)練就足夠了),采用batch size為2048共訓(xùn)練50W步,這相當于采樣了1B樣本
論文中并沒有說明UNet模型的具體架構(gòu),只是說它包含3個stages,應(yīng)該和SDXL類似(SDXL包含3個stage,只下采樣了2次,第一個stage是純卷積,而后面兩個stages包含attention)
這里只是想驗證模型的prompt following能力,所以采用了CLIP score來評價模型,這里的CLIP score是基于以下兩者的相似度,即
- CLIP ViT-B/32來計算生成圖像的image embedding即
- 和text prompt對應(yīng)的text embedding即的余弦相似度(這里是生成了50000個圖像并取平均值,并乘以100)
下圖展示了采用三種caption訓(xùn)練的模型在CLIP score上的差異:
- 左圖在計算CLIP score時,text采用原始caption(ground truth caption),從整體上來看,無論是采用合成的長caption還是短caption,其CLIP score比只采用原始caption要好一點,但是波動比較大
- 右圖計算CLIP score時,text采用合成的長caption,這里就可以明顯看到:合成長caption > 合成短caption > 原始caption,而且CLIP score要比左圖要高很多
這說明采用長caption來計算CLIP score是比較合理的,因為圖像的image embedding信息很大,而短文本信息少,所以兩者的相似度就會低一些,而且還可能存在一定的波動
總之,從上面的實驗來看,采用合成的長caption對模型的prompt following能力是有比較大的提升的。
接下來的問題就是通過實驗來找到最佳的數(shù)據(jù)混合比例。所以又增加了混合比例為65%、80%、90%的實驗,下圖展示了不同混合比例訓(xùn)練出來的模型其CLIP score的差異,可以看到采用95%的合成caption訓(xùn)練的模型在效果上要明顯高于采用更低比例的caption訓(xùn)練的模型。
所以最終的結(jié)論是采用合成的caption對模型提升幫助比較大,而且要采用描述詳細的長caption,訓(xùn)練的混合比例高達95%,這也是后面DALL-E 3的數(shù)據(jù)訓(xùn)練策略。
不過采用95%的合成長caption來訓(xùn)練,得到的模型也會“過擬合”到長caption上,如果采用常規(guī)的短caption來生成圖像,效果可能就會變差
為了解決這個問題,OpenAI采用GPT-4來“upsample”用戶的caption,下面展示了如何用GPT-4來進行這個優(yōu)化,不論用戶輸入什么樣的caption,經(jīng)過GPT-4優(yōu)化后就得到了長caption:
下圖展示了三個具體的例子,可以看到使用優(yōu)化后的長caption(圖中第二排)其生成圖像效果要優(yōu)于原來的短caption(圖中第一排):
所以,DALL-E 3接入ChatGPT其實是不得已而為之的事情,因為這樣才能保證DALL-E 3的輸入不偏離訓(xùn)練的分布
2.3.2 訓(xùn)練細節(jié)總結(jié):原始caption和合成長caption混合訓(xùn)練 + T5 +?latent decoder
DALLE 3的論文提到,DALL-E 3的具體實現(xiàn)有兩個關(guān)鍵點:
- 首先,DALL-E 3也采用95%的合成長caption和5%的原始caption混合訓(xùn)練,這也應(yīng)該是DALL-E 3性能提升的關(guān)鍵
- 另外,DALL-E 3的模型是上述實驗中所采用的模型的一個更大版本(基于T5-XXL的latent diffusion模型),同時加上其它的改進(但論文中并沒有說是具體的哪些改進,只說DALL-E 3也不應(yīng)簡單地歸功于在合成caption的數(shù)據(jù)集上訓(xùn)練,所以DALL-E 3的其它改進應(yīng)該也會比較重要)
目前DALL-E 3生成的圖像的分辨率都是在1024x1024以上,所以DALL-E 3的模型應(yīng)該類似于SDXL,采用遞進式的訓(xùn)練策略(256 -> 512 -> 1024),而且最后也是采用了多尺度訓(xùn)練策略來使模型能夠輸出各種長寬比的圖像
另外如小小將所說,附錄里面給出了一個細節(jié)是
- DALL-E 3額外訓(xùn)練了一個latent decoder來提升圖像的細節(jié),特別是文字和人臉方面,這個應(yīng)該是為了解決VAE所產(chǎn)生的圖像畸變。這里采用的擴散模型是基于DDPM中的架構(gòu),所以是pixel diffusion
從直觀上來看,這個latent decoder就是替換原始的VAE decoder,因此這個擴散模型的condition是VAE的latent
但是具體是怎么嵌入到擴散模型的UNet中,這里沒有說明,最簡單的方式應(yīng)該是通過上采樣或者一個可學(xué)習(xí)的網(wǎng)絡(luò)將latent轉(zhuǎn)變?yōu)楹驮胍魣D像一樣的維度,然后與噪音圖像拼接在一起- 同時為了加速,基于Consistency Models中提出的蒸餾策略將去噪步數(shù)降低為2步,所以推理是相當高效的
This diffusion decoder is a convolutional U-Net identical to the one described in Ho et al. (2020). Once trained, we used the consistency distillation process described in Song et al. (2023) to bring it down to two denoising steps
2.3.3?DALL-E 3的評測結(jié)果
對于DALL-E 3的評測,論文是選取了DALL-E 2和SDXL(加上refiner模塊)來進行對比。模型評測包括自動評測和人工評測。
2.3.3.1 針對DALLE 3的自動評測
自動評測主要有3個指標
- 首先是計算CLIP score,評測數(shù)據(jù)集是從COCO 2014數(shù)據(jù)集中選擇4096個captions
這里的評測數(shù)據(jù)集是Imagen中所提出的DrawBench評測集(共包括200個包含不同類型的prompts) - 然后是采用GPT-4V來進行評測
這里的評測是將生成的圖像和對應(yīng)的text輸入到GPT-4V,然后讓模型判斷生成的圖像是否和text一致,如果一致就輸出正確,否則就輸出不正確 - 最后是采用T2I-CompBench來評測
這個評測集包含6000個組合類型的text prompts,它包括多個方面,這里只選擇color binding、shape binding和texture binding三個方面進行評測,評測是通過BLIP-VQA model來得到評分
下表給出了DALL-E 3與其它模型的對比結(jié)果,可以看到DALL-E 3還是明顯優(yōu)于DALL-E 2和SDXL。不過自動評測所選擇的三個指標都是評測模型的prompt following能力,并不涉及到圖像質(zhì)量
2.3.3.2 針對DALLE 3的人工評測
人工評測主要包括三個方面
- 第一個是prompt following,給出兩張不同的模型生成的圖像,讓人來選擇哪個圖像和文本更一致
- 第二個是style,這里不給文本,只給兩張圖像,讓人選擇更喜歡的那個圖像
- 第三個是coherence,這里也不給文本,讓人從兩張圖像中選擇包含更多真實物體的圖像
可以看到后面的兩個方面其實就是評測模型生成圖像的質(zhì)量,對于prompt following和style,這里使用的評測集是DALL-E 3 Eval,它共包含170個captions,是從用戶應(yīng)用場景收集得到的。而coherence方面的評測集是從COCO數(shù)據(jù)集抽樣的250個captions,因為coherence是評測真實性,所以采用更偏真實場景的COCO數(shù)據(jù)集
另外,之前DrawBench評測集是采用GPT-4V來自動評測的,但是GPT-4V也會犯錯,比如在計數(shù)方面,所以這里也額外增加了DrawBench評測集的人工評測。
所有人工評測的對比結(jié)果如表所示,可以看到DALL-E 3具有明顯優(yōu)勢:
這里的ELO score是GLIDE中所提出的來計算勝率的指標:
盡管DALL-E 3在prompt following方面有很大的提升,但是它依然有一定的局限性
- 首先是模型在空間位置關(guān)系上還是會比較容易出錯,當prompt包含一些位置關(guān)系描述如"to the left of",模型生成的圖像并不一定會符合這樣的位置關(guān)系,這主要是因為合成的caption在這方面也并不可靠
- 另外就是文字生成能力,雖然DALL-E 3在生成文字方面很強,但是還是會出現(xiàn)多詞或者少詞的情況,一個可能的原因T5-XXL的tokenizer并不是字符級的
- 還有一個比較大的問題是合成的caption會幻想圖像中的重要細節(jié),比如給一幅植物的繪圖,image captioner可能會虛構(gòu)出一個植物并體現(xiàn)在合成的caption上。這就意味著模型可能會學(xué)到錯誤的綁定關(guān)系,也導(dǎo)致模型在生成特定種類的東西并不可靠
- 最后一點是模型的安全性和偏見,這個是所有大模型所面臨的問題,也是由于訓(xùn)練集所導(dǎo)致的,對于這點,DALL·E 3 system card有更多的評測
// 待更文章來源地址http://www.zghlxwxcb.cn/news/detail-837150.html
第三部分 通俗理解stable diffusion:文本到圖像的潛在擴散模型(改進版DDPM)
3.1 SD與DDPM的對比
我們在上篇博客《AI繪畫能力的起源:從VAE、擴散模型DDPM、DETR到ViT/MAE/Swin transformer》中,已經(jīng)詳細介紹了擴散模型DDPM,為方便對后續(xù)內(nèi)容的理解,特再回顧下DDPM相關(guān)的內(nèi)容(至于詳細的請看上篇博客):
前向過程加噪
逆向過程去噪,由于反向擴散過程不可直接計算,因此訓(xùn)練神經(jīng)網(wǎng)絡(luò)來近似它,訓(xùn)練目標(損失函數(shù))如下
所以,DDPM的關(guān)鍵是訓(xùn)練噪聲估計模型,使其預(yù)測的噪聲??與真實用于破壞的噪聲?相近,具體怎么個訓(xùn)練過程呢?
- 比如可以選擇選擇一個訓(xùn)練圖像,例如海邊沙灘的照片,然后生成隨機噪聲圖像,通過將此噪聲圖像添加到一定數(shù)量的步驟來損壞訓(xùn)練圖像
- 然后通過一個噪聲估計器U-Net?預(yù)測添加的噪聲,使其與實際噪聲做差異對比,從而建立損失函數(shù)做反向傳播,最后更新噪聲估計器的參數(shù)
說白了,就是通過告訴U-Net 我們在每一步添加了多少噪聲,從而手把手一步步教U-Net 怎么去估計噪聲 - U-Net訓(xùn)練好了之后(意味著其對噪聲的估計比較準確了),我們便可以基于訓(xùn)練好的 U-Net 來生成圖像
原理很簡單,通過噪聲估計器預(yù)測出噪聲后,不模糊的圖片便減去每一步添加的噪聲以清晰化 不就ok了么
而如果用一句話介紹stable diffusion,可以理解為:改進版的DDPM,Stable Diffusion原來的名字叫“Latent Diffusion Model”(LDM),很明顯就是擴散過程發(fā)生隱空間中(即latent space,下文或其他地方也有說潛在空間或壓縮空間之類的,都一個意思),其實就是對圖片做了壓縮
不過,為何要弄這么個隱空間或潛在空間呢?
原因很簡單,為了使擴散模型在有限的計算資源上訓(xùn)練,并且保留它們的質(zhì)量和靈活性,故首先訓(xùn)練了一個強大的預(yù)訓(xùn)練自編碼器,這個自編碼器所學(xué)習(xí)到的是一個潛在的空間,這個潛在的空間要比像素空間要小的多,把擴散模型在這個潛在的空間去訓(xùn)練,大大的降低了對算力的要求,這也是Stable Diffusion比原裝Diffusion速度快的原因
總之,Stable Diffusion會先訓(xùn)練一個自編碼器,來學(xué)習(xí)將圖像壓縮成低維表示
- 通過訓(xùn)練好的編碼器,可以將原始大小的圖像壓縮成低維的latent data(圖像壓縮)
- 通過訓(xùn)練好的解碼器,可以將latent data還原為原始大小的圖像
在將圖像壓縮成latent data后,便可以在latent space中完成擴散過程,對比下和Diffusion擴散過程的區(qū)別,如下圖所示:
可以看到Diffusion擴散模型就是在原圖??上進行的操作,而Stale Diffusion是在壓縮后的圖像??上進行操作
3.2 理解stable diffusion的三層境界
3.2.1 第一層境界:不看公式只看意圖整體理解SD
SD的整體框架流程圖
stable diffusion和上面DALL E2的原理其實差不多,具體而言,會先后經(jīng)歷以下幾個步驟「左邊紅色是像素空間 pixel space(含編碼器和解碼器)、中間綠色區(qū)域是潛在空間latent space、右邊灰色的是條件condition」
-
將圖像從像素空間(Pixel Space)壓縮到潛在空間(Latent Space)
具體而言,圖像編碼器將圖像從515??512的像素空間,壓縮到更小維度4??64??64的潛在空間 -
針對潛在空間的圖片做擴散(Diffusion Process):添加噪聲
對潛在空間Latent Space中的圖片添加噪聲,進行擴散過程 -
根據(jù)用戶的輸入text/prompt 獲取去噪條件(Conditioning)
通過 CLIP的文本編碼器 將輸入的描述語(text/prompt)轉(zhuǎn)換為去噪過程的條件 -
噪聲估計器U-Net 預(yù)測噪聲,然后依據(jù)「去噪條件」去噪:生成圖片的潛在表示
首先,噪聲估計器 U-Net 將潛在噪聲圖像和文本提示作為輸入,并預(yù)測噪聲「該過程也在潛在空間(4x64x64 張量)中」
之后,基于上面第3步的條件對圖像通過?噪聲估計器U-NET?進行去噪(Denoising),以獲得生成圖片的潛在表示
當然了,去噪步驟可以靈活地以文本、圖像和其他形式為條件,比如以文本為條件即text2img、以圖像為條件即 img2img -
潛在空間轉(zhuǎn)換成最終圖像
圖像解碼器通過將圖像從潛在空間轉(zhuǎn)換回像素空間來生成最終圖
問題1:怎么理解潛在空間
如何理解 “潛在空間” 呢?
- 大家都有自己的身份證號碼,前 6 位代表地區(qū)、中間 8 位代表生日、后 4 位代表個人其他信息。放到空間上如圖所示,這個空間就是「人類潛在空間」
這個空間上相近的人,可能就是生日、地區(qū)接近的人。人可以對應(yīng)為這個空間的一個點,這個空間的一個點也對應(yīng)一個人。如果在空間中我的附近找一個點,對應(yīng)的人可能跟我非常相似,沒準就是我失散多年的兄弟 - AI 就是通過學(xué)習(xí)找到了一個「圖片潛在空間」,每張圖片都可以對應(yīng)到其中一個點,相近的兩個點可能就是內(nèi)容、風(fēng)格相似的圖片
問題2:CLIP的應(yīng)用舉例
如果讓你把左側(cè)三張圖和右側(cè)三句話配對,你可以輕松完成這個連線。但對 AI 來說,圖片就是一系列像素點,文本就是一串字符,要完成這個工作可不簡單。
原因在于
- 這需要 AI 在海量「文本-圖片」數(shù)據(jù)上學(xué)習(xí)圖片和文本的匹配。圖中綠色方塊是「圖片潛在空間」的 N 張圖片,紫色方塊是「文本潛在空間」的 N 句描述語
CLIP會努力將對應(yīng)的 I1與T1(藍色方塊)匹配,而不是 I2與T3(灰色方塊)匹配 - 當 AI 能成功完成這個連線,也就意味著 AI 建立了「文字潛在空間」到「圖片潛在空間」的對應(yīng)關(guān)系,這樣才能通過文字控制圖片的去噪過程,實現(xiàn)通過文字描述得到圖像的生成
3.2.2 第二層境界:依托公式深入模型結(jié)構(gòu)
SD的模型結(jié)構(gòu):autoencoder +?CLIP text encoder +?UNet
還是看這個圖
-
上圖最左側(cè):編碼輸入/解碼輸出
編碼器encoder??可以對圖像進行壓縮,可以理解為它能忽略圖片中的高頻信息,只保留重要的深層特征,將其壓縮到一個 latent space「維度為(4, 64, 64)」,然后我們可以在這個 latent space 中進行 Diffusion Process,將其結(jié)果作為 U-Net 的輸入
解碼器decoder 負責將去噪后的 latent 圖像恢復(fù)到原始像素空間「各維度為:(3,512,512),即(紅/綠/藍, 寬, 高)」
這個就是所謂的感知壓縮(Perceptual Compression),即“將高維特征壓縮到低維,接著在低維空間上進行操作”的方法具有普適性,可以很容易的推廣到文本、音頻、視頻等不同模態(tài)的數(shù)據(jù)上 -
上圖最右側(cè):用戶的輸入text或prompt
通過CLIP的text encoder提取輸入text的text embeddings(維度為77??768,意味著77個token嵌入向量,其中每個向量包含768個維度)
然后通過cross attention方式送入噪聲估計模型UNet中作為去噪條件condition
a?) 事實上,擴散模型可以理解為一個時序去噪自編碼器,我們需要訓(xùn)練使得預(yù)測的噪聲與真實噪聲相近,則目標函數(shù)為:
b?) 而在 Latent Diffusion Models 中,引入了預(yù)訓(xùn)練的感知壓縮模型,它包含一個編碼器和一個解碼器,這樣就可以在訓(xùn)練時利用?得到 latent representation?,從而讓模型在潛在表示空間中學(xué)習(xí),其目標函數(shù)為:
c?) 對于條件生成任務(wù),我們將拓展為:,這樣就可以通過來控制圖片合成的過程,通過在 UNet 上增加?cross-attention?機制來實現(xiàn)
而為了能夠從不同的模態(tài)預(yù)處理,論文引入了一個領(lǐng)域?qū)S镁幋a器,它用來將映射成一個中間表示,這樣我們就可以很方便的引入各種形式的條件,例如文本、類別、layout等
d?) 最終模型可通過一個?cross-attention?將去噪條件引導(dǎo)融入到 UNet 中,cross-attention 表示為:
其中是 UNet 的一個中間表征
最終,目標函數(shù)可以寫為:
-
上圖中底部:?????基于噪聲估計模型U-Net實現(xiàn)文本條件引導(dǎo)下的latent生成
加噪后的隱式表達和文本語義表征通過Attention的方式輸入到U-Net,用以更好的學(xué)習(xí)文本和圖像的匹配關(guān)系,這里文本的語義向量就是條件(用戶的輸入text或prompt),控制圖像生成往我們想要的方向發(fā)展,通過U-Net來預(yù)測每一步要減少的噪聲
然后計算網(wǎng)絡(luò)輸出噪聲和真實噪聲的差距,最小化損失來反向傳播更新參數(shù),注意整個訓(xùn)練階段VAE是凍結(jié)的
下圖亦可輔助理解
3.2.3 第三層境界:從源碼層面理解SD
// 待更
3.3 七月AIGC模特生成平臺:基于SD的微調(diào)與二次開發(fā)
3.3.1 如何快速微調(diào)SD
目前Stable Diffusion 模型微調(diào)主要有4 種方式:
- Dreambooth
- LoRA(Low-Rank Adaptation of Large Language Models)
- Textual Inversion
- Hypernetworks
//待更文章來源:http://www.zghlxwxcb.cn/news/detail-837150.html
3.4?SDXL Turbo
// 待更
3.5 LCM
參考文獻與推薦閱讀
-
Learning Transferable Visual Models From Natural Language Supervision
CLIP原始論文 - ?????CLIP 論文逐段精讀,這是針對該視頻解讀的筆記之一:CLIP和改進工作串講
-
BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation
BLIP原始論文 -
多模態(tài)超詳細解讀 (六):BLIP:統(tǒng)一理解和生成的自舉多模態(tài)模型
極智AI | 多模態(tài)新姿勢 詳解 BLIP 算法實現(xiàn) - 理解DALL·E 2, Stable Diffusion和 Midjourney工作原理
- 讀完 DALL-E 論文,我們發(fā)現(xiàn)大型數(shù)據(jù)集也有平替版
-
Hierarchical Text-Conditional Image Generation with CLIP Latents
DALL E2原始論文 - DALL·E 2(內(nèi)含擴散模型介紹),這是針對該視頻解讀的筆記
- DALL-E 3技術(shù)報告閱讀筆記
- OpenAI一夜顛覆AI繪畫!DALL·E 3+ChatGPT強強聯(lián)合,畫面直接細節(jié)爆炸
- CoCa:對比+生成式任務(wù)構(gòu)建“全能型多模態(tài)模型”,這是其論文地址
- 關(guān)于CoCa的另外幾篇文章:CoCa: 在圖生文過程中加入對比學(xué)習(xí)、如何評價谷歌的 CoCa,在 ImageNet 上達到新的 SOTA:91.0%?
- 淺析多模態(tài)大模型的前世今生
- The Illustrated Stable Diffusion,這是圖解SD的翻譯版
-
Stable Diffusion Clearly Explained!
How does Stable Diffusion paint an AI artwork? Understanding the tech behind the rise of AI-generated art. - Getting Started With Stable Diffusion
- High-Resolution Image Synthesis with Latent Diffusion Models
- 知乎上關(guān)于SD原理的幾篇文章:Stable Diffusion 的技術(shù)原理是什么?、人工智能Ai畫畫——stable diffusion 原理和使用方法詳解、十分鐘讀懂Stable Diffusion
- Memory-efficient array redistribution through portable collective communication
- stable diffusion 原理介紹 - AI繪畫每日一帖
- How does Stable Diffusion work?
- Stable Diffusion 原理介紹與源碼分析(一)
- 保姆級講解 Stable Diffusion
- 李宏毅生成式AI模型diffusion model/stable diffusion概念講解
- 速度驚人!手機跑Stable Diffusion,12秒出圖,谷歌加速擴散模型破記錄
- SDXL Turbo、LCM相繼發(fā)布,AI畫圖進入實時生成時代:字打多快,出圖就有多快
- 文生圖10倍速,視頻實時渲染!清華發(fā)布LCM:兼容全部SD大模型、LoRA、插件等
- 七月在線:AIGC下SD/MDJ的原理與實戰(zhàn)課 [深度探究AI繪畫/多模態(tài)]
首發(fā)之后的創(chuàng)作、修改、新增記錄
- 端午假期三天,持續(xù)完善BLIP/BLIP2、DALLE/DALLE 2等相關(guān)的內(nèi)容
- 6.25,開始寫SD的原理部分
- 6.26,考慮到公式太多 容易把初學(xué)者繞暈,故把理解SD劃分為三層境界
第一層境界 不涉及任何公式,從意圖層面整體理解SD
且初步寫清SD的基本邏輯
順帶感嘆,這幾天在網(wǎng)上反復(fù)看了大量關(guān)于stable diffusion原理的解讀文章
?我站在初學(xué)者角度上,沒有一篇令我滿意
?我也不知道怎么回事,把文章寫通俗沒有那么難啊.. ? - 6.27,修改SD的原理部分,以讓邏輯清晰明確
- 6.28,寫清楚DALL·E2的模型架構(gòu)
- 6.29,寫DALL·E的部分,并梳理全文邏輯
斷斷續(xù)續(xù)兩個月,總算通過本文和上一篇文章把SD相關(guān)的基本寫清楚了,后續(xù)就是不斷優(yōu)化所有行文細節(jié)
?以讓邏輯更清晰 細節(jié)更明確,初學(xué)最愛看
感嘆過程中 被各種資料反復(fù)繞暈過,好在 終究還是像之前解讀各種稍復(fù)雜點的模型一樣
一如既往的繞出來了 - 7.7,優(yōu)化對潛在空間的說明描述
- 7.16,潤色關(guān)于噪聲估計器的部分描述
- 10.30,開始新增DALLE 3的部分
前幾天寫完了旋轉(zhuǎn)位置編碼,未來幾天都在持續(xù)寫DALLE 3的技術(shù)細節(jié)
一方面,它生成圖的質(zhì)量確實挺高
二方面,近期需要為某合作伙伴做一個文生圖的應(yīng)用,?所以研究下各個相關(guān)模型的技術(shù)細節(jié) - 10.31,優(yōu)化SD的部分
- 11.10,重讀DALLE 3論文并優(yōu)化相關(guān)細節(jié)的描述
如在微博上所說的,“為準備這周日的DALLE 3公開課,在一字一句重摳DALLE 3論文,但其本質(zhì)不算論文,很多訓(xùn)練細節(jié)沒透露
好在現(xiàn)在完全可以一字一句耐心讀paper了,一年前還是有點痛苦的,加之研究能力的不斷提升,可以通過研究相關(guān)paper去補齊它的訓(xùn)練細節(jié)” - 11.12,優(yōu)化第二部分中關(guān)于DALLE、DALLE 2的部分內(nèi)容,以為闡述更精準
比如關(guān)于DALLE 2的訓(xùn)練步驟 - 11.13,繼續(xù)優(yōu)化第二部分中關(guān)于DALLE 3部分內(nèi)容的描述細節(jié)
- 11.23,因11.25要在fanbook上做SD的專場公開課,故優(yōu)化本文關(guān)于SD的部分內(nèi)容
- 24年1.5,因本文一讀者于評論中留言提醒:DALL·E3在計算余弦相似度的時候,直接根據(jù)公式計算就行了,沒必要再用1去減
一看,確實如此,特此修正,感謝該朋友的指出
到了這里,關(guān)于AI繪畫原理解析:從CLIP到DALLE1/2、DALLE 3、Stable Diffusion、SDXL Turbo、LCM的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!