Skip to content

技术部分

Kahsolt edited this page Mar 30, 2024 · 1 revision

技术部分

这部分内容是给想知道工作原理的人看的。

Tiled VAE

核心技术是估算 GroupNorm 参数以实现无缝生成。

  1. 图像被分成小块,然后在编码器 / 解码器中各进行了 11/32 像素的扩张。
  2. 当禁用快速模式时:
    1. 原始的 VAE 前向传播被分解为任务队列和任务工作器,开始处理每个小块。
    2. 当需要 GroupNorm 时,它会暂停,存储当前的 GroupNorm 均值和方差,将所有内容发送到内存中,然后转到下一个小块。
    3. 在汇总所有 GroupNorm 均值和方差之后,将结果应用到小块中并继续。
    4. 使用锯齿形执行顺序以减少不必要的数据传输。
  3. 当启用快速模式时:
    1. 原始输入被下采样并传递到单独的任务队列。
    2. 它的 GroupNorm 参数被记录并由所有小块的任务队列使用。
    3. 每个小块被单独处理,没有任何 内存 <-> 显存 的数据传输。
  4. 处理完所有小块后,小块被写入结果缓冲区并返回。

ℹ 编码器颜色修复 = 仅在下采样之前估计 GroupNorm,即以半快速模式运行。

Tiled Diffusion

TiledDiffusion_how

  1. 潜在图像被分成小块。
  2. 在 MultiDiffusion 中:
    1. UNet 预测每个小块的噪声。
    2. 小块由原始采样器去噪一个时间步。
    3. 小块被加在一起,但除以每个像素的累加次数(即加权平均)。
  3. 在 Mixture of Diffusers 中:
    1. UNet 预测每个小块的噪声。
    2. 所有噪声与高斯权重蒙版融合。
    3. 降噪器对整个图像使用融合的噪声去噪一个时间步。
  4. 重复执行步骤 2-3,直到完成所有时间步长。

⚪ 优点

  • 在有限的显存中绘制超大分辨率(2k~8k)图像
  • 无需任何后处理即可实现无缝输出

⚪ 缺点

  • 它将明显比通常的生成速度慢。
  • 梯度计算与此技巧不兼容。它将破坏任何 backward() 或 torch.autograd.grad()。
Clone this wiki locally