2024 / 9 / 28
信噪比 (SNR, Signal-to-Noise Ratio)
定义:SNR 是一个衡量信号质量的指标,表示有效信号与背景噪声之间的比率。
作用:高 SNR 表示信号清晰,低 SNR 表示信号被噪声淹没,难以提取有效信息。
ϵ预测 (ϵ-prediction)
定义:模型的任务是从给定的图像中预测噪声(ϵ)。
问题:在 SNR 为零时,所有输入都是噪声,模型无法从中学习到有意义的信息。
v预测 (v-prediction)
定义:v预测是一种新的训练目标,旨在改进模型在处理不同信噪比时的表现。
优势:它通过将模型的任务从预测噪声转变为预测图像本身,确保在高或低 SNR 下都能进行有效学习。
x0预测
定义:模型在某一时刻需要预测的真实图像(x0)。
作用:在 v预测中,模型的目标是从纯噪声中恢复出真实图像。
传统 ϵ 预测:在 SNR 为零时,模型无法有效学习,因为输入完全是噪声。
v 预测:通过将任务转变为从纯噪声中恢复出真实图像,确保模型在各种情况下都能进行有效学习。
微调 SDXL:我们对 SDXL 模型进行了微调,将其训练目标从 ϵ 预测转换为 v 预测。这一转变对于支持 Zero Terminal SNR 至关重要。
SNR 为零时:ϵ 预测变得无意义,因为所有输入都是噪声,模型无法学习如何从这些输入中生成有意义的图像。因此,我们采用 v 预测,它允许模型根据输入的纯噪声来恢复出真实图像 x0。
一致性:通过这种方式,确保模型在训练和推理时的一致性,从而提高生成图像的质量和细节表现。
现象:提示模型生成“完全黑色”的图像。一个经过训练可以从无限噪声(ZTSNR)中预测图像的模型可以响应这一提示。然而,如果我们从具有有限噪声的时间步开始推断,模型将输出一张亮度适中的图像,试图匹配起始噪声中的平均颜色,从而生成与提示无关的样本。
图示:图2展示了一个模型在不同噪声调度下的生成结果。
从干净图像开始:从干净的图像样本 \mathbf{x_0 开始,逐步添加高斯噪声生成一系列噪声样本 \{\mathbf{x}_1, \mathbf{x_2, ..., \mathbf{x}_T\}。
预测噪声:模型学习从噪声样本 \mathbf{x_t 预测添加的噪声 \epsilon_t。
去噪生成:在推理时,模型从纯噪声开始,逐步去噪来生成新图像。
ZTSNR 调度:在训练的最后阶段,模型会接触到纯噪声(SNR 为 0)。模型学会如何从纯噪声中生成相关图像。
有限噪声调度:训练过程中,最后一个时间步添加的噪声不足以完全破坏图像的信号。模型学会在有限噪声下预测图像。
ZTSNR 模型:从纯噪声开始,模型知道如何从这种情况生成相关图像,直接生成纯黑色。
有限噪声模型:从有限噪声开始,模型会尝试从这个噪声中预测图像的平均亮度,生成亮度中等的图像。
定义:一种噪声调度策略,确保模型在训练过程中能够接触到纯噪声。
目的:消除对残余信号的依赖,从完全随机的输入中生成相关图像。
定义:模型在处理带有噪声的输入时,错误地依赖于输入中的平均信号。
问题:导致生成结果偏向于中等亮度,而不是根据具体提示生成相关图像。
训练 NAIv3:使用 ZTSNR 调度,模型在训练时接触到纯噪声,消除对残余信号的依赖。
训练至高噪声水平:模型学会了从文本条件中提取相关信息,而不是依赖于输入中的平均值。
一致性:训练过程与推理过程之间的一致性得以增强,确保生成结果更符合文本提示。
信号残留:输入数据仍包含可识别的信号,模型试图将生成结果拉回到这个信号附近。
最小化损失:模型通过调整生成结果的平均值来降低损失。
梯度下降:梯度下降算法引导模型朝着降低损失的方向更新参数。
无残留信号:模型无法依赖于任何残留信号,必须从纯噪声中提取有意义的信息。
学习新策略:模型根据文本提示生成相关图像,而不是依赖于输入中的任何平均值。
增强文本条件:模型更加依赖文本条件,避免不必要的颜色调整。
现象:生成的图像出现不必要的高对比度粗糙特征,试图将画布的平均颜色拉回到零。
图示:图3展示了在没有 ZTSNR 的情况下,生成的图像会出现不必要的高对比度粗糙特征。
原因:
均值泄漏(Mean-Leakage):在没有 ZTSNR 的情况下,模型在训练时未能接触到纯噪声,导致其在生成时依赖于输入噪声中的残留信号。模型试图将生成结果调整到输入噪声的平均值,从而导致与提示不符的高对比度特征。
信号残留:有限噪声调度使得模型在训练过程中学会依赖于输入中的信号残留,这种依赖在推理阶段会导致不准确的生成。
现象:使用 ZTSNR 时,模型能够在无限噪声下提出相关的平均画布颜色,而没有 ZTSNR 时,模型错误地认为平均颜色应为零,从而添加白色以实现这一点。
图示:图4展示了在有和没有 ZTSNR 情况下的中间去噪预测。
原因:
纯噪声接触:ZTSNR 使得模型在训练过程中接触到纯噪声,从而学习如何从完全随机的输入中提取有意义的信息。这使得模型能够更好地根据文本提示生成相关颜色和低频信息。
去除均值泄漏影响:通过 ZTSNR,模型不再依赖于有限噪声中的信号残留,而是根据文本条件进行预测。这使得生成结果更符合提示,并避免了不必要的颜色调整。
问题:SDXL 模型的最大噪声水平(\sigma_{\max})不足以破坏高分辨率图像中的低频信号。
解决:通过调整噪声调度,引入更高的噪声水平。
调整噪声调度:将噪声调度曲线调整为收敛于无限大(\sigma = \infty),在训练过程中引入更高的噪声水平。
实际效果:
**增加 \sigma_{\max}**:例如将其翻倍,可以恢复图像中的一致性和细节。
处理高分辨率图像:随着分辨率的增加,图像中冗余信号也增加,需要更多的噪声来达到相同的 SNR,从而破坏等比例的信号。
不自然的裁剪:传统图像生成模型倾向于产生不自然的裁剪效果,例如人物缺少脚或头部,或物品部分超出画面。
中心裁剪的局限:通常采用中心裁剪来处理方形数据,但这不符合大多数照片和艺术作品的分布,导致文本和图像之间的不匹配。
随机裁剪的不足:虽然随机裁剪比中心裁剪稍有改善,但仍然存在问题。
可变图像尺寸:使用可变图像尺寸进行训练可以避免重复元素和模糊图像的问题。
自定义代码实现:实现自定义批量生成代码。
分桶方法:
最大图像尺寸:512×768,最大维度为 1024。
生成不同分辨率的桶:通过改变宽度和高度组合来创建存储桶,以符合最大尺寸限制。
修剪重复的存储桶:并添加 512×512 的标准存储桶大小。
调整图像以适应桶分辨率:
保持长宽比进行缩放。
随机裁剪:如果无法精确匹配,则进行随机裁剪以确保失真最小。
多GPU训练:在每个 epoch 前对数据集进行分片,以确保每个 GPU 处理相同大小的子集。
权重分配:从加权分布中随机选择一个桶,确保训练过程中没有偏差。
通过上述方法,能够更好地处理不同尺寸和比例的图像,提高生成质量,并减少不自然裁剪带来的问题。这种方法在保持批量处理效率的同时,确保了更好的图像构图和标记效率。
https://en.wikipedia.org/wiki/Signal-to-noise_ratio_%28imaging%29
https://blog.csdn.net/weixin_44966641/article/details/139337965
https://info.support.huawei.com/info-finder/encyclopedia/zh/%E4%BF%A1%E5%99%AA%E6%AF%94.html
https://wrong.wang/paper/common-diffusion-noise-schedules-and-sample-steps-are-flawed/
https://shelf.io/blog/preventing-data-leakage-in-machine-learning-models/
https://lilianweng.github.io/posts/2021-07-11-diffusion-models/
https://github.com/Project-MONAI/GenerativeModels/issues/397
https://pplx-res.cloudinary.com/image/upload/v1727404237/user_uploads/walkzuywz/image.jpg