3、AI ISP核心组件:基于CNN的去噪模块、基于GAN的超分辨率、基于Transformer的色彩重建

各位好,欢迎来到第三章。今天咱们聊聊AI ISP里最核心的三个“打手”——CNN去噪、GAN超分、Transformer色彩重建。这三个模块,说白了就是现代AI ISP的“三驾马车”。我个人习惯把它们比作一个摄影团队:CNN是那个负责清理画面噪点的后期修图师,GAN是那个能把小图脑补成大图的“想象力担当”,而Transformer则是那个对色彩极其敏感、能把灰蒙蒙的片子调出电影感的调色师。

嗯,咱们一个一个来看。

3.1 基于CNN的去噪模块:从“磨皮”到“智能降噪”

去噪,是ISP最古老也最头疼的问题之一。传统方法像什么中值滤波、双边滤波,说白了就是“暴力磨皮”,细节和噪点一起干掉。我在项目中遇到过,用双边滤波处理夜景照片,人脸是光滑了,但头发丝和衣服纹理全糊了,用户投诉说“照片像油画”。

CNN来了之后,情况完全不一样了。它学的是“哪些是噪点,哪些是细节”,然后只对噪点下手。

3.1.1 经典架构:U-Net与残差学习

目前工业界最常用的去噪CNN架构,我个人推荐U-Net。为什么?因为它有“编码-解码”结构,能同时捕捉全局上下文和局部细节。你想想看,一张照片里的噪点,有的在暗部(全局),有的在边缘(局部),U-Net正好两头都能照顾到。

另一个关键技巧是残差学习。模型不直接学“干净图像”,而是学“噪声图”。输入是带噪图,输出是噪声,然后用输入减去噪声得到干净图。这样做的好处是,模型只需要关注“差异”,学习难度大大降低。

核心公式:

I_clean = I_noisy - N(I_noisy)

其中N(·)是CNN预测的噪声图。

我曾经在低光场景下测试过,直接学干净图,PSNR大概在32dB左右;换成残差学习,直接跳到36dB。差距很明显。

3.1.2 实战中的“坑”与避坑指南

这里分享一个我踩过的坑。有一次,我用一个在公开数据集上训练好的去噪模型,直接部署到手机ISP流水线上。结果发现,拍出来的照片在天空区域出现了奇怪的“色块”。

避坑指南:我曾经以为公开数据集(如SIDD)足够通用,但忽略了真实传感器噪声的“非高斯性”。手机传感器的噪声,其实是“泊松-高斯混合噪声”,而且不同ISO下噪声分布完全不同。解决方案是:在训练时加入“噪声模拟器”,模拟真实传感器的噪声特性。

另外,计算量也是个问题。U-Net虽然效果好,但参数量大,移动端跑不动。我建议用“轻量化设计”,比如用深度可分离卷积替换标准卷积,或者用“通道注意力”机制(如ECA-Net)来减少冗余计算。

3.2 基于GAN的超分辨率:让模糊变清晰,但别“脑补”过头

超分辨率(SR),说白了就是“放大图片并补全细节”。传统方法插值出来的图,边缘是锯齿状的,像马赛克。GAN的出现,让SR有了“想象力”——它能生成高频细节,让放大后的照片看起来像真的。

3.2.1 SRGAN与ESRGAN:从“像”到“真”

SRGAN是开山之作。它用生成器做上采样,用判别器判断“这是真实高分辨率图还是生成的”。生成器为了骗过判别器,会努力生成更逼真的纹理。

但SRGAN有个问题:生成的纹理有时候是“假的”。比如,一张人脸照片放大后,GAN可能会在皮肤上“脑补”出毛孔,但位置和真实情况对不上。这就是所谓的“伪影”。

后来ESRGAN做了改进,引入了“残差密集块”(RRDB)和“相对判别器”。我个人在项目中测试过,ESRGAN生成的纹理更自然,伪影少了很多。但注意,它依然不是“无损放大”,只是“看起来合理”。

我的经验:在安防监控场景下,人脸超分用GAN效果很好,因为人眼对“是否像真人”很敏感。但在医学影像(如CT)上,我坚决不用GAN,因为“脑补”出来的细节可能会误导医生诊断。这种情况下,我更推荐用基于CNN的“保真度优先”超分模型。

3.2.2 训练GAN的“玄学”

训练GAN,说白了就是“生成器和判别器打架”。我刚开始做的时候,经常遇到“模式崩塌”——生成器只学会生成一种纹理,比如所有草地都生成同一种草。

怎么解决?我建议用“WGAN-GP”损失函数,它用Wasserstein距离代替JS散度,训练更稳定。另外,学习率要调小,我一般设成1e-4,判别器比生成器多训练一步。

3.3 基于Transformer的色彩重建:从“调色盘”到“全局理解”

色彩重建,包括白平衡、色调映射、色彩校正等。传统方法依赖统计假设(如灰度世界假设),但遇到复杂光源(比如舞台灯光)就崩了。Transformer的优势在于,它能通过自注意力机制,理解“全局色彩关系”。

3.3.1 为什么是Transformer?

CNN的感受野是局部的,它看一个像素的颜色,只能看到周围一小块区域。但色彩是全局的——比如一张夕阳照片,天空的暖色和地面的冷色是相互影响的。Transformer的self-attention能让每个像素“看到”整张图,从而做出更合理的色彩调整。

我举个例子。有一次处理一张室内照片,一半是暖色灯光,一半是自然光。传统方法要么整体偏暖,要么整体偏冷。用Transformer模型,它自动识别出“左侧是暖光源,右侧是冷光源”,然后分别做白平衡,效果非常自然。

3.3.2 实战架构:IPT与Restormer

目前比较成熟的方案是IPT(Image Processing Transformer)和Restormer。IPT把图像切成patch,然后用Transformer编码器处理,最后用解码器重建。Restormer则引入了“多尺度”和“门控机制”,计算量更小。

这里给出一段简化的Restormer核心代码(PyTorch风格):

class RestormerBlock(nn.Module):
    def __init__(self, dim):
        super().__init__()
        self.norm1 = LayerNorm(dim)
        self.self_attn = MultiHeadAttention(dim, num_heads=8)
        self.norm2 = LayerNorm(dim)
        self.ffn = FeedForward(dim, hidden_dim=dim*4)

    def forward(self, x):
        x = x + self.self_attn(self.norm1(x))
        x = x + self.ffn(self.norm2(x))
        return x

注意:Transformer的计算量是O(n²),n是patch数量。对于4K图像,patch数量可能达到几十万,显存直接爆炸。我建议用“窗口注意力”(如Swin Transformer)或“轴向注意力”来降低复杂度。

3.4 三者的协同:AI ISP的“混合架构”

在实际ISP流水线中,这三个模块不是孤立的。我通常这样安排:

  1. 先去噪,再超分:如果先超分,噪点会被放大,后续去噪更难。
  2. 色彩重建放在最后:因为去噪和超分可能会改变色彩分布,最后做色彩重建可以统一校正。

下面这张图展示了我在一个项目中使用的混合架构流程:

AI ISP混合架构流程图 RAW输入 CNN去噪模块 U-Net + 残差学习 GAN超分辨率模块 ESRGAN + 相对判别器 Transformer色彩重建 Restormer + 全局自注意力 最终RGB输出 关键设计原则 1. 先降噪后超分 2. 色彩重建最后做 3. 各模块独立优化

嗯,这个流程我用了两年了,效果稳定。但要注意,每个模块的输入输出格式要统一。比如CNN去噪输出是16位线性数据,GAN超分可能要求8位sRGB,中间需要做格式转换。我曾经因为忘记做gamma校正,导致色彩重建模块输入数据范围不对,结果输出偏色严重。

3.5 性能对比与选型建议

最后,我整理了一个表格,方便大家在实际项目中做选型参考:

模块 优势 劣势 适用场景 推荐模型
CNN去噪 速度快,保真度高 细节恢复有限 移动端、实时视频 U-Net轻量版
GAN超分 纹理逼真,视觉效果好 可能产生伪影,训练不稳定 照片美化、安防人脸放大 ESRGAN
Transformer色彩 全局色彩准确,适应复杂光源 计算量大,显存占用高 专业摄影、影视后期 Restormer

我的建议:如果你做的是手机ISP,算力有限,优先保证CNN去噪和轻量级色彩校正,GAN超分可以做成“可选增强”功能,让用户自己决定是否开启。如果是云端处理,那三个模块全上,效果拉满。