8天狂收6100颗星,可商用!东京工业、麻省理工等开源Stream Diffusion

添加书签

专注AIGC领域的专业社区,关注微软&OpenAI、百度文心一言、讯飞星火等大语言模型(LLM)的发展和应用落地,聚焦LLM的市场研究和AIGC开发者生态,欢迎关注!

加州大学伯克利分校、东洋大学、东京工业大学、麻省理工学院和筑波大学等研究人员,联合开源了一款创新性实时交互图像生成框架——Stream Diffusion。

Stream Diffusion的技术创新点在于,将传统的顺序去噪变成流批处理去噪,消除了漫长的等待、交互生成方式,实现了流畅且吞吐量超高的图像生成方法

同时引入了“残差无分类器指导”方法,进一步提升了流批处理的效率和图像质量。

根据Stream Diffusion在Github上的项目提交历史记录显示,仅用了8天的时间就收到6100颗星成为霸榜开源产品,其性能和欢迎程度可见一斑。允许开发者商用。

开源地址:https://github.com/cumulo-autumn/StreamDiffusion

论文地址:https://arxiv.org/abs/2312.12491

Demo展示:https://github.com/cumulo-autumn/StreamDiffusion/blob/main/assets/demo_03.gif

目前,扩散模型在图像生成方面获得了广泛应用并成功实现商业化落地,例如,该领域的标杆产品Midjourney。

但在实时交互方面表现不佳需要漫长的等待,尤其是涉及连续输入的场景中尤为明显。

Stream Diffusion功能展示

为了解决这些难题,研究人员设计了一种新颖的输出、输入方法,就是将原始的顺序去噪转化为批处理去噪过程。

简单来说,Stream Diffusion相当于大模型领域的机械化流水作业,将单一、繁琐的去噪、推理流程改成批量处理。

流批式去噪方法

流批式去噪是Stream Diffusion的核心功能之一,也是实现实时交互的关键所在。

传统的交互式扩散模型都是顺序执行:一次输入一张图片,走完全部的去噪步骤后,再输出一张结果图像。然后不断重复这个过程,生成完成更多的图像处理。

这样就造成一个很大的问题速度和质量难以同时得到保证。为了生成高质量的图像,需要设置较多的去噪步骤,导致生成图像的效率较慢,无法做到“鱼与熊掌”兼得。

流批式去噪的核心思想是:当输入第一张图像开始去噪步时,不必等待它完成,就可以接收第二张图像,以实现批量方式处理。

这样,U-Net只需要不断调用,处理一个批量的特征,就可以高效实现图像生成流水线的批量推进。

此外,流批式去噪方法的好处在于,每次调用U-Net就可以使多个图像同时推进一步,而U-Net的批量运算非常适合GPU并行计算,所以整体运算效率非常高。

最终可以在保证质量的同时,显著缩短单张图像的生成时间。

残差无分类器指导

为了强化提示条件对结果的影响,扩散模型通常使用一种叫“无分类器指导”的策略。

在传统方法中,计算负条件向量时需要对每个输入潜向量配对负条件嵌入,每次推理都要调用U-Net算力消耗巨大。

为了解决这个问题,研究人员提出了“残差无分类器指导”方法。其核心方法是,假定存在一个“虚拟残差噪声”向量,用来逼近负条件向量

首先计算“正条件”向量,再用正条件向量反推这个虚拟负条件向量。这样就避免了每次都要额外调用U-Net来计算真实的负条件向量,从而大幅减少了算力。

简单来说,就是用原始的输入图像编码作为负样本,无需调用U-Net就可以计算。稍微复杂一点的“一次负条件”,是在第一步使用U-Net计算一次负向量,然后重复使用这个向量近似后面的所有负向量。

流水线作业

该模块的功能是使整个系统的瓶颈不再是数据格式的转换,而是基于模型本身的推理时间。

通常,输入的图片需要缩放、转换格式等预处理才能成为模型可用的张量;输出的张量也需要后处理恢复为图片格式,整个流程消耗大量时间和算力。

流水线作业将预/后处理与模型推理完全分离开来,置于不同的线程中并行执行。输入图像经过预处理进入输入队列缓存;

输出张量从输出队列发出,再后处理为图片。这样两者就可以不互相等待,从而优化了整体流程速度。

此外,该方法还起到平滑数据流的作用。当输入源故障或通信错误导致暂时没法传入新图像时,队列可以继续提供之前缓存的图像,保证模型的流畅运行。

随机相似度过滤

该模块的功能是显著减少GPU算力消耗。当输入的图片连续相同或高度相似时,反复推理是没有任何意义的。

所以,相似度过滤模块计算输入图片与历史参考帧的相似度。如果高于设定阈值,则以一定概率跳过后续的模型推理;

如果低于阈值,则正常进行模型推理并更新参考帧。这种概率采样机制使得过滤策略可以平滑自然地对系统进行节流,降低平均GPU使用率。

在静态输入下过滤效果明显,动态变化大时自动降低过滤率,系统可以自适应场景动态性。

这样,复杂度动态变化的连续流输入下也可以自动调节系统推理负载,节约GPU算力消耗。

实验数据

为了测试Stream Diffusion的性能,研究人员在RTX3060、RTX4090上进行了测试。

效率方面,实现了超过91 FPS的生成帧率,是当前最先进的AutoPipeline的近60倍,并极大减少去噪步骤。

功耗方面,静态输入下,RTX3060和RTX4090的平均功率分别降低了2.39倍和1.99倍。

本文素材来源Stream Diffusion论文,如有侵权请联系删除

END

本篇文章来源于微信公众号: AIGC开放社区