DeepCache阅读笔记
  • Q1 论文试图解决什么问题?
    • Diffusion往往会有巨大的计算成本。目前对于Diffusion的压缩方法往往伴随着大量的重新训练,给可行性和成本带来了挑战。
  • Q2 这是否是一个新的问题?
    • 是的。目前对于Diffusion的压缩方法几乎没有不需要重新训练的。
  • Q3 这篇文章要验证一个什么科学假设?
    • Diffusion在顺序推理去噪过程中,相邻时间步的高阶特征是极度相似的,因此有大量的计算在时间步的角度是冗余的。
  • Q4 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?
    • 减少采样步数从而加速推理:以DDIM为代表;
    • 传统的模型压缩方法:剪枝、蒸馏、量化;
  • Q5 论文中提到的解决方案之关键是什么?
    • 观察到:
      • 主分支需要大量计算,而跳跃连接只需要经过一些浅层;
      • 主分支中突出的特征相似性,使得计算结果可以重复使用;
    • 利用U-Net的跳跃连接,将丰富的、更加低级的信息从 $D_i$ 传到 $U_i$ ,并接收上一个上采样块缓存的 $U_{i+1}^{(t+1)}$ 的信息代替当前时间步的 $U_{i+1}^{(t)}$ ,避免了冗余信息的重复计算。
    • 同一个缓存可以在多个时间步中使用:
      • 均匀Deep Cache:每一步的计算结果重用 $N-1$ 次。总共完整推理 $T / N$ 次。
      • 非均匀Deep Cache:靠近开始和结束距离短,中间距离长。
  • Q6 论文中的实验是如何设计的?
    • 主要实验:基于LDM
      • 比较原始LDM、两个具有代表性的加速推理方法作为baseline;
      • 对比均匀Cache、非均匀Cache,取 $N=\{2,3,5,10,20\}$ 步一次缓存;
      • 对比计算量、吞吐量、FID、精度等指标;
    • 与快速采样方法(DDIM,PLMS)进行对比:保持吞吐量一致或略高,比较FID;
    • 消融实验:DeepCache 可以理解为在 DDIM 的 $K$ 个时间步的基础上,增加了 $(N-1)K$ 个浅层网络推理步骤,对噪声图像进行了更多的更新。发现增加多个时间步的浅层推理与DeepCache深层特征后,精度有所提升。
  • Q7 用于定量评估的数据集是什么?代码有没有开源?
    • CIFAR10, LSUN-Bedroom, LSUNChurches, ImageNet, MS-COCO 2017 and PartiPrompts。代码已开源。
  • Q8 论文中的实验及结果有没有很好地支持需要验证的科学假设?
    • 是的。本文中,采取 $N=5$ 设置时,能够在加速4倍推理速度的同时,几乎保证精度不变;同时,在DDIM上面的消融实验也证明了浅层特征的重要性、深层特征的冗余性。
  • Q9 这篇论文到底有什么贡献?
    • 是首个在无需训练的情况下,大大加速现有Diffusion模型推理速度,并且几乎没有精度损失的工作。同时指出了一个重要的观察:相邻多个时间步中,深层特征是高度冗余的,不应当花费大量的计算资源来重复计算。论文为Diffusion加速提供了一个全新视角。
  • Q10 下一步呢?有什么工作可以继续深入?
    • 这个思路能否引导现有的各种Diffusion训练?
    • 首先想到的是,如果把U-Net中,「这个大头部分在多个连续时间步的输出」作为一个先验信息,那么就可以每 $N$ 个时间步训练一次这个大头部分(也就是满足约束条件数变为 $1/N$,大大降低训练难度)。但是这个大头部分的输入输出部分是通过U-Net浅层的编码器和解码器维护的,并没有一个数学表达式来生成训练数据。同理,对于浅层部分,$D_i$$U_i$ 也是没有表达式生成的,也无法训练。
    • 由上面的分析可以看出,尽管深层部分可以 $N$ 个时间步训练一次、浅层部分需要每个时间步都训练,但是二者是高度耦合的。因此从头训练一个这样的模型难度较高。但是我们一旦拥有了一个训练好的浅层部分或者深层部分,另一半的输入输出就被解耦出来、可以进行训练了。显然,想办法获得一个训练好的浅层部分,然后高效训练深层部分,是一个可行的方法。问题来到如何得到这个训练好的浅层部分。
    • 根据这个思路,可以想到做一个蒸馏(微调)。一个粗糙的pipeline:
      • 首先确定Cache的比例与位置,以 $N=20$ 为例,冻结浅层部分参数,先对深层部分做蒸馏。深层部分只需要满足 $T/N$ 组约束,可以设计的比原先的U-Net轻量化很多。
      • 然后对浅层部分做微调,使得它们在DeepCache的条件下尽量恢复原先的输出。
      • 如果这样做出来了,有两个好处:第一,深层部分的架构可以轻量化;第二,深层部分只在极少数时间步进行推理,推理效率变高。

 

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇