周 幸,陈立福
(长沙理工大学电气与信息工程学院,湖南 长沙 410114)
近年来,随着遥感技术的快速发展,各种类型的遥感图像数据不断丰富,如何实现对遥感图像进行快速、准确的目标检测成为遥感技术应用的关键。与普通图像相比,遥感图像有背景比较复杂[1]、目标特征不完整等问题,容易对检测造成干扰。因此,要实现遥感图像的高精度检测,需要提高算法的特征提取能力。
基于深度学习的目标检测算法在图像特征提取等方面具有较大的优势[2-3],在遥感图像目标检测领域,王金传等[4]在Faster R-CNN基础上引入多层特征融合模型对遥感图像目标实现快速、准确的检测;YAO等[5]提出基于多架构的神经网络(MSCNN),不同架构分别针对遥感图像的大中小3类目标进行检测;徐逸之等[6]利用全卷积网络并引入平移池化,抵消全卷积网络造成的不变性问题,使得高分辨遥感图像目标检测的精度和效率明显提升。Zou等[7]提出SVDNet网络,将DCNN与支持向量机相结合,对遥感图像中的船只有较好的检测效果;Li等[8]利用多尺度检测方法,将各尺度特征图都使用特征重标定策略,可以有效地消除遥感图像背景噪声的影响,但极大地增加了网络的参数量;Xie等[9]使用R-FCN网络结合RPN结构,消除了背景的影响,但对于相似的背景,容易出现误判,对复杂背景的判断能力不够。而Zhang等[10]在Faster R-CNN的区域推荐结构后引入反卷积层,恢复小目标尺寸,改善了小目标检测结果;该方法对于已损失的小目标像素特征无法起到恢复作用,对于不同尺寸的目标检测鲁棒性较差。Fu等[11]利用不同尺寸的特征图进行特征融合,该方法不仅引入不同特征图的语义信息,兼顾不同尺寸目标的检测,但同时低层网络也给小目标引入较多的背景噪声,影响小目标的检测。
针对遥感图像目标检测中背景复杂、尺寸较小的目标检测精度较低的问题,本文设计一种改进SSD算法。该方法以SSD算法为基础,通过改进低层特征提取网络,实现自适应特征学习,在低层特征提取阶段获得更多待检测小目标的语义信息并强化目标特征信息;改进网络的损失函数,改善在训练阶段样本失衡的问题,训练过程中增加难样本的训练数量,使目标特征较少、特征不完整的难样本得到充分训练。改进算法在保证检测速度的前提下,有效地提升了检测精度。
遥感图像目标检测是一项遥感图像处理中最基本且极具挑战性的技术,针对遥感图像目标检测问题,研究人员提出了一系列算法与解决方案。姚远等[12]提出基于层次化分类器的遥感图像飞机检测方法,利用基于Haar特征的底层AdaBoost分类器快速去除非目标区域,用基于梯度方向直方图(Histogram of Oriented Gradient, HOG)特征的支持向量机进行检测,可降低检测的虚警率。张宇等[13]提出一种逐层特征选择的多层部件模型检测遥感图像中的飞机目标,将提取到的目标特征采用多核学习的方法,经过核函数激活后再进行组合,构造目标的分层结构特征,通过分层特征选择有效地降低了特征计算的复杂度。利用模型方法进行目标检测也是研究的热点,通过构建更加复杂的检测模型获取更多的目标特征信息[14-15],如外观特征信息、尺度不变性特征、方向梯度直方图特征等,此类方法获取的信息都来源于待检测目标,对于获取更有代表性、区分性的语义信息有所不足。近年来,可变形模型[16-17]在目标检测领域应用广泛,但这类算法的检测速度较慢,算法比较复杂,而且过度依赖初始模型,泛化性能不强。
近年来,随着深度学习的快速发展,利用深度学习方法进行遥感图像目标检测已成为一个热门研究领域,基于深度学习的目标检测方法被陆续提出,如二阶检测算法R-CNN[18]、Fast R-CNN[19]、Faster R-CNN[20]等,一阶算法如YOLO[21]、SSD[22]等。二阶算法的检测过程可划分为2个阶段,首先生成可能有待检测目标的候选区域,然后对候选区域进行分类回归,进而实现目标检测。R-CNN算法利用候选区域获取和卷积神经网络(CNN)结合,利用支持向量机(SVM)进行分类。而针对R-CNN算法中重复运算的问题,在卷积层和全连接层之间引入金字塔结构,提出了SPP-Net[23]算法。借鉴SPP-Net算法结构,Fast R-CNN设计一种ROI Pooling结构,并提出多任务损失函数思想,统一训练学习分类损失和回归损失,并输出相应坐标和对应分类。而Faster R-CNN设计RPN(Region Proposal Networks)网络替代上述算法中的选择性搜索(Selective Search)方法,RPN网络先判断候选框是否为待测目标,再判定目标类型,该方法计算量较少,同时也可避免因候选框提取过多而导致的检测精度下降等问题。二阶算法因生成候选区域的过程较为复杂,计算量大,导致训练时间长,在时效性方面稍显不足。一阶算法不须产生候选区域,可直接生成目标的类别概率和位置坐标进行端到端训练,训练速度更快,且较容易训练,但检测精度要稍低于二阶算法。这2类算法在现有的公共数据集上都有较好的检测效果,一阶算法和二阶算法都具有自身的优势,可针对不同目标选择不同算法。本文针对遥感图像目标检测选择一阶算法中的SSD检测算法进行相关研究。
SSD检测算法是采用VGG16[24]作为特征提取网络的前馈卷积网络,VGG16对图像特征具有较好的表征能力,可以提取图像中较为复杂的特征。SSD采用anchors机制[25]和回归方法,利用多尺度特征图进行目标检测,不同卷积层得到的特征图尺寸不同,包含不同的语义信息,其中VGG16的Conv4_3层将作为用于检测的第一个特征图,此特征图大小为38×38,从卷积层Conv7(10×10)、Conv8_2(5×5)、Conv9_2(3×3)、Conv10_2(2×2)、Conv11_2(1×1)分别提取一个特征图,共获得6个不同尺寸的特征图。在获取的不同尺寸的特征图中设置了一系列固定大小的先验框,只有少量的先验框包含较完整的目标信息,这类框定义为正样本,相反则为负样本,而在训练过程中正负样本的选取比例是1:3。SSD算法基本框架如图1所示。
图1 SSD基本网络框架
在确定训练样本后,SSD损失函数的计算采用位置误差(Locatization loss)与置信度误差(Confidence loss)的加权和,此函数用于目标框的分类与回归,其公式为:
(1)
其中,N是匹配先验框的数量,c为类别置信度预测值,l为先验框所对应边界框的位置预测值,g为真实目标的位置参数。位置误差(Lloc)采用Smooth L1 loss,定义如下:
(2)
其中:
(3)
(4)
其中:
(5)
图2为SSD目标检测算法流程,将预训练模型作为初始参数,采用本文改进SSD算法对网络参数进行微调,极大地减少了训练时间。网络将输入特征图进行卷积,经过最大池化与非线性激活,得到输出特征图,利用Softmax回归模型,得到最终的目标类型。最后采用误差反向传播方式调整网络的权值与参数,随着迭代次数的增加,loss值逐渐减小,直到误差收敛。
图2 算法流程
使用双注意力机制模型的CBAM[26](Convolutional Block Attention Module)是用于前馈卷积神经网络的注意力模型。双注意力模型分为通道注意力模型和空间注意力模型,通道注意力模型利用特征的通道关系,提高特征提取网络的表征能力;而空间注意力模型利用特征图的空间关系,搜集待测目标特征的语义信息。通道注意力模型使用最大池化和平均池化[27]操作聚集图像的目标语义信息,通过共享网络(一个隐藏层和多层感知机MLP组成)得到通道注意力特征图Mc,其运算公式如式(6)所示:
Mc(F)=σ(MLP(AvgPool(F))+MLP(MaxPool(F)))
(6)
其中,F为输入图像,σ表示Sigmoid函数,w0与w1是多层感知机的权重,w0也是输入图像和激活函数共享权重系数,w0∈RC/r×C,w1∈RC×C/r,r是压缩率。通道注意力模型的工作机制如图3所示。
图3 通道注意力模型
将Mc与输入图像F逐元素相乘,得到的特征图F′作为空间注意力模块的输入,先做基于空间最大池化和平均池化,将得到的特征图进行特征融合,再经过卷积操作后生成一个二维特征图,最后经过Sigmoid函数生成空间注意力特征图Ms。其运算公式如式(7)所示:
Ms(F)=σ(f7×7([AvgPool(F);MaxPool(F)]))
(7)
其中,σ表示Sigmoid函数,7×7表示卷积核大小。空间注意力模型的工作机制如图4所示。
图4 空间注意力模型
在CBAM网络中,将Mc与Ms进行特征加权,公式如(8)所示:
F′=F⊗Mc,F″=F′⊗Ms
(8)
其中⊗表示逐元素相乘,CBAM网络将输入图像F与Mc逐元素相乘到特征加权后的特征图F′,F′作为空间注意力模型的输入与Ms逐元素相乘得到最终的加权特征图F″,F″即经过自适应特征学习后的特征图,特征图中的目标特征得到充分学习与强化。工作原理如图5所示。
图5 CBAM模型原理流程图
在空间注意力模型中,要利用卷积操作进行特征融合,在传统的空间注意力模型中,卷积操作采用窗口大小为7×7的卷积核。相比于3×3的卷积核,7×7的卷积核拥有更大的感受野,提取到的目标特征比较完整,但大窗口的卷积核增加了网络的参数,加大了网络的计算量。为了有效地减少计算量,本文引入空洞卷积(Dilated Convolutions)[28]代替空间注意力模型中传统的7×7卷积核,构建全新的CBAM模型,即DC-CBAM模型。
本文改进算法采用的空洞卷积的卷积核大小为3×3,空洞率为3,此空洞卷积虽然是3×3的卷积核,却有7×7卷积核的感受野,而参数也由原来的49个减少为9个。采用此空洞卷积核,既保证了原卷积核的感受野,在一定程度上可以提高特征提取能力,又减少改进网络的计算量,提升网络的实时性。空洞卷积示意图如图6所示。
图6 空洞卷积示意图
因SSD算法原理的局限性,导致检测网络在训练时正负样本的比例达到1:3,训练中负样本的比例偏大,负样本过多在一定程度上主导了loss的梯度更新方向,使得网络在训练中过早拟合而导致训练效果不佳。本文引入Focal loss[29]损失函数,对SSD算法的损失函数进行相应的改进,改进算法的损失函数采用Focal loss损失函数代替原Softmax loss损失函数(Lconf)。通过改进分类损失函数改善SSD算法样本失衡的问题,保证训练中有足量的正样本与难样本,让正样本与难样本主导loss的梯度更新方向,使网络得到充分的训练。Focal loss计算方法如式(9)所示:
FL(pt)=-αt(1-pt)γlog (pt)
(9)
式(9)中,FL是一个尺度动态可调节的交叉熵损失函数,pt表示不同类别的分类概率,αt和γ是常量参数,其中αt的主要作用是解决正负样本不平衡的问题,α∈[0,1],正样本取1,负样本取1-αt;而γ是一个大于0的值,解决难易样本不平衡问题,减少易分样本的训练比重。该损失函数给每一个样本乘以一个调制系数(1-pt)γ,当样本被错误分类且pt较小时,调制系数接近于1,此时网络中的难分样本主导loss的梯度更新;若样本的pt趋近于1时,调制系数趋向于0,此时易分样本loss的权重减小,对梯度更新贡献很少。在改进SSD算法中,γ的取值为3,αt的取值为0.4。
SSD检测算法是多尺度检测,对利用不同卷积层获得的不同尺度特征图进行检测,而小目标的检测有效特征信息大部分在低层特征图,因此加强低层特征图的目标特征提取能力,可以改善小目标的检测效果。通过大量的对比实验,选择最优的改进算法结构,最终在SSD算法的前端低层网络Conv3_3和Conv4_3这2个卷积层分别加1个DC-CBAM模型,将2个卷积层得到的特征图进行自适应特征学习,强化突出该层特征图的目标特征。DC-CBAM模型的加入,可以最大程度地提取该层待测目标的语义信息,有效地提高SSD低层特征提取网络的表征能力。而在分类器中引入Focal loss损失函数,有效地改善样本失衡问题,使网络侧重于训练正样本与难样本,提升网络的检测精度。
通过上述方法构建新的SSD网络,使低层特征图具备更全面、更突出的目标特征信息,并保证网络的计算速度;改善样本失衡问题,提升检测精度。改进SSD算法的网络结构如图7所示。
图7 改进SSD算法网络结构示意图
仿真实验采用航天遥感数据集NWPU VHR-10数据集进行验证,选择其中8类目标作为检测对象,制作原始数据图1045幅,对原始数据集做数据增强(旋转90°、饱和度、曝光度变化及镜像翻转等),将数据图集扩增到5225幅,采用Labelimg对数据图集进行人工标注,将数据图制作为VOC数据格式,其中4625幅图片作为训练集,其余的为测试集,制作的数据图集样例如图8所示。
图8 遥感图像VOC数据集制作样例
实验采用TensorFlow框架,采用随机梯度下降算法(Stochastic Gradient Descent, SGD)对模型进行训练,训练集数据训练迭代5万次,batch_size设为32,采用衰减学习率,初始学习率设置为0.001,冲量为0.94,权重衰减至0.0001。实验平台为Ubuntu16.04操作系统,Inter Core i7-6800K CPU,英伟达GTX TITAN Xp GPU。
loss曲线能在一定程度上显示算法的训练效果,loss值越小,说明网络训练得越好。图9所示为传统SSD算法和引入Focal loss损失函数的改进SSD算法的loss函数值对比。由图可以看出,改进SSD算法的loss值收敛速度更快,在迭代次数达到1万次的时候网络就基本收敛,而传统SSD算法要迭代1.5万次才收敛,而且收敛后loss值要小于传统SSD算法的loss值,验证了引入Focal loss损失函数的有效性。
图9 loss函数值变化趋势
在目标检测中,主要使用mAP(mean Average Precision)[30]、检测速度与召回率Recall来衡量一个检测网络的性能。计算mAP的前提是得到每一类的AP值,如式(10)所示:
(10)
式(10)中,N为数据集中待检测目标的所有图像数量,j表示待检测目标对象的总数量;若第n个目标检测正确,则Mn为1,相反则为0。Ni表示前n幅图片中含有检测目标的数量。求得每一个类别的AP,最后计算mAP的值。
召回率Recall是测试集中所有正样本样例中,被正确识别为正样本的比例,即被正确识别出来的目标个数与测试集中所有真实目标的个数的比值。其计算公式为:
(11)
其中,TP(True Positives):预测为Positive,实际为Positive的样本的数量,即,被正确识别的正样本的数量。FN(False Negatives):预测为Negative,实际为Positive的样本的数量,即,被错误识别为负样本的正样本的数量。
各算法指标如表1所示。通过表1的对比分析,改进SSD算法在检测精度方面与Recall均具有一定的优势,改进SSD(DC版,CBAM+FL+空洞卷积)算法的检测精度与检测速度分别能达到79.65%、43.5帧/s,召回率能达到96.8%,检测精度与召回率均高于表1中其余目标检测算法,与传统SSD算法相比提高了2.25个百分点,检测精度提升明显。而检测速度与传统SSD算法差距极小,SSD(FL)和改进SSD(CBAM+FL)的mAP和Recall相比于传统SSD算法也都有一定程度的提高,验证了引入Focal loss损失函数和CBAM模型的有效性。在本文改进算法中,改进SSD(DC版,CBAM+FL+空洞卷积)比改进SSD检测速度快3帧/s,引入空洞卷积后使改进算法在精度与实时性方面达到更大的平衡。
表1 各类检测算法检测指标
图10是各类目标检测算法与本文改进SSD算法的检测结果对比图,从测试集中选取部分具有代表性的检测结果图进行对比,通过直观的目标检测结果对比各种算法的检测效果。
针对本文遥感图像数据集,由图10可以看出,本文改进SSD算法和Faster R-CNN、YOLOv3、SSD(FL)、传统SSD算法的检测效果相比,虽然某些目标的检测效果差异不大,但本文改进SSD算法的整体检测效果要更好,主要体现在复杂背景下的目标检测和对小目标的检测更全面、精准。下面主要对比传统SSD算法与本文改进SSD算法的检测性能差异,图10中,(a)列中对飞机场面静态飞机的姿态、颜色、尺寸等本文改进SSD算法有良好的鲁棒性,小目标检测效果较好;(b)列中目标很密集,而背景比较复杂,要检测图像中的目标比较困难,与传统SSD算法相比,改进SSD算法对密集目标检测的效果有一定程度的改善,将传统SSD算法漏检的棒球场成功检测出;(c)列中的田径场虽然是大目标,但因目标特征与背景相似,跑道可以认为是田径场与背景之间的唯一区分,导致目标特征与背景区分度较小,进行此类目标检测时,突出目标的特征尤为重要,而改进算法引入了双注意力机制,可以解决此问题。
图10 检测结果对比图
为了提高遥感图像检测精度,本文提出了一种基于双注意力机制模型的改进SSD算法。该算法以SSD算法为基础网络,设计了具有自适应特征学习的低层特征提取网络。改进网络在低层特征提取网络中引入DC-CBAM模型,构建一个优化的特征提取网络,对目标特征进行特征强化学习,突出有效的目标特征。在CBAM模型组中引入空洞卷积,保证卷积核感受野,减少网络参数和计算量。引入Focal loss损失函数,利用调制系数控制难样本与易分样本在训练时的权重比例,改善loss函数的梯度更新方向,增加一定量难样本的权重,让难样本对loss梯度更新作主要贡献。改进SSD算法在不增加计算量并且保证检测速度的前提下,检测精度有较大的提升,并且具有较好的鲁棒性。笔者后续研究将考虑如何有效地提高SSD算法的训练与检测速度,提升该算法的实时性。