🚀 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風格損失訓練的額外微調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萬 + 20萬 |
採樣步數 |
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統計信息](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(驗證集13k張圖像) |
先驗模塊(25) + 解碼器(25) + 超分辨率模塊(7) |
0.3081 |
14.37 |
先驗模塊(25) + 解碼器(50) + 超分辨率模塊(7) |
0.3086 |
13.95 |
MS - COCO
採樣步驟 |
CLIP分數(ViT - B/16) |
FID(驗證集30k張圖像) |
先驗模塊(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) - 100M高質量子集、CC3M和CC12M。對於那些對在更大規模高質量數據集上訓練的更好版本的Karlo感興趣的人,請訪問我們的應用B^DISCOVER的主頁。
📄 許可證
本項目採用CreativeML OpenRAIL - M許可證。
BibTex
如果您在研究中發現本倉庫有用,請引用:
@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}},
}