news 2026/9/30 9:21:53

图像修复数据集全解析:超分、去噪、去模糊等任务选型与避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
图像修复数据集全解析:超分、去噪、去模糊等任务选型与避坑指南

经常有人问我,为什么照着论文配置复现出来的图像修复(Image Restoration)模型,PSNR 就是比原文低个 1 到 1.5 dB,网络结构、损失函数、学习率全查过了一遍都没问题。我的第一反应永远是反问一句:你评测用的测试集,和作者用的是同一份吗?十次里有七八次,问题就出在这儿。图像修复这个方向的论文密度极高,但很多工作并不会在正文里写清楚自己到底用了哪个版本的测试集、按什么方式做的下采样、训练时裁剪多大。数据集这件事看着枯燥,实际上它决定了你的结果能不能和别人对齐,也决定了你训出来的模型放到真机上是能打还是只能跑分。

这篇就把图像修复算法常用的数据集从头到尾捋一遍,按退化类型分开讲——超分、去噪、去模糊、去雨、去雾、低光增强、压缩伪影去除、图像填补(inpainting),每一类说清楚有哪些集、各自的定位是什么、什么场景该用哪个、以及我在实际使用中踩过哪些坑。适合刚进这个方向准备选数据集的新手,也适合做了一段时间但结果总对不上论文的老手。

需要先说明一点:下面涉及的数据集规模、划分数量的数字,我凭的是长期使用和查论文时的记忆,具体数值请以官方仓库和原论文为准,不同版本的发布包偶尔会有微调。

1. 选数据集之前,先搞清楚你的退化类型是哪一种

1.1 "图像修复"是个筐,什么退化都能往里装

图像修复严格来说不是单一任务,而是一族任务的统称。去噪、去模糊、去雨、去雾、超分辨率、压缩伪影去除、低光增强、图像填补、老照片修复、水下图像增强,全都算在内。它们的共同点只有一个:输入是一张退化的图,目标是输出一张干净或者更高质的图。但退化是怎么产生的,差别大到几乎不像同一个领域。

大多数任务可以用一个统一的退化模型来描述:

$$ y = D(x) + n $$

其中 $x$ 是干净图像,$D(\cdot)$ 是退化算子,$n$ 是噪声,$y$ 是观测到的退化图像。超分的 $D$ 是下采样加模糊核卷积,去模糊的 $D$ 是运动模糊核卷积,去雨的 $D$ 是叠加雨纹层,去雾的 $D$ 是大气散射模型,压缩伪影去除的 $D$ 是 DCT 量化,inpainting 的 $D$ 是按掩码把像素抹掉。从这个式子反推就能明白:退化算子不同,数据集必须不同,因为数据集的核心价值就是提供"退化图—干净图"这一对监督信号。

这里有个我见过太多次的误区——把图像修复当成一个"通用去噪"问题,随手抓一个 DIV2K 加高斯噪声就开始训,训完拿到真实拍摄的照片上跑,效果惨不忍睹。原因是合成高斯噪声和真实传感器的噪声分布差了十万八千里,后面的章节会展开讲。

1.2 从退化模型倒推你该找什么数据集

选数据集的正确顺序不是"哪个数据集有名用哪个",而是"我的退化是什么—我需要配对还是非配对—我需要的规模有多大"。下面这张表是我自己梳理任务和数据集对应关系时用的,可以直接拿去对照:

任务退化来源数据形态代表数据集
超分辨率下采样 + 模糊核高分辨 / 低分辨配对DIV2K、Flickr2K、Set5、Urban100
高斯去噪人工加噪加噪 / 干净配对BSD400、DIV2K、CBSD68、Kodak24
真实去噪传感器噪声真实噪声 / 干净配对SIDD、DND
图像去模糊相机与物体相对运动模糊 / 清晰配对GoPro、HIDE、RealBlur、DVD
图像去雨雨滴、雨纹、雨雾雨图 / 无雨图配对Rain100H、Rain100L、Rain1400、SPA-Data
图像去雾大气散射有雾 / 无雾配对RESIDE、Haze4K、D-HAZY
低光增强短曝光、弱光暗图 / 亮图配对LOL、LOL-v2、SID、MIT-Adobe FiveK
压缩伪影去除JPEG 量化压缩 / 原图配对DIV2K、LIVE1、Classic5、BSD500
图像填补掩码遮挡破损 / 完整配对Places2、CelebA-HQ、Paris StreetView
人脸修复综合退化退化人脸 / 高清人脸FFHQ、CelebA-HQ、WIDER Face

这张表背后的逻辑很简单:退化算子的名字决定了数据集的名字。你如果做的是去雾,去找一个去雨的数据集,除了浪费时间不会有第二个结果。

1.3 合成退化与真实退化:两条不能混着走的路

这是新手最容易翻车的地方,我单独拎出来说。图像修复的数据集分成两大阵营:合成配对和真实配对。

合成配对的做法是先有干净图像,然后人为施加退化得到输入。优点是干净图质量高、配对精确、可以自由控制退化强度,缺点是合成的退化和真实世界存在域差异(domain gap)。GoPro 用高帧率视频连续帧平均得到模糊图,属于"物理近似合成";BSD400 加高斯噪声则属于"数学合成"。

真实配对的做法是用特殊硬件同时采集干净图和退化图,或者在真实退化视频里做分解。SIDD 用同一场景多次拍摄取平均得到近似干净图;SPA-Data 从雨视频里分离雨层得到无雨图。优点是真实,缺点是干净图本身带噪、配对存在轻微错位、采集成本极高。

我的经验是:训练用合成,评测用真实,两边都要跑。只用合成数据训练,模型会学会"反高斯噪声"这个特定操作,换到真实噪声上直接失效;只用真实数据训练,数据量往往撑不起深层网络,而且干净图本身就带残噪,模型容易学到错误的映射。比较稳妥的做法是先用大规模合成数据预训练,再用真实数据集小学习率微调,最后在真实测试集和合成测试集上分别报指标。

提示:如果你在做对比实验,务必确认对比方法用的是合成退化还是真实退化,以及退化强度参数。一个 15dB 的合成结果和一个真实场景的结果放在同一张表里比较,是没有意义的。

2. 超分与去噪:老牌基准集的分工与使用误区

2.1 Set5、Set14、BSD100、Urban100、Manga109 各自在测什么

这五个集合几乎是超分论文的固定搭配,但我发现很多人是把它们当成"五个测试集"一股脑报出来,并不清楚每个集在测什么能力。实际上它们的分工非常明确。

Set5 只有 5 张图,类别覆盖人像、鸟、蝴蝶、头骨、婴儿,是最早的经典测试集之一。它的作用更像是"快速自检",因为只有 5 张,指标波动大,单张图的差异就能把平均 PSNR 拉动 0.1dB 以上。我一般只用它来确认训练流程有没有跑通,不会拿它当最终结论。

Set14 有 14 张,内容更杂一些,包含自然场景、人脸、漫画、纹理。BSD100 是从 Berkeley 分割数据集里取的 100 张自然图像,类别分布广,是评价泛化能力的常用集。Kodak24 是 24 张经典彩色图,McMaster 是 18 张,CBSD68 是 68 张,这几个更常出现在去噪和压缩伪影去除的论文里。

Urban100 是我最看重的测试集之一。它是 100 张城市建筑照片,特点是充满重复结构和规则纹理——窗户、砖墙、栏杆、天线。这类结构对超分算法极不友好,因为简单的插值或者平滑会把这些重复纹理抹掉或者糊成一团。方法在 Set5 上拉不开差距时,在 Urban100 上往往能差出 0.3dB 甚至更多。所以看论文的 Urban100 成绩,比看 Set5 更能反映方法的真实水平。

Manga109 是 109 张日本漫画页面。它测的是线条和文字这类高频结构,Interpolate 类的算法在这里会明显吃亏。做漫画超分、文档超分的话这个集非常重要。

2.2 DIV2K、Flickr2K、DF2K:训练标配是怎么形成的

训练集这边,DIV2K 是绝对主力。它由 1000 张 2K 分辨率的高质量图像组成,划分成 800 张训练、100 张验证、100 张测试,场景覆盖自然、人物、城市、动植物,图像质量经过筛选,压缩伪影很少。它的训练子集是 800 张——这个数字不大,但对超分任务来说够用,因为每张 2K 图可以裁出很多个 48×48 或者 96×96 的小块。

Flickr2K 大约有 2650 张 2K 图像,来源是网络相册,多样性比 DIV2K 更强,但质量参差一些。把这两个合起来得到 DF2K,也就是 3450 张左右,这是目前超分训练最常见的配置。很多论文写的 "DF2K 训练"指的就是这个组合,报结果时如果你用的是 DIV2K 单独的 800 张,指标会对不上。

还有几个值得一提的:T91 是 91 张图的老训练集,早就过时了,看到论文用 T91 基本可以判断是很早期的工作;BSDS300 或者 BSDS500,500 张图,常见划分是 200 训练、100 验证、200 测试,做去噪和压缩伪影去除时经常用,通常记作 BSD400 或者 BSD500 的子集;WED 有 4744 张图,分辨率不统一,偶尔被用来做补充训练集。DIV8K 有大约 1500 张 8K 图像,做 8K 超分或者 4 倍以上放大时才会用到。

2.3 SIDD 与 DND:去噪领域绕不开的真实噪声双雄

高斯去噪用合成数据就够了,但真实去噪必须用真实噪声数据集,SIDD 和 DND 是绕不开的两个。

SIDD 的全称是 Smartphone Image Denoising Dataset,用多款手机在多种光照条件下拍摄同一场景的多张照片,通过均值合成近似干净图。它提供了 sRGB 和 RAW 两种版本,sRGB 版本常用划分是 320 对训练图像、1280 个验证块、160 对基准测试图像。它的特点是噪声类型丰富,包含了不同 ISO、不同光照下的手机传感器噪声。使用 SIDD 最大的坑是版本问题:有 SIDD-Medium、SIDD-Benchmark 等不同发布包,做对比实验时必须写清楚用的是哪个,否则别人复现不出来。

DND 是 Darmstadt Noise Dataset,50 个静态场景,每个场景采集 20 张左右,从中心裁出约 1000 个 512×512 的块。它的特殊之处在于干净图不公开,你需要把去噪结果上传到官方服务器才能拿到 PSNR 和 SSIM。这个机制的好处是杜绝了在测试集上过拟合,坏处是你没法做可视化对比,也没法快速迭代调参。我一般会在本地留一个 DND 的近似版本做快速验证,但正式结果一定走官方提交。

顺带提一句,除了 SIDD 和 DND,还有一些小众的真实去噪数据集,比如针对特定传感器或者特定场景的采集集,通用性不如这两个,除非你的应用场景非常明确,否则不建议优先选它们。

3. 去模糊、去雨、去雾:成对数据集的构造套路与隐藏坑

3.1 GoPro、HIDE、RealBlur、DVD:运动模糊的采样方式差异

去模糊的数据集构造思路是用高帧率相机拍摄视频,把连续几帧的平均作为模糊图,中间的某一帧作为清晰图。这样做出来的模糊是"物理近似"的,比用随机模糊核卷积出来的更接近真实运动模糊。

GoPro 是其中的标杆,大约 3200 对 1280×720 的图像,来自 30 多段视频,常见划分是约 2100 对训练和约 1100 对测试。它的模糊主要来自相机抖动,所以对"相机运动模糊"效果好,但对"物体运动模糊"和"景深模糊"覆盖有限。用 GoPro 训出来的模型在拍快速运动的物体时经常失效,原因就在这里。

HIDE 大约 8400 对图像,专门强化了人类和行人的场景,做行人检测、监控场景去模糊时更有针对性。它的测试子集里人和背景的模糊程度差别大,能很好地暴露算法在人体边缘处的振铃问题。

RealBlur 是我个人比较推荐的一个集。它用双相机同时拍摄,一台长曝光得到模糊图,一台短曝光得到清晰图,因此得到的是真正的真实配对,而不是通过帧平均近似出来的。它分 RealBlur-J(JPEG 压缩)和 RealBlur-R(RAW)两个版本,大约 4700 对图像,训练约 3700 对、测试约 980 对。RAW 版本对研究传感器域特性的人很有价值,但因为 RAW 数据需要额外的处理管线,用的人相对少。

视频去模糊用 DVD 和 REDS。DVD 有大约 71 段视频、6700 多对帧对;REDS 有 300 段视频、每段 100 帧,划分是 240 训练、30 验证、30 测试,同时可以做视频超分和视频去模糊。做视频任务时要注意的是帧间一致性,不能按图像任务那样一帧一帧独立处理,否则结果抖动会非常明显。

3.2 Rain100H、Rain100L、Rain1400、SPA-Data 的雨型差异

去雨的数据集按雨型分得很细,用错了集会导致结果虚高。

Rain100H 是重雨,雨纹密集、方向复杂,大约 1800 对训练加 100 对测试。Rain100L 是轻雨,雨纹稀疏且方向单一,大约 200 对训练加 100 对测试。这两个集几乎总是成对出现,因为一个好方法应该在 H 和 L 上都表现稳定——只在 L 上好、在 H 上崩掉的算法,说明它只是学到了"轻微平滑"。

Rain1400 也叫 DDN 数据集,从 1000 张干净图合成出 14000 对,包含十几种不同的雨纹方向和强度。它的规模大,适合用来训练,但因为是合成的,雨纹形状比较规则,真实场景泛化会打折。

Rain800 大约 700 训练加 100 测试,规模中等。SPA-Data 是真实雨数据集,通过对雨视频做图层分解来获得近似无雨的图像,规模非常大,有几十万对。它的价值在于真实,但分解出来的"干净图"本身带有分解误差,训练时如果直接当完美监督,模型会学到一些奇怪的残留纹理。

注意:去雨任务很容易在合成数据上刷到很高的 PSNR,但真实雨景的效果往往差很多,因为真实雨还包含雨雾、运动模糊、镜头水滴反射这些合成数据里没有的因素。如果你的目标是真实场景,建议合成数据和 SPA-Data 这类真实数据混着用。

3.3 RESIDE 五个子集的分工,以及被滥用的 SOTS

去雾这边 RESIDE 是绝对主力,但它有五个子集,很多人只用了其中一个就报结果,这实际上是不完整的。

ITS 是室内训练集,大约 14000 张合成雾图;OTS 是室外训练集,规模大得多,几十万张。SOTS 是客观测试集,室内室外各 500 张,这是绝大多数论文报 PSNR 用的集。HSTS 是混合主观测试集,规模很小,用于主观评价。RTTS 是真实任务驱动测试集,几千张真实有雾图像,用来检验真实场景泛化能力。

这里的问题在于:SOTS 是合成的,室内室外各 500 张,而且室外子集里的雾浓度是人工设定的。很多论文只报 SOTS 指标,实际上去雾方法在 RTTS 上的表现更能说明问题。我在做对比时就遇到过,某个方法 SOTS 室内指标很好看,拿到 RTTS 上一跑,颜色偏色严重、天空被过度增强成灰色,基本没法用。

除了 RESIDE,Haze4K 有大约 4000 张图,3000 训练加 1000 测试,还带类别标签,适合做多任务。D-HAZY 基于 NYU-Depth 深度数据合成,规模一千多对,配合深度图使用。这些集在特定研究里有用,但通用性不如 RESIDE。

4. 低光增强、压缩伪影与 Inpainting:三条支线的数据选择

4.1 LOL、LOL-v2、SID、MIT-Adobe FiveK 的亮度与噪声分布

低光增强看起来和去噪很像,实际上关注点完全不同。去噪关注的是噪声统计特性,低光增强关注的是亮度映射、颜色保真和暗部细节恢复。

LOL 是使用最广的低光数据集,500 对图像,常见划分是 485 训练、15 测试。它的采集方式是在同一场景下用不同曝光时间拍两张,短曝作为输入、正常曝作为参考。它的坑在于:15 张测试图的场景覆盖有限,而且采集设备单一,导致方法在 LOL 上刷分容易,换到别的暗光场景效果不稳定。

LOL-v2 扩充了这个思路,分成 Real、Real-Captured、Synthetic 几个子版本,规模和场景多样性都更好。如果你的方法要在 LOL 系列上报结果,建议至少把 LOL-v2-real 也跑一遍,能看出方法的稳定性。

SID 全称 See-in-the-Dark,是用短曝光 RAW 图配长曝光参考图,包含索尼和富士两个相机子集,短曝图像几千张、长曝参考几百张。它是 RAW 域的工作,需要先做色彩变换、白平衡、去马赛克这一整套 ISP 流程,工程量不小,但能做出真正接近原始传感器特性的结果。做手机夜景算法的话这个集很值得投入。

MIT-Adobe FiveK 有 5000 张原图,每张都有五位修图师的修图结果,这五个版本是重要的参考。它更偏向"审美增强"而不是纯低光增强,用来做通用图像增强、风格化调色会更合适。

小规模主观评测集还有 LIME、NPE、DICM、MEF、VV 这几个,每个只有十几张,主要用于人眼主观对比,不适合作为量化指标的主战场。

4.2 JPEG 压缩伪影去除:DIV2K、LIVE1、Classic5 的组合用法

压缩伪影去除(compression artifact reduction)有个固定的测试集搭配:LIVE1、Classic5、BSD68(有时和 CBSD68 混用)、Urban100。训练集则多用 DIV2K、Flickr2K、BSD400、WED。

LIVE1 只有 29 张,Classic5 只有 5 张,它们的作用和超分里的 Set5 类似,主要是为了和早期工作对齐指标。因为数量太少,单一方法的训练波动会直接体现在指标上。我做完方法选型后,通常会把最终模型在 Urban100 上也跑一遍——Urban100 的重复结构在 JPEG 块效应下会产生明显的棋盘伪影,能很好地暴露算法抑制块效应的能力。

实际操作里我会准备两套评估,质量因子(quality factor)设 10 和 40。QF=10 是很强的压缩,块效应肉眼可见;QF=40 是中等压缩,伪影比较细微,考验算法的细节保留能力。只报一个 QF 的结果说明不了太多东西。

4.3 Inpainting 与掩码:Places2、CelebA-HQ、NVIDIA Irregular Mask

图像填补这一支和前面几支的思路不太一样,它需要两组东西:图像数据集 + 掩码数据集。

图像数据方面,Places2 有大约 180 万张图像、365 个类别,是最常用的训练集,场景覆盖广所以模型泛化好。CelebA-HQ 有 3 万张 1024×1024 的高质量人脸,做人脸填补、人脸修复时是标配。Paris StreetView 大约 14900 张训练加 100 张测试,也是经典选择。另外还有 ImageNet 子集和 LSUN 的部分子集被用作补充。

掩码数据方面,早期的做法是随机生成矩形掩码,后来 NVIDIA 发布的 Irregular Mask Dataset 成了主流,大约 5.5 万张不规则掩码,其中约 5 万张训练、5 千多张测试,分成不同的孔洞比例档位。用不规则掩码训练出来的模型对真实场景的残缺(划痕、水印、文字覆盖)适应性更好,因为真实破损很少是规则的矩形。

这里有个很实际的经验:测试掩码和训练掩码必须分布一致。我见过有人用不规则掩码训练的模型,却拿规则中心掩码去测,指标看起来不错,实际上是模型"记住"了中心区域周围的语义,而不是真的会填补任意形状。做对比实验时,写清楚掩码类型和孔洞比例是基本要求。

5. 评估、划分与指标:模型训完之后最容易翻车的地方

5.1 PSNR/SSIM 的高分低感,以及 LPIPS、NIQE、FID 的补位

PSNR 和 SSIM 是图像修复的两大标准指标,但它们的局限也很明显。PSNR 是基于像素级均方误差的,它给平滑结果很高的分——一张稍微糊一点但整体均匀的图,PSNR 往往比一张清晰但局部有轻微纹理偏差的图更高。所以在超分、去模糊、去雨这些任务上,"PSNR 冠军"经常看起来比第二名还糊,这就是所谓的"高分低感"。

SSIM 考虑了亮度、对比度和结构,比 PSNR 好些,但仍然对高频细节不敏感。做感知质量研究的话,必须补上 LPIPS,它是基于深度特征的距离,和人类主观判断相关性更高;NIQE 是无参考指标,可以对真实退化图直接打分,在做真实场景评测时特别有用;FID 用生成分布的距离衡量整体质感,在人脸修复、图像生成类任务上常用。

我的做法是:主表报 PSNR 和 SSIM 保证对齐,另开一张表报 LPIPS 和 NIQE 体现感知效果,再放一组放大对比图。只报 PSNR 的论文在我的评审清单里是要打问号的,因为很容易通过删掉损失函数里的对抗项或者感知项来把 PSNR 抬高 0.2dB,同时把图做得更糊。

还有一点容易被忽略:评测时的边界处理。超分任务里有三种常见评测协议——只算 Y 通道、算 RGB 全部通道、以及是否裁剪边界。不同协议之间的 PSNR 差异可能有 0.2 到 0.5dB。对着论文复现时,先确认它用的是哪种协议,能省掉大量排查时间。

5.2 训练/验证/测试划分的四个常见陷阱

第一个陷阱是测试集泄漏。超分训练的常规做法是把 2K 图裁成小块,如果你裁块时没有按原图划分,而是先裁块再随机划分,同一张原图的不同小块可能同时落到训练和测试里,指标会虚高。正确做法是先按原图分好训练/测试,再对各自的图做裁块。

第二个陷阱是验证集被当成调参集反复使用。DIV2K 验证集只有 100 张,如果你的学习率、损失权重、模型选择全在这 100 张上选,实际上就已经过拟合了。我的习惯是留一部分训练图作为内部验证,DIV2K 验证集只在最终确定模型时用一次。

第三个陷阱是退化参数不一致。超分的 bicubic 下采样、去噪的噪声水平、压缩伪影的质量因子,这些参数不写清楚,别人没法复现。我现在的做法是在实验记录里把这些参数和随机种子都存下来,写论文时直接贴。

第四个陷阱是跨数据集的指标混用。有人会在表格里把某方法在 GoPro 上的结果和自己方法在 HIDE 上的结果放一起,这两个集就算都是去模糊,难度分布也不一样,这么做是不成立的。要么在同一个集上比,要么把两个集都跑全。

6. 把数据集落到训练管线里的实操细节

6.1 裁剪尺寸、批大小与增强的取舍

超分训练里最常用的块大小是 48×48 或者 64×64,训练时再随机裁到更小的 HR 块,比如 HR 用 192×192、对应 LR 用 48×48(4 倍放大)。块越大显存占用越高,但包含的结构信息更完整;块太小会导致模型只学到局部纹理,缺少全局上下文,在 Urban100 这类结构复杂的图上尤其明显。

去噪任务的块大小一般是 40 到 64 之间,因为噪声是局部统计特性,不需要太大的感受野。去模糊和人脸修复通常用 256×256,因为运动核的作用范围大,小块很难涵盖完整的模糊轨迹。

数据增强方面,翻转和 90 度旋转是安全且通用的,几乎不会引入分布偏移。但要注意旋转对某些任务是无效甚至有害的:去雨任务如果做 90 度旋转,雨纹方向分布就变了,会导致模型学到的方向先验失效;去模糊任务如果是相机抖动模糊,旋转会让模糊核的方向统计被破坏。人脸修复如果用随机旋转,会破坏人脸的关键对齐,效果反而变差。我的原则是:先不加增强跑通,再加上翻转对比指标,如果提升清晰再加旋转,不要一上来就堆一堆增强。

6.2 退化合成管线的搭建顺序

以超分为例,我实际用的合成顺序是这样的,顺序错了结果会不一样:

import cv2 import numpy as np def synthesize_lr(hr, scale=4, blur_kernel_size=0, sigma=0, noise_sigma=0): # 1. 先做模糊(模拟镜头和传感器的低通特性) if blur_kernel_size > 0: hr = cv2.GaussianBlur(hr, (blur_kernel_size, blur_kernel_size), sigma) # 2. 再做下采样,注意用 INTER_CUBIC 之外的核时要和训练保持一致 h, w = hr.shape[:2] lr = cv2.resize(hr, (w // scale, h // scale), interpolation=cv2.INTER_CUBIC) # 3. 最后加噪声,噪声要在 LR 域加,不是在 HR 域加 if noise_sigma > 0: lr = lr + np.random.randn(*lr.shape) * noise_sigma return np.clip(lr, 0, 255).astype(np.uint8)

这里最关键的一点是噪声要在低分辨率域加,因为真实成像里传感器的噪声是在采集时就产生的,而退化链路的顺序是"光→模糊→采样→读出噪声"。很多开源代码把噪声加在 HR 上再下采样,噪声被平均掉了,模型学到的噪声分布和真实情况完全不同,做真实退化超分时就会失效。

另外提醒一句:下采样核的选择要和评测协议一致。如果你的训练用 bicubic,评测也用 bicubic,那没问题;如果你想在真实退化上测评,就要构造混合退化(blur kernel + 下采样 + 噪声 + 压缩),这个方向常被称为 blind super-resolution,用的是 RealSR、DRealSR 这类真实配对数据。

6.3 常见加载报错与排查思路

我在用这些数据集时踩过几类反复出现的坑,列出来供参考。

现象根本原因处理方式
训练正常但指标远低于论文测试集版本或评测协议不同确认是 Y 通道还是 RGB、是否裁边、测试集划分版本
部分图像读出来是灰度PNG 带 alpha 通道或调色板模式用cv2.IMREAD_COLOR强制三通道,或先转换再裁块
训练中途 loss 突然变 NaN某些图像有 16 位深度或异常值打印图像 min/max,做归一化前先做异常值裁剪
真实数据上的 PSNR 异常高训练集和测试集场景重叠检查场景 ID,按场景而非按图像划分训练测试
视频任务结果抖动严重未做帧间一致性约束加光流或者时序模块,评测时也关注时序一致性指标

其中"真实数据上 PSNR 异常高"这一点特别值得强调。SIDD、DND 这类数据集是按场景采集的,同一场景有多张不同光照的照片,如果划分时把同一场景的图分到训练和测试两侧,模型只需要学会"看场景"就能把噪声去掉,指标能虚高好几 dB。我现在处理任何真实采集数据集,第一件事就是按场景或者采集批次分组划分。

7. 真实世界数据集与多退化统一模型

7.1 RealSR、DRealSR 与真实配对数据的采集代价

合成退化训练出来的模型有个通病:在真实照片上表现平平。原因是真实世界的退化远比"bicubic 下采样"复杂,涉及镜头像差、传感器噪声、ISP 锐化、压缩、运动模糊的叠加。为了缩小这个差距,出现了一批真实配对数据集。

RealSR 用变焦镜头在不同焦距下拍摄同一场景,短焦作为低分辨、长焦作为高分辨,包含佳能和尼康两个子集,各几百对图像。DRealSR 用类似思路,改用不同焦距的设备采集,覆盖的场景更广。City100 也是同类思路,专注城市场景。这些集的共同优点是真实,共同缺点是存在轻微的空间错位和景深差异——不同焦距下,前景和背景的放大比例并不完全一致,配准误差会污染训练信号。

我在用这类数据时的做法是:训练前先做一次全局配准,用特征匹配估计单应矩阵,把低分辨图对齐到高分辨图的视角;训练时用较温和的损失函数,比如 Charbonnier 加上适当的感知损失,不要用对错位极其敏感的纯 L1。如果数据集提供的是原始配准版本,也要先抽样检查一下对齐质量,别默认它是对的。

7.2 CDD-11 这类多退化数据集的价值与局限

近几年一个明显的趋势是把多种退化放到一个模型里统一处理,对应地出现了多退化数据集。CDD-11 就是这类代表,包含十一种退化类型,覆盖去噪、去雨、去雾、去模糊、低光、压缩伪影等,并把它们组织成配对形式,规模在十万对级别。它的价值在于让一个模型同时学多种退化,训练出的模型泛化性强,不需要事先知道输入是哪种退化。

它的局限也很明显:每种退化的样本量被摊薄了,单类退化上的性能通常不如专门训练的模型;不同退化之间的难度差异大,训练时容易出现某一类退化主导梯度的情况,需要做损失加权或者分阶段训练。

我的实际经验是:做通用修复模型时,先用单退化数据集分开训练出几个专家模型,再用多退化数据集做统一蒸馏或者多任务联合微调,效果比直接端到端训一个统一模型稳定得多。直接端到端训练时,很常见的现象是去雨和去雾学得不错,去噪和超分几乎没学动,原因是这两类任务的梯度量级差太多。

7.3 人脸、文档、遥感等垂直场景的数据集

最后简单过一下垂直场景,因为这些领域用的集和通用修复差别挺大。

人脸修复用 FFHQ 和 CelebA-HQ。FFHQ 有 7 万张 1024×1024 的高质量人脸,多样性好,是 GPEN、CodeFormer 这类方法的主要训练集。评测除了 PSNR、SSIM、LPIPS,还会看身份一致性(用 ArcFace 特征距离)和面部关键点检测的稳定性。做盲人脸修复时,退化合成要覆盖低分辨率、模糊、噪声、JPEG 压缩、以及真实老照片的划痕,单一退化训出来的模型在真机上基本不能用。

文档修复和去畸变用 DocUNet、Doc3D 这类,前者主要测畸变矫正,后者提供 3D 网格用于合成更真实的弯曲形变。文档场景的特殊之处在于,人物主观上不能接受任何文字模糊,所以评估时除了 PSNR 还要看 OCR 准确率——这个指标比 PSNR 更贴近实际用途。

遥感图像修复用 AID、UCMerced、Sentinel-2 相关的数据集,特点是多光谱、图像大、纹理重复性强。做遥感去云、去噪、超分时,要注意不同波段的空间分辨率不同,不能在 RGB 上验证完就直接套到多光谱上。

水下图像增强有 UIEB 这类真实采集集,包含约 890 对有参考的水下图像,配几百张无参考图。它的评测比较特殊,除了 PSNR,还会用 UIQM、UCIQE 这些专门为水下场景设计的水下图像质量指标。

这些垂直场景的共同规律是:通用指标只能做参考,领域指标才是决定性的。做垂直场景的修复,花在领域指标上的时间往往比花在模型结构上的时间还值钱。

我个人在实际操作中的体会是,图像修复这个方向,数据集的选择和配准、划分、评测协议这些"脏活"占了整个项目三分之一以上的时间,但它们对最终结果的影响,往往比换一个网络结构更大。见过太多人在结构上反复折腾,却从没检查过自己的测试集到底和论文是不是同一份。

最后一个可以立刻用上的小技巧:给你用的每个数据集写一个简短的 README,记录来源、版本、划分方式、退化参数、评测协议,以及你实际测出来的 baseline 数值。半年后你需要复现自己的实验时,这个小文件能省掉你一整天。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 9:21:11

ABAQUS与ANSYS怎么选?非线性与工程复杂性的实战对比

1. 先说结论:这两款软件不是"谁更好",而是"谁更合适"入行这些年,被问得最多的一个问题就是"ABAQUS和ANSYS到底选哪个?"尤其是做非线性分析的朋友,总想找一个一劳永逸的答案。我的回答通…

作者头像 李华
网站建设 2026/9/30 9:20:30

AIoT数字化转型实战:从架构选型到RK3566边缘网关落地

1. AIoT在数字化转型里的真实定位:不是锦上添花,是“通感”的底座 先说个我这些年做项目常碰到的现象。很多企业一说数字化转型,第一反应就是上ERP、上CRM,或者把一堆Excel表格搬进某个SaaS系统里。这些动作当然重要,但…

作者头像 李华
网站建设 2026/9/30 9:18:51

金融客服合规引擎:实时情绪识别与敏感词拦截实战

简介:这份资料面向金融科技从业者、客服系统产品经理及大模型应用开发者,聚焦金融客服场景下质效提升与合规管控的双重难题,给出基于DeepSeek的完整技术方案。内容围绕对话情绪识别与敏感词实时拦截两条主线展开,涵盖语料特征提取…

作者头像 李华
网站建设 2026/9/30 9:17:55

Cocos Creator 场景切换全解析:从机制到实践,告别流程混乱

1. 场景不是"界面",先理顺 Cocos Creator 中的场景概念与构建配置先说个很多新手都会踩的坑:把"场景"理解成游戏里的一个"页面"。这个概念一旦偏了,后面做场景切换时就会绕很多弯路,尤其是当你想做…

作者头像 李华
网站建设 2026/9/30 9:17:55

腾讯AI工程化实践:Agent能力如何拆解为可复用服务

1. Octop不是“另一个Agent框架”,而是腾讯内部AI工程化沉淀的公开切片 最近在几个技术群和开源社区里,陆续看到有人转发“Octop:腾讯的开源 Agent”这个标题,点进去却发现项目主页空空如也,GitHub仓库刚建、README只…

作者头像 李华