??騰小云導(dǎo)讀
計算機如何生成和真實圖片相似的圖畫?模型是如何聽懂我們想要它生成什么并給出對應(yīng)結(jié)果?AIGC 熱潮中的?Stable Diffusion、NovelAI、Latent upscale、ControlNet、LoRA等等是什么以及有什么亮點?本篇不涉及任何一個數(shù)學(xué)公式、不涉及晦澀文獻(xiàn)解析,而是通過盡可能直白的解釋,讓沒有太多AIGC背景知識的人也可以快速理解 AI 畫畫背后的技術(shù)原理和發(fā)展歷史。歡迎閱讀和分享。
??看目錄點收藏,隨時漲技術(shù)
1. 計算機如何生成圖畫?
2. 如何控制畫面內(nèi)容?
? ? 2.1 如何理解文本?
? ? 2.2 如何控制生成的結(jié)果?
3. 為什么 AI 畫畫效果如此驚人?
4. ControlNet:讓我們控制擴散模型
5. 潛在上限
6. LoRA:大型語言模型的低秩自適應(yīng)
7. mov2mov
AI 畫畫這個領(lǐng)域發(fā)展太快了,要知道去年的 AI 畫畫還是這個畫風(fēng):
現(xiàn)在的 AI 畫畫已經(jīng)迅速進(jìn)化到這個程度,我們舉個例子:
施法咒語長這樣——
film still, [film grain], large crowds, cyberpunk street, street level photograph, Chinese neon signs, time square advertisements, Dark atmospheric city by Jeremy Mann, Nathan Neven, James Gilleard, James Gurney, Makoto Shinkai, Antoine Blanchard, Carl Gustav Carus, Gregory Crewdson, Victor Enrich, Ian McQue, Canaletto, oil painting, brush hard, high quality, (brush stroke), matte painting, (very highly detailed) |
生成結(jié)果長這樣——
關(guān)于近期各個效果驚人的模型,目前市面上已經(jīng)有不少介紹文章,但大部分比較晦澀難懂。所以本文將盡可能通俗、直白地解釋 AI 繪畫的原理,歡迎各位閱讀。開發(fā)者朋友們在閱讀完本篇后,可以進(jìn)一步閱讀本公眾號今日推送的次條文章,跟隨騰訊工程師的教程快速部署 Stable Diffusion Web UI,以及《給想玩AIGC的小白:教你從0搭一個圖文視頻生成網(wǎng)站(附插件&源碼)》一文,上手打造AI繪畫網(wǎng)站~
點下方關(guān)注并星標(biāo)騰訊云開發(fā)者,回復(fù)「AIGC」,一鍵領(lǐng)取0基礎(chǔ)AI繪畫網(wǎng)站搭建教程、模型源件、工具插件、網(wǎng)站源碼和部署模型所需GPU服務(wù)器限量優(yōu)惠券。
01
計算機如何生成圖畫
這章我們會提到幾個大家耳熟的概念:VAE、auto-encoder、GAN、Diffusion model 等等。閱讀完這章,你將能有更清晰認(rèn)知。言歸正傳,AI 是怎么學(xué)會畫圖的呢?
這就要涉及到兩個方面了。一個是能生成像真實圖片一樣的數(shù)據(jù),一個是要聽得懂我們想要它生成什么,并給出對應(yīng)的結(jié)果。
首先來看看如何生成像真實圖片一樣的數(shù)據(jù)。這涉及到機器學(xué)習(xí)中的一個重要分支——生成模型(generative model)。對于生成圖像這個任務(wù)來說,通常一個生成模型需要先吞進(jìn)大量的訓(xùn)練數(shù)據(jù)(巨量的人類真實圖片),然后再學(xué)習(xí)這些數(shù)據(jù)的分布,去模仿著生成一樣的結(jié)果。機器學(xué)習(xí)的核心無非就是這么回事,難點終究是在如何設(shè)計模型、讓模型能更好的學(xué)到這樣的分布上。
要講生成模型,有一個不得不提的技術(shù)就是 VAE(變分自編碼器,即 variational auto-encoder)。這其中的 auto-encoder,雖然叫 auto-encoder ,但是其實包含了編碼器 encoder 和解碼器 decoder,是一個對稱的網(wǎng)絡(luò)結(jié)構(gòu)。對于一系列類似的數(shù)據(jù)例如圖片,雖然數(shù)據(jù)量很大,但是符合一定分布規(guī)律的,信息量遠(yuǎn)小于數(shù)據(jù)量。編碼器的目的就是把數(shù)據(jù)量為 n 維的數(shù)據(jù)壓縮成更小的 k 維特征。這 k 維特征盡可能包含了原始數(shù)據(jù)里的所有信息,只需要用對應(yīng)的解碼器,就可以轉(zhuǎn)換回原來的數(shù)據(jù)。在訓(xùn)練的過程中,數(shù)據(jù)通過編碼器壓縮,再通過解碼器解壓,然后最小化重建后數(shù)據(jù)和原始數(shù)據(jù)的差。訓(xùn)練好了以后,就只有編碼器被用作特征提取的工具,用于進(jìn)一步的工作,例如圖像分類等應(yīng)用中。故,稱為 autoencoder。
這時候有人想到:既然 auto-encoder 可以從 k 維特征向量恢復(fù)出一整張圖片,那給你一個隨機生成的 k 維特征向量,是否也可以隨機生成什么畫面呢?
然而實際結(jié)果顯示,autoencoder 雖然可以「記住」見過的照片,但是生成新圖像的能力很差。于是就有了 variational auto-encoder。VAE 令 k 維特征中的每個值變成了符合高斯分布的概率值,于是概率的改變可以讓圖片信息也有相應(yīng)的平滑的改變,例如某個控制性別的維度,從 0 到 1 可以從一個男性的人臉開始,生成越來越女性化的人臉。
通過控制特征變量來操控人臉生成結(jié)果。
VAE 其實還是有很多統(tǒng)計假設(shè)的,而且我們要判斷它生成的效果如何,也需要評估它生成的數(shù)據(jù)和原始數(shù)據(jù)的差距大不大。于是有人丟掉所有統(tǒng)計假設(shè),并且把這個評估真(原始數(shù)據(jù))假(生成數(shù)據(jù))差異的判別器也放進(jìn)來一起訓(xùn)練、創(chuàng)造了 GAN,生成對抗神經(jīng)網(wǎng)絡(luò)。
GAN 有兩個部分——生成器和判別器。生成器從一些隨機的 k 維向量出發(fā),用采樣網(wǎng)絡(luò)合成大很多的 n 維數(shù)據(jù),判別器就負(fù)責(zé)判斷合成出來的圖片是真是假。
一開始合成出來的都是意義不明的無規(guī)律結(jié)果,很簡單的判別器就可以分辨出來。生成器發(fā)現(xiàn)一些生成的方向,例如有成塊的色塊可以騙過判別器,它就會往這個方向合成更多的圖片。而判別器發(fā)現(xiàn)被騙過去了,就會找到更復(fù)雜的特征來區(qū)分真假。如此反復(fù),直到生成器生成的結(jié)果,判別器已經(jīng)判斷不出真假了,這就算是訓(xùn)練好了。這樣訓(xùn)練出來的生成器可以生成非常逼真的、即使是人眼也很難分辨的圖片,但是是不存在的。到了這時候,計算機已經(jīng)能學(xué)會生成相當(dāng)逼真的畫面了,例如下面這張人臉:
雖然 GAN 因為引進(jìn)了判別器,能生成非常逼真的圖片,但是它由于要訓(xùn)練對抗網(wǎng)絡(luò),實在是太不穩(wěn)定了,面對吞噬了網(wǎng)絡(luò)巨量數(shù)據(jù)的超大規(guī)模網(wǎng)絡(luò)來說非常難以控制。這時候另一個更好的選擇出現(xiàn)了。也是現(xiàn)在的 AI 畫畫普遍使用的生成模型——Diffusion model(擴散模型)。
Diffusion model 生成圖片的過程看似很簡單,其實背后有一套非常復(fù)雜的數(shù)學(xué)理論支撐。復(fù)雜的理論先放一邊,我們先通俗地聊聊 Diffusion model 是怎么運行的。
上圖是 Diffusion model 運行的兩個過程。右邊是一個正常的圖片,從右到左(Forward Diffusion)做的事情是在逐次疊加符合正態(tài)分布的噪聲,最后得到一個看起來完全是噪聲的圖片,這就是所謂的“擴散(diffusion)”過程。你可以不嚴(yán)謹(jǐn)?shù)叵胂蟪赡阌幸粔K牛排,你一遍一遍地往上撒椒鹽,一直到整塊牛排都被椒鹽覆蓋到看不清原來的紋路。由于每次加噪聲只和上一次的狀態(tài)有關(guān),所以是一個馬爾科夫鏈模型,其中的轉(zhuǎn)換矩陣可以用神經(jīng)網(wǎng)絡(luò)預(yù)測。
從左到右(Reverse Diffusion)做的事情是一步步去除噪聲、試圖還原圖片,這就是 diffusion model 生成數(shù)據(jù)的過程。
為了達(dá)到去噪的目的,Diffusion model 的訓(xùn)練過程實際上就是要從高斯噪聲中還原圖片,學(xué)習(xí)馬爾科夫鏈的概率分布、逆轉(zhuǎn)圖片噪聲,使得最后還原出來的圖片符合訓(xùn)練集的分布。
這個去噪的網(wǎng)絡(luò)是如何設(shè)計的呢?我們可以從疊加噪聲的過程中發(fā)現(xiàn),原圖和加噪聲后的圖片尺寸是完全一樣的!于是很自然能想到用一個 U-net 結(jié)構(gòu)(如下圖)來學(xué)習(xí)。
U-net 是一個類似 auto-encoder 的漏斗狀網(wǎng)絡(luò),但在相同尺寸的 decoder 和 encoder 層增加了直接的連接,以便于圖片相同位置的信息可以更好通過網(wǎng)絡(luò)傳遞。在去噪任務(wù)中,U-net 的輸入是一張帶噪聲的圖片,需要輸出的是網(wǎng)絡(luò)預(yù)測的噪聲,groundtruth 是實際疊加上的噪聲。有了這樣一個網(wǎng)絡(luò),就可以預(yù)測噪聲,從而去除掉它,還原圖片。因為帶噪聲的圖片=噪聲+圖片。這也是為什么 Diffusion model 會比其他方法生成圖片更慢,因為它是需要一輪一輪去噪的,而不是網(wǎng)絡(luò)可以一次性推理出結(jié)果。
以上就是 Diffusion model 生成圖片的原理,是不是很簡單呢!
02
如何控制畫面內(nèi)容
上面解釋了計算機如何生成和真實圖片相似的圖畫。接下來解釋一下模型是如何理解我們想要它生成什么,并給出對應(yīng)的結(jié)果的。
?? 2.1 如何理解文本?
玩過 AI 畫畫的人應(yīng)該都知道,AI 畫畫最主流的模式是在網(wǎng)頁輸入框中輸入一長串吟唱咒語。其中包括想要生成的內(nèi)容主體、風(fēng)格、藝術(shù)家、一些 buff 等,點擊生成后就可以得到一張非常 amazing 的結(jié)果(也可能很嚇人)。
文字控制模型生成畫面最早的做法,其實更像是讓生成模型生成一大堆符合常理的圖片之后,再配合一個分類器來得到符合條件的結(jié)果。在海量的數(shù)據(jù)面前這顯然是不夠用的。這個領(lǐng)域的開山之作——DALL·E 中最值得一提的是引入了 CLIP 來連接文字和圖片。
CLIP 模型其實就是用了巨量的文本+圖片數(shù)據(jù)對,把圖片和文本編碼后的特征計算相似性矩陣,通過最大化對角線元素同時最小化非對角線元素,來優(yōu)化兩個編碼器,讓最后的文本和圖片編碼器的語義可以強對應(yīng)起來。
如果不能理解 CLIP 的原理,只要記住 CLIP 把文字和圖片對應(yīng)起來了就可以了。它最大的成功之處不是用了多復(fù)雜的方法,而是用了巨量的數(shù)據(jù)。這樣帶來的好處是,很多現(xiàn)有的圖像模型可以很容易擴展成文本控制的圖像模型。原本需要大量人工標(biāo)注的很多任務(wù),現(xiàn)在只需要用集大成的 CLIP 就可以了,甚至還可能生成新數(shù)據(jù),例如在 StyleCLIP 里用文本交互控制生成的人臉:
最開始圖片的文字信息大多是以打標(biāo)簽的形式通過大量人工標(biāo)注來完成,有了CLIP 以后可以說是徹底打通了文字和圖片之間的橋梁,使得圖像相關(guān)的任務(wù)得到大大的擴展。說是 AI 畫畫的基石也不過分。有了這個 CLIP 模型,就可以計算任意圖片和文本之間的關(guān)聯(lián)度(即 CLIP-score),拿來指導(dǎo)模型的生成了。
這一步其實還分了幾個發(fā)展階段。最開始用的方法(Guided Diffusion)很naive:每次降噪后的圖片,都計算一次和輸入文本之間的 CLIP-score。原本的網(wǎng)絡(luò)只需要預(yù)測噪聲,現(xiàn)在網(wǎng)絡(luò)不但要預(yù)測噪聲還需要讓去噪后的結(jié)果圖盡可能和文本接近(也就是 CLIP-loss 盡量?。_@樣在不斷去噪的過程中,模型就會傾向于生成和文本相近的圖片。由于 CLIP 是在無噪聲的圖片上進(jìn)行訓(xùn)練的,這邊還有一個小細(xì)節(jié)是要對 CLIP 模型用加噪聲的圖片進(jìn)行 finetune,這樣 CLIP 才能“看出”加噪聲后的牛排還是一塊牛排。
這樣做的好處是 CLIP 和 Diffusion model 都是現(xiàn)成的,只需要在生成過程中結(jié)合到一起。但缺點是本來就已經(jīng)很慢的 Diffusion model 生成過程變得更慢了,而且這兩個模型是獨立、沒法聯(lián)合訓(xùn)練,得到更進(jìn)一步的提升。
于是就有了 Classifier-Free Diffusion Guidence,模型同時支持無條件和有條件的噪聲估計,在訓(xùn)練 Diffusion model 時就加入文本的引導(dǎo)。這樣的模型當(dāng)然也離不開很多很多的數(shù)據(jù)和很多很多的卡,除了網(wǎng)絡(luò)爬取,還有通過商業(yè)圖庫構(gòu)造出巨量的圖片和文本對,最后做為成品的 GLIDE 在生成效果上又達(dá)到了一次飛躍。雖然現(xiàn)在看有點簡陋,但是在當(dāng)時來說已經(jīng)很驚人了,恭喜大家,看到這里已經(jīng)追上了AI繪畫 21 年末的進(jìn)度!
?? 2.2 如何控制生成的結(jié)果?
再衍生一下:如果你試過用 AI 給你畫頭像,這時候輸入條件就變成了圖片,那么這樣要怎么控制生成的結(jié)果呢?這里有幾種不同的方法,其實算是不同流派了。這里我們將介紹3種:
第一種是直接提取圖片的 CLIP 特征。就像文字特征一樣去引導(dǎo)圖片。這樣生成出來的圖片的內(nèi)容比較相近,但結(jié)構(gòu)不一定相同。例如下圖,模型生成了相似的內(nèi)容但是畫風(fēng)略微怪誕!
第二種特別好理解,現(xiàn)在主流的 AI 畫畫 webui 里的 img2img 都是采用這個方法。就是對輸入的原圖增加幾層噪聲,再以這個為基礎(chǔ)進(jìn)行常規(guī)的去噪。使用你希望的畫風(fēng)相應(yīng)的「咒語」,就可以生成和你原圖結(jié)構(gòu)類似但畫風(fēng)完全不同的圖片。
疊加的噪聲的強度越高,生成的圖片和原圖就差距越大,AI 畫畫的發(fā)揮空間就越大。
上圖是用這個方法生成的二次元形象,你把屏幕放遠(yuǎn)點看這兩張圖的色塊是相近的。因為右邊的圖片就是基于左邊疊加了厚厚的“椒鹽”來作為基礎(chǔ)生成的,大致的色塊結(jié)構(gòu)依然保留了,但模型也加上了自己的想象(通過文本引導(dǎo))。
第三種方法是用對應(yīng)的圖片去 finetune 生成網(wǎng)絡(luò)(Dreambooth),如下圖。給模型看很多很多小狗狗的圖,讓模型學(xué)到這只小狗狗的樣子,這樣只需要再加上一些簡單的詞匯就可以生成各種各樣的小狗狗。
03
為什么 AI 畫畫效果如此驚人——幾個里程碑級模型
上面解釋了計算機如何生成和真實圖片相似的圖畫,以及模型是如何聽懂我們想要它生成什么并給出對應(yīng)結(jié)果的。到此,AI 畫畫的基本原理已經(jīng)介紹得差不多了。我們可以發(fā)現(xiàn),其實大部分都是「改進(jìn)」的工作,但是效果是真的很驚人!在這期間,涉及到很多訓(xùn)練網(wǎng)絡(luò)的 tricks。
現(xiàn)在最火熱的模型就是 Stable Diffusion,因為開源且效果好,得到了眾多人喜愛。另外基于此,吸收了巨量二次元插畫的 NovelAI 也在二次元畫風(fēng)上異軍突起,甚至在火熱程度上和 Stable Diffusion 相比,有過之而無不及。
講 Stable Diffusion 為什么這么好,要先從 Latent Diffusion Model 談起。
讓我們來復(fù)習(xí)一下 diffusion model 的原理:
對一個帶噪聲的輸入圖片,訓(xùn)練一個噪聲預(yù)測 U-net 網(wǎng)絡(luò),讓它能預(yù)測噪聲,然后再從輸入中減去,得到去噪后的圖片。
一般的 diffusion model 是對原始圖片進(jìn)行加噪去噪,噪聲圖片和原始圖片尺寸是一樣的。為了節(jié)約訓(xùn)練資源和生成時間,通常會用較小的圖片尺寸訓(xùn)練,再接一個超分辨率模型。
而在 Latent Diffusion Model 中,diffusion 模塊被用于生成 VAE 的隱編碼。于是整個流程變成了這樣:
圖片先用訓(xùn)練好的 VAE 的 encoder 得到一個維度小得多的圖片隱編碼(可以理解為將圖片信息壓縮到一個尺度更小的空間中),diffusion model 不再直接處理原圖而是處理這些隱編碼,最后生成的新的隱編碼再用對應(yīng)的 decoder 還原成圖片。相較于直接生成圖片像素,大幅度減少計算量與顯存。
第二個改進(jìn)是增加了更多的訓(xùn)練數(shù)據(jù),并且還多了一個美學(xué)評分的過濾指標(biāo)——只選好看的圖片。這就像是如果想要學(xué)會畫漂亮的畫,就要多看看大藝術(shù)家們的 masterpieces 一樣。
訓(xùn)練集里都是漂亮的圖片,例如這樣的:
或者這樣的:
模糊的圖、有水印的圖都被 pass 了,讓機器只從漂亮圖片里學(xué)畫畫。
最后相比 Latent Diffusion Model 的改進(jìn),是用上文提到的 CLIP 來讓文本控制圖片的生成方向。
這里也提一下二次元畫風(fēng)的 NovelAI。其實在技術(shù)上沒有非常新的內(nèi)容,就是拿巨量二次元圖片去 finetune 原始 Stable Diffusion 模型。主要一些改進(jìn)是 CLIP 用了倒數(shù)第二層更貼近文本內(nèi)容的特征、把訓(xùn)練數(shù)據(jù)擴展為長寬比不限(為了能容納下完整的人像)、增加了可支持文本輸入長度從而讓咒語變得更靈活也更復(fù)雜。筆者個人認(rèn)為效果好還是因為吞了巨量的圖片,外加用戶的熱情讓這個模型迅速發(fā)揚光大,甚至還有《元素法典》、《參同真解》等眾多咒語書,更衍生出了眾多輔助繪制工具~
04
ControlNet:讓我們控制擴散模型
由于 diffusion 超強的學(xué)習(xí)能力,理論上網(wǎng)絡(luò)是可以還原出訓(xùn)練集里的每一張數(shù)據(jù)的。所以只要數(shù)據(jù)足夠多、足夠好,模型就可以生成非常好的圖片。和人學(xué)畫畫不同,如果人的難點是畫不出來,那么模型就不知道該往哪個方向畫。所以控制模型生成其實就是想辦法讓模型聽話,按照你的指示生成結(jié)果。
在上文中,簡單展示過 AI 畫畫中 img2img 的效果。原理是把左圖加一些高斯噪聲(撒撒黑胡椒)然后作為底圖來基于它生成。所以基本上色塊分布是接近的,但是很難控制的更細(xì)節(jié)。
今年引起爆炸性話題的 ControlNet,則是可以通過任何的條件控制網(wǎng)絡(luò)生成。原來模型只能得到一個文本的生成引導(dǎo),現(xiàn)在它可以聽懂任何基于圖片提取的信號了,只要你拿一組成對的圖片去訓(xùn)練!
這個方式出來以后極大地擴展了可玩性,而且官方已經(jīng)提供了非常多常用的訓(xùn)練好的控制網(wǎng)絡(luò)。你可以用 depth 控制結(jié)構(gòu)生成各種場景:
可以直接拿線稿上色:
可以隨便涂幾筆就生成復(fù)雜的圖片:
還可以通過姿態(tài)檢測生成很好的多人結(jié)果:
只要你想,你甚至可以自己訓(xùn)練。比如說就有人訓(xùn)練了手腳的控制器,解決了 ai 不會畫手的問題:
這些控制結(jié)果還可以一起用,例如結(jié)合人體姿態(tài)和深度圖:
甚至不需要來自同一張圖:
效果是真的非常驚艷,但原理上其實實現(xiàn)得比較簡單。為了給原始模型增加額外的條件輸入,把整個網(wǎng)絡(luò)復(fù)制了一份,固定原始網(wǎng)絡(luò)來保證輸出的穩(wěn)定性。原始的網(wǎng)絡(luò)輸入依然是噪聲,而復(fù)制的 control 網(wǎng)絡(luò)的輸入是控制條件(深度、姿態(tài)等)。把兩個輸入和輸出加起來,用成對的數(shù)據(jù)集(輸入是深度圖,輸出是原圖這種感覺)去訓(xùn)練控制網(wǎng)絡(luò),達(dá)到控制條件能夠很好控制生成結(jié)果的程度,就訓(xùn)練好啦!并且這個訓(xùn)練本質(zhì)上還是在做 finetune,所以耗時也不算很大,和直接 finetune 網(wǎng)絡(luò)差不多。
05
潛在上限
ControlNet 解決了多人的姿態(tài)控制以后,模型已經(jīng)可以很好地生成非常合理的結(jié)構(gòu)了。這時候就會面臨另一個問題,模型的細(xì)節(jié)要如何生成得更好?
想要得到高質(zhì)量的圖片,最直接的方式就是調(diào)大輸出的分辨率。分辨率越大,細(xì)節(jié)畫得就越好(尤其是人臉)。但是實際上高分辨率的結(jié)果非常容易崩掉,例如出現(xiàn)兩個身體時因為訓(xùn)練模型里如此高分辨率的圖片較少。并且分辨率高了以后計算成本飆升,會算得很慢。
于是一種常見的做法是先生成較小分辨率的結(jié)果,然后對圖片做超分(就是把圖片放大還要保證清晰度),流程如下。
這么做可以保證結(jié)構(gòu)的合理性,而且速度快非常多。但是超分模型對細(xì)節(jié)的補完不一定能做得很自然,而且容易有過于銳化的結(jié)果。除了傳統(tǒng)超分模型,還有同樣基于 diffusion 模型的超分算法。由于 diffusion 相當(dāng)于重繪了,所以可以得到更好的細(xì)節(jié)效果。但是圖片尺寸非常大,跑起來更慢了。
另一個現(xiàn)在被廣泛使用的方法是 latent upscale(webui自帶的Hires.fix即可實現(xiàn)),流程如下。
之前寫到過,stable diffusion 的結(jié)構(gòu)優(yōu)勢之一是它是由壓縮圖片信息的 VAE 和對 latent 進(jìn)行去噪的 U-net 網(wǎng)絡(luò)組成,所以它天然適合基于 latent 的超分方法。
Latent upscale 就是在圖片經(jīng)過 VAE 壓縮后,直接對 latent 進(jìn)行超分,然后再喂給 VAE,就能得到 x2 的圖片了。如果和 stable diffusion 結(jié)合,那就是 SD 的U-net 輸出 latent 以后,先過一遍 latent upscale,再喂給 VAE 解碼。
當(dāng)然,對 latent 做 upscale 也有基于 diffusion 的方法并且效果應(yīng)該是最好的。當(dāng)然于此而來的代價就是耗時也增加了。對圖片做普通超分和對 latent 做基于 diffusion 的超分結(jié)果對比如下。
個人認(rèn)為效果好主要是因為 diffusion,基于圖片做 diffusion 超分應(yīng)該也可以達(dá)到這個質(zhì)量,只不過耗時更久。放一張 latent upscale + controlnet 得到的高清美圖。
06
LoRA:大型語言模型的低秩自適應(yīng)
除了 ControlNet,近期 AI 畫畫領(lǐng)域另一個不得不提的就是 LoRA,前面的水墨畫美少女就是融合 LoRA 模型生成的。
要講 LoRA 就要先解釋模型的 finetune(微調(diào))。模型的 finetune 指的是什么呢?其實就是當(dāng)你有一個現(xiàn)成的,很厲害的大模型(pre-trained model),你想要讓它學(xué)一些新知識,或者完成一些更面向具體應(yīng)用的子任務(wù),或者只是為了適配你的數(shù)據(jù)分布時,就需要拿你的小樣本數(shù)據(jù)去對模型進(jìn)行重新訓(xùn)練。這個訓(xùn)練不能訓(xùn)太久,否則模型就會過擬合到你的小樣本數(shù)據(jù)上,喪失掉大模型的泛用性。
Pre-train + finetune 是機器學(xué)習(xí)中非常常見的組合,在應(yīng)用上有很大價值。但是其中有一個問題就是“遺忘”:模型會在 finetune 過程中不斷忘記之前已經(jīng)記住的內(nèi)容。
常見的解決方案有兩個:
|
參數(shù)孤立化是最有效的一種方式,具體有好幾種實現(xiàn)方式。例如 Adaptor 就是在原模型中增加一個子模塊、固定原模型,只訓(xùn)練子模塊。是不是聽起來很熟悉?是的,ControlNet 就是一種類似 Adaptor 的方法,同理還有 T2I-Adapter,也是通過增加子模塊來引入新的條件輸入控制。
LoRA 則是另一種參數(shù)孤立化策略,也在 AI 畫畫找到了用武之地。它利用低秩矩陣來替代原來全量參數(shù)進(jìn)行訓(xùn)練,從而提升 finetune 的效率。
可以和之前最常用的 finetune 方法 DreamBooth 對比一下。
對于 DreamBooth 來說,它是直接更新整個大模型的權(quán)重來讓模型學(xué)習(xí)新概念的。雖然可以通過正則項避免遺忘,但是 finetune 后的模型依然非常大(和原模型一樣大)。
而使用 LoRA 后,LoRA 影響的只是其中一小部分(通過低秩矩陣疊加到大模型網(wǎng)絡(luò)上的)權(quán)重,所以 finetune 起來更快,更不吃資源,而且得到的 finetune 模型非常小,使用起來方便很多。
由于 LoRA 在結(jié)構(gòu)上是獨立于大模型的,所以它有一個額外的好處是替換大模型可以得到不同的、令人驚喜的結(jié)果。例如用水墨畫訓(xùn)練的一個很好看的 LoRA 模型“墨心”,結(jié)合國風(fēng)美女的基礎(chǔ)大模型,可以生成穿著中式服裝的水墨畫美少女:
在網(wǎng)友寫的《AI 形象生成指南》中,提出的方法就是利用可以生成亞裔女性的真人大模型,疊加從二次元大模型 finetune 出來的二次元女性形象LoRA,來生成帶有角色特征的真人 coser 照片:
而且 LoRA 也非常方便進(jìn)行模型融合。例如說增加另一個韓國偶像 LoRA,得到的結(jié)果就融合了兩者的特色:
在使用上來說,LoRA 很像是模型的“插件”,可以在基礎(chǔ)模型上疊加想要的效果,或者把各種想要的效果加權(quán)組合疊在一起,可以產(chǎn)生很多令人驚喜的結(jié)果。
當(dāng)然 LoRA 由于是 finetune 模型,所以畫風(fēng)會趨于單一,是好是壞見仁見智,在需要固定畫風(fēng) orID 的時候能發(fā)揮令人驚喜的用處。但是,使用現(xiàn)實中的真人照片訓(xùn)練 LoRA 并公開模型非常缺德,請各位讀者不要這么做。
07
mov2mov
講完 LoRA 和 ControlNet 了再順便提一嘴它們的結(jié)合產(chǎn)物—— mov2mov,其實原理上就是組合了之前的各種技術(shù)。例如 img2img 來保證背景和主體的連續(xù)性,controlnet 提供更多控制條件來增強對應(yīng)性,還需要 LoRA 來保證輸出的結(jié)果能盡量一致。
除此之外,傳統(tǒng)的視頻防抖算法如窗口平滑、插幀,這些 buff 全部疊加上去,才可能得到一個依然很抖的效果。但是其中最重要的是,你需要一個高質(zhì)量的驅(qū)動視頻。感興趣的可以自行搜索了解。幾乎算是重繪 MMD 的情況下(簡單中的簡單模式了)視頻效果依然不算理想,想要有更好的視頻生成效果還是有一段距離的。
以上是本次分享全部內(nèi)容,歡迎大家在評論區(qū)分享交流。如果覺得內(nèi)容有用,歡迎轉(zhuǎn)發(fā)~閱讀完本篇后,推薦各位進(jìn)一步閱讀本公眾號今日推送的次條,跟隨騰訊工程師的教程快速上手部署 Stable Diffusion Web UI,以及《給想玩AIGC的小白:教你從0搭一個圖文視頻生成網(wǎng)站(附插件&源碼)》一文,上手建設(shè)你的?AI 繪畫網(wǎng)站~
點下方關(guān)注并星標(biāo)騰訊云開發(fā)者,回復(fù)「AIGC」,一鍵領(lǐng)取0基礎(chǔ)AI繪畫網(wǎng)站搭建教程、模型源件、工具插件、網(wǎng)站源碼和部署模型所需GPU服務(wù)器限量優(yōu)惠券。
-End-
原創(chuàng)作者|周藝超
技術(shù)責(zé)編|周藝超
程序員用現(xiàn)有 AIGC 代表產(chǎn)品(如GPT-4等)開放的 API 接口,可以做哪些自研工具?有哪些新奇/實用的使用方式?
歡迎在評論區(qū)聊一聊你的創(chuàng)想。在4月17日前將你的評論記錄截圖,發(fā)送給騰訊云開發(fā)者公眾號后臺,可領(lǐng)取騰訊云「開發(fā)者春季限定紅包封面」一個,數(shù)量有限先到先得??。我們還將選取點贊量最高的1位朋友,送出騰訊QQ公仔1個。4月17日中午12點開獎。快邀請你的開發(fā)者朋友們一起來參與吧!
點下方關(guān)注并星標(biāo)騰訊云開發(fā)者
回復(fù)「AIGC」文章來源:http://www.zghlxwxcb.cn/news/detail-487223.html
一鍵領(lǐng)取0基礎(chǔ)AI繪畫網(wǎng)站搭建教程、模型源件、工具插件、網(wǎng)站源碼和部署模型所需GPU服務(wù)器限量優(yōu)惠券文章來源地址http://www.zghlxwxcb.cn/news/detail-487223.html
到了這里,關(guān)于【白話科普】10分鐘從零看懂AI繪畫原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!