CogView3 是一种新颖的文本生成图像系统,采用了接力扩散的方式,将生成高分辨率图像的过程分解为多个阶段。通过接力的超分辨率过程,对低分辨率生成结果添加高斯噪声,并从这些带噪声的图像开始扩散。我们的结果显示,CogView3 的表现优于 SDXL,获胜率达到 77.0%。此外,通过对扩散模型的逐步蒸馏,CogView3 能够在推理时间仅为 SDXL 1/10 的情况下,生成可比的结果。
CogView-3-Plus 在 CogView3(ECCV'24) 的基础上引入了最新的 DiT 框架,以实现整体性能的进一步提升。CogView-3-Plus 采用了 Zero-SNR 扩散噪声调度,并引入了文本-图像联合注意力机制。与常用的 MMDiT 结构相比,它在保持模型基本能力的同时,有效降低了训练和推理成本。CogView-3Plus 使用潜在维度为 16 的 VAE。
下表显示了我们目前提供的文本生成图像模型列表及其基础信息。 目前,所有模型都仅有 SAT 版本,但是我们会参与到 diffusers 版本的制作。
模型名称 | CogView3-Base-3B | CogView3-Base-3B-distill | CogView3-Plus-3B |
模型描述 | CogView3 的基础阶段和接力阶段模型,支持 512x512 文本生成图像以及 2x 超分辨率生成。 | CogView3 的蒸馏版本,分别在两个阶段采样 4 和 1 步(或 8 和 2 步)。 | DIT 版本的图像生成模型 ,支持从 512 到 2048 范围内的图像生成。 |
分辨率 | 512 * 512 | 512 <= H, W <= 2048 | |
推理精度 | FP16(推荐), BF16, FP32 | BF16*(推荐), FP16, FP32 | |
显存占用 (bs = 4) | 17G | 64G | 30G(2048 * 2048) |
提示词语言 | English* | ||
提示词长度上限 | 225 Tokens | 224 Tokens | |
下载链接 (SAT) |
查看显存
nvidia-smi
在线创建Python虚拟环境
工作目录
# cd /mnt/workspace
python3.10 -m venv cogview
激活Python虚拟环境
#source /mnt/workspace/cogview/bin/activate
拉取CogView代码
#cd /mnt/workspace
git clone https://github.com/THUDM/CogView3.git
安装CogView的依赖
#cd /CogView3/sat
pip install -r requirements.txt
modelscope下载模型(单个文件下载)
pip install modelscope
modelscope download --model cjc1887415157/CogView3 cogview3-base/transformer/1/mp_rank_00_model_states.pt --local_dir /mnt/workspace/cogview3-base
modelscope download --model cjc1887415157/CogView3 cogview3-base/transformer/latest --local_dir /mnt/workspace/cogview3-base
modelscope download --model cjc1887415157/CogView3 cogview3-base/vae/sdxl_vae.safetensors --local_dir /mnt/workspace/cogview3-base
克隆T5模型
克隆 T5 模型,该模型不用做训练和微调,但是必须使用。这里,您可以单独下载T5模型,必须是`safetensors`类型,不能是`bin`类型(否则可能出现错误)。
由于我们在`CogVideoX`中上传过 `safetensors` 格式的T5模型,一个简单的办法是从`CogVideX-2B`模型中克隆模型,然后将其拷贝到对应的文件夹中。
#从modelscope下载模型到指定目录
modelscope download --model ZhipuAI/CogVideoX-2b --local_dir /mnt/workspace/
#mkdir t5-v1_1-xxl
cp /mnt/workspace/text_encoder/* /mnt/workspace/tokenizer/* /mnt/workspace/t5-v1_1-xxl
修改`configs`中的文件。
文件路径
#cd /mnt/workspace/CogView3/sat/configs/cogview3_base.yaml
这里以`CogView3-Base`为例,提供部分参数的讲解和介绍:
```yaml
args:
mode: inference
relay_model: False # 当模型类型为 CogView-3-Relay 时,需要将该参数设置为 True
load: "/mnt/workspace/cogview3-base/transformer" # 这里填写到transformer文件夹
batch_size: 8 # 每次推理图像数
grid_num_columns: 2 # 推理结束后,每个提示词文件夹下会有 grid.png 图片,该数字代表列数。
input_type: txt # 可以选择命令行输入,或者TXT文件输入
input_file: configs/test.txt # 如果使用命令行,不需要这个参数
fp16: True # CogView-3-Plus 模型 需要更换为 bf16 推理
# bf16: True
sampling_image_size: 512 # 固定大小,支持512 * 512 分辨率图像
# CogView-3-Plus 模型可以使用以下两个参数。
# sampling_image_size_x: 1024 宽
# sampling_image_size_y: 1024 高
output_dir: "outputs/cogview3_base-512x512"
# # 这个部分是给 CogView-3-Relay 模型使用的,需要将该参数设置为推理模型的输入文件夹,提示词建议与 base 模型生成图片时的提示词的一致。
# input_dir: "outputs/cogview3_base-512x512"
deepspeed_config: { }
model:
conditioner_config:
target: sgm.modules.GeneralConditioner
params:
emb_models:
- is_trainable: False
input_key: txt
target: sgm.modules.encoders.modules.FrozenT5Embedder
params:
model_dir: "/mnt/workspace/t5-v1_1-xxl" # T5 safetensors的绝对路径
max_length: 225 # 支持输入的提示词的最大长度
first_stage_config:
target: sgm.models.autoencoder.AutoencodingEngine
params:
ckpt_path: "/mnt/workspace/CogView3_Model/CogView3/cogview3-base/vae/sdxl_vae.safetensors" # VAE PT文件绝对路径
monitor: val/rec_loss
```
推理模型
文件路径
#cd /mnt/workspace/CogView3/sat
# python sample_unet.py --base configs/cogview3_base.yaml