deepcache学习笔记
frc99 中本葱

DeepCache

原理

下采样属于浅层特征,上采样属于深层特征,去噪过程中的相邻步骤在深层特征上表现出显著的时间相似性,即连续步骤之间的变化通常较小。

从图中可以看出其实现思路,在上采样的倒数第二块的结果作为cache,和上采样第一个块拼接作为输入到下一个timestep的上采样的倒数第一个块。

deepcache

扩展 1:N

同一个缓存可以在多个时间步中使用:

  • 均匀: 缓存的特征每计算一次,可以在后续的N−1步中重用,总共完整推理 T/N 次。

  • 非均匀:靠近开始和结束距离短,中间距离长。

非均匀的原理是由于特征的相似性并不是在所有步骤中都保持不变,因此可以对那些与相邻步骤相似度相对较小的步骤进行更多采样:

L={lililinear_space((c)1p,(Tc)1p,k)}\mathcal{L} = \left\{ l_i \mid l_i \in \text{linear\_space} \left( (-c)^{\frac{1}{p}}, (T-c)^{\frac{1}{p}}, k \right) \right\}

I=unique_int({ikik=(lk)p+c,where lkL})\mathcal{I} = \text{unique\_int} \left( \left\{ i_k \mid i_k = (l_k)^p + c, \, \text{where } l_k \in \mathcal{L} \right\} \right)

第一个公式的意思是首先通过linear_space(start, end, interval) 在 start 到 end 之间(不包括 end)均匀地生成 n 个数字,第二个公式的意思是,通过unique_int(·) 将数值转换为整数,并确保生成的时间步长是唯一的,其中 c 是选择中心时间步长的超参数,时间步长索引的变化呈平方,即随着远离中心时间步长,索引的频率会以平方的方式变化。

deepcache-webui-插件

这边是github上aria1th,https://github.com/aria1th/sd-webui-deepcache-standalone

相似的还有deepcache-forge插件 https://github.com/LoganBooker/sd-deepcache.

由 Hexo 驱动 & 主题 Keep