二次元小姐姐全新生成模型来了,还是 1 秒 100 张那种。10 毫秒生成一张图像,1 分钟 6000 张图像,这是什么概念?下图中,就可以深刻感受到 AI 的超能力。
甚至,当你在二次元小姐姐图片生成的提示中,不断加入新的元素,各种风格的图片更迭也是瞬间闪过。
如此惊人的图片实时生成速度,便是来自 UC 伯克利、日本筑波大学等研究人员提出 StreamDiffusion 带来的结果。
这个全新的解决方案是一种扩散模型流程,能够以超过 100fps 的速度,实现实时交互式图像生成。
StreamDiffusion 开源后直接霸榜 GitHub,狂揽 3.7k 星。
StreamDiffusion 创新性采用了批处理策略,而非序列去噪,比传统方法快大约 1.5 倍。而且作者提出的新型残差无分类器引导(RCFG)算法能够比传统无分类引导快 2.05 倍。
最值得一提的是,新方法在 RTX 4090 上,图像到图像的生成速度可达 91.07fps。
未来,在元宇宙、视频游戏图形渲染、直播视频流等不同场景中,StreamDiffusion 快速生成能够满足这些应用的高吞吐量的需求。
尤其,实时的图像生成,能够为那些游戏开发、视频渲染的打工人们,提供了强大的编辑和创作能力。
专为实时图像生成设计
当前,扩散模型在不同领域的应用,需要高吞吐量和低延迟的扩散管道,以确保高效的人机交互。
一个典型的例子是,用扩散模型创建虚拟角色 VTuber—— 能够对用户的输入做出流畅的反应。
为了提高高吞吐量和实时交互能力,目前研究的方向主要集中在,减少去噪迭代次数,比如从 50 次迭代减少到几次,甚至一次。
常见的策略是将多步扩散模型提炼成几个步骤,用神经常微分方程(ODE)重新构建扩散过程。为提高效率,也有人对扩散模型进行了量化。
最新论文中,研究人员从正交方向(orthogonal direction)开始,引入了 StreamDiffusion—— 一种实时扩散管道,专为互动式图像生成的高吞吐量而设计。
现有的模型设计工作仍然可以与 StreamDiffusion 集成。另外,它还可以在保持高吞吐量的同时,使用 N 步去噪扩散模型,并为用户提供更灵活的选择。
具体是如何实现的?
StreamDiffusion 架构
StreamDiffusion 是一种新的扩散管道,旨在提高吞吐量。它由若干关键部分组成:
流批处理策略、残差无分类器引导(RCFG)、输入输出队列、随机相似滤波(Stochastic Similarity Filter)、预计算程序、微型自动编码器的模型加速工具。
批处理去噪
在扩散模型中,去噪步骤是按顺序进行的,这就导致了 U-Net 的处理时间,与步骤数成比例增加。
然而,为了生成高保真的图像,就不得不增加步数。
为了解决交互式扩散中的高延迟生成的问题,研究人员提出了一种叫做 Stream Batch 的方法。
如下图所示,在最新的方法中,在处理下一个输入图像之前,不会等待单个图像完全去噪,而是在每个去噪步骤后接受下一个输入图像。
这样就形成了一个去噪批次,每个图像的去噪步骤交错进行。
通过将这些交错的去噪步骤串联成一个批次,研究人员就能使用 U-Net 高效地处理连续输入的批次。
在时间步 t 处编码的输入图像在时间步 t+n 处生成并解码,其中 n 是去噪步骤的数目。
残差无分类器引导(RCFG)
常见的无分类器指导(CFG)是一种,通过在无条件或否定条件项和原条件项之间执行向量计算。来增强原条件的效果的算法。
这可以带来诸如加强提示的效果之类的好处。
然而,为了计算负条件剩余噪声,需要将每个输入潜变量与负条件嵌入配对,并在每个推理时间将其传递给 U-Net。
为了解决这一问题,作者引入了创新的残差无分类器引导 (RCFG) 。
该方法利用虚拟剩余噪声来逼近负条件,使得只需在过程的初始阶段就可以计算负条件噪声,大大降低了负条件嵌入时额外 U-Net 推理的计算成本。
输入输出队列
将输入图像转换为管道可管理的张量数据格式,反过来,将解码后的张量转换回输出图像,都需要不可忽略的额外处理时间。
为了避免将这些图像处理时间添加到神经网络推理流程中,我们将图像预处理和后处理分离到不同的线程中,从而实现并行处理。
此外,通过使用输入张量队列,还能应对因设备故障或通信错误造成的输入图像临时中断,从而实现流畅的流式传输。
随机相似滤波(Stochastic Similarity Filter)
如下图是,核心扩散推理管道,包含 VAE 和 U-Net。
通过引入去噪批处理和预先计算的提示嵌入缓存、采样噪声缓存和调度器值缓存,提高了推理流水线的速度,实现了实时图像生成。
随机相似滤波(SSF)是为了节省 GPU 功耗而设计的,可以动态关闭扩散模型管道,进而实现了快速高效的实时推理。
预计算
U-Net 架构既需要输入潜在变量,也需要条件嵌入。
通常情况下,条件嵌入来源于「提示嵌入」,在不同帧之间保持不变。
为了优化这一点,研究人员预先计算提示嵌入,并将其存储在缓存中。在交互或流模式下,这个预先计算的提示嵌入缓存会被召回。
在 U-Net 中,每一帧的键和值都是根据预先计算的提示嵌入计算的。
因此,研究人员对 U-Net 进行修改,以存储这些键和值对,使其可以重复使用。每当输入提示更新时,研究人员都会在 U-Net 内重新计算和更新这些键和值对。
模型加速和微型自动编码器
为了优化速度,我们将系统配置为使用静态批大小和固定输入大小 (高度和宽度)。
这种方法确保计算图和内存分配针对特定的输入大小进行优化,从而加快处理速度。
然而,这意味着如果需要处理不同形状的图像(即不同的高度和宽度),使用不同的批大小(包括去噪步骤的批次大小)。
实验评估
去噪批的定量评估
图 8 显示了批去噪和原始顺序 U-Net 循环的效率比较。
在实施批去噪策略时,研究人员发现处理时间有了显著改善。与顺序去噪步骤的传统 U-Net 循环相比,减少了一半的时间。
即使应用了神经模块加速工具 TensorRT,研究人员提出的流批处理在不同的去噪步骤中仍能大幅提高原始顺序扩散管道的效率。
此外,研究人员还将最新方法与 Huggingface Diffusers 开发的 AutoPipeline-ForImage2Image 管道进行了比较。
平均推理时间比较见表 1,最新管道显示速度有了大幅提升。
当使用 TensorRT 时,StreamDiffusion 在运行 10 个去噪步骤时,实现了 13 倍的速度提升。而在涉及单个去噪步骤的情况下,速度提升可达 59.6 倍。
即使没有 TensorRT,StreamDiffusion 在使用单步去噪时也比 AutoPipeline 提高了 29.7 倍,在使用 10 步去噪时提高了 8.3 倍。
表 2 比较了使用 RCFG 和常规 CFG 的流扩散管道的推理时间。
在单步去噪的情况下,Onetime-Negative RCFG 和传统 CFG 的推理时间几乎相同。
所以 One-time RCFG 和传统 CFG 在单步去噪时推理时间差不多。但是随着去噪步骤增加,从传统 CFG 到 RCFG 的推理速度提升变得更明显。
在第 5 步去噪时,Self-Negative RCFG 比传统 CFG 快 2.05 倍,Onetime-Negative RCFG 比传统 CFG 快 1.79 倍。
然后,研究人员对所提出的 SSF 的能耗进行了全面评估,如图 6 和图 7 所示。
这些图提供了将 SSF(阈值 η 设为 0.98)应用于包含周期性静态特征场景的输入视频时 GPU 的使用模式。
对比分析表明,在输入图像主要是静态图像且具有高度相似性的情况下,采用 SSF 可以显著降低 GPU 的使用率。
消融研究
不同模块对不同去噪步骤下平均推理时间的影响如表 3。可以看得见,不同模块的消减在图像到图像的生成过程中得到了验证。
定性结果
图 10 展示了使用残差无分类器导引(RCFG)对生成的图像进行快速条件调整的对齐过程。
生成的图像,没有使用任何形式的 CFG,显示弱对齐提示,特别是在方面,如颜色变化或添加不存在的元素,这是没有得到有效实现。
相比之下,CFG 或 RCFG 的使用增强了修改原始图像的能力,例如改变头发颜色,添加身体模式,甚至包含像眼镜这样的物体。值得注意的是,与标准 CFG 相比,RCFG 的使用可以加强提示的影响。
最后,标准文本到图像生成结果的质量如图 11 所示。
使用 sd-turbo 模型,只需一步就可以生成像图 11 所示的那样的高质量图像。
当在 GPU: RTX 4090,CPU: Core i9-13900K,OS: Ubuntu 22.04.3 LTS 的环境中,使用研究人员提出的流扩散管道和 sd-turbo 模型生成图像时,以超 100fps 的速率生成这种高质量的图像是可行的。
网友上手,一大波二次元小姐姐来了
最新项目的代码已经开源,在 Github 已经收揽 3.7k 星。
许多网友已经开始生成自己的二次元老婆了。
还有真人变实时动画。
10 倍速手绘生成。
感兴趣的童鞋们,不如自己动手吧。
参考资料:
https://huggingface.co/papers/2312.12491
https://twitter.com/cumulo_autumn/status/1732309219041571163
广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,IT之家所有文章均包含本声明。