简介:本文系统解析基于扩散模型的图像着色原理,重点阐述LAB颜色空间的设计动机、亮度通道保持机制、UNet噪声预测流程,以及灰度特征与去噪特征融合的协作逻辑,帮助读者理解其为何能实现高质量黑白图像上色。
图像着色(Image Colorization)是计算机视觉中的经典问题:给定一张灰度图像(仅含亮度信息),推断出每个像素合理的颜色值(色相与饱和度),从而生成视觉上自然的彩色图像。这一任务的本质困难在于多模态不确定性——同一张黑白照片,衣服可以是红色也可以是蓝色,天空可以是晴朗的蓝也可以是阴沉的灰,不存在唯一正确答案。
传统方法通常采用回归模型直接预测颜色,容易产生“平均化”的灰暗结果:当模型面对多种合理着色方案时,会将它们平均,导致颜色饱和度低、视觉上缺乏生动感。扩散模型(Diffusion Model)通过逐步去噪的生成方式,能够建模这种多模态分布,从而生成更自然、更多样的着色结果。
本文讨论的核心技术原理是:如何利用扩散模型在LAB颜色空间中对灰度图像进行着色,并通过通道分离、噪声添加策略和条件特征融合,实现亮度保持与颜色生成的解耦控制。
理解为什么选择LAB空间,需要先看RGB空间直接着色的两个核心问题:
问题一:亮度与颜色耦合。 在RGB空间中,亮度信息分散在R、G、B三个通道中。如果模型对三个通道同时加噪、去噪,那么它既在修改颜色,也在修改亮度。对于着色任务而言,我们并不希望改变原图的亮度结构——灰度图的亮度分布是确定的输入条件,需要严格保留。亮度的轻微偏移会直接破坏图像的对比度和结构感。
问题二:颜色通道的感知不均匀性。 RGB空间的欧氏距离与人类视觉感知差异并不一致。两个在RGB空间中距离相近的颜色,人眼可能感知差异很大;反之亦然。这导致模型在学习颜色分布时,难以获得符合视觉感知的优化目标。
LAB颜色空间为此提供了天然的解耦结构。
LAB颜色空间将颜色信息分解为三个正交维度:
| 通道 | 含义 | 数值范围(常见归一化) | 在着色任务中的角色 |
|---|---|---|---|
| L(Lightness) | 亮度 | 0(黑)~100(白) | 输入条件,保持不变 |
| A | 绿-红轴 | -128~127 | 待预测的颜色通道 |
| B | 蓝-黄轴 | -128~127 | 待预测的颜色通道 |
关键性质:
因此,着色任务被转化为:已知L通道,预测A、B通道。
基于扩散模型的着色系统可拆解为以下核心模块:
前向过程负责将真实彩色图像的A、B通道逐步加噪,直至变为纯噪声。关键设计是:只对A、B通道加噪,L通道始终保持不变。
这一设计的意义在于:在训练中,模型始终能看到清晰的亮度结构,只需学习“在给定亮度下,颜色通道的噪声如何分布”。这大幅降低了学习难度,因为模型不需要同时建模亮度生成和颜色生成。
UNet是一种编码器-解码器结构,配合跳跃连接(Skip Connection),能够在不同尺度上提取和融合特征。在着色扩散模型中,UNet的输入通常包括:
UNet的输出是对当前噪声的预测,用于后续的去噪步骤。
这是着色任务区别于无条件图像生成的关键模块。由于着色是条件生成任务——颜色必须与亮度结构一致——模型需要将灰度图像的特征注入去噪过程。
常见的融合方式包括:
原始描述中提到“在训练时将灰度图像特征与去噪UNet的特征结合”,这属于特征级融合的思路,目的是让模型在去噪的每一步都能“看到”亮度结构,从而生成与结构一致的颜色。
训练完成后,从纯噪声出发,经过多步迭代去噪,最终得到预测的A、B通道。将其与原始L通道合并,再转换回RGB空间,即得到彩色图像。
以下按推理阶段(实际着色)的顺序说明完整流程:
第一步:输入预处理。
第二步:迭代去噪。
对于每一步 t = T, T-1, …, 1:
第三步:结果合成。
第四步:后处理(可选)。
这一机制的核心价值是解耦。如果对L通道也加噪,那么:
通过固定L通道,模型的学习目标被简化为“在已知亮度条件下,颜色通道的噪声分布是什么”,这既降低了训练难度,也保证了推理时亮度结构的严格保持。
标准扩散模型的前向过程是马尔可夫的:每一步只依赖上一步的状态。而非马尔可夫前向扩散过程意味着当前步的噪声状态可能依赖于更早的历史状态,或者采样路径的设计允许跳步、自适应步长等。
在着色任务中,非马尔可夫设计的潜在优势包括:
需要注意的是,具体实现方式取决于模型设计,但核心思想是打破“每步只依赖前一步”的约束,从而获得更灵活的生成路径。
灰度图特征与去噪特征的融合方式直接影响颜色与结构的对齐程度。如果融合不充分,可能出现:
通过在多尺度上融合(UNet的编码器、瓶颈层、解码器均注入灰度特征),模型能够在不同粒度上感知结构信息:浅层特征对应边缘和纹理,深层特征对应语义区域。这使得颜色既能贴合局部边界,又能符合整体语义(如天空是蓝色、草地是绿色)。
LAB与RGB之间的转换是非线性变换,涉及白点参考、伽马校正等。在实现中需要注意:
以下为推理阶段的简化伪代码描述:
输入:灰度图 gray_image1. L = rgb_to_lab(gray_image).L # 提取亮度通道2. A_noisy, B_noisy = sample_gaussian_noise(shape=L.shape)3. for t in reversed(range(T)):4. noise_pred = UNet(A_noisy, B_noisy, t, condition=L)5. A_noisy, B_noisy = denoise_step(A_noisy, B_noisy, noise_pred, t)6. lab_image = merge(L, A_noisy, B_noisy)7. color_image = lab_to_rgb(lab_image)输出:color_image
其中 denoise_step 的具体公式取决于扩散过程的设计(马尔可夫或非马尔可夫)。
优势:
边界与限制:
误区一:扩散模型着色是“还原真实颜色”。
实际上,着色是生成任务,不是恢复任务。模型生成的是“合理”的颜色,而非“真实”的颜色。同一张灰度图可以有不同的合理着色结果。
误区二:只对颜色通道加噪会限制生成能力。
恰恰相反,固定L通道使模型专注于颜色建模,反而能生成更生动的颜色。亮度结构由输入提供,不需要模型“想象”。
误区三:LAB空间一定优于RGB。
LAB在着色任务中的优势主要来自通道解耦和感知均匀性,但在某些特定场景下,其他颜色空间或直接RGB建模也可能有效。选择取决于任务需求和模型设计。
基于扩散模型的图像着色,其核心原理可归纳为三点:
理解这一原理,不仅有助于正确使用相关工具,也能帮助开发者在实际应用中针对具体场景调整模型设计、数据预处理和采样策略,从而获得更符合需求的着色效果。