最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

煒哥的AI學(xué)習(xí)筆記——SD基礎(chǔ)原理

2023-06-18 22:32 作者:宿愿賜  | 我要投稿

在深入學(xué)習(xí)其他技術(shù)知識(shí)之前,我覺得還是有必要了解一下 Stable Diffusion 的基礎(chǔ)原理是什么樣的,不然后面參數(shù)太多了,一個(gè)一個(gè)參數(shù)如果是很零散的方式去記憶的話很容易就忘光,所以還是需要有一條線串起來。

Diffusion Model

Stable Diffusion、Midjourney(尚未開源但是可以從圖片生成的過程中推測) 以及現(xiàn)在網(wǎng)上流行的一堆 AI 圖片生成算法,基本上都依賴于 Diffusion Model 擴(kuò)散模型,其核心思想是從一張充滿了噪聲的圖片中,還原出具有特定元素的圖片。

X-Y_plot_of_algorithmically-generated_AI_art_of_European-style_castle_in_Japan_demonstrating_DDIM_diffusion_steps

這個(gè)過程中,主要涉及到兩個(gè)部分的模塊,基于 CLIP 的文本編碼器 Text Encoder,負(fù)責(zé)噪聲處理的的 U-Net 。

在訓(xùn)練模型,調(diào)參的過程中,也經(jīng)常會(huì)去設(shè)置這兩個(gè)參數(shù)。以我常用的 Kohya_ss 為例,就支持在訓(xùn)練時(shí)單獨(dú)設(shè)置 Text Encoder 的學(xué)習(xí)率和 Unet 的學(xué)習(xí)率。

image-20230618152614195

當(dāng)然這個(gè)學(xué)習(xí)率的調(diào)整講起來又是復(fù)雜的一節(jié)課,這里先不展開了。

圖片生成過程

這在這個(gè)兩個(gè)核心模塊的作用下,Diffusion Model 的圖片生成過程可以這么理解:

第一步 噪聲圖片生成

Stable Diffusion 的模型生成,都是從一張隨機(jī)噪點(diǎn)的圖片開始。而這張?jiān)朦c(diǎn)圖片,是通過 Seed 值,也就是我們平時(shí)使用 Stable Diffusion 中的 Seed 生成的。

image-20230618154017982

所以如果將這個(gè)值固定,也就意味著一開始生成的初始噪聲圖片都是固定的的,那么在相同的 Prompt 和模型的作用下,生成出來的圖片也會(huì)大差不差。在一些特殊的場景,比如調(diào)試 Prompt、測試插件,經(jīng)常會(huì)使用這個(gè)特性來對(duì)比前后生成的圖片。

第二步 理解 Prompt

有了一張完全噪聲的圖片,接下來要做的事情就是理解 Prompt,而這個(gè)就是 Text Encoder 的工作。

這里又可以分為兩塊來講,特征學(xué)習(xí)向量化。

特征學(xué)習(xí),就是將大量成對(duì)的文本和圖片輸入到機(jī)器學(xué)習(xí)中,讓 AI 學(xué)習(xí)到文本特征和圖片特征之間的關(guān)聯(lián),最終生成模型。

CLIP


這一部分的訓(xùn)練方式就叫做 CLIP ,全稱 Contrastive Language-Image Pre-Training,對(duì)比語言圖像預(yù)訓(xùn)練。當(dāng)然這種數(shù)據(jù)量是非常巨大的,Stable Diffusion 也是使用了 OpenAI 訓(xùn)練好的現(xiàn)有模型來理解 Prompt 。

image-20230618205803809

所以在一開始安裝 Stable Diffusion 的時(shí)候,會(huì)下載 clip 和 openclip 這兩個(gè)github上的代碼倉庫。(因?yàn)?openai 原始 clip 雖然算法開源了,但是訓(xùn)練集沒有開源,因此后續(xù)版本 Stable Diffusion 使用了開源的 openclip 版本,所以這里兩個(gè)都下載)

然后這里其實(shí)還有一個(gè)特別重要的技術(shù),雖然也是 CLIP 的一部分,但是我覺得這有利于理解 Prompt 的使用機(jī)制所以還是單獨(dú)拿出來,就是向量化。

如果只是將世界上所有的文本和圖像進(jìn)行特征配對(duì),雖然能實(shí)現(xiàn),但是需要的運(yùn)算量是巨大的,CLIP 最開始的模型是在 4 億多個(gè)圖像/文本對(duì)上訓(xùn)練的,用了 256 個(gè) GPU 訓(xùn)練了兩周。這顯然并不利于后續(xù)的維護(hù)和升級(jí),而且普通的開發(fā)者難以參與。

因此向量化這個(gè)想法出現(xiàn)了。為了理解向量化,我這里還是舉一個(gè)比較經(jīng)典的例子:如 AI 知道 king 這個(gè)單詞的意思,我們要如何去教會(huì)它 queen 這個(gè)詞的意思呢?答案是當(dāng)這兩個(gè)詞語都被轉(zhuǎn)換為向量的時(shí)候,queen 就可以等同于 king-man+woman 的向量運(yùn)算。通過將平時(shí)我們使用的語義詞匯,轉(zhuǎn)變成數(shù)學(xué)計(jì)算的方式,大量的詞語就被聯(lián)系起來了,從而減少了模型訓(xùn)練中詞匯的使用。而圖片也是同理的,圖片的特征同樣可以被向量化,不過這里不好舉例子。

有興趣的可以詳細(xì)去了解 ViT 模型和 Transformer 模型,前者能將圖像轉(zhuǎn)換為向量,后者則是將文本轉(zhuǎn)換為向量?;蛘?,直接官方的 CLIP 論文: https://arxiv.org/pdf/2103.00020.pdf或開源項(xiàng)目地址: https://github.com/openai/CLIP。

第三步 圖片降噪

在 Prompts 被模型理解之后,就是一個(gè)降噪的過程,U-Net 網(wǎng)絡(luò)結(jié)構(gòu)會(huì)進(jìn)行不斷地迭代,每一次迭代都去除一部分的噪聲。

(因?yàn)?VAE 的關(guān)系,過程圖不會(huì)出現(xiàn)肉眼可見的噪點(diǎn),至于 VAE 的作用一會(huì)再講)

在每次去除噪聲的過程中,還會(huì)使用一種叫做“Classifier Free Guidance”的方法去強(qiáng)化和 Prompts 相關(guān)的噪聲,直到完全還原元素。而這個(gè)方法的縮寫 CFG 也就是 WebUI 中的 CFG scale 值,即強(qiáng)化的倍數(shù)。因此不難理解為何一堆速成教程中都提到這個(gè)值和 Prompt 的關(guān)聯(lián)度強(qiáng)相關(guān),以及調(diào)整過頭為什么會(huì)導(dǎo)致圖片結(jié)構(gòu)變形。

U-Net 是怎么降噪的?

降噪過程本質(zhì)也是一種機(jī)器學(xué)習(xí),就和 CLIP 關(guān)聯(lián)圖片和文本特征。這一塊并不復(fù)雜,倒是可以細(xì)講一下。

機(jī)器學(xué)習(xí)的本質(zhì)就是找規(guī)律,如何從一堆噪聲中找到需要去除的噪聲,就是機(jī)器學(xué)習(xí)要找到的規(guī)律。而這一過程就是訓(xùn)練,訓(xùn)練的流程和上面提到的圖片生成的過程相反,圖片生成是去噪,那么訓(xùn)練圖片就是加噪聲。

對(duì)于一張已有圖片,對(duì)它一步一步的加上噪聲,并在每一步進(jìn)行深度學(xué)習(xí),這樣 AI 就有能力理解在不斷增加噪聲的過程中,更好的學(xué)習(xí)到圖像的特征。

然后這種步驟重復(fù)上千上萬次,AI 就可以從其中找到規(guī)律,知道如何根據(jù) Prompts 將噪聲逐漸還原到對(duì)應(yīng)的圖片。而這一部分的“經(jīng)驗(yàn)”(實(shí)質(zhì)上是一堆復(fù)雜函數(shù))就被作為模型文件保存下來,也就是我們經(jīng)??吹降?checkpoint 等模型文件。

LDM 模型與 VAE

除了基礎(chǔ)的擴(kuò)散模型,還需要講清楚一個(gè)新的模型 LDM,也就是 Latent Diffusion Model,潛在擴(kuò)散模型。

去年年底 Stable Diffusion 開始爆發(fā)式增長,有一個(gè)很重要的原因就是訓(xùn)練工具的平民化。從剛才的描述中應(yīng)該也不難意識(shí)到,無論是模型的訓(xùn)練還是使用,都需要大量的迭代,大量的運(yùn)算來尋找或者是還原規(guī)律,個(gè)人的計(jì)算機(jī)設(shè)備幾乎無法支撐這這一塊的算力。所以之前的訓(xùn)練注定只能在大公司或者研究機(jī)構(gòu)中進(jìn)行。

這個(gè)模型的核心思想是,造成 AI 繪圖需要巨大算力的關(guān)鍵原因,還是圖片像素的數(shù)量太多了。那么既然如此,將圖片縮小是否就可以解決這個(gè)問題呢?比如說將一張 512×512 的圖片縮小成 64×64 的圖片,理論上需要的算力會(huì)減少 64 倍,那么這種壓縮后的圖片是否還能用于訓(xùn)練呢?

答案是可以的。先說訓(xùn)練過程的不同,相比于之前直接將原圖添加噪點(diǎn)訓(xùn)練,LDM 先將原圖用一種方式“壓縮”,壓縮后的圖片所在的位置就叫做“潛在空間”,這也是 LDM 中 Latent 所代表的意思。當(dāng)圖片被壓縮到了潛在空間后,訓(xùn)練需要的算力和時(shí)間就被大大減少,但是卻不會(huì)損失多少訓(xùn)練所需要的圖片特征。

而使用 AI 生成圖片的過程也是一樣的,先從隨機(jī)種子種生成“潛在空間“的隨機(jī)噪聲圖片,然后就和訓(xùn)練的逆過程一樣,在”潛在空間“里完成對(duì)噪聲圖片的還原,最后再把還原后的圖片從”潛在空間“里拿出來,把圖片反”壓縮“回正常的圖片。

Everything you need to know about stable diffusion :: P?pper's Machine ...

而這種用到的壓縮/還原方式,也是一種模型,叫做 VAE。在 Stable Diffusion 中也經(jīng)常用到,有一些 checkpoint 需要搭配特定的 VAE 使用,這種 VAE 提取了特定的圖片特征,生成到”潛在空間“,方便對(duì)應(yīng)的 checkpoint 模型進(jìn)行更好的訓(xùn)練。所以在沒有使用對(duì)應(yīng) VAE 的 checkpoint 的模型文件中,生成出來的圖片總是會(huì)有一些顏色不對(duì),此時(shí) SD 檢測到模型沒有 VAE 所以使用了默認(rèn)的,而默認(rèn) VAE 壓縮的圖片特征又難以和模型的訓(xùn)練方式對(duì)應(yīng)。

img

我還見到過一些據(jù)說是可以修復(fù)手或臉部問題的 VAE,我還沒有使用過,不過應(yīng)該也不難理解,這類 VAE 在壓縮和還原圖片特征時(shí),可能對(duì)手或臉部做了特殊處理,讓效果更好。

總結(jié)

總之,AI 生成圖片的過程可以參考下面這張圖:

sd-pipeline

首先是在”潛在空間“生產(chǎn)噪聲圖,然后用 UNet 逐漸降噪,這里是一個(gè)循環(huán),不斷地迭代直到達(dá)到一個(gè)好的效果。當(dāng)在”潛在空間“迭代到指定步數(shù)(Steps)之后,通過 VAE 將圖像還原到正常人類可以理解的程度。

而模型的訓(xùn)練過程其實(shí)和生成圖片的過程差不多,不過目前有好幾種主流的訓(xùn)練方式,分別在不同的地方做了輕微調(diào)整。這些內(nèi)容會(huì)單獨(dú)拎出來做一節(jié)課,這里就不多做展開。

目前 Stable Diffusion 可以說是 LDM 模型最大的受益者,甚至從某種角度來說 LDM 等同于 Stable Diffusion 也不為過。正是 LDM 帶來的低算力需求,讓更多的三方開發(fā)者、模型訓(xùn)練師參與進(jìn)來,進(jìn)一步豐富了 Stable Diffusion 的生態(tài)。

參考資料

Learning Transferable Visual Models From Natural Language Supervision: https://arxiv.org/pdf/2103.00020.pdf

CLIP: https://github.com/openai/CLIP

open_clip: https://github.com/mlfoundations/open_clip

OpenAI CLIP模型袖珍版,24MB實(shí)現(xiàn)文本圖像匹配,iPhone上可運(yùn)行: https://picture.iczhiku.com/weixin/message1629181164409.html

從頭開始學(xué)習(xí)Stable Diffusion:一個(gè)初學(xué)者指南: https://chrislee0728.medium.com/從頭開始學(xué)習(xí)stable-diffusion-一個(gè)初學(xué)者指南-ec34d7726a6c

CLASSIFIER-FREE DIFFUSION GUIDANCE: https://arxiv.org/pdf/2207.12598.pdf

在StableDiffusion中說起VAE時(shí),我們在談?wù)撌裁?: https://zhuanlan.zhihu.com/p/599129815

Stable Diffusion VAE Guide and Comparison: https://aituts.com/vae/

Everything you need to know about stable diffusion: https://www.paepper.com/blog/posts/everything-you-need-to-know-about-stable-diffusion/

Stable Diffusion with ?? Diffusers: https://huggingface.co/blog/stable_diffusion

[零基礎(chǔ)] Stable Diffusion 原理詳解

【原創(chuàng)】萬字長文講解Stable Diffusion的AI繪畫基本技術(shù)原理: https://zhuanlan.zhihu.com/p/621493124

Stable Diffusion 中文教程: https://www.w3cschool.cn/stable_diffusion/

煒哥的AI學(xué)習(xí)筆記——SD基礎(chǔ)原理的評(píng)論 (共 條)

分享到微博請遵守國家法律
鄂州市| 开原市| 比如县| 绥化市| 怀宁县| 中江县| 邵阳市| 杭州市| 汾西县| 扬中市| 孟村| 车险| 永清县| 鱼台县| 高要市| 电白县| 清水河县| 静宁县| 色达县| 桦甸市| 山丹县| 新密市| 海阳市| 社旗县| 新野县| 黄平县| 诸暨市| 福泉市| 漳平市| 巴林左旗| 麦盖提县| 惠东县| 江山市| 青阳县| 于田县| 封丘县| 麻栗坡县| 汾西县| 清远市| 平安县| 潞城市|