1、背景介绍
与自然图像识别研究的快速发展不同,在遥感SAR图像识别领域,因为目标探测手段的困难,难以获取足量公开的数据集,其中美国公开的MSTAR是为数不多的、对地车辆目标进行识别的数据集。MSTAR是在二十世纪九十年代中期,美国国防高等研究计划署(DARPA)推出。通过高分辨率的聚束式合成孔径雷达采集多种前苏联目标军事车辆的SAR图像。MSTAR计划进行了SAR实测地面目标试验,包括目标遮挡、伪装、配置变化等扩展性条件,形成了较为系统、全面的实测数据库。随后,DARPA公布了该数据库。目前MSTAR数据集在SAR图像目标识别研究上得到广泛应用。官方数据文件下载链接为,需要先注册再下载(注册很简单):https://www.sdms.afrl.af.mil/index.php?collection=registration
采集该数据集的传感器为高分辨率的聚束式合成孔径雷达,该雷达的分辨率为0.3m×0.3m。工作在X波段,所用的极化方式为HH极化方式。对采集到的数据进行前期处理,从中提取出像素大小为128×128包含各类目标的切片图像。该数据大多是静止车辆的SAR切片图像,包含多种车辆目标在各个方位角下获取到的目标图像。在该数据集中包含一个该计划推荐使用的训练集和测试集。训练集是雷达工作俯仰角为17时所得到的目标图像数据,包括3大类:BTR70(装甲运输车),BMP2(步兵战车),T72(坦克);测试集是雷达工作俯仰角为时所得到的目标图像数据,该数据集也包含3大类,BMP2、T72、BTR70。各种类别的目标还具有不同的型号,同类但不同型号的目标在配备上有些差异,但总体散射特性相差不大。
MSTAR混合目标数据中还包含其他的一组军事目标的切片图像,这些军事目标分别为2S1(自行榴弹炮)、BRDM2(装甲侦察车)、BTR60(装甲运输车)、D7(推土机)、T62(坦克)、ZIL131(货运卡车)、ZSU234(自行高炮)、T72。
2、数据集前期处理
MSTAR数据集中的目标是雷达工作在多种不同的俯仰角时,各个目标在方向上面的成像图片。MSTAR数据集的采集条件分为两类,分别为标准工作条件(Standard Operating Condition,SOC)和扩展工作条件(Extended Operating Condition,EOC)。这些SAR图像是基于多种采集条件生成的,如改变成像侧视角、目标姿态或目标序列号等。因此,MSTAR数据集可以测试SAR目标识别算法在不同采集条件下的识别性能。
SOC采集条件下共包括10类地面目标。训练集数据采集在17。成像侧视角下,测试集数据采集在15。侧视角下。SOC采集条件下样本数据的详细信息(目标类型、样本数量、目标序列号以及采集侧视角等)如表2.10所示。
与SOC采集条件相比,EOC采集条件下样本识别难度更高。EOC条件下包括EOC-1和EOC-2两种实验方案。EOC-1和EOC-2条件下训练集和测试集样本的详细信息分别列于表2.11、表2.12和表2.13。
EOC-1实验方案中包含4类地面目标,训练集的侧视角为17。,而测试集的侧视角为30。,如此大的侧视角差别可导致相同姿态的同一个目标呈现有较明显的区别表征,增加了识别的难度。EOC-2实验方案中训练集包含4类地面目标,采集在17。侧视角条件下,测试集分别使用不同序列号版本的T72目标,而不同序列号版本的目标会呈现有一定区别的目标表征。训练集与测试集样本中目标表征的区别使得测试集的样本不易被识别为T72目标,因此增加了识别的难度。
具体组成如下所示:
表1 MSTAR数据集SOC条件下数据类型
表2 MSTAR数据集中EOC-1采集条件下的4类目标
表3 MSTAR数据集中EOC-2采集条件下的训练集
表4 MSTAR数据集中EOC-2采集条件下的测试集
我们的目标,就是对SOC工作模式下获取的数据进行识别处理。
2.1数据格式转换
下载数据后,我们可以看到得到有8个文件夹,其中MSTAR-PublicClutter-CD1、MSTAR-PublicClutter-CD2、MSTAR-PublicMixedTargets-CD1、MSTAR-PublicMixedTargets-CD2、MSTAR-PublicT72Variants-CD1、MSTAR-PublicT72Variants-CD2、MSTAR-PublicTargetChips-T72-BMP2-BTR70-SLICY表示不同条件下获取的数据,但原始数据均为只读文本,需要转换成图片格式。从网上下载了matlab解析程序,可以直接转化为图片形式,如图1所示。
2.2图片裁剪
转换后的数据,大小不一,部分大小如下表所示
同时可以发现,目标已经处于图片正中位置,而且只占据全图不大的区域,为了识别方便,需要对10类数据进行裁剪。不影响目标条件下,我们都裁剪为100*100。裁剪后部分图片见图1。为了直观起见,我们将每类目标以图片形式存在在磁盘内,每类目标文件夹命名为目标名。
3. 网络搭建与建模
下面重点来了,如何针对这个SOC工作条件下的数据集刷出99.5%以上的识别准确率呢?我们直接给出方案,就是数据增广预处理+pretraining + Fine-tune 。
为何使用数据增广预处理?因为数据量不够,每类目标只有约200多个训练数据,而且因为成像的原因,分辨率固定、旋转角度均匀、气象条件一致。因此需要做基于图像预处理的增广方法。
为何采用pre-training + Fine-tune?尽管已有研究指出(参考Kaiming He大神的《Rethinking ImageNet Pre-training》),预训练并非必要,但前提是对于类似ImageNet这类数据量极大的情况,在实际应用中,如果数据量小,采用预训练+Fine-tune不仅可以加速目标任务的收敛速度,而且可以在一定程度上减小过拟合。
3.1 关于数据预处理
在图像处理领域,常常通过对图像做亮度改变、加噪声、翻转、随机裁切、缩放等预处理操作制造出大量样本。具体包括:(1)平移,对原始小样本进行图像的平移操作时,可以使得网络学习到的平移不变特征;(2)旋转,图像旋转技术,可以在进行网络学习时学习到旋转不变的特征,有些任务里,目标可能有很多种不同的姿态,旋转整好可以补充样本中姿态较少的问题;(3)图像镜像技术,镜像技术与图像旋转的功能类似,都是可以图像的不同姿态表达的问题;(4)图像亮度变化,一般常用图像直方图均衡化进行变化,可以较好的进行不同亮度下的图像样本增强;(5)裁剪,将图像中的部分目标裁剪出来,有助于学习目标的部分结构特征;(6)缩放,对图像进行放大或缩小,有助于学习不同分辨率条件下的目标特征;(7)加噪声,对原始图像加不同强度、不同类型(高斯白噪声、斑点噪声、椒盐噪声等等)的噪声,有助于提高目标检测识别的鲁棒性。下面以两幅自然场景图像与两幅SAR遥感图像为例,展示以上7种经典图像生成方法产生的结果。
当然,在对MSTAR的处理中,我们不需将以上方式都用一遍,我们可以操作的预处理形式包括:数值归一化、剪切变换、旋转变换、缩放、水平翻转。
3.2 Pre-training + Fine-tune
预训练+Fine-tune是常见的处理方式。
所谓预训练,需要区别于常规训练方法。常规训练方法为首先搭建一个深度网络模型,随机初始化参数,然后开始训练网络,不断调整直到网络的损失越来越小。在训练的过程中,初始化的参数会不断变化,直到达到所需识别结果。所谓预训练是指不在随机初始化的参数开始训练网络,而是从已有训练好的模型参数开始训练网络,比如我们可以把在ImageNet数据集上训练的模型ResNet50拿来,用在新数据集的训练,也就是针对本文所说的MSTAR数据集。
什么是Fine-tune?Fine-tune是一种常用的深度网络训练技巧,属于迁移学习的一种,Fine-tune与预训练的方式结合。在利用已有模型训练新数据时,可以不必对全部层的参数进行训练,而可以只对输出层及接近输出层的若干卷积层训练,即固定低层参数而只训练高层参数。这么做的原因是,网络的低层只提取边缘等基础信息,而这些信息,在各类数据中是相当的,无需重复训练获得。高层参数则相对变化较大,需要重新获取。
那如何操作呢,实际上python中很容易,特别是在采用Keras框架中,提供了即为便捷的方式。
在Keras中,我们可以加载已训练好的ResNet50模型,这里,我们需要的是不含全连接层的版本:
WEIGHTS_PATH_NO_TOP = 'resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5'
基于函数式编程,我们把全连接层设定256个节点,输出层限定为10个类别:
x = Flatten()(x)
x = Dense(256,activation='relu')(x)
x = Dropout(0.5)(x)
x = Dense(10, activation = 'softmax')(x)
限定模型前45个层的参数固定
for layer in model2.layers[:45]:
layer.trainable= False
采用随机梯度下降进行优化(似乎fine-tune时采用这个函数普遍结果好点)
model2.compile(loss='binary_crossentropy', optimizer = SGD(lr=1e-3,momentum= 0.9), metrics=['accuracy'])
Keras提供了简洁的图像预处理形式
train_datagen= ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
rotation_range=10.,
zoom_range=0.2,
horizontal_flip=True)
最后,设定epoch为200,batch_size 大小为16。
完整代码参见列表。
结果如下:
我的机器配置是Intel Core I5 6500,显卡GTX 960,内存8GB。每个epoch运行约5分钟,在运行了40余个epoch(不到4个小时)后,训练准确率达到99.83%,此时在测试集上的验证结果为99.58%。这个结果是什么水平呢?好在MSTAR的数据集是个应用最广的SAR图像识别数据集,每年都有不少算法在这上面跑,2018年的论文《SAR Automatic Target Recognition Based on Multiview Deep Learning Framework》只达到98.5%,《Transfer Learning with Deep Convolutional Neural Network for SAR Target Classification with Limited Labeled Data》10类准确率是98.5%,西工大杜兰教授《SAR Automatic Target Recognition Based on Euclidean Distance Restricted Autoencoder》只达到不到96%的准确率,我们似乎已经达到发表论文的水平了!
全部代码图片在这里: