/Deforum Stable Diffusion v0.4使用指南中文版

Deforum Stable Diffusion v0.4使用指南中文版

昨天的文章《AI国画进阶:如何训练Stable Diffusion画出高质量的国画!》发布后,有用户留言问能不能再讲讲Deforum的动画功能,其实前面已经有几篇谈论Deforum制作动画的文章了,分别是《开源后新功能:使用Stable Diffusion进行动画创作!》《让虚拟人开口说话,Stable Diffusion如何使用输入的视频生成动画?》《使用Deforum Stable Diffusion制作插值动画:居住的历史!》,这三篇文章分别对应2D动画、视频输入动画、插值动画,3D动画视频号里虽然发布过视频,但没有专门写文章讲过。

虽然我都尝试过各个功能了,但实在是新鲜功能层出不穷,因此也都是浅尝则止,很多功能和参数也没仔细研究,正好看到Deforum发布了方使用指南,看了一下,很多参数我的理解也还有误,有时间还是要仔细看看。因为有些朋友访问外网不便,所以直接用谷歌机翻了一下,推荐给大家阅读。现在的机翻效果其实非常好了,尤其对这种IT使用指南类的,很少会出现翻译出来阅读怪异的。

这篇官方指南详细讲解了配置使用Deforum Stable Diffusion的全过程,非常适合初次接触的朋友对照使用。

因为文中涉及到几个链接,所以把中英文版附在下面,英文版保持原始地址,方便跟踪官方的后续更新,中文版放在阿里云盘,需要的可以自取:

英文版(地址已失效,新地址见评论)

https://docs.google.com/document/d/1l-yhtjSdV5ph6-BNZlYLR58T9lGebjJdNGjCXUiz-RE

中文版:

https://www.aliyundrive.com/s/aaQgreBiaMc

————下面是指南的正文————

Deforum v0.4快速指南

-foxxie -huemin

艺术作者:neuro @ https://twitter.com/neurodiculous

此快速用户指南旨在作为 Deforum 笔记本中不同方面和项目的 LITE 参考。它适用于 2022 年 9 月 11 日发布的版本 04

虽然本参考指南包含对参数的不同解释,但不能用作完整的故障排除资源。鼓励用户探索和创造自己的风格,使用本指南作为指南针来帮助他们更好地获得灵感。使本指南有效的最佳方法是与社区分享您的发现和经验!-ScottieFox

AI 艺术界正在迅速发展。轻松阅读本指南。方法、模型和笔记本都会改变。本指南中的所有信息都将变得无关紧要。悲伤但真实:'(  -huemin

在开始之前!

需要一个 huggingface帐户,下载 .ckpt 文件,并将文件放在 Google Drive 中Deforum Stable Diffusion 笔记本要求用户正确下载模型权重 (~4GB)将模型权重链接到 Colab Notebook。以下步骤将引导您下载模型权重并将其上传到谷歌驱动器:

  1. 转到 https://huggingface.co 并注册创建一个帐户

  1. 登录您的帐户后,导航到 https://huggingface.co/CompVis。在这里您将看到所有可供下载的检查点都标有“-original”。

  1. 从“CompVis”库中选择一个“-original”模型(stable-diffusion-v-1-4 -original) 并下载权重。您需要接受使用条款。在撰写本文时, sd-v1-4.ckpt 是最好的模型。

  1. 在您等待模型下载到您的计算机时,打开Deforum Notebook 并通过单击播放按钮运行“模型和输出路径”单元格。使用此单元格将为您的 Google Drive 配置正确的文件夹和文件结构。或者,您可以在您的 google 驱动器上创建以下文件夹:

  1. 下载完成后,您需要将模型权重上传到此模型文件夹。

  1. 准备好出发!

笔记本概述

https://colab.research.google.com/github/deforum/stable-diffusion/blob/main/Deforum_Stable_Diffusion.ipynb

1. 设置

NVIDIA GPU:

  • 代码在运行时将显示有关分配的 GPU 的信息。

此单元格将为您提供有关您在运行会话中连接到的 gpu 的信息。扩散通常会大量使用 VRAM(视频 RAM)来渲染图像。Colab GPU 层级列表从最佳到最差:A100(40GB VRAM)、V100(16GB VRAM)、P100(16GB VRAM)、T4、K80。

模型和输出路径:

  • models_path:-在运行时查找上传的模型

  • output_path:-将图像/文件定向到运行时

Google Drive 路径变量(可选):

  • mount_google_drive ,选择时会将路径重定向到驱动器而不是运行时

  • models_path_gdrive , Google Drive 上模型的位置(默认 /content/drive/MyDrive/AI/models)

  • output_path_gdrive,要在 Google Drive 中输出的图像/文件的位置

Notebook 需要定义以下路径变量:models_path 和 output_path。这些位置将分别用于访问稳定扩散 .pth 模型权重并保存扩散输出渲染。可以选择在本地或 Google Drive 上使用路径。如果您希望使用 Google 驱动器上的路径,mount_google_drive 必须为 True。Gdrive将提示您访问您的驱动器,以读取/写入/保存图像。

设置环境:

  • setup_enviroment ,选中后将构建环境来处理 pip/installs

  • print_subprocess,选择显示正在拉取和构建的项目

运行此单元将下载 github 存储库,导入 python 库,并创建必要的文件夹和文件以配置稳定扩散模型.有时可能会出现设置环境单元无法正确加载的问题,并且在开始运行时会遇到错误。验证设置环境单元已运行且没有任何错误。

Python 定义:

  • 将函数和定义拉入/点入/安装到构建环境中供以后在运行期间使用

  • 定义库中的变量并将它们加载到运行时

运行此单元将定义继续制作图像所需的函数。验证 Python 定义单元已运行且没有任何错误。

选择并加载模型:

  • model_config ,:指令文件类型:默认 .yaml 或自定义选项

  • model_checkpoint ,要与下载的 .ckpt 文件

  • ,除非打算使用自定义 .yaml 文件

  • custom_checkpoint_path,否则为空白,除非使用,否则为空白未列出 

  • load_on_run_all 的 .cpkt 文件,选中后将成为 RUN ALL 函数 check_sha256 的包含单元

  • ,将与校验和(检查文件完整性的哈希值)

  • map_location 进行比较,利用 GPU [默认] 上的 CUDA 内核,或使用 CPU [慢] (不推荐)

为了加载 Stable Diffusion 模型,Colab 需要知道在哪里可以找到 model_config 文件和 model_checkpoint。model_config 文件包含有关模型架构的信息。model_checkpoint 包含与模型架构相对应的模型权重。对于故障排除,请验证配置和权重路径变量是否正确。默认情况下,笔记本期望模型配置和权重位于 model_path 中。您可以通过在 model_config 和 model_checkpoint 下拉菜单中选择“自定义”来提供自定义模型权重和配置路径。有时下载模型权重时会出现问题并且文件已损坏。check_sha256 函数将验证模型权重的完整性,并让您知道它们是否可以使用。map_location 允许用户指定加载模型权重的位置。对于大多数 colab 用户来说,默认的“GPU”地图位置是最好的。


2. 设置

2a.动画设置

动画模式:

  • animation_mode , none, 2D, 3D, Video Input, Interpolation

  • NONE, 选中后,将忽略动画模式下的所有功能,并按照提示列表的规定输出一批相互不相关的连贯图像。使用的提示将遵循非预定、非动画列表。要生成的图像数量在后面的“n_batches”下的单元格中定义。

  • 2D:选中时将忽略“无模式”提示,并参考之前带有帧号的计划提示。2D 模式将尝试将在一系列连贯输出中产生的图像串起来。要创建的输出图像的数量由“max_frames”定义。控制 2D 模式的运动算子如下:“边框、角度、缩放、translation_x、translation_y、noise_schedule、 contrast_schedule、color_coherence、diffusion_cadence 和保存深度图”。其他动画参数在 2D 模式下无效。Resume_from_timestring 在 2D 模式下可用。(下面有更多详细信息)

  • 3D,选择后将忽略“无模式”提示,并参考前面带有帧号的计划提示。3D 模式将尝试将在一系列连贯输出中生成的图像串起来。要创建的输出图像的数量由“max_frames”定义。控制 3D 模式的运动算子如下:

“Border、translation_x、translation_y、rotation_3d_x、rotation_3d_y、rotation_3d_z、noise_schedule、contrast_schedule、color_coherence、diffusion_cadence、3D depth warping、midas_weight、fov、padding_mode、sampling_mode 和 save_depth_map。Resume_from_timestring 在 3D 模式下可用。(下面有更多详细信息)

  • video_input, 选中后,将忽略所有运动参数并尝试引用加载到运行时的视频,由 video_init_path 指定。视频输入模式将忽略“无模式”提示,并参考之前带有帧号的计划提示。在 video_input 模式下,“Max_frames”被忽略,而是跟随从视频长度中提取的帧数。笔记本会将视频中的图像作为要影响的引用字符串填充到选定的驱动器中。从视频中提取的帧数基于“extract_nth_frame”。默认值为 1 将提取视频的每一帧。值 2 将每隔一帧跳过一次。3 或更高的值将有效地在这些帧之间跳过,从而产生更短的图像批次。目前,video_input 模式将忽略所有其他的相干性参数,并且只影响每一帧。Resume_from_timestring 不适用于 Video_Input 模式。 

  • 插值, 选中后,将忽略所有其他运动和连贯性参数,并尝试在列出的动画提示之间混合输出帧,并在它们之前列出计划帧编号。如果 interpolate_key_frame 模式被选中,输出帧的数量将遵循您的提示时间表。如果未选中,则插值模式将遵循“interpolate_x_frames”指定的均匀帧调度,而不管提示编号如何。默认值 4 将在提示之间产生四帧插值。

动画参数:

  • animation_mode,选择动画类型(见上)

  • max_frames,指定输出

  • 边框,控制当图像小于帧时要生成的像素的处理方法。“Wrap”从图像的相对边缘拉出像素,而“Replicate”重复像素的边缘并扩展它们。具有快速运动的动画可能会产生“线条”,该边框功能试图将像素填充到创建的空白空间中。

运动参数:

为单位移动画布的指令

  • 角度的度数顺时针/逆时针旋转画布

  • 缩放,2D 运算符缩放画布大小,乘法 [static = 1.0]

  • translation_x,2D 和 3D以每帧像素为单位向左/向右移动画布

  • translate_y,以每帧像素为单位向上/向下移动画布的

  • translate_z,用于将画布移向/远离视图的 3D 操作符 [由 FOV 设置的速度]

  • rotation_x,3D 操作符到向上/向下倾斜画布,以每帧角度为

  • rotation_y,以每帧角度为单位向左/向右平移画布的

  • roation_z用于顺时针/逆时针滚动画布的 3D 操作

  • 3D员前一帧影响下一帧,还控制以下公式中的步骤 [steps - (strength_schedule * steps)] (更多细节见:“steps”)

  • contrast_schedule,调整 t每帧的整体对比度 [默认中性为 1.0]

一致性:

  • color_coherence,在 NONE、LAB、HSV、RGB 之间选择

    • LAB:感知 HSV亮度* A * B 轴色彩平衡(搜索“cielab”

    • 色调 饱和V价值色彩平衡。

    • RGBRed Green & Blue 色彩平衡。

颜色一致性将尝试对整个像素颜色信息进行采样,并对在第 0 帧中分析的那些值进行趋势分析,以应用于未来的帧。LAB 是一种更线性的方法来模拟人类对色彩空间的感知——对于大多数用户来说,这是一个很好的默认设置。

HSV 是平衡鲜艳色彩存在的好方法,但可能会产生不切实际的结果 - (即蓝色苹果)RGB 有利于在每个红色、绿色和蓝色通道中强制执行无偏差的颜色量 - 如果采样,某些图像可能会产生彩色伪影太低了。

  • 扩散,控制受扩散影响的帧的频率 [1-8]

扩散节奏将尝试按照运动参数中指定的 2D 或 3D 运动时间表,同时在指定的帧上执行扩散。默认设置为 1 将导致每一帧在图像输出序列中接收扩散。设置为 2 只会在每隔一帧扩散,但运动仍然有效。节奏序列期间的图像输出将自动混合、相加并保存到指定的驱动器。这可能会改善某些工作流程中的连贯性错觉,因为图像的内容和上下文在跳过的帧期间不会改变或扩散。4-8 cadence 的较高值将跳过较大数量的帧,并且仅扩散由扩散_cadence 值设置的“第 N”帧。这可能会在动画中产生更多的连续性,但代价是几乎没有机会添加更多分散的内容。在极端示例中,帧内的运动将无法产生多样化的提示语境,并且空间将充满线条或近似内容 - 导致意想不到的动画模式和伪影。视频输入和插值模式不受扩散节奏的影响。 

3D 深度扭曲:

  • use_depth_warping,启用指令以仅在 3D 模式下动态扭曲图像。

  • midas_weight,设置要绘制深度图的中点:范围 [-1 到 +1] fov ,通过 deforum 中

  • 调整画布在 3D 中移动的

FOV(视野/视野)将给出关于 translation_z 值如何影响画布的具体说明。范围是 -180 到 +180。该值遵循曲线的平方反比定律,即未定义 0 FOV 并将产生空白图像输出。180 的 FOV 将展平并放置画布平面与视图对齐,导致 Z 方向没有运动。FOV 的负值将导致 translate_z 指令反转,沿与 Z 平面相反的方向移动,同时保留其他正常功能。默认值为 30 fov,而值为 100 将导致 Z 方向上的过渡更多平稳而缓慢。每种类型的艺术和背景都将从不同的 FOV 值中受益。(例如,“苹果的静物照片”与“有植物的大房间”的反应不同)

FOV 还提供了有关如何解释 midas 深度图的说明。深度图(灰度图像)的像素值范围将根据 FOV 进行拉伸或压缩,这样 3D 的错觉在较低的 FOV 值下更明显,在接近 180 的值下更浅。全 FOV 为 180,没有感知深度,因为 Midas 深度图已被压缩到单个值范围。 

  • padding_mode指示在视野之外的像素进入场景时对其进行处理。“边框”将尝试使用画布的边缘作为要绘制的像素。“反射”将尝试近似图像和平铺/重复像素,而“零”不会添加任何新的像素信息。 

  • sampling_mode,从 Bicubis、Bilinear 或 Nearest 模式中选择。

图像处理中选择双三次插值而不是双线性或最近邻插值 图像重采样,当速度不是问题时,与仅考虑 4 个 像素 (2×2) 的双线性插值相比,双三次插值考虑 16 个像素 (4×4)。使用双三次插值重采样的图像更平滑,插值 伪影

  • save_depth_map,将在输出图像旁边输出灰度深度图图像。

视频输入:

  • video_init_path,您的视频文件所在的目录,仅适用于视频输入模式。

  • extract_nth_frame,在运行序列期间,只有由该值指定的帧才会被提取、保存和扩散。值 1 表示要考虑每一帧。值 2 将每隔一帧用于序列。较高的值将分别跳过该数量的帧。

插值:

  • interpolate_key_frames,选择是否忽略提示调度或_x_frames。

  • interpolate_x_frames,提示之间过渡的帧数(当 interpolate_key_frames = true 时,动画提示前面的数字将根据其值动态引导图像。如果设置为 false,将忽略提示数字并强制 interpole_x_frames 值不考虑提示号)

恢复动画:

  • resume_from_timestring,指示运行从指定点开始

  • resume_timestring,恢复时需要参考的时间戳 

目前仅在 2D 和 3D 模式下可用,时间戳也保存为设置 .txt 文件名作为您上次运行期间生成的图像。格式如下:

yyyymmddhhmmss - 运行开始扩散的时间戳。

2b。提示

在上面的示例中,我们有两组提示:顶部的静止帧 *prompts* 和下面的动画提示。在“NONE”动画模式下,扩散将寻找最上面的一组提示来生成图像。在所有其他模式下(2D、3D 等),扩散将参考第二个较低的提示组。

仔细注意这些提示的语法对于能够运行扩散至关重要。

对于静止帧图像输出,数字不要放在提示符前面,因为在一批图像期间不需要“调度”。上述提示将生成并显示森林图像和女性的单独图像,作为输出。 

在 2D//3D 动画运行期间,将按指定引用带有提示编号的较低组。在上面的示例中,我们从第 0 帧开始:- 生成了一个苹果图像。随着帧的进展,它仍然是一个苹果输出,直到第 20 帧出现,此时扩散现在将被引导开始包括一个香蕉作为主要主题,最终取代以前不再引用的苹果。 

然而,插值模式将以这样一种方式“补间”提示,首先,从提示列表中生成一张图像。将画出一个苹果、香蕉、椰子和榴莲。然后扩散开始绘制应该存在于提示之间的框架,制作苹果和香蕉的混合体 - 然后继续填补香蕉和椰子之间的空白,最后解决并停止在最后一个榴莲图像上,作为它的目的地。(请记住,这种独占模式会忽略 max_frames 并改为绘制 interpolate_key_frame/x_frame 时间表。 

对于提示应包含的内容,存在许多资源。由您,梦想家来选择您认为属于您的艺术的项目。目前,提示权重尚未在 deforum 中实现,但遵循模板应该会产生公平的结果:

            [Medium] [Subject] [Artist] [Details] [Repository]

Ex. “A Sculpture of a Purple Fox by Alex Grey,带有微小的装饰品, 在 CGSociety 上流行”,


3. 运行

图像设置:

  • W,以像素为单位定义最终图像的输出宽度

  • H,以像素为单位定义最终图像的输出高度,输出中的

尺寸必须是 64 像素的倍数否则,分辨率将向下舍入到最接近的兼容值。适当的值 128、192、256、320、384、448、512、576、640、704、768、832、896、960、1024。建议使用高于这些值的值设置是可能的,但可能会产生 OOM(内存不足)问题,a以及不正确的midas计算。该模型是在 512x512 数据集上训练的,因此必须将其扩散扩展到此“足迹”之外以覆盖画布大小。结果,一幅宽阔的风景图像可能会并排产生 2 棵树,或者天空两侧可能会产生 2 个卫星。高大的肖像图像可能会产生堆叠而不是居中的面孔。 

采样设置:

  • 种子,特定确定性结果的起点,(-1 = 随机起点)

  • 采样器,从潜在空间编码和解码图像的方法

    • klms = Kernel Least Mean Square

    • dpm2 = Denoise Probabilistic Model

    • dpm2_Ancestral =具有反向采样路径

    • dpm2 heun = 由 Karl Heun(数学和导数求解)在 Euler 基础上创立

    • euler =  分数阶各向异性去噪(欧拉-拉格朗日方程)

    • euler_ancestral = Euler 的反向采样路径

    • plms = 预训练语言模型

    • ddim = 去噪扩散概率模型

  • 步骤,用于模型达到其提示的迭代次数

考虑到在一帧中,模型将尝试在该帧的最后一步达到其提示。通过添加更多步骤,随着模型接近完成,帧被分割成更小的增量。更高的步骤将以时间为代价向输出添加更多定义特征。较低的值将导致模型冲向其目标,在您的提示下提供模糊的尝试。超过一定的值,如果模型达到了它的及时性,进一步的步骤对最终输出的影响很小,但时间仍然是一种浪费的资源。一些提示还需要更少的步骤来实现理想的可接受输出。

在 2D 和 3D 动画模式下,连贯性对于在视频播放过程中产生运动的连续性很重要。运动参数下的值“strength_schedule”通过利用前一帧的一部分进入当前扩散来实现这种连贯性。这个比例是 0 - 1.0 的比例,0 表示没有任何凝聚力,会扩散出一个全新的无关形象。值 1.0 意味着前一帧的所有内容都将用于下一帧,不需要扩散。由于前一帧与新扩散的这种关系由先前扩散的步骤组成,因此创建了一个公式来补偿剩余的步骤以证明差异的合理性。该公式是这样的:- (strength_schedule * Target Steps) 

但是,您的第一帧将产生所有步数 - 因为该公式将在之后生效。

  • scale,衡量对整体提示应用多少强制措施。

7-10 的正常范围适用于大多数场景,但某些风格和艺术需要更极端的值。在比例值低于 3 时,模型将松散地强加一个提示,其中许多区域被跳过并变得无趣或只是变灰。高于 25 的值可能会过度执行提示,导致过度饱和、伪影和不平衡细节的极端颜色。对于某些用例,这可能是理想的效果。在某些动画模式中,比例过高可能会使颜色趋向于导致偏差和过度曝光输出的方向。

  • ddim_eta仅在 ddim 采样器模式下启用,将控制 ddim 与 ddpm 采样方法的比率,范围为 -1 到 +1,0 表示随机确定性较低。 

保存和显示设置:

  • save_samples,将输出图像保存到指定的驱动器,包括节奏帧

  • save_settings,将保存用于开始运行的所有设置的快照 .txt

  • 显示示例,显示完成输出的屏幕图像

批处理设置:

  • n_batch,在“无”动画模式下每个提示产生 n 个输出

  • batch_name,将创建一个文件夹并将输出内容保存到该目录位置

  • 种子行为,将根据设置对种子起点执行渐进式更改:

Iter =增量变化(例如 77、78、79、80、81、82、83...)

固定 = 种子没有变化(例如 33、33、33、33、33、33...)

随机 = 随机种子(例如 472、12、 927812, 8001, 724…)

注意:种子 -1 将选择一个随机起点,遵循之后的种子行为

故障排除:2D/3D 模式下的“固定”种子会溢出您的输出。切换到“iter”

  • make_grid,将拍摄静止帧并在预览网格中将它们拼接在一起

  • grid_rows,由 make_grid Init_Settings 设置的图像

排列:

  • use_init的起点

  • 强度,确定 init_image 的存在/video 的比例为 0-1,0 表示完全扩散,1 表示完全初始化源。

注意:即使未选中 use_init,视频输入仍会受到影响。

  • init_image,要使用的 init_image 的位置

注意:在“无”动画模式下,可以在此处引用图像文件夹。

  • use_mask,添加图像以指示图像的哪个部分通过灰度进行漫射

  • mask_file,要使用的蒙版图像的位置

  • invert_mask的灰度范围从“0到1”到“1到0”

  • mask_brightness_adjust,更改遮罩的值下限,控制扩散整体

  • mask_constract_adjust,钳制遮罩的最小/最大值以限制扩散区域。注意:遮罩的较亮区域 = 无扩散,较暗区域强制执行更多扩散

创建视频 → 4. 从帧

  • skip_video_for_run_all,当运行所有此笔记本时,将跳过视频构建,直到手动检查和单元格是重新运行。默认情况下它是关闭的。

  • fps,将渲染视频的帧速率

  • image_path,打算按顺序拼接的图像的位置。用户必须更新此参数以反映所需的时间戳。 

  • mp4_path, 将结果视频保存到

  • max_frames, 准备拼接的图像数量

点击下面的阅读原文也可获取中文版。

本文来自微信公众号“今说新语”(ID:Bitgenius)。大作社经授权转载,该文观点仅代表作者本人,大作社平台仅提供信息存储空间服务。