10毫秒生成一张图像,1分钟6000张图像,这是什么概念?
下图中,就可以深刻感受到AI的超能力。
甚至,当你在二次元小姐姐图片生成的提示中,不断加入新的元素,各种风格的图片更迭也是瞬间闪过。
如此惊人的图片实时生成速度,便是来自UC伯克利、日本筑波大学等研究人员提出StreamDiffusion带来的结果。
这个全新的解决方案是一种扩散模型流程,能够以超过100fps的速度,实现实时交互式图像生成。
论文地址:https://arxiv.org/abs/2312.12491
StreamDiffusion开源后直接霸榜GitHub,狂揽3.7k星。
StreamDiffusion创新性采用了批处理策略,而非序列去噪,比传统方法快大约1.5倍。而且作者提出的新型剩余无分类器引导(RCFG)算法能够比传统无分类引导快2.05倍。
最值得一提的是,新方法在RTX 4090上,图像到图像的生成速度可达91.07fps。
未来,在元宇宙、视频游戏图形渲染、直播视频流等不同场景中,StreamDiffusion快速生成能够满足这些应用的高吞吐量的需求。
尤其,实时的图像生成,能够为那些游戏开发、视频渲染的打工人们,提供了强大的编辑和创作能力。
专为实时图像生成设计
当前,扩散模型在不同领域的应用,需要高吞吐量和低延迟的扩散管道,以确保高效的人机交互。
一个典型的例子是,用扩散模型创建虚拟角色VTuber——能够对用户的输入做出流畅的反应。
为了提高高吞吐量和实时交互能力,目前研究的方向主要集中在,减少去噪迭代次数,比如从50次迭代减少到几次,甚至一次。
常见的策略是将多步扩散模型提炼成几个步骤,用神经常微分方程(ODE)重新构建扩散过程。为提高效率,也有人对扩散模型进行了量化。
最新论文中,研究人员从正交方向(orthogonal direction)开始,引入了StreamDiffusion——一种实时扩散管道,专为互动式图像生成的高吞吐量而设计。
现有的模型设计工作仍然可以与StreamDiffusion集成。另外,它还可以在保持高吞吐量的同时,使用N步去噪扩散模型,并为用户提供更灵活的选择。
实时图像生成|第一列和第二列:AI辅助实时绘图的示例,第三列:从3D头像实时渲染2D插图。第四列和第五列:实时相机滤镜
具体是如何实现的?
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星。
项目地址:https://github.com/cumulo-autumn/StreamDiffusion
许多网友已经开始生成自己的二次元老婆了。
还有真人变实时动画。
10倍速手绘生成。
感兴趣的童鞋们,不如自己动手吧。