Aphantasia 是一个文本到图像/视频生成工具集合,源自同名艺术作品。它基于 OpenAI 的 CLIP 模型和 Lucent 库,使用 FFT/DWT/RGB 参数化器,无需 GAN 即可生成图像。该项目已更新,将旧的深度估计方法替换为 Depth Anything 2,并在 Python 3.7-3.11 和 PyTorch 1.7.1 至 2.3.1 上测试通过。
主要能力
- 生成大量详细纹理,类似 deepdream 效果。
- 支持全高清/4K 及以上分辨率。
- 支持多种 CLIP 模型。
- 连续模式处理短语列表(例如为歌词配图)。
- 支持平移/缩放运动,具有平滑插值。
- 直接 RGB 像素优化(非常稳定)。
- 基于 Depth Anything 2 的 3D 外观。
- 复杂查询:文本和/或图像作为主要提示,可分别设置风格提示和要减去(避免)的主题提示。
- 可从保存的参数或图像开始/恢复生成过程。
使用方式 安装 CLIP 等依赖后,可通过命令行生成图像。例如,从文本提示生成图像(可设置尺寸):
python aphantasia.py --in_txt "prompt" --size 512
重现图像:
python aphantasia.py --in_img image.jpg
如果 --sync X 参数大于 0,会添加 LPIPS 损失以保持构图与原始图像相似。可以组合文本和图像提示。对于非英语语言,使用 --translate(谷歌翻译)。
设置更具体的查询:
python aphantasia.py --in_txt "good prompt :1 | also good prompt :1 | bad prompt :-0.5"
其他选项:
--model M选择 CLIP 视觉模型:ViT-B/32(默认)、ViT-B/16、RN50、RN50x4、RN50x16、RN101。也可设置--dualmod同时使用 ViT-B/32 和 ViT-B/16(推荐)。--dwt切换到 DWT(小波)生成器而非 FFT。有几种方法,由--wave X选择,例如 db2、db3、coif1、coif2 等。--align XX关于构图(或采样分布):uniform 可能最合适;overscan 可制作半无缝可平铺纹理。--steps N设置迭代次数。100-200 足够入门;500-1000 会更精细。--samples N设置每步处理的图像切割(样本)数量。样本越多,可用更少迭代达到类似结果(反之亦然)。200/200 是不错的猜测。注意:GPU 内存主要被此数量消耗(而非分辨率)!--aest X通过美学损失增强整体可爱度。尝试各种值(可能为负)。--decay X(构图柔和度)、--colors X(饱和度)和--contrast X可能有用,尤其对 ResNet 模型(它们容易烧色)。--sharp X可能有助于增加锐度,如果增加 decay 后图像变得“近视”。它会影响其他颜色参数,最好一起调整!当前默认值:--decay 1.5 --colors 1.8 --contrast 1.1 --sharp 0。--transform X应用一些增强,通常能提升结果(但更慢)。有几种选择;fast 似乎最优。--optimizer可以是 adam、adamw、adam_custom 或 adamw_custom。自定义选项更嘈杂但稳定;纯 adam 更柔和,但可能倾向于彩色模糊。--invert反转整个标准,如果你想检查“完全相反”。--save_pt myfile.pt保存 FFT/DWT 参数,以便下次查询用--resume myfile.pt恢复。也可以直接从图像文件开始/恢复。--opt_step N告诉每第 N 帧保存(对高迭代有用,默认 1)。--verbose(默认开启)启用一些打印输出和实时图像预览。
一些实验性技巧(效果不太确定):
--enforce X通过增强两个并行样本之间的相似性来添加更多细节。好的起始值约 0.1。--expand X通过强制前/后样本之间的差异来增加多样性。好的起始值约 0.3。--noise X向参数添加一些噪声,可能使构图不那么堵塞(在一定程度上)。--macro X(0 到 1)将生成转向更大的形式和更少分散的构图。不应太接近 1,因为质量取决于样本的多样性。--prog设置渐进学习率(从 lrate 设置的 0.1 倍到 2 倍)。在某些情况下可能促进宏观形式的创建。--lrate控制学习率。范围相当宽(至少在 0.001 到 10 之间测试过)。
文本到视频 [连续模式] 有两种从文本文件制作视频的方法,逐行处理,一次完成。
新方法:将主题插值为恒定流,具有永久平移/缩放运动和可选的 3D 外观。 从两个文本文件制作视频,逐行处理,每行渲染 100 帧:
python aphantasia.py --in_txt file1.txt --in_txt2 file2.txt --steps 100
从两个短语制作视频,总长度 500 帧:
python aphantasia.py --in_txt "phrase1" --in_txt2 "phrase2" --steps 500
前缀(-pre)、后缀(-post)和“停用词”(--in_txt0)也可以作为短语或文本文件加载。所有文本输入都理解带权重的语法,如 good prompt :1 | also good prompt :1 | bad prompt :-0.5(在一行内)。也可以使用图像作为参考,通过 --in_img 参数。探索其他参数以获得更明确的控制。此方法最适合直接 RGB 像素优化,但也可用于 FFT 参数化:
python aphantasia.py --in_txt file.txt --dwt
要添加 3D 外观,在命令中添加 --depth 0.01。
为每个文本行生成单独的图像(带有序列和训练视频,如上面的单图像模式),然后从这些图像渲染最终视频(在 FFT 空间中混合图像),长度为 duration 秒。 从文本文件制作视频,逐行处理:
python aphantasia.py --in_txt file.txt --steps 100 --duration 10
有 --keep X 参数,控制下一行/图像生成跟随前一个的程度。0 表示随机初始化,越高则越严格保持原始构图。安全值为 1~2(更高的数字可能导致图像卡住)。
从保存的 *.pt 快照目录制作视频(仅插值):
python aphantasia.py --in_pt dir
其他生成器
- VQGAN from Taming Transformers:颜色/色调/细节的最佳方法之一(尤其是新的 Gumbel-F8 模型);但分辨率相当有限(在 Colab 上最大约 800x600)。
- CPPN + 导出到 HLSL 着色器:最早的方法之一,可导出到 TouchDesigner、vvvv、Shadertoy 等。
- SIREN + 傅里叶特征调制:另一种早期方法,本身不太有趣。
适用场景
- 生成大量详细纹理,类似 deepdream 效果。
- 制作全高清/4K 及以上分辨率的图像。
- 为歌词等短语列表配图,生成连续视频。
- 需要复杂查询(文本和/或图像提示)的图像生成。
- 从保存的参数或图像恢复生成过程。
限制
- 需要安装 CLIP 等依赖,具体安装步骤未在资料中提供。
- 测试环境为 Python 3.7-3.11 和 PyTorch 1.7.1 至 2.3.1,其他版本可能不兼容。
- GPU 内存消耗主要受
--samples数量影响,而非分辨率。 - 某些实验性技巧效果不确定。
- VQGAN 生成器分辨率有限。
致谢 基于 OpenAI 的 CLIP 模型(论文)。FFT 编码取自 Lucent 库,3D 深度处理由 deKxi 完成。感谢 Ryan Murdock、Jonathan Fly、Hannu Toyryla、@eduwatch2、torridgristle 提供的想法。