第四章 雷达数据集构建:公开数据集介绍与数据增强技术
做雷达目标识别,最头疼的问题是什么?
我个人觉得,不是算法选得不够好,而是数据不够用。你想想看,雷达数据采集一次成本多高啊,外场实验还得看天气、看场地、看设备状态。我早期做项目时,为了凑够训练样本,连续在野外蹲了两个月,回来一看,样本量还是不够深度学习模型吃的。
所以这一章,咱们重点聊聊数据集构建这件事。说白了,就是怎么把手头有限的雷达数据,变成能喂给机器学习模型的好数据。
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 标注规范
做雷达数据标注,我总结了几条铁律:
- 类别定义要清晰:每个类别必须有明确的视觉特征描述。比如"T72坦克:长方形车体,炮塔位于前1/3处,履带可见"。
- 边界框要一致:SAR图像中目标周围有阴影和旁瓣,框选时要不要包含这些?必须统一标准。
- 难例要单独处理:遮挡严重、信噪比低、姿态极端的样本,建议单独建一个"难例集"。
- 多人标注要交叉验证:至少两个人独立标注同一批数据,计算一致性指标。
标注格式示例(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 数据构建实战流程
最后,我分享一下自己常用的数据构建流程:
- 数据采集:确保覆盖不同角度、距离、环境
- 数据清洗:剔除无效数据、重复数据
- 数据标注:制定规范,多人交叉验证
- 数据划分:按场景独立划分,避免数据泄露
- 数据增强:先做基础增强,再尝试高级方法
- 质量检查:可视化检查增强后的数据是否合理
你想想看,如果数据这步没做好,后面算法调得再好也是白搭。我见过太多项目,算法团队花三个月调模型,最后发现是训练数据和测试数据分布不一致。这种坑,咱们提前避开。
下一章,咱们聊聊特征提取。从雷达回波里,怎么把有用的信息提炼出来。