[控场AI]
· 6 分钟阅读· 3,442 字

合成恶劣天气反而拖累真实场景:数据集几何缺失的教训

合成恶劣天气反而拖累真实场景:数据集几何缺失的教训

为语义分割模型加入恶劣天气增广反而使真实场景精度下降,根因是训练数据缺失关键几何形态,补数据远比精修增广更有效。

一位开发者实验发现,为越野语义分割模型加入物理建模的恶劣天气数据增广后,五种架构在真实恶劣天气下的天空类别IoU全部下降1至13点,但合成测试集上毫无异常。根因在于训练集RELLIS-3D以开阔地形为主,模型学到了"明亮+地平线以上+低纹理=天空"的脆弱捷径,而雾霾、暗光等退化效果恰好抹掉了树叶纹理,使这条错误捷径更被强化。修复分两步:一是让退化生成器读取标签以避免对天空施加错误物理退化,恢复约一半损失;二是从GOOSE数据集补入1500帧森林道路真实画面,带来天空IoU提升7至17点、真实天气平均IoU提升29至35点。更关键的发现是:一旦补齐数据覆盖,所有增广方案在真实天气上的差异都在±1点以内,增广收益更多属于合成测试集而非真实世界,揭示了「用合成退化评估合成增广」的自我验证陷阱。

一位开发者在 Reddit 分享了一个反直觉的实验结果:为语义分割模型加入物理建模的恶劣天气增广(沙尘、夜晚、雾、镜头雨、镜头泥),本意是提升真实恶劣天气下的识别精度,结果每一种架构的真实天气「天空」类别 IoU 不升反降,跌幅在 1 到 13 个百分点之间。更棘手的是,这个问题在合成的留出测试集上完全看不出来。

这个案例揭示了一个被反复低估的问题:数据增广本身没错,错的是训练集里缺失的「几何形态」,而增广恰恰把模型学到的错误捷径放大了。

Reddit 原帖讨论

问题现象:合成测试通过,真实场景崩溃

团队在物理建模的恶劣天气上做微调后,先用一批合成的留出退化样本(ImageNet-C 的雾/飞溅/运动模糊,以及一个基于 unprocessing 的低光照模型——这些生成器从未用于制造训练数据)做验证,结果一切正常。

但切换到真实的恶劣天气数据时,情况分化了:可行驶路面的 IoU 提升了,天空类别的 IoU 却在五种架构上全部下降,较小的模型连植被类别也一起掉。

失败案例高度集中在森林道路上——封闭树冠下的车辙,透过树叶能看到明亮天空的那种场景。模型把画面上半部分整片都标成了「天空」。

**IoU(Intersection over Union)**是语义分割任务中最常用的类别级评估指标,计算方式为预测区域与真实标注区域的交集面积除以二者的并集面积,结果在0到1之间,数值越高代表分割越准确。天空类别的IoU专门衡量模型在「识别天空像素」这一子任务上的表现。由于天空在自动驾驶和机器人感知中通常被视为「安全区域」,误将其他区域(如树冠)判为天空不会直接导致碰撞,但会干扰深度估计、光照补偿等下游模块的判断,因此是一个值得单独追踪的关键指标。

ImageNet-C 是一个广泛使用的鲁棒性基准数据集,由 Hendrycks 等人在2019年提出,做法是对 ImageNet 验证集施加15种合成腐蚀(噪声、模糊、天气退化等),每种腐蚀有5个严重程度级别,共构成75个子集。它被大量研究用于衡量模型对分布偏移的鲁棒性,但其腐蚀都是图像空间的后处理操作,并非基于真实物理成像过程,这正是本文所说「合成留出测试集上看不出问题」的原因之一——合成腐蚀的分布与真实退化的分布之间存在系统性差距。

根因分析:模型学到了一条脆弱的捷径

问题的核心不在增广,而在训练数据 RELLIS-3D 的构成。这个数据集以开阔地形为主——田野、开放小径、宽阔地平线,几乎不包含树冠透光这类几何形态。

于是模型学到了一条在它的「世界」里成立、但在森林里彻底失效的捷径:

明亮 + 在地平线以上 + 低纹理 = 天空

这条规则在开阔场景里几乎永远正确,但在树冠道路上就会把透光的树叶误判为天空。

真正致命的是增广与捷径的相互作用:对这些帧施加退化(雾霾、黑暗)会让捷径更有吸引力,因为雾和暗光恰好抹掉了本可以反驳「这是天空」判断的叶片纹理。换句话说,增广没有创造新问题,而是精准地放大了数据分布本身的盲点。

RELLIS-3D 是德克萨斯农工大学发布的越野自动驾驶数据集,采集于大学农业研究站的开放地形,包含RGB图像、LiDAR点云和IMU数据,语义类别涵盖可行驶路面、植被、天空、障碍物等。其显著特点是场景以开阔草地、宽阔小径和低矮植被为主,几乎不包含密集林地或封闭树冠场景。这种数据分布的偏向性在开阔越野环境下表现良好,但一旦迁移到森林道路,模型就缺乏足够的几何先验来区分「透过树叶看到的天空碎片」与「真正的开阔天空」,这正是所谓的「分布外(Out-of-Distribution, OOD)泛化失败」的教科书式案例。GOOSE(German Outdoor and Offroad Dataset)则是慕尼黑工业大学发布的多地形越野数据集,场景多样性更高,包含森林、砾石路、铺装路等复杂几何环境,是本文用于补齐覆盖缺口的关键数据来源。

两步修复:生成器纠偏 + 覆盖补齐

作者按顺序给出了两个修复方案,二者各挽回约一半损失。

第一步:让生成器具备标签感知能力

生成器本身也有责任。它用深度图提亮天空时,把天空当作有限距离来处理;还会在物理上已经不可见的像素上「刷一层雾幕」。

修复方式是让生成器读取标签:天空直接从标签读取,而被遮挡超过 97% 光线的雾幕像素标记为 void(不参与评分)。仅此一项就恢复了约一半的精度损失。

第二步:补齐缺失的几何覆盖

另一半问题出在数据覆盖上。团队从 GOOSE 数据集加入了 1500 帧真实画面(森林车辙、砾石路、铺装路),在两侧使用相同的增广和训练计划。

结果非常显著,横跨四种架构:

  • 天空 IoU:+7 到 +17 点
  • 植被 IoU:+29 到 +37 点
  • 真实天气平均 IoU:+29 到 +35 点

这个对比说明,缺失几何形态的覆盖补齐,远比增广策略本身更能解决真实世界的泛化问题。

这里的「生成器」指团队用于模拟恶劣天气退化的物理建模渲染管线,而非深度学习意义上的生成对抗网络(GAN)。物理建模增广的思路是依据大气散射、镜头沾污、光照衰减等物理方程,在像素级别对图像施加可控的退化效果,相比直接叠加随机噪声或使用风格迁移,其优点是退化效果更接近真实成像物理过程,缺点是实现复杂且容易引入隐式假设——例如本文中「把天空当作有限距离来处理」的错误,就是物理模型对「天空像素深度」做了不符合真实情况的假设(天空在深度上应为无穷远),导致雾效计算错误地叠加在本应清晰的天空区域上。**标签感知(label-aware)**的修复思路则是让退化生成器在处理图像前先读取语义分割标注,对不同语义区域采用不同的物理参数,从而避免将错误的退化施加在语义上定义明确的区域。

一个令人不快的结论:增广的收益只属于测试集

作者坦承了实验中「不太愉快」的部分:一旦 GOOSE 进入训练集,所有增广分支——他们自己的、albumentations、以及组合方案——在真实天气上的表现都落在对照组 ±1 点以内。

他们的增广方案在合成留出退化上仍能加 3.5 到 5.2 点,但这现在看起来「更像是关于测试集的事实,而不是关于真实世界的事实」。

这是一个值得所有做数据增广的人警醒的发现:当你用合成退化来评估合成增广时,很容易陷入自我验证的循环。真实世界的收益可能根本不来自你精心设计的增广,而来自更基础的数据覆盖。

需要注意的实验局限

作者对结论的边界也相当诚实:

  • 覆盖实验是单一随机种子,1 到 2 点的差异应当视为噪声;
  • IDD-AW 是道路场景而非越野地形,因此它是跨域测试,衡量各增广分支之间的相对差异比衡量绝对数值更可靠;
  • 树冠透光的那帧只是他们在多种场景中发现的一个说明性示例。

完整的表格写在博客文章中,压力测试本身也开源了——165 帧标注画面、5 种条件 × 3 种严重程度加上评分脚本,采用 CC BY-SA 4.0 / MIT 许可(GitHub 仓库)。

作者也主动声明:他出售该数据集的更大版本,读者应带着这层利益关系看待上述结论,不过免费版本是完整且可商用的。

给从业者的启示

这个案例最有价值的地方,在于它把一个常见误区讲透了:

  1. 增广不能弥补数据分布的结构性缺失。如果训练集根本没有某种几何形态,再精巧的增广也只会强化模型的错误捷径。
  2. 评估集的构成决定你能看见什么问题。用合成退化测合成增广,相当于让模型自己给自己打分。
  3. 先补数据覆盖,再谈增广精修。GOOSE 带来的几十点提升,说明基础数据覆盖的边际收益往往被严重低估。

对于自动驾驶、机器人感知等依赖语义分割的领域,这是一个提醒:模型在「它的世界」里表现完美,不代表它真的理解了场景——它可能只是找到了一条在训练分布里恰好成立的捷径。

#数据增广#语义分割#合成天气数据#数据集覆盖#模型泛化#RELLIS-3D#GOOSE数据集#捷径学习
分享:

相关推荐