潛在擴(kuò)散模型 | AIGC|Diffusion Model
圖片感知壓縮 | GAN |Stable Diffusion
隨著生成型AI技術(shù)的能力提升,越來越多的注意力放在了通過AI模型提升研發(fā)效率上。業(yè)內(nèi)比較火的AI模型有很多,比如畫圖神器Midjourney、用途多樣的Stable Diffusion,以及OpenAI此前剛剛迭代的DALL-E 2。
對(duì)于研發(fā)團(tuán)隊(duì)而言,盡管Midjourney功能強(qiáng)大且不需要本地安裝,但它對(duì)于硬件性能的要求較高,甚至同一個(gè)指令每次得到的結(jié)果都不盡相同。相對(duì)而言,Stable Diffusion因具備功能多、開源、運(yùn)行速度快,且能耗低內(nèi)存占用小成為更理想的選擇。
AIGC和ChatGPT4技術(shù)的爆燃和狂飆,讓文字生成、音頻生成、圖像生成、視頻生成、策略生成、GAMEAI、虛擬人等生成領(lǐng)域得到了極大的提升。不僅可以提高創(chuàng)作質(zhì)量,還能降低成本,增加效率。同時(shí),對(duì)GPU和算力的需求也越來越高,因此GPU服務(wù)器廠商開始涌向該賽道,為這一領(lǐng)域提供更好的支持。
本文將重點(diǎn)從Stable Diffusion如何安裝、Stable Diffusion工作原理及Diffusion model與GAN相比的優(yōu)劣勢(shì)為大家展開詳細(xì)介紹。
Stable Diffusion如何安裝
Stable Diffusion是一個(gè)非常有用的工具,可以幫助用戶快速、準(zhǔn)確地生成想要的場(chǎng)景及圖片。它的安裝也非常簡(jiǎn)單,只需要按照上述步驟進(jìn)行即可。如果您需要快速生成圖片及場(chǎng)景,Stable Diffusion是一個(gè)值得嘗試的工具。
一、環(huán)境準(zhǔn)備
1、硬件方面
1)顯存
4G起步,4G顯存支持生成512*512大小圖片,超過這個(gè)大小將卡爆失敗。這里小編建議使用RTX 3090。
2)硬盤
10G起步,模型基本都在5G以上,有個(gè)30G硬盤不為過吧?現(xiàn)在硬盤容量應(yīng)該不是個(gè)問題。
2、軟件方面
1)Git
https://git-scm.com/download/win
2)Python
https://www.python.org/downloads/
3)Nvidia CUDA
https://developer.download.nvidia.cn/compute/cuda/11.7.1/local_installers/cuda_11.7.1_516.94_windows.exe
版本11.7.1,搭配Nvidia驅(qū)動(dòng)516.94,可使用最新版。
4)stable-diffusion-webui
https://github.com/AUTOMATIC1111/stable-diffusion-webui
核心部件當(dāng)然用最新版本~~但注意上面三個(gè)的版本的兼容性。
5)中文語言包
https://github.com/VinsonLaro/stable-diffusion-webui-chinese
下載chinese-all-0306.json 和 chinese-english-0306.json文件
6)擴(kuò)展(可選)
https://github.com/Mikubill/sd-webui-controlnet
下載整個(gè)sd-webui-controlnet壓縮包
https://huggingface.co/Hetaneko/Controlnet-models/tree/main/controlnet_safetensors
https://huggingface.co/lllyasviel/ControlNet/tree/main/models
https://huggingface.co/TencentARC/T2I-Adapter/tree/main
試用時(shí)先下載第一個(gè)鏈接中的control_openpose.safetensors 或 第二個(gè)鏈接中的control_sd15_openpose.pth文件
7)模型
https://huggingface.co/models
https://civitai.com
可以網(wǎng)上去找推薦的一些模型,一般后綴名為ckpt、pt、pth、safetensors ,有時(shí)也會(huì)附帶VAE(.vae.pt)或配置文件(.yaml)。
二、安裝流程
1)安裝Git
就正常安裝,無問題。
2)安裝Python
建議安裝在非program files、非C盤目錄,以防出現(xiàn)目錄權(quán)限問題。
注意安裝時(shí)勾選Add Python to PATH,這樣可以在安裝時(shí)自動(dòng)加入windows環(huán)境變量PATH所需的Python路徑。
3)安裝Nvidia CUDA
正常安裝,無問題。
4)安裝stable-diffusion-webui
國內(nèi)需要用到代理和鏡像,請(qǐng)按照下面的步驟操作:
a) 編輯根目錄下launch.py文件
將https://github.com替換為https://ghproxy.com/https://github.com,即使用Ghproxy代理,加速國內(nèi)Git。
b) 執(zhí)行根目錄下webui.bat文件
根目錄下將生成tmp和venv目錄。
c) 編輯venv目錄下pyvenv.cfg文件
將include-system-site-packages = false改為include-system-site-packages = true。
d) 配置python庫管理器pip
方便起見,在venvScripts下打開cmd后執(zhí)行如下命令:
xformer會(huì)安裝到venvLibsite-packages中,安裝失敗可以用pip install -U xformers命試試。
e) 安裝語言包
將文件chinese-all-0306.json 和 chinese-english-0306.json放到目錄localizations目錄中。運(yùn)行webui后進(jìn)行配置,操作方法見下。
f) 安裝擴(kuò)展(可選)
將sd-webui-controlnet解壓縮到extensions目錄中。將control_sd15_openpose.pth文件復(fù)制到/extensions/sd-webui-controlnet/models目錄中。不同的擴(kuò)展可能還需要安裝對(duì)應(yīng)的系統(tǒng),比如controlnet要正常使用則還需要安裝ffmpeg等。
g) 安裝模型
下載的各種模型放在modelsStable-diffusion目錄中即可。
h) 再次執(zhí)行根目錄下webui.bat文件
用瀏覽器打開webui.bat所提供的網(wǎng)址即可運(yùn)行。
其中提供了網(wǎng)址:http://127.0.0.1:7860。
打開該網(wǎng)址后在Settings -> User interface -> Localization (requires restart)設(shè)置語言,在菜單中選擇chinese-all-0220(前提是已經(jīng)在目錄中放入了對(duì)應(yīng)語言包,見上),點(diǎn)擊Apply Settings確定,并且點(diǎn)擊Reload UI重啟界面后即可。
Stable Diffusion背后的原理
Latent Diffusion Models(潛在擴(kuò)散模型)的整體框架如下圖所示。首先需要訓(xùn)練一個(gè)自編碼模型,這樣就可以利用編碼器對(duì)圖片進(jìn)行壓縮,然后在潛在表示空間上進(jìn)行擴(kuò)散操作,最后再用解碼器恢復(fù)到原始像素空間。這種方法被稱為感知壓縮(Perceptual Compression)。個(gè)人認(rèn)為這種將高維特征壓縮到低維,然后在低維空間上進(jìn)行操作的方法具有普適性,可以很容易地推廣到文本、音頻、視頻等領(lǐng)域。
在潛在表示空間上進(jìn)行diffusion操作的主要過程和標(biāo)準(zhǔn)的擴(kuò)散模型沒有太大的區(qū)別,所使用的擴(kuò)散模型的具體實(shí)現(xiàn)為time-conditional UNet。但是,論文為擴(kuò)散操作引入了條件機(jī)制(Conditioning Mechanisms),通過cross-attention的方式來實(shí)現(xiàn)多模態(tài)訓(xùn)練,使得條件圖片生成任務(wù)也可以實(shí)現(xiàn)。
下面我們針對(duì)感知壓縮、擴(kuò)散模型、條件機(jī)制的具體細(xì)節(jié)進(jìn)行展開。
一、圖片感知壓縮(Perceptual Image Compression)
感知壓縮本質(zhì)上是一個(gè)tradeoff。之前的許多擴(kuò)散模型沒有使用這種技術(shù)也可以進(jìn)行,但是原有的非感知壓縮的擴(kuò)散模型存在一個(gè)很大的問題,即在像素空間上訓(xùn)練模型時(shí),如果希望生成高分辨率的圖像,則訓(xùn)練空間也是高維的。感知壓縮通過使用自編碼模型,忽略高頻信息,只保留重要的基礎(chǔ)特征,從而大幅降低訓(xùn)練和采樣階段的計(jì)算復(fù)雜度,使文圖生成等任務(wù)能夠在消費(fèi)級(jí)GPU上在10秒內(nèi)生成圖片,降低了落地門檻。
感知壓縮利用預(yù)訓(xùn)練的自編碼模型,學(xué)習(xí)到一個(gè)在感知上等同于圖像空間的潛在表示空間。這種方法的優(yōu)勢(shì)在于,只需要訓(xùn)練一個(gè)通用的自編碼模型,就可以用于不同的擴(kuò)散模型的訓(xùn)練,在不同的任務(wù)上使用。
因此,基于感知壓縮的擴(kuò)散模型的訓(xùn)練本質(zhì)上是一個(gè)兩階段訓(xùn)練的過程,第一階段需要訓(xùn)練一個(gè)自編碼器,第二階段才需要訓(xùn)練擴(kuò)散模型本身。在第一階段訓(xùn)練自編碼器時(shí),為了避免潛在表示空間出現(xiàn)高度的異化,作者使用了兩種正則化方法,一種是KL-reg,另一種是VQ-reg,因此在官方發(fā)布的一階段預(yù)訓(xùn)練模型中,會(huì)看到KL和VQ兩種實(shí)現(xiàn)。在Stable Diffusion中主要采用AutoencoderKL這種實(shí)現(xiàn)。
二、潛在擴(kuò)散模型(Latent Diffusion Models)
首先簡(jiǎn)要介紹一下普通的擴(kuò)散模型(DM),擴(kuò)散模型可以解釋為一個(gè)時(shí)序去噪自編碼器(equally weighted sequence of denoising autoencoders)
,其目標(biāo)是根據(jù)輸入
去預(yù)測(cè)一個(gè)對(duì)應(yīng)去噪后的變體,或者說預(yù)測(cè)噪音,其中
是輸入
的噪音版本。相應(yīng)的目標(biāo)函數(shù)可以寫成如下形式:
。其中
從
中均勻采樣獲得。
而在潛在擴(kuò)散模型中,引入了預(yù)訓(xùn)練的感知壓縮模型,它包括一個(gè)編碼器
和一個(gè)解碼器
。這樣就可以利用在訓(xùn)練時(shí)就可以利用編碼器得到
,從而讓模型在潛在表示空間中學(xué)習(xí),相應(yīng)的目標(biāo)函數(shù)可以寫成如下形式:
三、條件機(jī)制
除了無條件圖片生成外,我們也可以進(jìn)行條件圖片生成,這主要是通過拓展得到一個(gè)條件時(shí)序去噪自編碼器(conditional denoising autoencoder)
來實(shí)現(xiàn)的,這樣一來我們就可通過
來控制圖片合成的過程。具體來說,論文通過在UNet主干網(wǎng)絡(luò)上增加cross-attention機(jī)制來實(shí)現(xiàn)
。為了能夠從多個(gè)不同的模態(tài)預(yù)處理
,論文引入了一個(gè)領(lǐng)域?qū)S镁幋a器(domain specific encoder)
,它用來將
映射為一個(gè)中間表示
,這樣我們就可以很方便的引入各種形態(tài)的條件(文本、類別、layout等等)。最終模型就可以通過一個(gè)cross-attention層映射將控制信息融入到UNet的中間層,cross-attention層的實(shí)現(xiàn)如下:
其中
是UNet的一個(gè)中間表征。相應(yīng)的目標(biāo)函數(shù)可以寫成如下形式:
四、效率與效果的權(quán)衡
分析不同下采樣因子f∈{1,2,4,8,16,32}(簡(jiǎn)稱LDM-f,其中LDM-1對(duì)應(yīng)基于像素的DMs)的效果。為了獲得可比較的測(cè)試結(jié)果,固定在一個(gè)NVIDIA A100上進(jìn)行了實(shí)驗(yàn),并使用相同數(shù)量的步驟和參數(shù)訓(xùn)練模型。實(shí)驗(yàn)結(jié)果表明,LDM-{1,2}這樣的小下采樣因子訓(xùn)練緩慢,因?yàn)樗鼘⒋蟛糠指兄獕嚎s留給擴(kuò)散模型。而f值過大,則導(dǎo)致在相對(duì)較少的訓(xùn)練步驟后保真度停滯不前,原因在于第一階段壓縮過多,導(dǎo)致信息丟失,從而限制了可達(dá)到的質(zhì)量。LDM-{4-16}在效率和感知結(jié)果之間取得了較好的平衡。與基于像素的LDM-1相比,LDM-{4-8}實(shí)現(xiàn)了更低的FID得分,同時(shí)顯著提高了樣本吞吐量。對(duì)于像ImageNet這樣的復(fù)雜數(shù)據(jù)集,需要降低壓縮率以避免降低質(zhì)量??傊琇DM-4和-8提供了較高質(zhì)量的合成結(jié)果。
Diffusion model與GAN相比的優(yōu)劣勢(shì)
一、優(yōu)點(diǎn)
Diffusion Model相比于GAN,明顯的優(yōu)點(diǎn)是避免了麻煩的對(duì)抗學(xué)習(xí)。此外,還有幾個(gè)不太明顯的好處:首先,Diffusion Model可以“完美”用latent去表示圖片,因?yàn)槲覀兛梢杂靡粋€(gè)ODE從latent變到圖片,同一個(gè)ODE反過來就可以從圖片變到latent。而GAN很難找到真實(shí)圖片對(duì)應(yīng)什么latent,所以可能會(huì)不太好修改非GAN生成的圖片。其次,Diffusion Model可以用來做“基于色塊的編輯”(SDEdit),而GAN沒有這樣的性質(zhì),所以效果會(huì)差很多。再次,由于Diffusion Model和score之間的聯(lián)系,它可以用來做inverse problem solver的learned prior,例如我有一個(gè)清晰圖片的生成模型,看到一個(gè)模糊圖片,可以用生成模型作為先驗(yàn)讓圖片更清晰。最后,Diffusion Model可以求model likelihood,而這個(gè)GAN就很難辦。Diffusion Model最近的流行一部分也可能是因?yàn)镚AN卷不太動(dòng)了。雖然嚴(yán)格意義上說,Diffusion Model最早出自Jascha Sohl-Dickstein在ICML 2015就發(fā)表的文章,和GAN的NeurIPS 2014也差不了多少;不過DCGAN/WGAN這種讓GAN沃克的工作在2015-17就出了,而Diffusion Model在大家眼中做沃克基本上在NeurIPS 2020,所以最近看上去更火也正常。
二、不足之處
Diffusion model相比于GAN也存在一些缺陷。首先,無法直接修改潛在空間的維度,這意味著無法像StyleGAN中使用AdaIN對(duì)圖像風(fēng)格進(jìn)行操作。其次,由于沒有判別器,如果監(jiān)督條件是“我想要網(wǎng)絡(luò)輸出的東西看起來像某個(gè)物體,但我不確定具體是什么”,就會(huì)比較困難。而GAN可以輕松地實(shí)現(xiàn)這一點(diǎn),例如生成長頸鹿的圖像。此外,由于需要迭代,生成速度比較慢,但在單純的圖像生成方面已經(jīng)得到了解決。目前在條件圖像生成方面的研究還不夠充分,但可以嘗試將Diffusion model應(yīng)用于這一領(lǐng)域。
審核編輯黃宇
-
AI
+關(guān)注
關(guān)注
87文章
29383瀏覽量
267670 -
ChatGPT
+關(guān)注
關(guān)注
28文章
1525瀏覽量
7250 -
AIGC
+關(guān)注
關(guān)注
1文章
338瀏覽量
1449
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論