Meta最新成果:前所未有的加速Emu推理 | Imagine Flash:新型蒸馏框架发布

文章地址:https://arxiv.org/pdf/2405.05224

扩散模型是一个强大的生成框架,但推理过程非常昂贵。现有的加速方法通常会在极低步骤情况下牺牲图像质量,或者在复杂条件下失败。这项工作提出了一个新颖的蒸馏框架,旨在通过仅使用一到三个步骤实现高保真度和多样化样本生成。方法包括三个关键组成部分:

(i) 反向蒸馏,通过校准学生模型自身的反向轨迹来缓解训练推理差异;
(ii) 迁移重构损失,根据当前时间步动态调整知识传递;
(iii) 噪声校正,一种增强样本质量的推理时技术,通过解决噪声预测中的奇异性来改善样本质量。

通过大量实验证明,我们的方法在定量指标和人类评估方面优于现有竞争对手。值得注意的是,我们的方法仅使用三个去噪步骤就实现了与教师模型相当的性能,实现了高效的高质量生成。

生成的效果图

介绍

随着去噪扩散模型(DMs)的出现,生成建模已经发生了一场范式转变。这些模型在各个领域树立了新的基准,提供了前所未有的逼真性和多样性,同时确保了稳定的训练。然而,去噪过程的顺序性质带来了显著挑战。从DMs中抽样是一个耗时和昂贵的过程,所需时间在很大程度上取决于两个因素:(i)每步神经网络评估的延迟,以及 (ii)去噪步骤的总数

大量的研究工作致力于加速抽样过程。对于文本到图像的合成,提出的方法涵盖了广泛的技术,包括高阶求解器、用于曲率降低的修改扩散公式,以及引导、步骤和一致性蒸馏。这些方法取得了令人印象深刻的改进,在接近10步的区间内达到了非常高的质量。最近,利用蒸馏和对抗性损失两者的混合方法[17,31,39]将界限推动到了不到五步。尽管这些方法在简单提示和简单样式(如动画)上取得了令人印象深刻的质量,但它们在真实照片般的图像上,特别是在复杂的文本条件下,样本质量下降。

上述方法中的一个共同主题是试图将少步骤的学生模型与复杂的教师路径对齐,尽管学生模型具有明显较低的容量(即步骤)。我们认识到这是一个限制,因此提出了一种新颖的蒸馏框架,旨在使教师模型沿着自己的扩散路径改进学生模型。总之,本文贡献有三个方面:

  • 首先,方法引入了反向蒸馏,这是一种设计用于在其自身上游反向轨迹上校准学生模型的蒸馏过程,从而减少了训练和推理分布之间的差距,并确保在所有时间步长上训练期间没有数据泄漏。

  • 其次,提出了一种迁移重构损失,它动态地调整来自教师模型的知识迁移。具体而言,该损失被设计为在高时间步长时从教师模型中提炼全局结构信息,而在低时间步长时专注于渲染细粒度细节和高频成分。这种自适应方法使学生能够有效地模拟教师的生成过程在扩散轨迹的不同阶段。

  • 最后,提出了噪声校正,这是一种在推理时修改,通过解决在初始采样步骤中存在的噪声预测模型中的奇异性来增强样本质量的技术。这种无需训练的技术减轻了对比度和颜色强度的降级,这种降级通常会在极低数量的去噪步骤中操作时出现。

通过将这三个新颖组件协同结合起来,将我们的蒸馏框架应用到基线扩散模型Emu中,从而实现了Imagine Flash,在极低步长区间内实现了高质量的生成,而不会影响样本质量或条件保真度(下图2)。通过大量实验和人类评估,展示了我们的方法在各种任务和模态之间实现了抽样效率和生成质量之间的有利折衷。

方法

Imagine Flash,这是一种新颖的蒸馏技术,旨在快速进行文本到图像的生成,它建立在Emu 的基础上,但不局限于此。与原始的Emu模型不同,后者需要至少50个神经函数评估(NFEs)才能生成高质量的样本,Imagine Flash仅需少量NFEs即可实现可比较的结果。提出的蒸馏方法包括三个新颖的关键组成部分:

  • 反向蒸馏,这是一种蒸馏过程,确保了在所有时间点t上的训练期间零数据泄漏。

  • 迁移重构损失(SRL),这是一种自适应损失函数,旨在最大化从教师模型中的知识迁移。

  • 噪声校正,这是一种无需训练的推理修改,用于改善在噪声预测模式下训练的少步骤方法的样本质量。

接下来,假设可以访问一个预训练的扩散模型,它预测噪声估计。这个教师模型可以在图像空间或潜在空间中操作。我们的目标是将的知识蒸馏到一个学生模型中,同时减少抽样步骤的总数,并提供额外允许中每一步的高质量增加。如果模型使用无分类器的引导(cfg),那么也将这些知识蒸馏到学生模型中,并且消除cfg的需要。

反向蒸馏

总的来说,反向蒸馏消除了所有时间步骤t上的信息泄漏,防止模型依赖于真值信号。这是通过在训练期间模拟推理过程来实现的,这也可以解释为在其自身的上游反向路径上校准学生模型。

SRL:迁移重构损失

通过反向扩散进行图像生成的过程中,早期阶段(其中t接近T)对于构建图像的整体结构和组成至关重要。相反,后期阶段(其中t接近0)对于添加高级细节至关重要。借鉴这一观察结果,对默认的知识蒸馏损失进行了改进,鼓励学生模型学习教师模型的结构组成和细节渲染能力。这涉及将教师去噪的起始点从学生的起始点t移开,因此我们将这种方法称为迁移重构损失(SRL)。下图4概述了提出的Loss。

这种方法鼓励学生在早期后向步骤中优先提取结构知识,并在最后后向步骤中集中精力生成更精细的细节。

噪声校正

我们提出了一个简单的、无需训练的替代方案,即切换到zero-SNR速度预测,这允许使用噪声预测模型而不产生前述的偏差。具体来说,通过将视为一个特殊情况,并用真实噪声替换,更新得到了校正。

观察到,这个小的修改可以显著改善估计的颜色,使色调更加生动饱满。当推理步骤数量较少时,这种效应尤为明显。

实验

为了确保公平性,将Emu模型作为所有实验的基础。Emu是一个拥有27亿参数和分辨率为768×768的最先进模型。将我们的结果与之前的蒸馏方法进行比较,例如Step Distillation、LCM和ADD,并将它们直接应用在Emu上。所有模型都在一个委托的图像数据集上进行了替换训练。由于ADD训练没有公开可用的代码,根据论文中提供的细节自行实现了它。

与最新技术的定量比较

使用FID 、CLIP分数 和CompBench将Imagine Flash与之前的方法进行比较。FID和CLIP分别衡量图像质量和提示对齐度,并根据来自COCO2017 的5k样本分割进行评估,遵循[31]中的评估协议。CompBench是一个基准,单独衡量属性绑定(颜色、形状和纹理)和对象关系(空间、非空间和复杂)。

在CompBench验证集中为每个提示生成2张图像(总共300个提示)。对于LCM和Imagine Flash,计算1、2和3步的指标。对于ADD,计算4步的指标,因为该方法专门针对4步推理进行了调优和配置,以确保公平比较。还评估了4步的Step Distillation,以提供更直接的比较。表1显示了结果。

我们的3步Imagine Flash在FID方面优于Step Distillation和ADD,即使使用了少一步。它在1、2和3步的FID上也比LCM低。我们的3步模型的CLIP分数高于所有变体的ADD和LCM,并与4步Step Distillation模型的得分(30.2)相匹配。与Step Distillation和ADD相比,它们相应地降低了FID分别为10.1和3.4,而我们的3步和2步Imagine Flash则保持了FID并略有改善。

对于CompBench,我们的1、2或3步Imagine Flash在所有类别中都优于以前的方法,除了颜色外,其中4步Step Distillation和ADD的得分与我们的类似。这突显了Imagine Flash的优越提示对齐性。

与最新技术的定性比较

在图5中,展示了Imagine Flash与当前最先进技术(SOTA)的定性比较:Step Distillation、LCM和ADD,它们都对相同的基线Emu模型进行了蒸馏,以进行公平比较。

观察到ADD生成的图像比Step Distillation和LCM更清晰,这是因为它使用了对抗损失。虽然Imagine Flash和ADD都使用了鉴别器,但Imagine Flash生成的图像比ADD更锐利和更详细。Imagine Flash的增强锐度和细节是由我们提出的SRL导致的,它有效地精炼了学生预测的高频细节,如下图6的最后一行所示。

另一方面,对于ADD,目标图像可能展示出明显不同的色谱,出现颜色伪影(见图6),并且颜色在训练迭代过程中可能出现不可预测的波动。我们假设,为了在期望中最小化L2重构损失,ADD模型最好通过预测接近零的颜色值来达到目标,从而导致图像苍白和轮廓模糊。 除了改善局部细节外,SRL还可以纠正学生的文本对齐错误,如图6右侧所示(1步),其中小熊猫被转换回了狗。

与公开模型的比较

还将Imagine Flash的性能与ADD-LDMXL和Lightning-LDMXL发布的公开模型进行了比较。为此,按照前面详细说明的方法计算CLIP和FID分数,并与基准模型进行相对增益/下降的比较。请在附录A中找到表格。我们的方法在文本对齐能力上与ADD和Lightning保持类似,但在FID增加方面显示出更为有利的结果,尤其是对于两步和三步。

此外,进行了广泛的人类评估。为此,使用了三个推理步骤为OUI数据集中随机抽样的1,000个提示生成了所有方法的图像。成对的图像呈现给42名受过训练的人类标注者中的五名,他们的任务是为更具视觉吸引力的图像投票。通过多数投票汇总的结果显示在表2中,明显表明了对Imagine Flash的偏好。

消融研究

对Imagine Flash进行了定量和定性消融,以评估所提出的反向蒸馏、SRL和噪声校正的效果。定量评估如表3所示,而补充视觉消融如图7所示

结论

Imagine Flash,这是一种新颖的蒸馏框架,能够利用扩散模型实现高保真度的少步骤图像生成。方法包括三个关键组成部分:反向蒸馏以减少训练推理差异,迁移重构损失(SRL)动态地调整每个时间步的知识传递,以及噪声校正以增强初始样本质量。

通过大量实验,Imagine Flash取得了显著的成果,仅使用三个去噪步骤就与预训练的教师模型的性能相匹配,并始终超越现有方法。这种前所未有的抽样效率结合了高样本质量和多样性,使我们的模型非常适用于实时生成应用。

我们的工作为超高效的生成建模铺平了道路。未来的方向包括扩展到其他模态,如视频和3D,进一步降低抽样预算,并将我们的方法与互补的加速技术相结合。通过实现即时的高保真度生成,Imagine Flash为实时创意工作流程和交互式媒体体验开启了新的可能性。

更多生成的图像

参考文献

[1] Imagine Flash: Accelerating Emu Diffusion Models with Backward Distillation

 更多精彩内容,请关注公众号:AI生成未来

欢迎加群交流AIGC技术,添加小助手

  • 15
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是一个简单的电子钟程序,使用emu8086汇编语言编写,可以在屏幕正中显示当前时间和日期: ``` .model small .stack 100h .data msg db "YYYY年MM月DD日 HH:MM:SS$" .code main proc mov ax, @data mov ds, ax call get_time call display_time mov ah, 4ch int 21h main endp get_time proc mov ah, 2ch int 21h mov dl, ch mov dh, cl mov al, dh mov ah, 0 div ah add al, 2000h mov bx, ax mov al, dl mov ah, 0 div ah mov cl, al mov al, dh mov ah, 0 div ah mov dl, al mov ah, 2ch int 21h mov bl, ch mov cl, dl mov dh, ch mov dl, dh mov ah, 2ch int 21h mov bh, ch mov ah, 2ch int 21h mov ah, 0 mov al, dl div ah mov dl, al mov ah, 0 div ah mov cl, al mov al, dh mov ah, 0 div ah mov dh, al ret get_time endp display_time proc mov ah, 0 mov al, dl div ah mov bh, al mov ah, 0 div ah mov bl, al mov ah, 0 mov al, dh div ah mov cl, al mov ah, 0 div ah mov dl, al mov ah, 0 mov al, dh div ah mov dh, al mov ah, 0 mov al, dl div ah mov ch, al mov ah, 0 mov al, dh div ah mov cl, al mov ah, 0 mov al, bl div ah mov bl, al mov ah, 0 mov al, bh div ah mov bh, al mov ah, 9 lea dx, msg int 21h mov dl, bl add dl, 30h mov dh, bh add dh, 30h mov ah, 2 int 21h mov dl, cl add dl, 30h mov dh, dh mov ah, 2 int 21h mov dl, dl add dl, 30h mov dh, ch add dh, 30h mov ah, 2 int 21h mov dl, dh add dl, 30h mov dh, dl mov ah, 2 int 21h mov dl, dh add dl, 30h mov dh, dh mov ah, 2 int 21h ret display_time endp end main ``` 该程序首先调用`get_time`过程获取当前时间和日期,然后调用`display_time`过程将其显示在屏幕上。`get_time`过程使用`int 21h`中断获取系统时间和日期,并将其保存在寄存器中。`display_time`过程使用这些寄存器的值来计算和显示当前时间和日期。最后,程序使用`int 21h`中断结束程序的运行并退出到DOS环境。 ### 回答2: 编写一个电子钟程序的步骤如下: 1. 首先,在emu8086中创建一个新的汇编程序文件。 2. 在程序开头声明并初始化所需的变量。例如:声明年(year),月(month),日(day),时(hour),分(minute),秒(second)变量,并将其赋初值为0。 3. 使用INT 10h中断函数设置屏幕模式。选择一个合适的文本模式,以便于在屏幕正中显示时间。 4. 编写一个PROCEDURE(过程),用于在屏幕上显示时间。这个过程将获取当前时间的值,并将其显示在屏幕上。 5. 在主程序中调用过程(PROCEDURE),以便在屏幕上显示时间。 6. 使用INT 16h中断函数等待用户按下任意键并结束程序。 下面是一个简单的示例代码: ```asm .model small .stack .data year db ? month db ? day db ? hour db ? minute db ? second db ? msg db 'YYYY年MM月DD日 HH:MM:SS$' .code main proc ; 初始化变量 mov year, 2023 mov month, 12 mov day, 31 mov hour, 23 mov minute, 59 mov second, 55 ; 设置屏幕模式 mov ah, 00h mov al, 03h int 10h ; 调用过程显示时间 call displayTime ; 等待用户按下任意键 mov ah, 00h int 16h mov ah, 00h mov al, 03h int 10h mov ah, 4ch int 21h main endp displayTime proc ; 获取当前年 mov ax, year mov bx, 1000 div bx add al, 30h ; 转换为ASCII码 mov ah, 0eh int 10h ; 获取当前月 mov ax, month add al, 30h ; 转换为ASCII码 mov ah, 0eh int 10h ; 获取当前日 mov ax, day add al, 30h ; 转换为ASCII码 mov ah, 0eh int 10h ; 获取当前时 mov ax, hour add al, 30h ; 转换为ASCII码 mov ah, 0eh int 10h ; 获取当前分 mov ax, minute add al, 30h ; 转换为ASCII码 mov ah, 0eh int 10h ; 获取当前秒 mov ax, second add al, 30h ; 转换为ASCII码 mov ah, 0eh int 10h ret displayTime endp end main ``` 请注意,此示例程序中的时间是硬编码的,您可以根据需要进行修改。您还可以根据自己的需要对显示格式进行调整。此外,请确保您已在emu8086汇编编译器中正确设置并运行此程序。 ### 回答3: 编写电子钟程序,可以使用emu8086来实现。首先,需要使用汇编语言来编写代码。以下是一个简单的示例: ```assembly .model small .stack 100h .data year db 0 month db 0 day db 0 hour db 0 minute db 0 second db 0 msg db 20, 13, 10, " YYYY年MM月DD日 HH:MM:SS", 0 .code main proc mov ax, @data mov ds, ax ; 获取系统时间 mov ah, 2Ch int 21h mov hour, ch mov minute, cl mov second, dh mov ah, 4Ah int 1Ah mov al, dl mov ah, 0 div byte ptr 10 mov year, al mov al, ah div byte ptr 10 mov bl, dl mov ah, 2 mul ah add al, 1 add bl, 1 mov month, al mov day, bl ; 显示时间 mov ah, 9 mov dx, offset msg int 21h ; 显示日期 mov ah, 2 mov dl, day add dl, '0' int 21h mov dl, '日' int 21h mov ah, 2 mov dl, month add dl, '0' int 21h mov dl, '月' int 21h mov ah, 2 mov dl, year add dl, '0' int 21h mov dl, '年' int 21h ; 显示时间 mov ah, 2 mov dl, hour add dl, '0' int 21h mov dl, ':' int 21h mov ah, 2 mov dl, minute add dl, '0' int 21h mov dl, ':' int 21h mov ah, 2 mov dl, second add dl, '0' int 21h mov ah, 4Ch int 21h main endp end main ``` 现在,您可以使用emu8086将此程序编译和运行。运行程序后,它将在屏幕上的正中心以以下格式显示当前的日期和时间:YYYY年MM月DD日 HH:MM:SS。请注意,系统提供的时间以24小时制显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值