4. 标准测试数据集:公开数据集介绍与数据增强

做红外系统评估,最怕什么?

怕你辛辛苦苦调出来的模型,换个场景就崩了。我早年吃过这个亏——在实验室里跑得飞起,一到户外雨天直接翻车。后来我明白了:评估的根基,是标准测试数据集。

这一章,我们就来聊聊红外领域最常用的三个公开数据集:OSU、KAIST、FLIR。我会结合自己的踩坑经历,把它们的标注规范、适用场景和数据增强方法讲透。

4.1 三大公开数据集概览

先看一张总览表,心里有个底:

数据集 年份 场景 图像数 标注类型 分辨率
OSU 2005 校园/道路 ~10K 行人框 320×240
KAIST 2015 城市道路 ~95K 行人框+遮挡 640×480
FLIR 2018 城市/郊区 ~14K 多类别框 640×512

这三个数据集,我全用过。说实话,没有一个是完美的。但组合起来用,效果还不错。

4.2 OSU 数据集:经典但有限

OSU 是俄亥俄州立大学发布的,算是红外行人检测的“老祖宗”。

  • 优点:标注规范,场景单一,适合做 baseline 测试。
  • 缺点:分辨率低,场景少,没有遮挡标注。
注意:OSU 的图像是 8 位灰度图,很多现代模型需要 16 位输入。我建议做一次位深转换,否则模型容易过拟合到低对比度纹理上。

4.3 KAIST 数据集:多模态标杆

KAIST 是目前引用最多的红外数据集。它同时提供了可见光+红外对齐图像。

我个人最喜欢它的遮挡标注——这在真实场景中太重要了。你想想看,行人被树挡一半,被车挡一半,模型能不能扛住?

标注规范细节

  • 类别:person、people、cyclist
  • 遮挡等级:none、partial、heavy
  • 标注格式:PASCAL VOC 格式(XML)
避坑指南:KAIST 的原始标注有少量错位——红外和可见光图像不是像素级对齐的。我曾经直接拿来训练,结果 mAP 掉了 5 个点。后来我做了手动配准,才把性能拉回来。

4.4 FLIR 数据集:多类别实战

FLIR 是 FLIR 公司发布的,场景更丰富,类别更多。

类别 训练集数量 验证集数量
person ~15K ~3K
bicycle ~2K ~0.5K
car ~10K ~2K
dog ~0.5K ~0.1K

嗯,这里要注意:类别严重不平衡。dog 类只有 500 张,你直接训练,模型大概率学不到狗的特征。我建议做类别重采样或合成数据。

4.5 数据标注规范对比

不同数据集的标注规范差异很大。我整理了一个对比表:

规范项 OSU KAIST FLIR
标注工具 自定义 LabelImg LabelMe
框格式 MAT XML JSON
遮挡标注 无 有 无
截断标注 无 有 无
属性标签 无 有 有

你看,KAIST 的标注最完整。但 FLIR 的 JSON 格式更容易转成 COCO 格式。我个人习惯:统一转成 COCO 格式,方便后续做数据增强和模型训练。

4.6 数据增强方法

数据增强,说白了就是用有限的数据,模拟无限的真实场景。我做过一个实验:只用原始数据训练,mAP 是 0.72;加了增强后,mAP 涨到 0.81。效果很明显。

4.6.1 基础增强

  • 随机翻转:水平翻转,概率 0.5
  • 随机裁剪:裁剪后 resize 到原尺寸
  • 颜色抖动:亮度、对比度、饱和度微调

4.6.2 红外专用增强

红外图像和可见光不一样。我总结了几种专用方法:

  • 热噪声注入:模拟传感器噪声
  • 温度漂移模拟:整体亮度偏移
  • 局部遮挡模拟:随机矩形遮挡
关键经验:红外图像对亮度变化非常敏感。我曾经把亮度抖动范围设得太大(±50%),结果模型学到的全是亮度伪影,真实场景直接崩了。建议亮度抖动控制在 ±15% 以内。

4.6.3 代码示例

下面是我常用的增强 pipeline,基于 Albumentations:

import albumentations as A

transform = A.Compose([
    A.RandomBrightnessContrast(
        brightness_limit=0.15,
        contrast_limit=0.1,
        p=0.5
    ),
    A.HorizontalFlip(p=0.5),
    A.RandomSizedBBoxSafeCrop(
        height=512, width=640,
        erosion_rate=0.2, p=0.3
    ),
    A.CoarseDropout(
        max_holes=8, max_height=32,
        max_width=32, fill_value=0,
        p=0.2
    ),
], bbox_params=A.BboxParams(
    format='coco',
    label_fields=['labels']
))

这段代码我用了两年,效果稳定。注意 RandomSizedBBoxSafeCrop 会保证不切掉标注框——这个细节很重要,否则增强后的标注就废了。

4.7 知识体系结构图

下面这张图,把本章的核心逻辑串起来了:

红外数据集与数据增强知识体系 红外数据集与数据增强知识体系 OSU 数据集 KAIST 数据集 FLIR 数据集 标注规范:格式、遮挡、截断、属性 数据增强方法 基础增强 红外专用增强 代码实现 核心原则:组合使用三大数据集 + 针对性增强 = 鲁棒模型

4.8 实战建议

最后,给你几条实在的建议:

  1. 不要只用单一数据集。我见过很多团队只拿 FLIR 训练,结果在 KAIST 上掉点严重。三个数据集混合使用,泛化能力会好很多。
  2. 标注格式统一化。我建议全部转成 COCO 格式,后续做数据增强、模型训练、评估都方便。
  3. 数据增强要克制。不是增强越多越好。我做过消融实验:加 3-4 种增强效果最好,加到 8 种反而下降。
  4. 验证集要保留原始分布。增强后的数据只用于训练,验证集必须用原始数据,否则评估结果会虚高。
我的习惯:每次拿到新数据集,先做一次可视化检查——看看标注框有没有偏移、类别分布是否合理、图像质量是否一致。这一步花不了多少时间,但能避免后面很多坑。