第四章 雷达数据集构建:公开数据集介绍与数据增强技术

做雷达目标识别,最头疼的问题是什么?

我个人觉得,不是算法选得不够好,而是数据不够用。你想想看,雷达数据采集一次成本多高啊,外场实验还得看天气、看场地、看设备状态。我早期做项目时,为了凑够训练样本,连续在野外蹲了两个月,回来一看,样本量还是不够深度学习模型吃的。

所以这一章,咱们重点聊聊数据集构建这件事。说白了,就是怎么把手头有限的雷达数据,变成能喂给机器学习模型的好数据。

4.1 公开数据集介绍

先说说公开数据集。我建议新手入门时,先用公开数据集跑通流程。为什么呢?因为公开数据集大家都用,结果可复现,踩坑了也好找人讨论。

4.1.1 MSTAR数据集

MSTAR,全称是Moving and Stationary Target Acquisition and Recognition。这个数据集在雷达目标识别领域,地位就跟ImageNet在计算机视觉里差不多。

它是由美国国防高级研究计划局和空军研究实验室联合发布的。数据用的是聚束SAR模式,分辨率0.3米×0.3米。包含啥目标呢?主要是军用车辆:

  • BMP2:步兵战车
  • BRDM2:装甲侦察车
  • BTR70:装甲运兵车
  • T72:主战坦克
  • 2S1:自行榴弹炮
  • ZSU234:自行高炮

我记得第一次用MSTAR时,最让我头疼的是它的配置变体问题。同一型号的车,不同批次、不同改装,SAR图像差异还挺大。比如T72坦克,有A64、A32、S7三种配置,图像特征明显不同。

MSTAR数据集关键参数:

参数 数值
雷达波段 X波段
分辨率 0.3m × 0.3m
极化方式 HH
俯仰角 15°、17°、30°、45°
目标类别 10类(含背景)
样本总数 约6000张

这里有个坑,我得提醒你。MSTAR的标准训练集是17°俯仰角,测试集是15°俯仰角。为什么这么设计?就是为了测试模型的泛化能力。你想想,实际应用中,雷达不可能每次都从同一个角度照射目标。

避坑指南:我曾经见过有人把17°和15°的数据混在一起随机划分训练测试集,结果准确率虚高到98%。但一换到真实场景,直接掉到70%。记住,一定要保持俯仰角的独立性。

4.1.2 RADAR-MNIST数据集

说完MSTAR,再聊聊RADAR-MNIST。这个数据集是我个人比较喜欢的入门级数据集。

RADAR-MNIST是啥?说白了,就是把MNIST手写数字用雷达的方式重新表达。怎么做呢?用毫米波雷达扫描3D打印的数字模型,得到雷达回波数据。

它包含0-9共10个类别,每个类别有1000个样本。数据格式是距离-多普勒图,尺寸64×64像素。

我的建议:如果你刚接触雷达目标识别,先用RADAR-MNIST练手。它数据量小、类别清晰、标注准确。我一般让学生第一周就跑通这个数据集,建立完整的训练-评估流程。

RADAR-MNIST和MSTAR最大的区别是什么?

  • RADAR-MNIST是微多普勒特征,反映目标的细微运动
  • MSTAR是SAR图像,反映目标的几何结构

这两种特征,对应不同的识别任务。微多普勒适合识别行人、车辆的运动模式;SAR图像适合识别静止目标的类别。

4.2 数据标注

数据标注,听起来简单,做起来全是坑。

我早期做过一个项目,标注了5000张SAR图像,结果训练时发现模型死活不收敛。排查了三天,最后发现是标注人员把BMP2和BTR70搞混了——这两款车在SAR图像上确实有点像,都是长方形带个炮塔。

4.2.1 标注规范

做雷达数据标注,我总结了几条铁律:

  1. 类别定义要清晰:每个类别必须有明确的视觉特征描述。比如"T72坦克:长方形车体,炮塔位于前1/3处,履带可见"。
  2. 边界框要一致:SAR图像中目标周围有阴影和旁瓣,框选时要不要包含这些?必须统一标准。
  3. 难例要单独处理:遮挡严重、信噪比低、姿态极端的样本,建议单独建一个"难例集"。
  4. 多人标注要交叉验证:至少两个人独立标注同一批数据,计算一致性指标。

标注格式示例(COCO格式):

{
    "images": [
        {
            "id": 1,
            "file_name": "SAR_001.png",
            "width": 256,
            "height": 256
        }
    ],
    "annotations": [
        {
            "id": 1,
            "image_id": 1,
            "category_id": 3,
            "bbox": [64, 78, 128, 96],
            "area": 12288,
            "iscrowd": 0
        }
    ],
    "categories": [
        {"id": 1, "name": "BMP2"},
        {"id": 2, "name": "BRDM2"},
        {"id": 3, "name": "T72"}
    ]
}

4.2.2 标注工具推荐

我个人常用的标注工具有:

  • LabelImg:轻量级,适合小规模标注
  • CVAT:支持多人协作,适合团队使用
  • LabelStudio:支持多种数据类型,包括雷达信号

嗯,这里要注意。雷达数据和普通图像不一样,它的动态范围很大。标注时最好把图像做一下归一化或者对数变换,让目标更清晰可见。

4.3 数据增强技术

数据增强,说白了就是"无中生有"。但这不是瞎编,而是基于雷达物理特性的合理变换。

我见过有人直接把图像旋转90度做增强,结果模型学到的全是错误特征。为什么?因为SAR图像对旋转角度极其敏感,旋转90度后,目标的散射特性完全变了。

4.3.1 几何变换

适合雷达数据的几何变换:

  • 小角度旋转:±10°以内,模拟目标姿态变化
  • 平移:模拟目标在场景中的位置变化
  • 缩放:0.8-1.2倍,模拟距离变化
  • 翻转:仅限左右翻转,上下翻转会破坏物理特性

避坑指南:我曾经做过一个实验,把SAR图像旋转30°做增强,结果模型在测试集上准确率下降了15%。后来分析发现,SAR图像的散射中心在旋转后发生了偏移,模型学到的其实是错误的对应关系。

4.3.2 信号级增强

这个是我比较推荐的方法。直接在雷达信号层面做增强,更符合物理规律。

import numpy as np

def add_clutter(sar_image, clutter_level=0.1):
    """
    添加杂波模拟真实环境
    """
    clutter = np.random.rayleigh(scale=clutter_level, size=sar_image.shape)
    return sar_image + clutter

def simulate_speckle(sar_image, looks=4):
    """
    模拟相干斑噪声
    """
    speckle = np.random.gamma(shape=looks, scale=1/looks, size=sar_image.shape)
    return sar_image * speckle

def random_drop_phase(sar_complex, drop_ratio=0.1):
    """
    随机丢弃部分相位信息
    """
    mask = np.random.random(sar_complex.shape) > drop_ratio
    return sar_complex * mask

4.3.3 高级增强方法

最近几年,基于深度学习的增强方法也火起来了。我试过几种:

  • GAN生成:用生成对抗网络生成新的SAR图像。效果不错,但训练不稳定。
  • 风格迁移:把晴天采集的数据转成雨天、雪天场景。这个对雷达数据效果一般。
  • Mixup:把两张图像按比例混合。简单有效,我经常用。

我的经验:数据增强不是越多越好。我建议先做一组对比实验:不加增强、加基础增强、加高级增强,看看哪个效果最好。有时候,简单的加噪声和随机裁剪,比复杂的GAN生成更管用。

4.4 数据构建实战流程

最后,我分享一下自己常用的数据构建流程:

  1. 数据采集:确保覆盖不同角度、距离、环境
  2. 数据清洗:剔除无效数据、重复数据
  3. 数据标注:制定规范,多人交叉验证
  4. 数据划分:按场景独立划分,避免数据泄露
  5. 数据增强:先做基础增强,再尝试高级方法
  6. 质量检查:可视化检查增强后的数据是否合理

你想想看,如果数据这步没做好,后面算法调得再好也是白搭。我见过太多项目,算法团队花三个月调模型,最后发现是训练数据和测试数据分布不一致。这种坑,咱们提前避开。

下一章,咱们聊聊特征提取。从雷达回波里,怎么把有用的信息提炼出来。