在这篇文章中,我们将研究如何通过运行您自己的 AI 图像生成器进行设置。您需要一个带有支持 CUDA 的卡的 Linux 系统才能完成这项工作。我确实得到了在 Windows 中工作的基本 txt-2img 脚本。不幸的是,对于 7 月发布的检索增强扩散模型,您需要scann
才能索引 openimages 数据集,该数据集仅在 Linux 上可用。 WSL对我来说工作得很好。
以下是我收集到的您需要的大致内容:
= 32GB 内存
在浏览 AI 子版块时,我偶然发现了潜在扩散存储库。一些帖子提到了它,我不知道它是什么,所以我去谷歌搜索。
我不是计算机科学家、数学家,也不是真正理解这里发生的事情所需的任何东西。关于新 RAD 模型的论文是可以理解和有趣的,但除此之外我还没有做太多的研究。
潜在扩散有两种可能的图像生成技术。我们将安装并查看两者。
我相信我们将首先设置的 txt2-img 模型是我们习惯于使用其他在线图像生成工具的模型——它使超低分辨率图像剪辑认为是一个很好的即时匹配,并对其进行去噪和放大。
RAD 模型使用可配置的图像数据库作为参考,并像我们习惯的那样进行扩散。这似乎意味着它作为通用生成器不太好,但可以与您可以创建的特定训练集一起使用。我将来会试试这个。
RAD 还可以生成 768X768 的图像,令人印象深刻。
现在(重新)安装 Pytorch ,以免你以后陷入依赖地狱。我通过pip
做到了这一点,但 conda 也可以工作。
cd
进入 repo 并运行:
conda env create -f environment.yaml conda activate ldm
这将设置初始环境。如果您稍后遇到 Pytorch 错误并需要重新安装它,请返回 environment.yaml 并使用正确的包版本重新安装。
下载模型,只要您的 Torch 依赖项设置正确,您就可以开始使用了。
mkdir -p models/ldm/text2img-large/ wget -O models/ldm/text2img-large/model.ckpt https://ommer-lab.com/files/latent-diffusion/nitro/txt2img-f8-large/model.ckpt
您现在应该可以使用以下方法对图像进行采样:
python scripts/txt2img.py --prompt "my cool image"
确保查看您可以在自述文件中设置的选项。
您可以使用此 bash 脚本来更轻松地从 shell 运行所有内容。您可以将其包含在您的~/.bashrc
文件中并重新打开您的 shell。确保更改 3 条路径以满足您的需要。稍后我们将介绍 PLMS。
function txt2img() { if [ $# -eq 0 ]; then echo "Usage: diffuse '[prompt]' [--plms]" exit 1 fi cd /mnt/c/diffusion/latent-diffusion; conda activate ldm; if [ $2 = '--plms' ]; then python scripts/txt2img.py --prompt $1 --outdir '/mnt/g/My Drive/AI Image Tests/text2img' --plms --n_iter 4 --ddim_eta 0.0 else python scripts/txt2img.py --prompt $1 --outdir '/mnt/g/My Drive/AI Image Tests/text2img' --n_iter 4 --ddim_eta 0.0 fi }
图像默认为 512X512。您可以使用This Jupiter Notebook来放大图像,效果非常好。
htop
排除故障/查看内存使用情况。pip
和/或conda
手动安装正确的软件包版本(我都做了,但不确定是哪个使一切正常) 您可以在此处阅读有关 RDM 的更多信息。如前所述,据我了解,它本质上将图像数据库与剪辑描述与现有的扩散过程相结合。这部分需要更长的时间才能运行。
请注意,这个模型,尤其是在使用 openimages 训练时,最擅长重建真实的事物,而且看起来还不是很好(目前),并且可以从扩散模型中创建我们习惯的奇怪图像。
首先让 Text-to-Image 模型正常工作
安装新包并下载训练模型。
pip install transformers==4.19.2 scann kornia==0.6.4 torchmetrics==0.6.0 pip install git+https://github.com/arogozhnikov/einops.git mkdir -p models/rdm/rdm768x768/ wget -O models/rdm/rdm768x768/model.ckpt https://ommer-lab.com/files/rdm/model.ckpt
测试到目前为止一切正常
python scripts/knn2img.py --prompt "I'm a computer"
如果一切顺利,您应该会在 shell 中看到成功文本。现在我们需要下载所有图像索引/模型。 openimages zip 为 11GB。 ArtBench 数据非常小。
mkdir -p data/rdm/retrieval_databases wget -O data/rdm/retrieval_databases/artbench.zip https://ommer-lab.com/files/rdm/artbench_databases.zip wget -O data/rdm/retrieval_databases/openimages.zip https://ommer-lab.com/files/rdm/openimages_database.zip unzip data/rdm/retrieval_databases/artbench.zip -d data/rdm/retrieval_databases/ unzip data/rdm/retrieval_databases/openimages.zip -d data/rdm/retrieval_databases/ mkdir -p data/rdm/searchers wget -O data/rdm/searchers/artbench.zip https://ommer-lab.com/files/rdm/artbench_searchers.zip unzip data/rdm/searchers/artbench.zip -d data/rdm/searchers
我们现在已经准备好使用 Artbench 模型(在我有限的测试中工作得很好),但我们真正想要的是使用大量的 openimages 模型作为我们的参考。我们下载了数据,但我们需要创建索引。
如果要测试 Artbench 数据库,请运行
python scripts/knn2img.py --prompt "A blue pig" --use_neighbors --knn 20
除非你有一台超级计算机,否则 python 多处理中糟糕的内存管理(据我所知)将阻止我们使用我们使用 repo 中的脚本解压缩的 4 个文件来索引它们。我尝试过的所有其他方法都会耗尽内存。
幸运的是,我们只需要连接文件。如果您愿意,您可以在之后删除旧的零件文件。我们还需要将零件文件移出 openimages 文件夹。
cd data/rdm/retrieval_databases/openimages/ cat 2000000x768_part1.npz 2000000x768_part2.npz 2000000x768_part3.npz 2000000x768_part4.npz > 2000000x768.npz mv 2000000x768_* ~/temp cd ../../../../
现在,当我们运行训练脚本时,我们不应该耗尽内存。我认为这是他们在训练脚本中的多文件功能中的一些问题。
python scripts/train_searcher.py
我们需要在scripts/knn2img.py
中更改批处理大小,这样我们就不会耗尽 GPU 内存。您可能需要降低到 1,但我可以在 3090 上设置为 2。
在编辑器中打开scripts/knn2img.py
转到第 243 行或找到“n_samples”
将默认值更改为 1 或 2 并保存
您也可以使用命令行参数执行此操作,但由于它对我不起作用,我想更改默认值。请注意,如果您将来更新存储库,这可能会被覆盖。
现在我们可以使用 openimages 数据库生成 RDM 图像:
python scripts/knn2img.py --prompt "A blue pig" --database openimages --use_neighbors --knn 20
这是一个~/.bashrc
脚本,可以方便地运行它。同样,请确保更改 3 条路径以满足您的需求:
function diffuse() { if [ $# -eq 0 ]; then echo "Usage: diffuse '[prompt]' [--plms]" exit 1 fi cd /mnt/c/diffusion/latent-diffusion; conda activate ldm; if [ $2 = '--plms' ]; then python scripts/knn2img.py --database openimages --prompt $1 --use_neighbors --outdir '/mnt/g/My Drive/AI Image Tests/RDM' --knn 20 --plms else python scripts/knn2img.py --database openimages --prompt $1 --use_neighbors --outdir '/mnt/g/My Drive/AI Image Tests/RDM' --knn 20 fi }
您还可以通过创建文件(在本例中为prompts.txt
)并使用–from-file
参数将脚本指向它来批量运行提示,如下所示
python scripts/knn2img.py --database openimages --from-file ./prompts.txt --use_neighbors --outdir '/mnt/g/My Drive/AI Image Tests/RDM' --knn 20
示例prompts.txt
prompt 1 prompt 2 prompt 3
如果您运行大量查询,这应该可以节省大量时间,因为模型只加载一次。文本到图像模型没有此选项。
以下是打开和关闭 PLMS 的两种模型的一些初始结果。 PLMS 应该让事情运行得更快。目前,我们不会测量速度的提高,但会主观地查看图像质量/结果。
由于 RDM 模型一次只能为我的系统制作 2 张照片,因此我为该模型包含了两张照片而不是网格。
我几乎肯定会在未来进行更具体的测试,这些模型将包含在未来的比较帖子中。
山上的木屋,风景摄影
文字转图片
没有plms | 带plms |
---|---|
RDM
没有plms | 带plms |
---|---|
一个紫色停车标志
文字转图片
没有plms | 带plms |
---|---|
RDM
没有plms | 带plms |
---|---|
狐狸窝,数字艺术
文字转图片
没有plms | 带plms |
---|---|
RDM
没有plms | 带plms |
---|---|
赢得大比赛,获奖摄影
文字转图片
没有plms | 带plms |
---|---|
RDM
没有plms | 带plms |
---|---|
一辆在沙丘上行驶的跑车
文字转图片
没有plms | 带plms |
---|---|
RDM
没有plms | 带plms |
---|---|
有了它 - 没有更多的积分或每月限制,只需您自己的纯 AI 图像生成。一旦我弄清楚了一些调整设置并创建了我自己的图像训练数据库,我们可能会再次讨论这个问题。
希望通过一些调整和新版本/模型,这将更接近 DALL-E 的 WOW 因素。
也在这里发布。