Stability AI推出Stable Diffusion XL 1.0,文本到圖像模型
Stability AI宣布推出Stable Diffusion XL 1.0,這是一個文本到圖像的模型,該公司將其描述為迄今為止“最先進(jìn)的”版本。
Stability AI表示,SDXL 1.0能生成更加鮮明準(zhǔn)確的色彩,在對比度、光線和陰影方面做了增強(qiáng),可生成100萬像素的圖像(1024×1024)。而且還支持在網(wǎng)頁上直接對生成圖像進(jìn)行后期編輯。
提示詞也能比之前更簡單了。這是因為SDXL 1.0的基礎(chǔ)模型參數(shù)量達(dá)到了35億,理解能力更強(qiáng)。對比基礎(chǔ)版Stable Diffusion,參數(shù)量只有10億左右。由此,SDXL 1.0也成為當(dāng)前最大規(guī)模的開放圖像模型之一。
Stability AI博客介紹了SDXL 1.0的更多技術(shù)細(xì)節(jié)。首先,模型在規(guī)模和架構(gòu)上都有了新突破。它創(chuàng)新性地使用了一個基礎(chǔ)模型(base model)+一個細(xì)化模型(refiner model),二者的參數(shù)規(guī)模分別為35億和66億。
這也使得SDXL 1.0成為目前規(guī)模最大的開放圖像模型之一。
Stability AI創(chuàng)始人莫斯塔克(Emad Mostaque)表示,更大規(guī)模的參數(shù)量能讓模型理解更多概念,教會它更深層次的東西。同時在SDXL 0.9版本還進(jìn)行了RLHF強(qiáng)化。
這也是為什么現(xiàn)在SDXL 1.0支持短提示詞,而且能分清紅場(the Red Square)和一個紅色的廣場(a Red Square)。
在具體合成過程中,第一步,基礎(chǔ)模型產(chǎn)生有噪聲的latent,然后由細(xì)化模型進(jìn)行去噪。
其中基礎(chǔ)模型也可以作為獨(dú)立模塊使用。這兩種模型結(jié)合能生成質(zhì)量更好的圖像,且不需要消耗更多計算資源。
測試效果:
安裝:
1.克隆回購
git clone git@github.com:Stability-AI/generative-models.git
cd generative-models
2.設(shè)置虛擬環(huán)境
這是假設(shè)您已經(jīng)導(dǎo)航到generative-models克隆后的根。
注意:這是在下測試的python3.8和python3.10。對于其他python版本,您可能會遇到版本沖突。
PyTorch 1.13
# install required packages from pypi
python3 -m venv .pt13source .pt13/bin/activate
pip3 install -r requirements/pt13.txt
PyTorch 2.0
# install required packages from pypi
python3 -m venv .pt2source .pt2/bin/activate
pip3 install -r requirements/pt2.txt
3.安裝sgm
pip3 install .
4.安裝sdata用于培訓(xùn)
pip3 install -e git+https://github.com/Stability-AI/datapipelines.git@main#egg=sdata
包裝
該存儲庫使用符合PEP 517的打包方式艙口.
要構(gòu)建可分配的輪子,請安裝hatch然后跑hatch build(指定-t wheel將跳過構(gòu)建sdist,這是不必要的)。
pip install hatch
hatch build -t wheel
您將在中找到構(gòu)建的包dist/。您可以用以下工具安裝車輪pip install dist/*.whl.
請注意,該包不當(dāng)前指定的依賴項;根據(jù)您的用例以及PyTorch版本,您需要手動安裝所需的包。
推理
我們提供一個細(xì)流文本到圖像和圖像到圖像采樣演示scripts/demo/sampling.py。我們提供完整文件的文件哈希,以及文件中僅保存的張量的文件哈希(參見型號規(guī)格讓腳本來評估這一點(diǎn))。目前支持以下型號:
· SDXL-base-1.0
File Hash (sha256): 31e35c80fc4829d14f90153f4c74cd59c90b779f6afe05a74cd6120b893f7e5b
Tensordata Hash (sha256): 0xd7a9105a900fd52748f20725fe52fe52b507fd36bee4fc107b1550a26e6ee1d7
· SDXL-精煉機(jī)-1.0
File Hash (sha256): 7440042bbdc8a24813002c09b6b69b64dc90fded4472613437b7f55f9b7d9c5f
Tensordata Hash (sha256): 0x1a77d21bebc4b4de78c474a90cb74dc0d2217caf4061971dbfa75ad406b75d81
· SDXL-base-0.9
· SDXL-精煉機(jī)-0.9
· SD-2.1-512
· SD-2.1-768
SDXL的重量:
SDXL-1.0:SDXL-1.0的重量可用(根據(jù)CreativeML Open RAIL++-M許可證)這里:
· 基本型號:https://hugging face . co/stability ai/stable-diffusion-XL-base-1.0/
· 精煉機(jī)型號:https://hugging face . co/stability ai/stable-diffusion-XL-refiner-1.0/
SDXL-0.9:SDXL-0.9的重量可用,并受a研究許可證。如果您想訪問這些模型進(jìn)行研究,請使用以下鏈接之一進(jìn)行申請:SDXL-base-0.9型號,以及SDXL-精煉機(jī)-0.9。這意味著你可以申請這兩個鏈接中的任何一個,如果你被批準(zhǔn),你就可以訪問這兩個鏈接。請使用您的組織電子郵件登錄到您的擁抱臉帳戶以請求訪問。
獲得重量后,將它們放入checkpoints/。接下來,使用
streamlit run scripts/demo/sampling.py --server.port <your_port>
不可見水印檢測
用我們的代碼生成的圖像使用不可見水印庫將不可見的水印嵌入到模型輸出中。我們還提供了一個腳本來輕松檢測水印。請注意,此水印與之前的穩(wěn)定擴(kuò)散1.x/2.x版本不同。
要運(yùn)行該腳本,您需要有一個如上所述的工作安裝或嘗試一個實驗的僅使用最少量的包導(dǎo)入:
python -m venv .detectsource .detect/bin/activate
pip install "numpy>=1.17" "PyWavelets>=1.1.1" "opencv-python>=4.1.0.25"
pip install --no-deps invisible-watermark
要運(yùn)行該腳本,您需要有一個如上所述的工作安裝。該腳本可以通過以下方式使用(不要忘記提前激活您的虛擬環(huán)境,例如source .pt1/bin/activate):
# test a single file
python scripts/demo/detect.py <your filename here># test multiple files at once
python scripts/demo/detect.py <filename 1> <filename 2> ... <filename n># test all files in a specific folder
python scripts/demo/detect.py <your folder name here>/*
培訓(xùn):
我們在中提供了示例培訓(xùn)配置configs/example_training。要啟動培訓(xùn),請運(yùn)行
python main.py --base configs/<config1.yaml> configs/<config2.yaml>
其中配置從左到右合并(后面的配置會覆蓋相同的值)。這可用于組合模型、訓(xùn)練和數(shù)據(jù)配置。然而,所有這些也可以在單個配置中定義。例如,要在MNIST上運(yùn)行基于類條件像素的擴(kuò)散模型訓(xùn)練,請運(yùn)行
python main.py --base configs/example_training/toy/mnist_cond.yaml
注1:使用非玩具數(shù)據(jù)集配置configs/example_training/imagenet-f8_cond.yaml, configs/example_training/txt2img-clipl.yaml和configs/example_training/txt2img-clipl-legacy-ucg-training.yaml對于訓(xùn)練,將需要根據(jù)所使用的數(shù)據(jù)集進(jìn)行編輯(數(shù)據(jù)集預(yù)計存儲在web dataset-格式).要查找需要修改的部分,請搜索包含以下內(nèi)容的注釋USER:在各自的配置中。
注2:該存儲庫支持這兩者pytorch1.13和pytorch2用于訓(xùn)練生成模型。但是,對于自動編碼器培訓(xùn),例如configs/example_training/autoencoder/kl-f4/imagenet-attnfree-logvar.yaml,僅pytorch1.13受支持。
注3:訓(xùn)練潛在的生成模型(例如configs/example_training/imagenet-f8_cond.yaml)需要從檢索檢查點(diǎn)擁抱臉并替換了CKPT_PATH占位符在這條線。對于所提供的文本到圖像的配置,也要做同樣的事情。
建立新的擴(kuò)散模型
調(diào)節(jié)器
這GeneralConditioner是通過conditioner_config。它唯一的屬性是emb_models不同嵌入器的列表(都繼承自AbstractEmbModel)用于調(diào)節(jié)生成模型。所有嵌入器應(yīng)該定義它們是否是可訓(xùn)練的(is_trainable,默認(rèn)False),使用無分類器的引導(dǎo)丟失率(ucg_rate,默認(rèn)0),以及輸入鍵(input_key),比如,txt用于文本調(diào)節(jié)或cls為了階級調(diào)節(jié)。當(dāng)計算條件時,嵌入器將獲得batch[input_key]作為輸入。我們目前支持二維到四維條件,并且不同嵌入器的條件被適當(dāng)?shù)剡B接起來。請注意,嵌入程序在conditioner_config很重要。
網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)是通過network_config。這曾被稱為unet_config,這還不夠普遍,因為我們計劃用基于變壓器的擴(kuò)散主干進(jìn)行實驗。
失敗
損耗通過以下方式配置loss_config。對于標(biāo)準(zhǔn)擴(kuò)散模型訓(xùn)練,您必須設(shè)置sigma_sampler_config.
采樣器配置
如上所述,采樣器獨(dú)立于模型。在……里sampler_config,我們設(shè)置數(shù)值解算器的類型、步驟的數(shù)量、離散化的類型,以及例如用于無分類器引導(dǎo)的引導(dǎo)包裝器。
數(shù)據(jù)集處理
對于大規(guī)模培訓(xùn),我們建議使用我們的數(shù)據(jù)管道數(shù)據(jù)管道項目。該項目包含在需求中,并在遵循安裝部分。小型地圖樣式數(shù)據(jù)集應(yīng)在存儲庫中定義(例如,MNIST、CIFAR-10、...),并返回數(shù)據(jù)鍵/值的字典,例如,
example = {"jpg": x, # this is a tensor -1...1 chw
"txt": "a beautiful image"}
我們期望圖像在-1...1,渠道優(yōu)先的格式。
官方介紹SDXL 1.0可以運(yùn)行在8GB VRAM的消費(fèi)級GPU上,或者是云端。除此之外,SDXL 1.0在微調(diào)也有了提升,可以生成自定義LoRAs或者checkpoints。
Stability AI團(tuán)隊現(xiàn)在也正在構(gòu)建新一代可用于特定任務(wù)的結(jié)構(gòu)、風(fēng)格和組合控件,其中T2I/ControlNet專門用于SDXL。