🚀 Karlo v1 alpha
Karlo是一個基於文本條件的圖像生成模型,它基於OpenAI的unCLIP架構。該模型對標準超分辨率模塊進行了改進,能夠在少量去噪步驟內將圖像從64px提升到256px,並恢復高頻細節。
🚀 快速開始
Karlo可通過diffusers
庫使用。你可以按照以下步驟進行安裝和使用。
📦 安裝指南
pip install diffusers transformers accelerate safetensors
💻 使用示例
基礎用法
文本到圖像
from diffusers import UnCLIPPipeline
import torch
pipe = UnCLIPPipeline.from_pretrained("kakaobrain/karlo-v1-alpha", torch_dtype=torch.float16)
pipe = pipe.to('cuda')
prompt = "a high-resolution photograph of a big red frog on a green leaf."
image = pipe([prompt]).images[0]
image.save("./frog.png")

圖像變體
from diffusers import UnCLIPImageVariationPipeline
import torch
from PIL import Image
pipe = UnCLIPImageVariationPipeline.from_pretrained("kakaobrain/karlo-v1-alpha-image-variations", torch_dtype=torch.float16)
pipe = pipe.to('cuda')
image = Image.open("./frog.png")
image = pipe(image).images[0]
image.save("./frog-variation.png")

📚 詳細文檔
模型架構概述
Karlo是一個基於unCLIP的文本條件擴散模型,由先驗模塊(Prior)、解碼器(Decoder)和超分辨率模塊(SR)組成。在本倉庫中,我們包含了標準超分辨率模塊的改進版本,它僅需7個反向步驟就能將64px的圖像提升到256px,如下圖所示:
具體來說,由DDPM目標訓練的標準SR模塊基於重採樣技術,在前6個去噪步驟中將64px提升到256px。然後,由VQ - GAN-style損失訓練的額外微調SR模塊執行最後一個反向步驟,以恢復高頻細節。我們發現這種方法在少量反向步驟內提升低分辨率圖像非常有效。
模型架構細節
我們在包含COYO - 100M、CC3M和CC12M的1.15億圖像 - 文本對上從頭開始訓練所有組件。對於先驗模塊和解碼器,我們使用OpenAI的CLIP倉庫提供的ViT - L/14。與原始的unCLIP實現不同,為了提高效率,我們將解碼器中的可訓練變壓器替換為ViT - L/14中的文本編碼器。對於SR模塊,我們首先使用DDPM目標在100萬步內訓練模型,然後再進行23.4萬步的額外微調。下表總結了我們各組件的重要統計信息:
組件 |
先驗模塊(Prior) |
解碼器(Decoder) |
超分辨率模塊(SR) |
CLIP |
ViT - L/14 |
ViT - L/14 |
- |
參數數量 |
10億 |
9億 |
7億 + 7億 |
優化步數 |
100萬 |
100萬 |
100萬 + 23.4萬 |
採樣步數 |
25 |
50(默認),25(快速) |
7 |
檢查點鏈接 |
[ViT - L - 14](https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/096db1af569b284eb76b3881534822d9/ViT - L - 14.pt),[ViT - L - 14 stats](https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/0b62380a75e56f073e2844ab5199153d/ViT - L - 14_stats.th),[模型](https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/efdf6206d8ed593961593dc029a8affa/decoder - ckpt - step%3D01000000 - of - 01000000.ckpt) |
[模型](https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/85626483eaca9f581e2a78d31ff905ca/prior - ckpt - step%3D01000000 - of - 01000000.ckpt) |
[模型](https://arena.kakaocdn.net/brainrepo/models/karlo-public/v1.0.0.alpha/4226b831ae0279020d134281f3c31590/improved - sr - ckpt - step%3D1.2M.ckpt) |
在檢查點鏈接中,ViT - L - 14等同於原始版本,但為了方便我們將其包含在內。我們還需注意,ViT - L - 14 - stats是對先驗模塊的輸出進行歸一化所必需的。
模型評估
我們在CC3M和MS - COCO的驗證分割集中定量測量了Karlo - v1.0.alpha的性能。下表展示了CLIP分數和FID分數。為了測量FID,我們將較短邊的圖像調整為256px,然後在中心進行裁剪。在所有情況下,我們將先驗模塊和解碼器的無分類器引導尺度分別設置為4和8。我們觀察到,即使解碼器僅進行25個採樣步驟,我們的模型也能取得合理的性能。
CC3M
採樣步驟 |
CLIP分數(ViT - B/16) |
FID(驗證集1.3萬張圖像) |
先驗模塊(25) + 解碼器(25) + 超分辨率模塊(7) |
0.3081 |
14.37 |
先驗模塊(25) + 解碼器(50) + 超分辨率模塊(7) |
0.3086 |
13.95 |
MS - COCO
採樣步驟 |
CLIP分數(ViT - B/16) |
FID(驗證集3萬張圖像) |
先驗模塊(25) + 解碼器(25) + 超分辨率模塊(7) |
0.3192 |
15.24 |
先驗模塊(25) + 解碼器(50) + 超分辨率模塊(7) |
0.3192 |
14.43 |
更多信息,請參考即將發佈的技術報告。
訓練細節
這個Karlo的alpha版本在1.15億圖像 - 文本對上進行訓練,這些數據包括[COYO](https://github.com/kakaobrain/coyo - dataset) - 1億高質量子集、CC3M和CC12M。對於那些對在更大規模高質量數據集上訓練的更好版本的Karlo感興趣的人,請訪問我們的應用B^DISCOVER的主頁。
🔧 技術細節
引用格式
如果你在研究中發現本倉庫很有用,請引用以下內容:
@misc{kakaobrain2022karlo-v1-alpha,
title = {Karlo-v1.0.alpha on COYO-100M and CC15M},
author = {Donghoon Lee, Jiseob Kim, Jisu Choi, Jongmin Kim, Minwoo Byeon, Woonhyuk Baek and Saehoon Kim},
year = {2022},
howpublished = {\url{https://github.com/kakaobrain/karlo}},
}
📄 許可證
本項目採用CreativeML OpenRAIL - M許可證。