杨志钢,黎明,李泳江
哈尔滨工程大学 信息与通信工程学院,黑龙江 哈尔滨 150001
遥感技术的不断发展使得从遥感图像中对特定目标进行检测的需求与日俱增。相比于传统手工提取特征的方法,深度学习方法利用卷积神经网 络(convolutional neural networks,CNN) 自动学习图像特征,通过不断迭代训练大量的数据样本,挖掘其中的有效信息[1],以此规避传统目标检测方法中的缺点,能够有效提高目标检测的精度和速度。
目前遥感图像领域中的目标检测方法大多是由通用目标检测方法改进而成的,大体分为2 类:两阶段检测方法和单阶段检测方法。前者的代表是R-CNN 及其延伸[2−5],它们通过主干网络对图像提取特征后,先生成锚点和对象建议,再对建议进一步地分类、回归和优化边界框;后者的代表是YOLO 系列[6−8]、SSD[9]和RetinaNet[10],它们不再生成区域建议,而是直接从特征图预测边界框并区分具体类别。这些方法虽然在通用数据集上取得了很好的成绩,但直接应用于遥感图像时往往效果不佳,原因在于遥感图像目标多数具有尺度多样、排布密集、背景复杂等特点,这些方法当中的主干网络[11−14]很难在这样的环境中准确提取特征,致使学习到错误的分类和回归信息。Lin 等[15]提出FPN 用以解决目标特征难以分辨的问题,通过在主干网络中构建由上到下的特征金字塔和横向连接结构增强多尺度特征的传播,大幅提升了检测精度。随后研究人员在此基础上做了一些改进[16−19]以适应遥感图像目标检测的特点,但这些改进方法普遍是对单一类别目标进行检测,且在场景复杂或目标较为密集时检测性能有所下降。
基于此背景,本文提出一种基于multi-FPN 的遥感图像目标检测方法。首先,该方法使用残差网络ResNet-50 作为主干网络,在FPN 横向连接的基础上加入跨层连接结构,进一步地加强特征的融合和重用;其次,改变上采样金字塔的输出层级,采用{P3,P4,P5,P6,P7}层级输出多尺度特征图,有利于特征的传播;最后,特征金字塔的上采样过程采用了双线性插值法替代原来的最邻近插值法,使得特征缩放后的误差更小,预测框坐标的回归更准确。
基于multi-FPN 的遥感图像目标检测方法的总体框架如图1 所示。主要由特征提取网络和两阶段检测网络2 部分组成。具体来说,经过预处理的图片首先输入进特征提取网络中,通过主干网络和multi-FPN 可以为每个输入图像生成多尺度特征融合的特征图;然后从区域提案网络(region proposal network,RPN)中 获得轮流提案,为下一阶段提供高质量的区域提案;最后,在二次检测阶段利用2 个全连接层(fully connected layer,fc)对提案进行位置回归和类别预测,得到最终结果。
图1 基于multi-FPN 的方法总体框架
1.1.1 主干网络
深度CNN 的出现使得图像分类和目标检测取得了一系列突破,网络将从低到高层的特征和检测器以端到端的方式进行融合,并通过特征网络层的加深来取得更好的检测效果。目标检测中基于深度CNN 的主干网络是用来提取特征的结构,本文选择采用残差网络ResNet-50 作为主干网络,利用多组残差单元,在提取特征的同时有效避免了梯度爆炸或梯度消失的发生。原始的ResNet-50 在图像分类时可以实现1 000 种目标类别细分,但应用于目标检测后要根据数据集的类别进行输出项调整。比如本文在NWPU VHR-10 数据集上进行实验,共有10 类待检目标,所以主干网络的输出节点数设置为11,即10 个前景目标和1 个背景类别。
1.1.2 FPN
目标检测中的主干网络虽然可以利用卷积操作有效提取特征,但在原始图像经过CNN 下采样一定倍数后,有一些小像素物体会在最后一层特征图上消失,导致后续检测网络无法检测出该目标,除此之外,还会遇到同一目标尺度有大有小、特征难以准确学习等情况。为了能让大尺寸物体和小尺寸物体的特征都被有效提取并输入进检测网络中,研究人员在主干网络的基础上,增加了FPN 的结构,如图2 所示。FPN 包括3 部分:下采样金字塔、上采样金字塔和横向连接。具体而言,下采样金字塔由ResNet-50 网络的部分结构组成,每层最后一个残差结构的特征激活输出表示为{C2,C3,C4,C5}。上采样金字塔可以有效结合低、中、高层不同尺度的特征,方法是对高阶特征图进行多次上采样,同时将该特征横向连接至对应下采样金字塔中的前一层特征,二者进行相加操作,使高层特征得到加强。图2 中以P4 为例展示了横向连接的细节,可以看到上采样金字塔中的P5 特征做步长为2 的最邻近上采样,同时对应下采样金字塔中的C4 层特征经过1×1 的卷积,使其和后一层的特征图通道数保持相同,然后与上采样后的特征图像素加合,并使用3×3 的卷积层消除上采样的混叠效应。P6 是P5 进行一次最大池化产生的层,随着训练次数的增加不断迭代融合,直到生成精细化的特征图。
图2 FPN 结构
1.1.3 multi-FPN
FPN 是融合多层次信息的一种有效的多尺度方法,在通用目标检测任务中取得了不错的效果,但值得注意的是,遥感图像中的目标尺度差异过大,且复杂多变的背景会对前景目标特征的分辨产生较强的干扰,尤其是存在一些类目标的物体,比如海岸边的集装箱与停泊船只目标的特征相似,给特征提取工作带来了很大的困难。因此,通过FPN 获得的特征信息可能不足以很好地区分这些目标。为了解决此问题,本章对特征金字塔的网络结构进行了优化,提出了跨层连接,改变了上采样金字塔的输出层级,进一步增强特征的传播和高、中、低层特征的融合,并使用双线性插值法替代原本的最邻近插值法,使得特征上采样效果更好,经过改进的FPN 结构如图3 所示。
图3 multi-FPN 结构
主干网络仍然选择ResNet-50,在下采样金字塔中,多层特征映射{C2,C3,C4,C5}保持不变,对应每个卷积块的最后一层,步长为{4、8、16、32}像素,C5 是ResNet-50 最顶层的输出,其通过一个1×1 的卷积层,将通道数转为256,得到上采样金字塔的P5。P5 层首先经过2 次下采样,步长为2,分别得到P6、P7 层;其次经过横向连接和跨层连接,依次得到P4、P3 层;最后输出{P3,P4,P5,P6,P7}多层特征图。横向连接和跨层连接的细节如图3 中所示。例如,为了得到P4,首先需要对C4 使用1×1 的卷积操作,以减少C4 通道的数量;其次对之前的所有层(P7、P6、P5)进行双线性插值上采样,接着使用concat 操作(数组间的相加)来合并它们,最后利用3×3 的卷积以消除特征混叠,同时减少通道数量。通过层层迭代,输出了多尺度的特征图。通过实验发现,横向连接可以保证有效利用底层定位的细细节信息,跨层连接能够进一步加强多层次特征的融合,同时,更深的P6、P7 卷积层可以获得更多的语义信息,有助于复杂环境下的目标特征获取。另外,FPN 在上采样时使用了最邻近插值算法,过程如下:假设原始特征图像素大小为w1×h1,上采样后像素大小为w2×h2,上采样特征图中有1 像素点 (x2,y2),则对应于原始特征图上的像素点位置 (x1,y1)为
由于像素值x1、y1必须为整数,所以计算中出现小数时需要四舍五入,这样会造成特征图像素的不连续性,且多次上采样后精度缺失严重。本文使用双线性插值算法对上采样过程进行改进,过程如下:假设想得到上采样图像像素点对应在原图中的位置P(x,y),离该位置最近的4 个像素点值分别为Q11(x1,y1)、Q12(x2,y2)、Q22(x3,y3)、Q21(x4,y4),如图4 所示。
图4 双线性插值算法示意
P的像素值与邻近像素点的距离相关,距离越近的点像素值影响越大,计算过程如下:
1)根据Q11(x1,y1) 和Q22(x3,y3)的像素值计算得到R1(x,y1)位置的像素值。
2)根据Q12和Q22的像素值计算得到R2(x,y2)位置的像素值。
3)由R1 和R2 的像素值计算得到最终结果P(x,y)。
两阶段检测网络的结构和损失函数与Faster R-CNN 模型相同,利用提取的特征对目标进行分类和定位。特征图首先输入进RPN 中,在锚点的基础上做前景和背景的二分类、边界框回归以及后处理,得到建议特征图;其次将建议特征图输入RoI pooling 层裁剪成固定大小;最后利用2 个全连接层进行第2 次检测,包括具体类别划分、边界框回归和后处理,得到最终的检测结果。
本文在公开光学遥感数据集NWPU VHR-10[20]上进行实验,该数据集总共800 张超高分辨率光学遥感图像,每张像素大小约为800×1 000,包含从Google Earth 和Vaihingen 数据集中裁剪收集的篮球场、船只、飞机、储油罐、田径场、棒球场、车辆、网球场、桥梁、码头10 类目标类别,由航拍图像判读专家手动注释成水平标注框加标签的形式,如(xmin,ymin,xmax,ymax,label)。本文实验使用其中的正样例图像集,每幅图像中至少存在1 个待检测的目标,共计650 张图,大约有3 775个标注目标,该数据集经图像增强后相比于同类水平标注数据集类别和目标数目都多,在遥感图像数据中具有代表性。本文实验中训练、测试所用到的硬件设备和开发环境如下:硬件设备:CPU:Intel(R) Xeon(R) Gold 6 128 3.40 GHz;GPU:Nvidia Tesla P100 16 GB RAM;系统配置:Ubuntu 16.04,Anaconda 3-5.2,CUDA 9.0;开发环境:Python 3.6,Tensorflow 1.12,Keras 2.2.4。
本文方法使用的网络模型深度较深,而NWPU VHR-10 中的正样例图像集仅包含650 张图片,即使裁剪后数量依然不足。故本章实验使用了模型预训练和图像数据增强的策略。使用ImageNet 分类预训练的Resnet-50 模型初始化网络,再移植到数据量有限的NWPU VHR-10 上进行微调,数据增强方面使用了随机图像翻转、随机剪裁、角度旋转、颜色抖动等操作。本文实验随机抽取图片划分训练集、验证集和测试集,比例为6∶2∶2。实验基于TensorFlow 框架进行,为了加快训练、验证和测试的速度,采用TFRecord格式输入数据。实验参数方面,根据对NWPU VHR-10 数据集中待检测目标的实际尺寸和宽高比率进行统计分析,设置RPN 中{P2,P3,P4,P5,P6}的锚点框区域大小为{252,502,1002,2252,4002}像素,锚点框宽高比为{1,1/22,1/3,3,1/4,4,1/5,5}。
本文中的性能评估标准使用单一类别平均精度(average precision,AP)和各类别精度均值(mean average precision,mAP),能够相对客观地评价检测时所有类别的平均好坏程度,值越大,表示目标检测模型的性能越好,衡量速度采用的是测试1 张图片所用的平均时间,这也是目标检测领域的通用标准。
本文做了一系列的对比实验,以验证multi-FPN 方法的有效性。表1 总结了所用方法在不同结构组合下的检测结果,主要关注评价的是横向连接、跨层连接、不同的输出层级以及上采样的方式所带来的影响。表2 中结构统一采用ResNet-50作为主干网络,检测网络部分相同。可以看到FPN 的检测精度约为86.61%,测试单张图片的时间为0.32 s。当FPN 去掉横向连接结构时,如组合1 去掉了1×1 的卷积侧连接,这种仅靠多次上、下采样输出的特征图尽管仍然具有很强的语义信息,但位置信息变得不再精确,mAP 较FPN 下降了约12 %,由此看出,主干网络的各层通过横向连接连接到自顶向下的特征金字塔,可以传递出更精确的特征位置。组合2 与组合1 对比以及组合3 与FPN 的对比,可以看到跨层连接结构对最终检测精度的提高幅度约为2%,说明使用跨层连接有助于多尺度目标特征进一步地重用和传播。组合4 改变了特征图的输出层级,mAP 较组合3 上升了约1%,可见CNN 的更深层可以获得更多的语义信息,有助于遥感图像中复杂环境下的目标特征获取。组合5 使用了双线性插值算法替代了原来的最近邻插值算法,精度上升了约2%,且检测速度没有明显变化,故选择组合5 作为本文最终改进的遥感图像目标检测方法。
表1 本文方法在不同结构组合下的检测结果
表2 不同方法检测性能对比 %
表2 显示了不同方法在NWPU VHR-10 数据集上的性能对比。本文实验对比了NWPU VHR-10 数据集的基准方法RICNN 以及具有代表性的检测方法Faster R-CNN、YOLO v2 和SSD,从表2可以看到,本文方法在大部分类别上面都达到了最高精度,mAP 达到91.92%,由此证明基于multi-FPN 的目标检测方法在遥感图像中表现优异。相比于同样使用ResNet-50 做主干网络的Faster RCNN,本方法在车辆、船只、储油罐等尺寸较小的目标上AP 有了不小的提升,说明multi-FPN 策略有效提升了小目标的检测精度;对于码头、篮球场、网球场等相对较大的目标精度也有所提升,表明了更深的卷积层输出对目标检测的重要性。
如图5 以热力图的形式显示了multi-FPN 的各层输出特征图{P3,P4,P5,P6,P7},可以看到,对于示例图中复杂背景下的船只小目标,较低层的P4 特征图能够很好地区分出礁石、海浪和船只特征的不同,以此层作为两阶段检测网络的输入,对于检测精度的提升较为明显。图6 展示了测试集中的部分检测结果示例。
图5 multi-FPN 输出特征图示例
图6 测试集部分检测结果示例
本文主要从特征提取的角度对目标检测方法进行了研究,提出了一种基于multi-FPN 的遥感图像目标检测方法。一方面,在FPN 网络模型的基础上加入跨层连接结构,通过改变由上到下金字塔的输出层级,保证了面对遥感图像复杂背景的环境下依然能够有效地提取出目标特征,进一步地增强了特征的融合和传播;另一方面,采用双线性插值法替代原本的最邻近插值法,减少特征上采样的失真,进而提升了检测精度。结构和方法对比实验结果表明,本方法在检测精度上超越了目前普遍在用的目标检测方法,在公开遥感图像数据集NWPU VHR-10 上mAP 达到91.92%。