实例5-3:基于VQGAN+CLIP的文生图系统(源码路径:codes/5/VQGAN-CLIP-main)
1. 项目介绍
项目基于 VQGAN 和 CLIP 模型,实现了文本到图像的生成能力,同时支持视频风格化和图像优化。用户可以通过多种优化器和学习率配置生成艺术作品,并灵活使用随机文本生成脚本来扩展创意。项目中包含了多个脚本,如 generate.py 用于图像生成,opt_tester.sh 用于优化器测试,video_styler.sh 用于视频帧的风格化处理,以及 random.sh 用于生成随机文本提示,展示了强大的多媒体生成能力。这使得用户能够创建丰富多样的艺术作品,适用于创作、设计和研究等多个领域。
2. 部署配置
文件cog.yaml用于配置 Cog 框架,以便在云环境中构建和部署模型。在该文件中定义了构建环境的详细信息,包括使用的 GPU 和 CUDA 版本、Python 版本以及所需的系统和 Python 包。具体而言,它列出了如 torch、torchvision 和 numpy 等深度学习和图像处理库,以及其他实用工具,如 tqdm 和 imageio。此外,predict 字段指定了预测功能的实现文件及类,即 predict.py 中的 Predictor 类,用于处理输入并生成输出。通过这个配置文件,用户可以轻松地在支持的环境中运行模型,简化了部署和使用的过程。
build:
gpu: true
cuda: 11.0
python_version: "3.8"
system_packages:
- "libgl1-mesa-glx"
- "libglib2.0-0"
python_packages:
- "torchvision==0.10.0"
- "torch==1.9.0"
- "torchaudio==0.9.0"
- "numpy==1.19.4"
- "tqdm==4.62.2"
- "Pillow==8.3.2"
- "einops==0.3.2"
- "ftfy==6.0.3"
- "regex==2021.10.8"
- "imageio==2.10.3"
- "ipython==7.21.0"
- "torch-optimizer==0.3.0"
- "imageio-ffmpeg==0.4.5"
- "kornia==0.6.1"
- "pytorch-lightning==1.5.0"
- "omegaconf==2.1.1"
predict: "predict.py:Predictor"
3. 模型和资源管理
文件download_models.sh是一个用于下载预训练模型的 Bash 脚本。它会在指定的 checkpoints 目录中创建文件夹(如果尚不存在),并根据脚本中设置的选项自动下载相应的模型文件。用户可以通过修改脚本中的布尔变量来选择下载哪些模型,例如 IMAGENET_1024、IMAGENET_16384、GUMBEL 等。对于每个模型,脚本会检查相应的配置文件和检查点文件是否已存在,以避免重复下载。这使得用户在运行其他程序之前,能够方便地获取所需的模型资源。
#!/bin/bash
LOC=checkpoints # 指定模型下载目录
mkdir -p "$LOC" # 创建目录,如果已存在则不做任何操作
# 设置要下载的模型
IMAGENET_1024=false
IMAGENET_16384=true
GUMBEL=false
#WIKIART_1024=false
WIKIART_16384=false
COCO=false
FACESHQ=false
SFLCKR=false
# 下载 ImageNet 1024 模型
if [ "$IMAGENET_1024" = true ] ; then
# imagenet_1024 - 958 MB:
if [ ! -f "$LOC"/vqgan_imagenet_f16_1024.yaml ]; then
curl -L -o "$LOC"/vqgan_imagenet_f16_1024.yaml -C - 'https://heibox.uni-heidelberg.de/d/8088892a516d4e3baf92/files/?p=%2Fconfigs%2Fmodel.yaml&dl=1' #下载配置文件
fi
if [ ! -f "$LOC"/vqgan_imagenet_f16_1024.ckpt ]; then
curl -L -o "$LOC"/vqgan_imagenet_f16_1024.ckpt -C - 'https://heibox.uni-heidelberg.de/d/8088892a516d4e3baf92/files/?p=%2Fckpts%2Flast.ckpt&dl=1' #下载检查点文件
fi
fi
# 下载 ImageNet 16384 模型
if [ "$IMAGENET_16384" = true ] ; then
# imagenet_16384 - 980 MB:
if [ ! -f "$LOC"/vqgan_imagenet_f16_16384.yaml ]; then
curl -L -o "$LOC"/vqgan_imagenet_f16_16384.yaml -C - 'https://heibox.uni-heidelberg.de/d/a7530b09fed84f80a887/files/?p=%2Fconfigs%2Fmodel.yaml&dl=1' #下载配置文件
fi
if [ ! -f "$LOC"/vqgan_imagenet_f16_16384.ckpt ]; then
curl -L -o "$LOC"/vqgan_imagenet_f16_16384.ckpt -C - 'https://heibox.uni-heidelberg.de/d/a7530b09fed84f80a887/files/?p=%2Fckpts%2Flast.ckpt&dl=1' #下载检查点文件
fi
fi
# 下载 Gumbel 模型
if [ "$GUMBEL" = true ] ; then
# vqgan_gumbel_f8_8192 (was openimages_f16_8192) - 376 MB:
if [ ! -f "$LOC"/vqgan_gumbel_f8_8192.yaml ]; then
curl -L -o "$LOC"/vqgan_gumbel_f8_8192.yaml -C - 'https://heibox.uni-heidelberg.de/d/2e5662443a6b4307b470/files/?p=%2Fconfigs%2Fmodel.yaml&dl=1'
fi
if [ ! -f "$LOC"/vqgan_gumbel_f8_8192.ckpt ]; then
curl -L -o "$LOC"/vqgan_gumbel_f8_8192.ckpt -C - 'https://heibox.uni-heidelberg.de/d/2e5662443a6b4307b470/files/?p=%2Fckpts%2Flast.ckpt&dl=1'
fi
fi
# 下载 COCO 模型
if [ "$COCO" = true ] ; then
# coco - 8.4 GB:
if [ ! -f "$LOC"/coco.yaml ]; then
curl -L -o "$LOC"/coco.yaml -C - 'https://dl.nmkd.de/ai/clip/coco/coco.yaml' #下载配置文件
fi
if [ ! -f "$LOC"/coco.ckpt ]; then
curl -L -o "$LOC"/coco.ckpt -C - 'https://dl.nmkd.de/ai/clip/coco/coco.ckpt' #下载检查点文件
fi
fi
# 下载 FacesHQ 模型
if [ "$FACESHQ" = true ] ; then
# faceshq:
if [ ! -f "$LOC"/faceshq.yaml ]; then
curl -L -o "$LOC"/faceshq.yaml -C - 'https://drive.google.com/uc?export=download&id=1fHwGx_hnBtC8nsq7hesJvs-Klv-P0gzT' #下载配置文件
fi
if [ ! -f "$LOC"/faceshq.ckpt ]; then
curl -L -o "$LOC"/faceshq.ckpt -C - 'https://app.koofr.net/content/links/a04deec9-0c59-4673-8b37-3d696fe63a5d/files/get/last.ckpt?path=%2F2020-11-13T21-41-45_faceshq_transformer%2Fcheckpoints%2Flast.ckpt' #下载检查点文件
fi
fi
# 下载 WikiArt 16384 模型
if [ "$WIKIART_16384" = true ] ; then
# wikiart_16384 - 1 GB:
if [ ! -f "$LOC"/wikiart_16384.yaml ]; then
curl -L -o "$LOC"/wikiart_16384.yaml -C - 'http://eaidata.bmk.sh/data/Wikiart_16384/wikiart_f16_16384_8145600.yaml' #下载配置文件
fi
if [ ! -f "$LOC"/wikiart_16384.ckpt ]; then
curl -L -o "$LOC"/wikiart_16384.ckpt -C - 'http://eaidata.bmk.sh/data/Wikiart_16384/wikiart_f16_16384_8145600.ckpt' #下载检查点文件
fi
fi
# 其他模型(已注释)
#ade20k:
# curl -L -o ade20k.yaml -C - 'https://static.miraheze.org/intercriaturaswiki/b/bf/Ade20k.txt' #下载配置文件
# curl -L -o ade20k.ckpt -C - 'https://app.koofr.net/content/links/0f65c2cd-7102-4550-a2bd-07fd383aac9e/files/get/last.ckpt?path=%2F2020-11-20T21-45-44_ade20k_transformer%2Fcheckpoints%2Flast.ckpt' #下载检查点文件
#ffhq:
# curl -L -o ffhq.yaml -C - 'https://app.koofr.net/content/links/0fc005bf-3dca-4079-9d40-cdf38d42cd7a/files/get/2021-04-23T18-19-01-project.yaml?path=%2F2021-04-23T18-19-01_ffhq_transformer%2Fconfigs%2F2021-04-23T18-19-01-project.yaml&force' #下载配置文件
# curl -L -o ffhq.ckpt -C - 'https://app.koofr.net/content/links/0fc005bf-3dca-4079-9d40-cdf38d42cd7a/files/get/last.ckpt?path=%2F2021-04-23T18-19-01_ffhq_transformer%2Fcheckpoints%2Flast.ckpt&force' #下载检查点文件
#celebahq:
# curl -L -o celebahq.yaml -C - 'https://app.koofr.net/content/links/6dddf083-40c8-470a-9360-a9dab2a94e96/files/get/2021-04-23T18-11-19-project.yaml?path=%2F2021-04-23T18-11-19_celebahq_transformer%2Fconfigs%2F2021-04-23T18-11-19-project.yaml&force' #下载配置文件
# curl -L -o celebahq.ckpt -C - 'https://app.koofr.net/content/links/6dddf083-40c8-470a-9360-a9dab2a94e96/files/get/last.ckpt?path=%2F2021-04-23T18-11-19_celebahq_transformer%2Fcheckpoints%2Flast.ckpt&force' #下载检查点文件