paint-brush
创建你自己的人工智能具有潜在扩散的图像生成器经过@lanolinoil
3,839 讀數
3,839 讀數

创建你自己的人工智能具有潜在扩散的图像生成器

经过 Lanolinoil9m2022/08/16
Read on Terminal Reader
Read this story w/o Javascript

太長; 讀書

使用 CUDA、大量磁盘空间和大量内存运行您自己的文本到图像提示。您需要一个带有支持 CUDA 的卡的 Linux 系统才能完成这项工作。潜在扩散有两种可能的图像生成技术。我们将安装并查看我们将设置的 txt-2img 和 txt2-img 模型。 RAD 模型使用图像数据库,并对其进行压缩和升级为可配置的参考。这似乎意味着它作为通用目的不太好,但可以与特定的训练集一起使用。

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - 创建你自己的人工智能具有潜在扩散的图像生成器
Lanolinoil HackerNoon profile picture

DALL-E 自制

在这篇文章中,我们将研究如何通过运行您自己的 AI 图像生成器进行设置。您需要一个带有支持 CUDA 的卡的 Linux 系统才能完成这项工作。我确实得到了在 Windows 中工作的基本 txt-2img 脚本。不幸的是,对于 7 月发布的检索增强扩散模型,您需要scann才能索引 openimages 数据集,该数据集仅在 Linux 上可用。 WSL对我来说工作得很好。


狗狮子 - rdm模型

狗狮子 - rdm模型

狗狮子 - rdm模型

狗狮子 - rdm模型

以下是我收集到的您需要的大致内容:

  • Linux(WSL 很好)
  • 11.3 CUDA 图形
  • = 32GB 内存

  • 50GB 磁盘空间(~30GB 没有 openimages)
  • 3xxx 系列卡(我只是在这里猜测。这都是用 3090 FE 完成的)

潜扩散

在浏览 AI 子版块时,我偶然发现了潜在扩散存储库。一些帖子提到了它,我不知道它是什么,所以我去谷歌搜索。


我不是计算机科学家、数学家,也不是真正理解这里发生的事情所需的任何东西。关于新 RAD 模型的论文是可以理解和有趣的,但除此之外我还没有做太多的研究。

image-20220807154208076

文本到图像与 RAD

潜在扩散有两种可能的图像生成技术。我们将安装并查看两者。


我相信我们将首先设置的 txt2-img 模型是我们习惯于使用其他在线图像生成工具的模型——它使超低分辨率图像剪辑认为是一个很好的即时匹配,并对其进行去噪和放大。


RAD 模型使用可配置的图像数据库作为参考,并像我们习惯的那样进行扩散。这似乎意味着它作为通用生成器不太好,但可以与您可以创建的特定训练集一起使用。我将来会试试这个。


RAD 还可以生成 768X768 的图像,令人印象深刻。

在海滩的巨型哈密瓜

在海滩的巨型哈密瓜


安装说明

文字转图像

  • 确保你已经安装了CUDA 11.3并且conda在你的 shell 中工作。你可以在这里得到康达

  • 现在(重新)安装 Pytorch ,以免你以后陷入依赖地狱。我通过pip做到了这一点,但 conda 也可以工作。

  • 将 repo 克隆到具有大量可用空间的驱动器

  • 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来放大图像,效果非常好。

故障排除

  • 如果您在运行命令时遇到 CUDA 内存错误,请尝试减小批处理大小。使用htop排除故障/查看内存使用情况。
  • 如果使用 WSL,请确保您的所有 RAM 都可用于 linux。
  • 如果您遇到与 torch 相关的错误,您可能需要重新安装 Pytorch。这可能会导致软件包出现其他问题。检查 environment.yaml 并使用pip和/或conda手动安装正确的软件包版本(我都做了,但不确定是哪个使一切正常)

image-20220807155754576

image-20220807155807229


RDM

您可以在此处阅读有关 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 

image-20220807155912575

image-20220807155927854


开放图像索引

除非你有一台超级计算机,否则 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 的两种模型的一些初始结果。 PLMS 应该让事情运行得更快。目前,我们不会测量速度的提高,但会主观地查看图像质量/结果。

由于 RDM 模型一次只能为我的系统制作 2 张照片,因此我为该模型包含了两张照片而不是网格。

我几乎肯定会在未来进行更具体的测试,这些模型将包含在未来的比较帖子中。


山上的木屋,风景摄影

文字转图片

没有plms

带plms

image-20220807150052836

image-20220807153545252


RDM

没有plms

带plms

image-20220807145854952

image-20220807145920778

image-20220807145911367

image-20220807145931866


一个紫色停车标志


文字转图片

没有plms

带plms

image-20220807154729984

image-20220807153711466

RDM

没有plms

带plms

image-20220807150500598

image-20220807153000850

image-20220807151421393

image-20220807153013778


狐狸窝,数字艺术

文字转图片

没有plms

带plms

image-20220807155228088

image-20220807155634227


RDM

没有plms

带plms

image-20220807151441359

image-20220807152859265

image-20220807152235267

image-20220807152911615


赢得大比赛,获奖摄影

文字转图片

没有plms

带plms

image-20220807160007336

image-20220807160228471

RDM

没有plms

带plms

image-20220807151456027

image-20220807152928304

image-20220807152216729

image-20220807152940229


一辆在沙丘上行驶的跑车

文字转图片

没有plms

带plms

image-20220807160557241

image-20220807160838768

RDM

没有plms

带plms

image-20220807151401781

image-20220807152825508

图像-20220807152200386

image-20220807152839511


一个可以调用你自己的图像生成器

有了它 - 没有更多的积分或每月限制,只需您自己的纯 AI 图像生成。一旦我弄清楚了一些调整设置并创建了我自己的图像训练数据库,我们可能会再次讨论这个问题。


希望通过一些调整和新版本/模型,这将更接近 DALL-E 的 WOW 因素。

披着红色斗篷的熊猫


也在这里发布。