跳转至

PNG: Diffusion-Based sRGB Real Noise Generation via Prompt-Driven Noise Representation Learning

会议: CVPR 2026
arXiv: 2603.04870
代码: 无
领域: 图像去噪 / 噪声生成
关键词: sRGB噪声生成, prompt学习, 一致性模型, 去噪, metadata-free

一句话总结

PNG提出用可学习的Global/Local Prompt组件从真实噪声中自动提取噪声特征(替代ISO/相机型号等metadata),通过Prompt AutoEncoder编码噪声到latent空间+Prompt DiT(基于一致性模型)一步生成latent code,实现无需任何metadata的真实sRGB噪声合成,下游DnCNN去噪在SIDD上仅落后真实数据0.08dB。

研究背景与动机

领域现状:sRGB域去噪是低层视觉的核心问题。主流监督学习方法依赖大量noisy-clean图像对训练,但真实配对数据的采集极其昂贵(需多帧平均或特殊硬件),限制了实际应用。因此,噪声生成(noise synthesis) 方法兴起——用生成模型合成逼真噪声图像,扩充训练数据。

现有痛点:当前噪声生成方法(NoiseFlow、Flow-sRGB、NeCA-W等)在训练和测试时都依赖相机metadata(如ISO值、传感器型号、快门速度等)作为条件。但在真实场景中:(a)网上公开的sRGB图像通常经过后处理,EXIF标签丢失;(b)科学成像等领域的metadata格式不统一或缺失;(c)不同设备之间metadata语义不一致。这限制了方法的通用性。

核心矛盾:metadata本质上是噪声分布的一种紧凑描述(ISO→增益→噪声强度,相机型号→ISP管线→噪声空间相关性)。问题是:能否直接从噪声图像本身学习出这种描述,而不依赖外部metadata?

本文目标 (a)消除训练和测试阶段对metadata的依赖;(b)从有限的噪声样本中学习到能替代metadata的高维特征表示;(c)生成的噪声足够逼真,使下游去噪器性能接近甚至超过用真实数据训练的结果。

切入角度:借鉴NLP/视觉中prompt learning的思想——用可学习的prompt组件作为"噪声特征的隐式编码器",从输入噪声的统计特性(通道均值/方差对应ISO、局部相关系数对应传感器特性)中自动提取prompt features,代替显式metadata。

核心 idea:用学习的Global Prompt(捕获ISO相关的全局噪声统计)和Local Prompt(捕获ISP管线引入的局部空间相关性)替代metadata,驱动基于一致性模型的扩散式噪声生成框架。

方法详解

整体框架

PNG由两个核心组件组成,分两阶段训练:

第一阶段:Prompt AutoEncoder (PAE)。输入真实噪声 \(\mathbf{n}_{Real} = \mathcal{I}_{Noisy} - \mathcal{I}_{Clean}\)。Prompt Encoder \(\mathcal{E}\) 将噪声编码为latent code \(\mathbf{z}\),同时通过Global Prompt Block和Local Prompt Block生成prompt features \(\mathbf{F}_{Global}\), \(\mathbf{F}_{Local}\)。Decoder \(\mathcal{D}\)\(\mathbf{z}\) 和clean image \(\mathcal{I}_{Clean}\) 为条件重建noisy image \(\hat{\mathcal{I}}_{Noisy}\)(学习信号依赖特性)。用 \(\mathcal{L}_1\) 重建损失 + \(\mathcal{L}_2\) latent正则训练。

第二阶段:Prompt DiT (P-DiT)。在PAE的latent空间上训练一致性模型(CM)。P-DiT以prompt features和clean image为条件,将随机噪声 \(\mathbf{z}_T\) 一步映射为latent code \(\hat{\mathbf{z}}_0\),再由PAE Decoder解码为noisy image。

推理:给定少量真实噪声 \(\mathbf{n}_{Real}\) → Prompt Encoder提取prompt features → P-DiT一步生成新latent code → Decoder+clean image → 合成noisy image。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    A["真实噪声 n_Real<br/>= 噪声图 − 干净图"] --> B["Prompt Encoder<br/>编码为 latent z"]
    B --> C["Global Prompt Block<br/>通道均值/方差 → 全局特征 F_Global"]
    B --> D["Local Prompt Block<br/>邻域相关系数 → 局部特征 F_Local"]
    E["随机噪声 z_T"] --> F["Prompt DiT(一致性模型)<br/>一步生成 latent ẑ_0"]
    C --> F
    D --> F
    G["干净图像"] --> F
    F --> H["PAE Decoder 解码<br/>合成 noisy image"]
    G --> H

关键设计

1. Global Prompt Block:用通道统计量隐式编码 ISO 增益

Metadata 里 ISO 之所以有用,是因为它决定传感器增益、进而决定噪声整体强度——而噪声强度恰好写在通道的均值和方差里。GPB 顺着这条线索,不去读 ISO 数值,而是直接从输入特征 \(\mathbf{F}_{In}^\ell\) 算出通道均值 \(\mu\) 和标准差 \(\Sigma\) 来反映全局噪声水平,用它们经 \(1\times1\) 卷积加 softmax 生成一组调制系数 \(\mathbf{w}_{Global}^\ell = \text{Softmax}(\text{Conv}_{1\times1}[\mu(\mathbf{F}_{In}^\ell), \Sigma(\mathbf{F}_{In}^\ell)])\),再去加权一个可学习的 prompt 组件 \(\mathbf{P}_{Global}^{\ell} \in \mathbb{R}^{\frac{H}{2^\ell} \times \frac{W}{2^\ell} \times C_{Global}^\ell}\),最后过 \(3\times3\) 卷积输出 \(\mathbf{F}_{Global}^\ell = \text{Conv}_{3\times3}(\mathbf{w}_{Global}^\ell \odot \mathbf{P}_{Global}^\ell)\)。这样可学习参数负责"全局噪声大概长什么样"的先验,而当前样本的统计量负责"这次具体多强",两者相乘就得到了一份不依赖 ISO 数值、却携带等价信息的全局噪声描述。

2. Local Prompt Block:用邻域相关系数捕获相机指纹

真实 sRGB 噪声并非逐像素独立——ISP 管线里的去马赛克、非线性映射、空间自适应处理都会让相邻像素的噪声相互关联,而这种局部相关模式正是区分不同相机型号的"指纹",纯靠全局统计量根本看不到。LPB 于是在每个像素位置取一个 \(\rho\times\rho\) 邻域,计算邻域像素与中心像素的 Pearson 相关系数,堆成相关系数图 \(\mathbf{F}_\rho \in \mathbb{R}^{H \times W \times \rho^2}\);再分别沿行、列取均值(ISP 的非线性操作往往带方向性,行/列均值能把这种方向性噪声暴露出来),经 CoMB(\(1\times1\) 卷积 → 双线性上采样 → \(3\times3\) 卷积)加 softmax 得到局部调制系数

\[\mathbf{w}_{Local} = \text{Softmax}(\text{CoMB}([\text{Avg}_{row}(\mathbf{F}_\rho), \text{Avg}_{col}(\mathbf{F}_\rho)]))\]

最后同样去调制局部 prompt 组件,输出 \(\mathbf{F}_{Local} = \text{Conv}_{3\times3}(\mathbf{w}_{Local} \odot \mathbf{P}_{Local})\)。GPB 管"噪声多强"、LPB 管"噪声怎么空间纠缠",两份 prompt 合起来就替代了 ISO + 相机型号这对最关键的 metadata。

3. Prompt DiT:一致性模型把噪声生成压成一步

有了 prompt features 还需要一个生成器,既要逼真又要快。P-DiT 没有在像素空间扩散,而是在 PAE 的 latent 空间上训练一致性模型(CM),把随机噪声 \(\mathbf{z}_T\) 一步映射成带噪声特征的 latent code \(\hat{\mathbf{z}}_0\)——一步生成让 256×256 分辨率下吞吐达到 57 张/秒。骨干是 DiT-S(\(B=8\) 个 block,patch size = 1 以保留精细噪声纹理),条件来自三路:timestep embedding、clean image 和两份 prompt。具体做法是把 clean image 与 \(\mathbf{F}_{Local}\)\(\mathbf{F}_{Global}\) 各自 pixel downsample 后过 \(3\times3\) 卷积提浅层特征,拼成 \(\mathbf{F}_{Cond}\),再 global average pooling 加到 timestep embedding 上。但只这样注入会丢掉空间信息,所以 P-DiT block 里额外加了 Prompt Attention——把条件特征转成 Q/K/V 注入 attention 层,让模型用上 prompt 的空间结构;消融里光是这一步就把 KLD 从 0.0287 拉到 0.0261,说明仅靠 AdaLN 式的全局条件注入并不够。

损失函数 / 训练策略

PAE训练\(\mathcal{L}_1\) 损失(noisy image重建) + \(\mathcal{L}_2\) latent正则。Adam优化器,lr从 \(10^{-4}\) 余弦退火到 \(10^{-6}\),400k迭代,patch 256×256,batch 64。

P-DiT训练:一致性训练损失(pseudo-Huber loss),\(d(\mathbf{x},\mathbf{y}) = \sqrt{\|\mathbf{x}-\mathbf{y}\|_2^2 + c^2} - c\)。RAdam优化器,固定lr \(2 \times 10^{-4}\),250k迭代,patch 256×256编码为32×32 latent,batch 512。使用EMA(decay 0.9999)稳定训练。离散化curriculum从 \(s_0=10\) 递增到 \(s_1=160\),lognormal noise sampling。

实验关键数据

主实验:SIDD验证集噪声质量(KLD↓ / AKLD↓)

相机 C2N KLD NeCA-W KLD NAFlow KLD PNG KLD
G4 0.1660 0.0242 0.0254 0.0174
GP 0.1315 0.0432 0.0352 0.0143
IP 0.0581 0.0410 0.0339 0.0291
N6 0.3524 0.0206 0.0309 0.0167
S6 0.4517 0.0302 0.0272 0.0193
平均 0.2129 0.0342 0.0305 0.0194

PNG在所有5款手机上KLD和AKLD均取得最优。

下游去噪性能(DnCNN on SIDD Benchmark)

训练数据 PSNR(dB) SSIM
C2N (合成) 33.76 0.901
NeCA-W (合成) 34.74 0.912
NAFlow (合成) 37.22 0.935
PNG (合成) 37.55 0.937
Real (真实数据) 37.63 0.936

PNG合成数据训练的去噪器与用真实数据训练的oracle仅差0.08dB、SSIM甚至超出0.001。

跨域泛化(混合训练设置,50%真实+50%合成)

方法 PolyU PSNR Nam PSNR SIDD Val PSNR SIDD+ PSNR 平均
Real (100%) 36.34 35.35 37.72 35.68 36.27
NAFlow-Mixed 37.29 37.47 37.66 36.27 37.17
PNG-Mixed 37.98 38.09 37.96 36.57 37.65

混合训练中PNG在所有4个数据集上均超过纯真实数据训练,平均PSNR+1.38dB。

消融实验

GPB LPB KLD↓ AKLD↓ 说明
0.6182 0.4387 无prompt,失败
0.0287 0.1112 仅全局,大幅提升
0.0261 0.1108 全局+局部,最优

Metadata分类实验:用prompt features做相机传感器分类准确率94.47%(baseline 75.80%),ISO+传感器联合16类Top-1为75.48%,top-3为98.64%,证明prompt确实编码了metadata等价信息。

关键发现

  • GPB贡献最大——加入GPB后KLD从0.6182暴降到0.0287。LPB在此基础上进一步降低到0.0261,提升相对较小但在局部相关性建模上不可替代
  • Prompt Attention在P-DiT中很重要——同时在timestep embedding和attention中注入条件,比仅用timestep embedding KLD从0.0287降到0.0261
  • 推理速度:256×256分辨率下PNG 57张/秒,比NAFlow(13张/秒)快4.4倍;512×512下21张/秒 vs 8张/秒
  • 扩大合成数据量可以持续提升泛化性能(×1→×4,外部数据集平均PSNR从36.74提升到37.23)

亮点与洞察

  • Prompt替代Metadata的思路非常优雅:不是简单地去掉metadata条件,而是提出结构化的方式(通道统计→全局prompt、局部相关系数→局部prompt)从噪声本身提取等价信息。分类实验证明prompt确实编码了传感器和ISO信息,给出了可解释性
  • 两阶段训练+CM一步生成的架构设计:PAE在图像空间学习紧凑latent表示和prompt提取,P-DiT在latent空间用一致性模型一步生成,兼顾了生成质量和推理效率。这个"先学紧凑空间再做生成"的范式可以推广到其他条件生成任务
  • 跨域能力是真亮点:在SIDD(智能手机)上训练,可以直接用PolyU/Nam(DSLR)的噪声样本生成对应噪声,而metadata依赖的方法在此场景完全失效

局限与展望

  • 仍需要少量真实噪声样本(用于提取prompt features),不是完全zero-shot的噪声生成
  • PAE总参数约44M,模型规模中等,但两阶段训练(400k + 250k)仍较耗时
  • 实验均基于DnCNN作为下游去噪器,未验证在更强的去噪器(如Restormer、NAFNet)上的表现
  • Local Prompt的Pearson相关系数计算需要真实噪声patch,在完全无配对数据的场景下可能受限
  • 未探索RAW域噪声生成(当前仅限sRGB域),RAW域的噪声更规则、metadata更明确,可能是另一个有价值的方向

相关工作与启发

  • vs NAFlow:NAFlow用normalizing flow,推理时不需metadata但训练仍需。PNG在训练和测试都不需metadata,且KLD平均优0.0111、去噪PSNR高0.33dB、推理速度快4.4倍
  • vs NeCA-W:NeCA-W需要为每个相机型号训练独立模型(5×40.5M参数),PNG用单一模型统一处理所有设备(44M参数总共),且在跨域场景下明显更优
  • vs C2N/Flow-sRGB:这些早期方法生成噪声质量远不如PNG,在下游去噪上差距巨大(33-34dB vs 37.55dB)
  • 这篇论文展示了prompt learning在低层视觉任务中的强大潜力,prompt作为"隐式条件编码器"的范式值得在其他退化建模任务(如模糊、压缩伪影)中探索

评分

  • 新颖性: ⭐⭐⭐⭐ Prompt替代metadata的框架设计有创意,GPB/LPB从噪声统计中自动提取特征的方法巧妙
  • 实验充分度: ⭐⭐⭐⭐⭐ SIDD/PolyU/Nam/SIDD+/MAI2021多数据集,噪声质量+去噪性能双评估,paired/unpaired两种设置,消融全面
  • 写作质量: ⭐⭐⭐⭐ 方法描述清晰,图示直观,实验分析详尽。补充材料非常充实
  • 价值: ⭐⭐⭐⭐ 消除metadata依赖是实际应用中的真需求,跨域泛化能力使其在数据增强场景价值很高