Self-Attention-Guidance 项目使用教程
1. 项目介绍
Self-Attention-Guidance 是一个开源项目,旨在通过自注意力机制来提升扩散模型的样本质量。该项目基于论文 "Improving Sample Quality of Diffusion Models Using Self-Attention Guidance" (ICCV`23) 实现。通过分析扩散模型的自注意力图,项目提供了一种改进样本质量的方法,无需进一步训练或数据集。
2. 项目快速启动
环境准备
首先,确保你已经安装了 Python 3.8 和 PyTorch 1.11.0。你可以使用以下命令来设置环境:
git clone https://github.com/SusungHong/Self-Attention-Guidance.git
conda create -n sag python=3.8 anaconda
conda activate sag
conda install mpi4py
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 -f https://download.pytorch.org/whl/torch_stable.html
pip install blobfile
下载预训练模型
下载预训练的 ImageNet 和 LSUN 模型,并将它们放置在 models/
目录下:
# 示例命令,具体下载链接请参考项目文档
wget https://example.com/pretrained_models/128x128_diffusion.pt -P models/
运行示例
以下是一个简单的示例,使用自注意力指导生成图像:
SAMPLE_FLAGS="--batch_size 64 --num_samples 10000 --timestep_respacing 250"
MODEL_FLAGS="--attention_resolutions 32,16,8 --class_cond True --diffusion_steps 1000 --image_size 128 --learn_sigma True --noise_schedule linear --num_channels 256 --num_heads 4 --num_res_blocks 2 --resblock_updown True --use_fp16 True --use_scale_shift_norm True"
SAG_FLAGS="--guide_scale 1.1 --guide_start 250 --sel_attn_block output --sel_attn_depth 8 --blur_sigma 3 --classifier_guidance True"
mpiexec -n $NUM_GPUS python classifier_sample.py $SAG_FLAGS $MODEL_FLAGS --classifier_scale 0.5 --classifier_path models/128x128_classifier.pt --model_path models/128x128_diffusion.pt $SAMPLE_FLAGS
3. 应用案例和最佳实践
案例1:图像生成
使用 Self-Attention-Guidance 可以显著提升图像生成的质量。通过调整 guide_scale
和 guide_start
参数,可以控制自注意力指导的强度和起始时间步。
案例2:条件生成
在条件生成任务中,结合自注意力指导和分类器指导,可以生成更符合条件的图像。通过设置 classifier_guidance
为 True
,并调整 classifier_scale
,可以实现这一目标。
4. 典型生态项目
1. OpenAI Guided Diffusion
Self-Attention-Guidance 项目基于 OpenAI 的 Guided Diffusion 项目进行扩展。Guided Diffusion 提供了一个强大的扩散模型框架,而 Self-Attention-Guidance 在此基础上引入了自注意力机制,进一步提升了模型性能。
2. Hugging Face Diffusers
Hugging Face 的 Diffusers 库是一个流行的扩散模型库,支持多种扩散模型和生成方法。Self-Attention-Guidance 的实现可以与 Diffusers 库结合使用,提供更高质量的图像生成功能。
3. Yandex Research DDPM Segmentation
Yandex Research 的 DDPM Segmentation 项目提供了用于分割任务的扩散模型实现。Self-Attention-Guidance 通过引入自注意力机制,可以进一步提升分割任务的性能。