--- created: 2025-08-03 21:19:11 tags: - "Research" - "复现" - "MDMS" - "采样算法" - "算法流程" --- ### 研究动机 在 *低光图像增强(LLIE)* 中目前存在的两个不足: - **大多数方法忽略了频域中的关键特征**: - **现有的 *单分辨率补丁(single-resolution patches)* 方法会产生 *棋盘伪影* 的现象** ### 改进方向 - MDL中的改进 - FFT快速傅里叶变换可以尝试用其他的变换替代 - 空间域的网络可以使用其他模块进一步降低复杂度 - 文章结尾提到仅用了三步扩散就得到了不错的结果, 再结合其他的轻量化技术, 能获得更广泛的应用场景. - 实验的数据集不是很丰富, 没有验证在更多场景下的泛化性, 可以结合最近的zero-shot-diffusion来提升模型的泛化性 - 高光图像, 也就是过度曝光能否使用类似的方法来改善 ### Algorithm2 **Algorithm 2: MDMS Diffusion Model Sampling** **输入 (Input):** * **`y`**: 低光照图像 (Low-light image)。这是需要被增强的原始图像。 * **`yp`**: 先验图像 (prior image)。 通常是由 BCP (Bright Channel Prior) 得到的,提供关于图像亮度和色彩的先验信息。 * **`εθ(xt, y, yp, t)`**: 条件扩散模型 (conditional diffusion model)。 这是训练好的神经网络,它接收带噪声的图像 `xt`、原始低光图像 `y`、先验图像 `yp` 以及时间步 `t` 作为输入,并预测噪声(或与噪声相关的值)。下标 `θ` 表示模型的参数。 * **`S`**: 采样步数 (sampling steps)。这是生成最终增强图像所需的迭代次数。 * **`D`**: 图像块位置的数量, 或者理解为在同一尺度下, 需要处理的图像块的总数。 * **patch locations**: 可以裁剪出不同patch的位置信息 **算法步骤 (Algorithm Steps):** 1. **`Sample Xt ~ N(0, I)`**: 从标准正态分布(均值为0,方差为1的单位矩阵)中采样初始噪声图像 `Xt`。这是生成过程的起点。 2. **`for i = S, ..., 1 do`**: 从 `S` 到 1 的逆向循环。这是 diffusion model 的逆向过程(denoising process),逐步去除噪声。 3. **`t = (i - 1) * T / S + 1`**: 计算当前时间步 `t`。这里 `T` 可能是总的时间步长(在训练阶段通常是1000)。这个公式将循环变量 `i` 映射到时间步 `t`。 4. **`t' = (i - 2) * T / S + 1`**: 计算上一个时间步`t'` 5. **`Φt = 0, W = 0`**: 初始化累积变量 `Φt` 和权重 `W` 为 0。`Φt` 用于累积不同尺度图像块处理后的结果。 6. **`for ps = 64 × 64, 96 × 96, 128 × 128 do`**: 遍历不同的图像块尺寸 (patch sizes)。这是 Multi-Scale Sampling (MSS) 的核心部分。 7. **`for d = 1, ..., D do`**: 循环`D`次, 处理每一个符合条件的图像块 8. **`x_t^d = Crop_ps(Md ◦ Xt), y^d = Crop_ps(Md ◦ y), and y_p^d = Crop_ps(Md ◦ yp)`**: * `Md` 是一个下采样(或上采样)操作,将图像调整到与当前图像块尺寸 `ps` 相匹配的大小。 * `◦` 表示逐元素相乘 (element-wise multiplication)。 * `Crop_ps()` 函数从调整大小后的图像中裁剪出尺寸为 `ps` 的图像块。 * 分别从噪声图像 `Xt`、低光图像 `y` 和先验图像 `yp` 中裁剪出对应位置和尺寸的图像块,得到 `x_t^d`、`y^d` 和 `y_p^d`。 9. **`Φps = Φps + Md · εθ(x_t^d, y^d, y_p^d, t)`**: * 将当前图像块 `x_t^d`、对应的低光图像块 `y^d`、先验图像块 `y_p^d` 以及时间步 `t` 输入到扩散模型 `εθ` 中,得到预测的噪声(或相关值)。 * 将预测结果与下采样/上采样操作 `Md` 的结果相乘(逐元素),然后累加到 `Φps` 上。 10. **`W = W + Md`**: 将权重 `W` 累加上 `Md`。用于后续的**归一化**。 11. **`end for`** (内层循环结束, 遍历D) 12. **`Φps = Φps ∅ W, ∅ means element-wise divide`:** : 对累加结果 `Φps` 进行归一化,除以累积权重 `W`。 13. **`Φt = (Φt + Φps)`**: 将当前尺度处理后的结果 `Φps` 累加到总的累积变量 `Φt` 上。 14. **`end for`** (外层循环结束, 遍历patch size) 15. **`Φt = Φt / 3`**: 这里除以3是因为有三个尺度64x64, 96x96, 128x128. 对所有尺度求平均 16. **`Xt ← ...`**: 使用 DDIM (Denoising Diffusion Implicit Models) 的更新公式计算上一个时间步的噪声图像 `Xt`。这是一个确定性的采样过程,与 DDIM 论文中的公式相关。具体公式涉及到 `αt` 和 `αt'`,它们是与噪声调度相关的系数。 17. **`end for`** (最外层循环结束, 遍历i) 18. **`return Xt`**: 返回最终生成的图像 `Xt`(此时 `t` 应该接近于 0,表示噪声基本被去除)。 **总结:** Algorithm 2 描述了一个使用 Multi-Scale Sampling (MSS) 和 DDIM 加速采样的扩散模型生成过程。它通过迭代地从噪声图像中去除噪声,并在每一步融合不同尺度图像块的处理结果,最终生成高质量的增强图像。算法的关键在于循环处理不同尺度的图像块,并使用 DDIM 公式进行确定性采样。 好的,我来用更通俗易懂的方式解释一下 Algorithm 2 中的 `Md` 和 `W`。 **`Md` 的含义:** * **核心作用:将全局信息融入局部图像块** * 在处理图像块时,我们希望每个图像块的处理不仅仅依赖于它自身的信息,还能考虑到它周围的环境(即全局信息)。 * `Md` 的作用就是将全局信息“注入”到每个图像块中。 * **具体操作:调整大小 + 掩码(Mask)** 1. **调整大小 (Resize):** * `Md` 首先会将输入的图像(`Xt`, `y`, 或 `yp`)调整到与当前处理的图像块尺寸 (`ps`) 相匹配。 * 如果当前的 `ps` 比原始图像小(例如,`ps` 是 64x64,而原始图像是 256x256),`Md` 会对图像进行*下采样*(缩小)。 * 如果当前的 `ps` 比原始图像大(例如, `ps`是128x128, 原始图像是64x64),`Md` 会对图像进行*上采样*(放大)。 * 这样做的目的是让全局图像和局部图像块能够在同一尺寸下进行操作。 2. **掩码 (Masking):** * `Md` 不仅仅是简单的调整大小。 它还利用一个“掩码”的概念。 * 可以把 `Md` 理解为一个与当前 `ps` 大小相同的矩阵。这个矩阵中,对应于当前正在处理的图像块位置的元素值为 1,其余位置的元素值为 0。 * 这个矩阵和调整大小后的图片做逐元素乘法, 留下图像块原来的数值, 抹去其他地方的数值. * **为什么要这样做?** * **上下文信息:** 通过将全局图像调整到与图像块相同的大小,模型可以将全局的上下文信息编码到每个图像块中,有助于更好地恢复图像。 * **位置感知:** 通过掩码,模型可以明确地知道当前处理的图像块在原始图像中的位置,这对于处理空间相关性很强的图像数据非常重要。 **`W` 的含义:** * **核心作用:加权平均的权重** * 在 Algorithm 2 中,我们对不同尺度的图像块进行了处理,并希望将这些结果融合起来。 * `W` 就是用于融合不同尺度结果的“权重”。 * **具体操作:累加 `Md`** * `W` 在每个尺度和每个位置的循环中,都会累加 `Md`。 * `Md` 中与当前处理图像块对应的区域为1, 其余为0 * 因此, `W` 在多次循环之后的数值, 其实代表该点被多少个patch覆盖 * **为什么要这样做?** * **归一化:** 在融合不同尺度的结果时,我们需要进行加权平均。`W` 记录了每个像素位置被多少个图像块覆盖,通过除以 `W`,我们可以得到一个归一化的结果,避免数值过大或过小。 **总结:** * **`Md`:** 调整大小+掩码。将全局信息注入到局部块中, 并保留局部块的位置信息。 * **`W`:** 权重。记录每个像素被多少个图像块覆盖, 用于最后结果的加权平均。 [^1]: Shang 等. 算法 2, `Md` 用于调整图像大小并与图像块相乘, `W` 用于累加 `Md`。