10分鐘了解當(dāng)今天下第一的文生圖AI工具Stable Diffusion
AI奇點網(wǎng)5月19日報道丨轉(zhuǎn)載自 知乎 絕密伏擊
我們介紹Stable Diffusion是如何根據(jù)文字生成圖像的,相比Diffusion做了哪些優(yōu)化?
寫在最前面:
由于Stable Diffusion里面有關(guān)擴散過程的描述,描述方法有很多版本,比如前向過程也可以叫加噪過程,為了便于理解,這里把各種描述統(tǒng)一說明一下。
目前AI繪畫最火的當(dāng)屬Midjorney和Stable Diffusion,但是由于Midjourney沒有開源,因此我們主要分享下Stable Diffusion,后面我們會補充介紹下Midjourney。
公開資料顯示,Stable Diffusion是StabilityAI公司于2022年提出的,論文和代碼都已開源。StabilityAI在10月28日完成了1.01億美元的融資,目前估值已經(jīng)超過10億美元。
大家可以去Stable Diffusion Online這個網(wǎng)站體驗一下Stable Diffusion,我們輸入文本“’A sunset over a mountain range, vector image”(山脈上的日落),看一下效果:
在了解應(yīng)用后,接下來我們介紹下Stable Diffusion。主要還是通過圖解的方式,避免大量公式推導(dǎo),看起來費勁。
Stable Diffusion其實是Diffusion的改進版本,主要是為了解決Diffusion的速度問題。那么Stable Diffusion是如何根據(jù)文字得出圖片的呢?下圖是Stable Diffusion生成圖片的具體過程:
可以看到,對于輸入的文字(圖中的“An astronout riding a horse”)會經(jīng)過一個CLIP模型轉(zhuǎn)化為text embedding,然后和初始圖像(初始化使用隨機高斯噪聲Gaussian Noise)一起輸入去噪模塊(也就是圖中Text conditioned latent U-Net),最后輸出大小的圖片。我們已經(jīng)知道了CLIP模型和U-Net模型的大致原理,這里面關(guān)鍵是Text conditioned latent U-net,翻譯過來就是文本條件隱U-net網(wǎng)絡(luò),其實是通過對U-Net引入多頭Attention機制,使得輸入文本和圖像相關(guān)聯(lián),后面我們重點講講這一塊是怎么做的。
Stable Diffusion原來的名字叫“Latent Diffusion Model”(LDM),很明顯就是擴散過程發(fā)生隱空間中(latent space),其實就是對圖片做了壓縮,這也是Stable Diffusion比Diffusion速度快的原因。
Stable Diffusion會先訓(xùn)練一個自編碼器,來學(xué)習(xí)將圖像壓縮成低維表示。
在將圖像壓縮成latent data后,便可以在latent space中完成擴散過程,對比下和Diffusion擴散過程的區(qū)別,如下圖所示:
可以看到Diffusion擴散模型就是在原圖X上進行的操作,而Stale Diffusion是在壓縮后的圖像Z上進行操作。
Stable Diffusion的前向擴散過程和Diffusion擴散模型基本沒啥區(qū)別,只是多了一個圖像壓縮,只是反向擴散過程二者之前還是有區(qū)別。
在第一節(jié)我們已經(jīng)簡單介紹過Stable Diffusion文字生成圖片的過程,這里我們擴展下,看一下里面的細節(jié),如下圖所示:
上圖從右至左,輸入的文字是“Pairs in milky way”(銀河系的巴黎),經(jīng)過CLIP模型
轉(zhuǎn)為Text embedding,然后和初始圖像(噪聲向量 )、Time step向量 ,一起輸入Diffusion模塊(多輪去噪過程),最后將輸出的圖像 經(jīng)過解碼器后,生成最終的圖像。
Stable Diffusion在反向擴散過程中其實談不上改進,只是支持了文本的輸入,對U-Net的結(jié)構(gòu)做了修改,使得每一輪去噪過程中文本和圖像相關(guān)聯(lián)。在上一篇文章(絕密伏擊:十分鐘讀懂Diffusion:圖解Diffusion擴散模型)中,我們在介紹使用Diffusion擴散模型生成圖像時,一開始就已經(jīng)介紹了在擴散過程中如何支持文本輸入,以及如何修改U-Net結(jié)構(gòu),只是介紹U-Net結(jié)構(gòu)改進的時候,講的比較粗,感興趣的可以去看看里面的第一節(jié)。下面我們就補充介紹下Stable Diffusion是如何對U-Net結(jié)構(gòu)做修改,從而更好的處理輸入文本。
我們先看一下反向擴散的整體結(jié)構(gòu),如下圖所示:
從上圖可以看出,反向擴散過程中輸入文本和初始圖像
需要經(jīng)過 輪的U-Net網(wǎng)絡(luò)( 輪去噪過程),最后得到輸出,解碼后便可以得到最終圖像。由于要處理文本向量,因此必然要對U-Net網(wǎng)絡(luò)進行調(diào)整,這樣才能使得文本和圖像相關(guān)聯(lián)。下圖是單輪的去噪過程:
上圖的最左邊里面的Semantic Map、Text、Representations、Images稍微不好理解,這是Stable Diffusion處理不同任務(wù)的通用框架:
這里我們只考慮輸入是Text,因此首先會通過模型CLIP模型生成文本向量,然后輸入到U-Net網(wǎng)絡(luò)中的多頭Attention(Q, K, V)。
這里補充一下多頭Attention(Q, K, V)是怎么工作的,我們就以右邊的第一個Attention(Q, K, V)為例。
其中: ??梢钥吹矫恳惠喨ピ脒^程中,文本向量 會和當(dāng)前圖像計算相關(guān)性。
最后我們來看一下Stable Diffusion完整結(jié)構(gòu),包含文本向量表示、初始圖像(隨機高斯噪聲)、時間embedding,如下圖所示:
上圖詳細的展示了Stable Diffusion前向擴散和反向擴散的整個過程,我們再看一下不處理輸入文字,只是單純生成任意圖像的Diffusion結(jié)構(gòu)。
可以看到,不處理文字輸入,生成任意圖像的Diffusion模型,和Stable Diffusion相比,主要有兩個地方不一樣:
除了Stable Diffusion之外,Midjourney最近也非常出圈,我們簡單介紹下。
Midjourney是一款A(yù)I繪圖工具,其創(chuàng)始人是David Holz。目前Midjourney每月的收入大概超過200萬美元,用戶可以通過Discord平臺的newbie頻道使用。Discord平臺是一款游戲聊天平臺,月活超過1.5億,其中使用Midjounery的用戶數(shù)已突破380萬。2021年初,Discord拒絕了微軟120億美元的收購要約。本質(zhì)上Discord是一個社區(qū),Midjourney通過在Discord上創(chuàng)建了自己的服務(wù)器,并創(chuàng)建了大量的頻道,以及開發(fā)了自己的機器人,來向用戶提供服務(wù)。
用戶可以在Midjourney首頁里點擊“Join the Beta”,直接會跳轉(zhuǎn)到它們在Discord上的頻道。
可以看到上圖中顯示用戶數(shù)是381萬,當(dāng)前在線30萬。用戶使用Midjorney也非常簡單,只需要點擊主頁左下方的newbie頻道便可進入。
進入newbie頻道后,便可以通過/imagine+提示詞,讓Midjourney生成圖片
可以看到在輸入“sunshine black hold”后生成了四張圖片。
由于目前Midjourney并沒有開源,因此我們并不知道其背后的技術(shù),但是大概率還是基于Diffusion擴散模型。
隨著AIGC的爆火,各種應(yīng)用開始不斷出現(xiàn),AI繪畫便是其中的一個典型案例。目前最火的AI繪畫模型當(dāng)屬Stable Diffusion,但是目前有關(guān)Stable Diffusion的文章并不多,主要偏向應(yīng)用介紹,對于如何處理輸入文字以及去噪過程的具體細節(jié),這方面的文章還是比較少,寫這篇文章的目的就是希望能把Stable Diffusion講清楚,讓更多人的了解。
近期文章
更多