基于YOLOv2的船舶目标检测分类算法
2020-06-12段敬雅田联房
段敬雅,李 彬+,董 超,田联房
(1.华南理工大学 自动化科学与工程学院,广东 广州 510641;2.国家海洋局南海调查技术中心, 广东 广州 510300)
0 引 言
传统的船舶目标检测通常包含目标分割、候选区域生成、特征提取、分类器分类等步骤[1-4],此类算法的局限性在于人工设计的特征泛化能力较差,在复杂多变的实际海域场景中检出率较低。近年来,深度学习在目标检测和识别领域表现突出。Girshick等提出了R-CNN模型[5],将卷积神经网络应用到目标检测领域,随后改进的Fast R-CNN[6]、Faster R-CNN[7]模型不断提高检测精度。YOLO[8]实现了端到端的实时目标检测,缺陷在于检测精度较低。YOLOv2[9]改进了YOLO结构,保证实时检测的同时大幅提高了检测精度。
将卷积神经网络应用到船舶检测识别领域是目前的发展趋势。王新立等[10]基于残差网络设计CNN模型完成帆船、运输船和小型船的检测。Sui Tingting等[11]结合CNN模型、Itti模型与多特征融合实现船舶识别;杨亚东等[12]基于显著性检测算法将船舶目标从背景中分离,结合改进的CNN识别船舶。但这两种识别方法仅适用于背景简单的单一船舶目标,无法直接应用到多船舶目标场景中。
上述研究的局限性在于:无法利用单一的CNN模型在实现船舶检测的基础上,完成特定类别的船舶分类任务。针对这一问题,本文提出基于YOLOv2结合SVM的船舶检测分类算法,实现了复杂背景下多船舶目标的有效检测与识别,具有实用意义。
1 本文所提算法概述
传统船舶检测方法提取的特征泛化能力差, 在光照变化剧烈、背景复杂、目标尺寸多样的船舶检测任务中检出率较低。为克服这一问题、实现复杂背景下多船舶目标的有效检测与识别,本文提出一种基于YOLOv2和SVM分类器的船舶检测分类算法,算法框架如图1所示。首先基于YOLOv2网络进行船舶目标检测,然后提取所检测船舶区域的深度特征,最后对特征进行全局平均池化和PCA降维,通过SVM分类器实现分类。
图1 基于YOLOv2和SVM分类器的船舶检测分类算法流程
2 基于YOLOv2和K-means聚类的船舶目标检测
为了完成船舶检测和3类船舶分类的工作,本实验采用的数据集来源于海上实拍图像数据和网络图像数据,船舶类型主要包括渔船、货船、舰艇这3类。数据集中船舶目标的尺寸、角度、光照、背景差异较大,包含有雾、海浪大、逆光等海况较差和背景复杂的情况,检测难度较大。针对这些情况,卷积神经网络可通过训练学习数据的特征,具有较好的检测精度。YOLOv2作为端到端的目标检测框架,比结合region proposal和卷积神经网络的R-CNN系列目标检测框架更容易进行迁移学习,因此本文选择YOLOv2作为船舶检测框架。但YOLOv2在VOC和COCO数据集上得到的anchor boxes并不完全适用于船舶目标,于是本文对YOLOv2模型进行了微调训练:首先基于K-means聚类算法对训练样本的目标框进行聚类,得到适用于船舶数据的anchor boxes;然后选择不同数目、规格的anchor boxes,对YOLOv2模型进行训练和测试。其中将数据集随机分为训练集和测试集,训练集1670张,测试集381张。实验流程如图2所示。
图2 船舶检测实验流程
2.1 YOLOv2船舶目标检测算法
用于船舶检测的YOLOv2模型训练及预测算法流程图如图3所示。为了使得模型更有利于小目标的检测,将待检测船舶图像缩放为608×608×3大小作为输入,经过N个卷积层、池化层后输出大小为19×19×(B×(5+1))的特征。模型将输入图像划分为19×19个网格,借鉴Faster R-CNN的anchor boxes思想[7],在每个网格上预测预先定义B个先验框,在这些先验框的基础上预测船舶位置。每个预测框包含6维信息:框的中心坐标x、y,框的宽度w、高度h,置信度Confidence和框内物体属于船舶目标的得分。置信度公式如式(1)所示
Confidence=P(boat)×IOU(pred,truth)
(1)
式中:P(boat)表示预测框包含船舶目标的概率,IOU(pred,truth)表示预测框和真实框的交并比,公式如式(2)所示
(2)
检测时,将19×19×B个预测框根据得分从大到小排列,去掉低于得分阈值的预测框,再进行非极大抑制去掉重复率较高的预测框,最终得到船舶目标框。
图3 用于船舶检测的YOLOv2模型训练及预测算法流程
2.2 基于K-means学习方法的目标框聚类
本实验对训练样本中的2872个真实船舶目标框的宽高进行K-means聚类,最终确定k个聚类中心。这k个聚类中心值就是k个anchor boxes的宽度和高度。聚类的目标函数如式(3)所示
(3)
式中:K为聚类中心个数,N为真实目标框的个数。box[i]表示第i个聚类中心框,truth[j]为第j个真实目标框,IOU(box[i],truth[j])是聚类中心框与真实目标框的交并比。目标函数越小则交并比越大,说明聚类中心与真实目标框的宽高越接近。
聚类结果如图4所示。横坐标为聚类中心个数,纵坐标为平均交并比averageIOU,公式如式(4)所示
(4)
式中:K为聚类中心个数,N为真实目标框的个数。该式表示所有真实目标框与重叠率最高的聚类中心框的交并比的平均值。
图4 聚类结果
从图4可看出averageIOU随着聚类中心数目的增大而增大,当聚类中心数目大于3后,averageIOU的增大趋势变平缓。综合考虑模型复杂度和averageIOU,选择聚类中心数目为4和5时对应的聚类结果作为训练YOLOv2网络的anchor boxes规格。
表1对比了YOLOv2和本文所得anchor boxes的宽高。从表1可看出本文所得anchor boxes的averageIOU高于YOLOv2,且大部分anchor boxes的宽度大于高度,符合船舶的形状特征。
表1 anchor boxes参数对比
3 基于深度特征的船舶目标分类
由于本文以YOLOv2作为目标检测网络,YOLOv2本身具有良好的特征提取能力,SVM分类器对小数据集的泛化能力更好。因此本文从训练好的YOLOv2网络提取船舶区域的深度特征,通过全局平均池化层将深度特征转化为特征向量,经PCA降维后送入SVM分类器实现分类,实验流程如图5所示。其中特征提取部分算法实现如下:
深度特征提取算法
输入:N张样本,设置batch size=16
步骤1 加载特征提取网络权重
步骤2 Fori=0 toN/ batch size do
步骤3 预处理一个batch输入图像
步骤4 特征图平均池化
步骤5 返回16×X维特征向量和16个标签
步骤6 纵向拼接特征向量及标签
步骤7 End
输出:N×X维特征和N个标签
图5 船舶分类实验流程
本文选择径向基函数作为SVM分类器核函数。对于SVM分类器参数的优化,本文选择6组不同的gamma和C参数,在训练集上采用10折交叉验证的方法验证不同参数对分类器准确率的影响,结果见表2。由表2结果可知,当SVM分类器参数为gamma=2-11、c=2时,本文方法取得最高分类准确率,因此设置分类器参数为gamma=2-11、c=2。
表2 SVM分类器不同参数下的分类准确率/%
本实验从原始数据集图像中提取YOLOv2检测出的船舶区域作为新的分类数据集。其中训练集有809张货船,980张渔船,559张舰艇;测试集有193张货船,307张渔船,126张舰艇。部分实验样本如图6所示。
图6 数据集示例
4 实验结果与分析
实验平台软硬件配置为:Intel(R) Core(TM) i7-6820HQ CPU 2.70 HZ,16 GB内存,NVIDIA Quadro M1000M,Windows64位操作系统。配置python3.5.2,Tensorflow1.8.0,opencv3.4.2,GPU加速库为CUDA9.0和CUDNN7.0。
4.1 基于本文算法的船舶目标检测实验
为了验证通过聚类取得训练集中船舶尺寸的先验信息是否能提升YOLOv2模型对船舶的检测性能,本实验对YOLOv2模型进行3组微调训练,分别采用YOLOv2的原始anchor boxes和聚类得到的两组anchor boxes,参数见表1。训练时batch size设置为16,为加速收敛选用冲量常数0.9,为防止过拟合选择权值衰减系数0.0005。训练30个迭代,前10个迭代的学习率为10-4,为促进模型优化后20个迭代的学习率降为10-5。在目标检测中精确率(precision)和召回率(recall)是一对互为矛盾的指标,因此本文选择平均精确率(average precision,AP)以及帧率(FPS)作为模型评价指标。采用不同anchor boxes的YOLOv2模型在测试集上的检测性能见表3。
表3 不同anchor boxes下模型检测性能对比
从表3可看出, anchor boxes数目为5时,模型对船舶目标检测的平均精确率为80.5%,优于anchor boxes为4时的表现。相比于采用YOLOv2的原始先验框,采用聚类所得先验框使模型的平均精确率提高了7.6%。实验结果表明,通过K-means聚类取得船舶尺寸的先验信息提升了YOLOv2模型对船舶的检测性能。
为了验证本文改进的YOLOv2模型优于传统目标检测方法, 对比Selective Search[13]和本文方法在自建船舶数据集上的检测性能。Selective Search方法基于颜色、纹理等特征对图像进行聚类分割并生成候选框,然后提取候选框的Fhog[14]特征,用SVM分类器判断候选框是否为船舶目标。实验结果见表4,Precision-Recall曲线如图7所示。
表4 Selective Search与本文方法的检测性能对比
图7 Precision-Recall曲线对比
结合表4和图7可知,Selective Search检测方法的召回率、平均精确率以及检测速度远低于本文方法。对于光照、颜色、背景多变的船舶图像,人工设计的Fhog特征泛化能力不足,难以从大量复杂的候选框中准确识别出完整的船舶目标。
对比Selective Search和本文方法分别在逆光条件下、有雾和海浪等复杂海况下、复杂背景下的船舶检测效果,如图8和图9所示。对比图8(b)、图8(c)、图8(e)、图8(f)、图8(g)和图9(b)、图9(c)、图9(e)、图9(f)、图9(g),Selective Search易漏检小尺寸的船舶目标,本文方法对小尺寸船舶目标检测效果较好;对比图8(a)、图8(h)、图8(i)和图9(a)、图9(h)、图9(i),Selective Search分别将海面和海岸背景误检为船舶,本文方法可克服背景干扰,准确检测出船舶;对比图8(d)和图9(d),Selective Search对多个船舶目标仅给出一个预测框,本文方法可准确定位多个船舶目标。
图8 Selective Search检测结果
图9 本文方法检测结果
综上所示,本文方法能克服光照、海浪以及复杂背景对船舶检测的影响,在复杂多变的实际场景下保持较高的召回率,优于传统目标检测方法。
4.2 基于深度特征的船舶分类实验
为了验证本文提出的基于YOLOv2模型提取深度特征+SVM分类器分类方法的有效性,分别提取conv5_1、conv6_1、conv6_5、conv8层深度特征,对比不同特征层的分类效果,实验结果见表5。由于提取的船舶区域尺寸较小,设定特征提取网络输入尺寸为224×224。其中conv5_1层特征大小为14×14×521,其余3层特征大小为7×7×1024。评价指标为分类准确率accuracy,如式(5)所示
(5)
从表5可看出:conv6_1层特征在SVM分类器中取得90.06%的分类准确率,比conv5_1、conv6_5、conv8层特征具有更好的识别能力;在此基础上将全局池化后的conv6_1层特征向量分别与conv5_1、conv6_5、conv8层特征向量融合,最终conv6_1+conv6_5特征组合达到90.87%的分类准确率。
表5 各层特征的分类准确率对比/%
为了验证本文分类方法的优越性,对比传统Fhog[14]+SVM、AlexNet[15]和本文方法在测试集上的分类准确率,实验结果如表6和图10所示。其中对AlexNet进行迁移学习,固定卷积层权重,在训练集上训练fc6、fc7、fc8全连接层,使用小批量梯度下降法训练时分类准确率的变化如图11所示。
表6 不同算法的分类准确率对比/%
图10 不同算法10折交叉验证结果对比
图11 小批量梯度下降训练时AlexNet分类准确率的变化
对比表6和图10数据可知,本文提取的深度特征的识别能力远优于Fhog特征。相比于AlexNet模型,本文方法将分类准确率提高3.9%。实验结果表明本文方法可较好提取船舶特征,提高渔船、舰艇、货船的分类准确率。
4.3 检测分类实验
为了验证本文YOLOv2-SVM算法可有效识别舰艇、渔船、货船3类船舶,比较本文算法与YOLOv2算法对3类船舶目标的检测识别效果, 平均精确率见表7。由表7可知,本文算法相比于YOLOv2模型将mAP提高了3.5%,但由于GPU硬件性能不足,模型的检测速度还有待提高。本文算法的检测分类结果如图12所示,实验结果表明本文算法可准确定位视野范围内多个船舶目标,并识别出渔船、货船、舰艇。
表7 YOLOv2与本文算法的AP值对比
图12 本文算法检测分类效果
5 结束语
本文首先通过K-means算法聚类获得船舶尺寸的先验信息,定位船舶目标,然后融合conv6_1与conv6_5卷积层特征识别船舶类别,在实现海上船舶检测的基础上完成特定类别的船舶分类。实验结果表明,本文提出的YOLOv2-SVM检测分类框架能克服光照、海浪以及复杂背景对船舶检测的影响,在实际海域场景中保持较高的检测精度以及较高的分类准确率,有效实现了复杂背景下多船舶目标的识别。但本文目前只研究了舰艇、渔船、货船这3大类船舶的识别,下一步还需要扩大数据集,实现海上各类船舶的准确自动检测和更细分类。