基于改进YOLOv5 的海面可见光图像船舶检测技术
2022-02-03宦毓泰王文杰
宦毓泰,陈 琳,刘 彬,王文杰
(上海船舶设备研究所,上海 200031)
0 引言
近年来,智能船舶的研发应用不断推陈出新[1]。随着云技术、大数据、人工智能以及虚拟现实的运用日益成熟,信息化、自动化船舶向着自主决策、自主控制的智能化方向发展。其发展方向之一就是智能无人船(Unmanned Surface Vessel,USV)[2],即当面对复杂的海洋环境时,可以对目标或障碍物进行检测与识别,以进行避障、规划和自主完成任务,因此,无人船的环境感知和识别系统需要较高的准确性和实时性。
目前,海洋环境下雷达作为传统的传感器,但基于船用雷达有限的空间分辨率和相对较低的扫描速率,雷达的精度有限[3]。为了克服此局限性,可用可见光传感器进行海上目标检测,提高海洋环境中自主导航的感知和态势感知性能[4]。考虑到无人船感知和决策的强实时性和YOLOv5新的先验框机制,本文采用基于改进YOLOv5的网络架构进行目标检测,同时对原始图像进行图像预处理和数据增强,优化神经网络模型,采用K-means改进锚点框的尺寸大小,实现较好的海面目标检测效果[5-7]。
1 YOLOv5 算法网络原理与结构
基于无人船感知系统对实时性和准确性的需求,本文采用YOLOv5l网络结构,主要由4个部分组成,分别是输入(Input)、主干网络(Backbone)、颈部网络(Neck)、检测头(Prediction),见图1,其中Focus模块是指聚焦模块,CONV模块是指卷积(Convolution)模块,BN模块是指批标准化(Batch Normalization)模块,SiLU模块是一种激活函数,CBS模块是指卷积模块、批标准化模块、SiLU模块的串联模块,Res unit模块是指残差组件,Concat是指特征融合模块,CSP1_X是指有X个残差组件的跨阶段局部网络模块(Cross Stage Partial Network),CSP2_X是指有2X个残差组件的跨阶段局部网络模块,Upsampling模块是指上采样模块,Maxpool模块是指最大池化模块,slice模块是指切片模块[8-10]。
图1 YOLOv5l 网络结构图
2 YOLOv51 改进算法
2.1 输入端改进
基于无人船海面图像的近方船舶和远方船舶的像素点不同,引入Mixup数据增强方法,可对两个样本-标签数据对按比例相加后生成新的样本-标签数据。
假设batchx1是一个batch样本,batchy1是该batch样本对应的标签,batchx2是另外一个batch样本,batchy2是该batch样本对应的标签,λ是由参数为(α,β)的贝塔分布计算出来的混合系数,由此得到Mixup原理公式为
式(1)~式(3)中:Beta指的是贝塔分布,mixed_batchx是混合后的batch样本,mixed_batchy是混合后的batch样本对应的标签。
Mixup数据增强后的效果图见图2。
图2 Mixup 数据增强效果图
2.2 损失函数改进
原始YOLOv5使用GIOU_Loss做边界框的损失函数,损失函数如式(4)~式(7)所示,由类别损失、定位损失和置信度损失3个部分构成。其中置信度损失和类别损失采用二元交叉熵损失函数进行计算:
本文采用Focal loss 损失函数,并采用CIOU_Loss损失函数代替GIOU_Loss损失函数。
Focal loss损失函数本质上就是在二元交叉熵损失函数引进了一个控制正负样本的权重的系数α和一个控制容易分类和难分类样本的权重γ,通过权重γ和该类别的概率pt计算出调制系数(1-pt)γ,代入式(6)和式(7)中,得到:
2.3 先验框聚类
原始YOLOv5模型中先验框是固定的9个框,为[12, 16]、[19, 36]、[40, 28]、[36, 75]、[76, 55]、[72, 146]、[142, 110]、[192, 243]、[459, 401]。为了更好地匹配海面船舶图像的特征,用K-means聚类算法对数据集重新聚类,生成适合的先验框,最终得到的先验框为[46, 21]、[93, 39]、[178, 42]、[135, 64]、[244, 72]、[187, 107]、[413, 90]、[301,145]、[507, 163],K-means聚类结果图见图3。
图3 K-means 聚类结果图
3 试验与结果分析
将改进后的YOLOv5算法应用于海面船舶识别的场景下,并与原始的YOLOv5进行对比试验。
3.1 试验运行环境和参数设置
试验环境的具体配置为Windows10 64位,CPU为Intel Core i7 10875H@2.3GHz,GPU为GeForce RTX 2060(6.0 GB),内存为16GB,python版本为3.8,CUDA版本为10.2,pytorch版本为1.11.0。
训练参数方面,所有图片输入为640×640,模型采用YOLOv5l,初始学习率为0.001,最小学习率为0.000 01。训练轮数(epoch)为64,其中前32个epoch冻结模型的主干网络部分的参数,批处理量(Batch size)为8,特征提取网络不发生变化,网络仅进行微调,后32个batch解冻主干网络,batch size为4,优化器为adam(Adaptive Moment Estimation),动量(Momentum)为0.937,权值衰减为0,使用余弦退火算法对学习率进行更新。
3.2 试验数据集和预处理
本文数据集采用SeaShips数据集[11],该数据集由7 000张图片组成,涵盖6种常见船型:矿砂船(Ore Carrier)、客船(Passenger Ship)、集装箱船(Container Ship)、散货船(Bulk Cargo Carrier)、杂货船(General Cargo Ship)、渔船(Fishing Boat),所有图像都是来自真实视频片段,均使用具体船型标签和高精度边界框进行注释,SeaShips数据集具体分布见图4。
图4 SeaShips 数据集分布图
数据增强为线上增强,所有图片数据有1/3进行Mosaic数据增强,1/3进行Mixup数据增强,1/3只进行旋转、平移等基础数据增强。考虑到Mosaic数据增强和Mixup数据增强远远脱离自然图片的真实分布,故在训练的最后30%batch不进行数据增强。
3.3 评估指标和试验结果与分析
本文评估指标采用平均精度(Average Precision, AP)、平均精度均值(Mean AP, mAP)、精确率(precision)和召回率(recall)有关以及每秒检测图片的帧数(Frames Per Second, FPS)这5种在目标检测算法中较为常见的评价指标来评估本文算法的性能。
在训练64个epoch的过程中,损失函数和平均精度的变化曲线见图5和图6,可以看到仅10个epoch之后模型就达到了较好的拟合效果。模型最终的平均精度均值达到了98.6%,相对于原始YOLOv5l模型的mAP提高了1.69%,具体每类的平均精度值见图7。以数量最多的矿砂船为例,精确度达到了99.03%,召回率达到了93.18%,精确度和召回率随门限值变化而变化的折线图,如图8和图9所示。同时本文提出的模型的检测速度达到了22.234FPS,较原始模型的20.335FPS也有明显提升。
图5 模型在数据集上训练过程中损失函数变化曲线
图6 模型在数据集上训练过程中平均精度变化曲线
图7 最终模型的平均精度均值和每类的平均精度图
图8 精确度随门限值变化的折线图
图9 召回率随门限值变化的折线图
本文算法的具体海面目标检测效果图见图10,可以看到算法模型对较大的船只和较小的船只都有不错的检测效果,且可以有效分辨出不同船只的种类。
图10 检测效果图
4 结论
为了提高无人船的感知能力,本文基于YOLOv5算法模型,利用深度学习的方法,针对海面船舶检测的特点,提出一种基于改进YOLOv5的海面可见光图像船舶检测算法,对模型的输入方法、损失函数和先验框作出了改进,利用Seaships船舶数据集进行训练和目标检测,平均精度均值最高可达98.6%,同时检测时间也少于50 ms,获得了较好的检测结果,能够满足无人船感知的精确性和实时性,完善了无人船的感知系统,对无人船的感知研究工作有一定指导意义。