基于改进SSD的海洋生物检测算法
2022-05-09林明星
邓 权,林明星
(1.山东大学 机械工程学院,山东 济南 250061;2.高效洁净机械制造教育部重点实验室,山东 济南 250061;3.机械工程国家级实验教学示范中心,山东 济南 250061)
0 引 言
海洋是地球最大的生态系统,拥有丰富多样的生物资源,如何高效合理地开发海洋生物资源,对人类的发展异常重要。海洋生物检测是实现海洋生物资源可持续开发的首要技术之一,检测算法可分为传统图像处理方法和基于深度学习的方法[1]。传统方法由候选目标区域提取算法以及候选目标区域分类算法组成[2]。由于不同波长的光在水中的衰减率差异,水下图片会出现严重的失真问题,畸变程度大。水下环境复杂,目标与背景高度相似且存在严重的重叠或残缺问题。传统检测算法设计流程繁琐、鲁棒性差、可移植性差,无法满足海洋生物检测的要求。随着深度学习的发展,目前深度学习目标检测在生物识别、医学检测、缺陷检测等领域的使用率逐年增高[3]。深度学习目标检测算法主要分为两类,一类是以Faster RCNN为代表的two stage目标检测算法[4]。这类算法分为两个阶段,第一阶段通过RPN(区域生成网络)产生大量候选区域(proposals),RPN网络对这些proposals做初步筛选和精修,筛除大量无用的proposals,然后利用边框回归对剩余的proposals进行初步修正,第二阶段通过预测网络对剩余的proposals做最终的分类和位置精修。另一种则是以SSD(single shot detector)[5]、YOLO(you only look once)[6-8]等检测网络为主的one stage检测算法,这类检测网络直接通过回归的方式预测分类和位置。two stage训练复杂、运行速度慢,难以满足水下目标检测对实时性的需求。one stage方法虽然精度上较two stage低,但速度快,适合对速度有要求的应用场景。SSD算法具有检测速度快、准确率高的优势,被广泛应用于各类目标识别场景。为了进一步提高检测性能,研究者在SSD网络的基础上提出了各种改进算法。例如,Jeong等人提出了RSSD算法[9],RSSD算法采用上下双向流融合特征层的方式增强特征层的语义信息。Cheng-Yang Fu等人提出了类似沙漏的DSSD目标检测网络,通过跳层连接和反卷积构建出新特征金字塔[10]。这些改进算法会显著增加模型的计算量和参数量,降低运行效率,难以满足实际应用要求。
为了进一步提高SSD网络的检测准确率,该文在引入较少参数量和计算量的情况下,通过融合模块和特征增强模块提高模型准确率。实验表明,该算法参数量仅比原网络高1.97 M,但是检测平均精度可达80.8%,最高检测速度FPS达74,远高于其他改进算法,可以较好地满足海洋生物检测对实时性和准确率的要求。
1 SSD网络模型
1.1 SSD网络结构
SSD是一种多目标的one stage目标检测算法,具有检测速度快、准确率高的优点,模型示意图如图1所示。
图1 SSD网络模型
网络结构主要包括两个子网络,分别是特征提取网络和预测网络。特征提取网络在VGG16的基础上提取特征,将VGG16的全连接层fc6、fc7替换成卷积层,同时用步长为2的3×3卷积替换池化层,扩大感受野。为了弥补视野损失,采用Dilation算法[11]扩大感受野。预测网络负责预测目标类别以及框坐标。输入300×300的图片后,SSD网络经过一系列卷积和池化得到六层特征,尺度分别为38×38、19×19、10×10、5×5、3×3、1×1。
1.2 先验框生成
SSD获取特征后采用了与Faster RCNN机制类似的先验框匹配机制匹配真实框(ground truth)。为了匹配不同尺度的目标,不同特征图上的像素点设置尺度互不相同的先验框,先验框尺度sk可以按照公式1确定:
(1)
(2)
(3)
1.3 损失函数
SSD目标损失函数为位置损失Lloc和类别置信度损失Lconf加权相加,总损失函数如式4所示。
(4)
式中,x为当前检测框的类别信息,c为类别置信度,α为权重系数,g为真实框的位置信息,N为与真实目标检测框相匹配的先验框个数。Lloc(x,l,g)为位置损失,损失函数为SmoothL1函数,如式5所示。
(5)
其中,Lconf(x,c)是多类别置信度c的交叉熵损失函数softmax loss,如式6和式7所示。
(6)
(7)
2 改进SSD网络
SSD初始网络特征金字塔浅层特征尺寸大,含有充足的细节信息,但语义信息过少。深层特征感受视野大,含有充足的语义信息,但随着感受视野增加,细节信息逐渐丢失。浅层的细节信息对定位异常重要,而深层的语义信息有助于识别大目标,通过深层和浅层的特征融合可以大大增加浅层的语义信息,可以丰富深层特征层的细节信息,从整体上提高检测模型的检测准确率。Lin Tsung-Yi提出了FPN(feature pyramid networks for object detection)网络[12],FPN将图像金字塔中的特征自深层到浅层相加融合,这种方法可以较大幅度地提升小目标检测率,但其计算量较大且特征只是单向流动,会造成部分信息丢失,限制准确率进一步提升。Li Zuoxin等人提出FSSD提取前三层特征融合后,用融合后的特征层重新生成预测网络所需特征金字塔[13]。这些融合模型带来了过多的参数和运算量,无法达到实时性要求。该文提取出部分特征层后采用上下双向流特征融合的方法提高SSD网络的检测准确率。为了更好地提高检测准确率,该文提出了特征增强模块,通过融合不同感受野特征图的方式显著提升特征层的特征表达能力,提高准确率。基于改进SSD的海洋生物检测模型结构如图2所示。
图2 海洋生物检测算法
2.1 特征融合
由于原始SSD网络缺少特征融合,导致输入到预测网络的特征感受野小、细节信息不足,难以准确定位。每个特征层单独检测,缺乏上下文信息联合分析,网络容易产生重复检测的问题。由于尺度相差较大,NMS算法无法很好地剔除这些冗余框,导致目标重复标记。通过充分利用特征层上下文的信息,可以尽可能避免重复检查的问题。改进网络模型通过上下双向流特征融合的方式增强特征表达能力,提高目标检测网络对目标的准确率。特征融合主要有三种方式,分别为:逐像素相加或者相乘、按照权重进行像素相加以及融合层特征通道拼接。前两者计算速度较快、引入的参数量少,但是准确率较低。为了提高模型对复杂水下环境的适应能力,保证改进SSD网络对水下复杂目标的检测效果,该文选择特征拼接的方式进行融合。为了尽可能减小计算量,保证检测实时性,改进SSD网络算法只选取前三层进行特征融合,即对Conv4_3、Conv7以及Conv8_2层进行特征拼接融合,特征层尺度分别为38×38、19×19、10×10。在拼接融合前需要对特征层进行池化或者反卷积操作统一尺度。具体操作为当浅层特征需要融合深层特征时,把深层特征输入到反卷积层统一尺度。而当深层特征需要融合浅层时,通过最大池化层(Maxpool)缩小浅层尺度统一尺度。
针对不同特征层融合,该文分别设计了三种模块以满足融合需求,结构如图3所示。为了缩减模型,在融合前对目标融合层用1×1卷积降低通道数,减小计算量和参数量。融合模块a结构将Conv7和Conv8_2通过反卷积上采样,上采样后三个特征层的尺度统一为38×38,最后将三层特征层拼接融合,为了尽可能减少参数,提高计算速度,同时减小因模型结构复杂度上升带来的过拟合风险,这里将通道从512缩小为384。融合模块b将Conv4_3和Conv8_2分别通过最大池化层下采样和反卷积统一特征尺度后,将三层特征层拼接融合,同时为了减小计算量,通道数由原SSD的1 024缩减为512。融合模块c将Conv4_3和Conv7降维后通过最大池化下采样统一尺度后拼接融合。
融合模块a 融合模块b 融合模块c 图3 特征融合模块
2.2 特征增强模块
LiuSongtao等人提出RFB[14]网络,该算法在浅层中嵌入融合了不同感受野特征的模块,可以大幅度提升模型的检测效果,但这种算法用了大量的大尺度卷积核,计算复杂度偏高。Li Zeming等人提出了Light-Head R-CNN[15]算法,算法中通过大尺度分解卷积在保证准确率的情形下大幅度减小计算量。
为了进一步提升特征融合以后的浅层特征层,该文设计了一种功能强大的特征增强模块。该模块简单高效、移植性好,可以很轻松地嵌入其他目标检测网络。FCN[16]等网络采用池化的方法增加感受野,这些算法池化后需要通过双线性插值上采样扩大特征图尺度。这种池化后通过上采样扩大特征尺度的方法会造成一定的信息丢失,影响模型性能的进一步提升。带洞卷积(dilation)可以在参数量保持不变的情况下,增大卷积核感受野,同时避免信息丢失[10]。因此该文提出的特征增强模块采用这种方式增大感受野,增强输入特征层的语义信息,同时又不引入过多的参数。
为了避免引入过多的参数量和计算量,仅在增强后的Conv4_3和Conv7上分别嵌套了一个特征增强模块。特征增强模块内部结构如图4所示,左侧分支中将通道减为原来1/2,然后连接一个大小为3×3,Dilation为3的带洞卷积,中部分支和右侧分支通道数缩减为1/4。中部分支采用大尺寸k×k卷积(该文取5)。为了进一步减小参数量和算法复杂度,利用分解策略将k×k分解成1×k和k×1的卷积。右侧分支与中部分支对称分布,将分解顺序反转,从而保证右侧分支获取与中部分支不同的特征。特征增强模块通过三个不同的分支模块和卷积核,获取不同的感受野信息,提高最终模型的准确率。
图4 特征增强模块
3 实验结果与分析
3.1 实验环境与数据集
实验环境基于Ubuntu 18.04LTS系统,采用Pytorch1.3.0深度学习框架训练模型,python版本3.7.0,显卡型号为GeForce RTX 1080Ti,处理器为Intel(R) Xeon(R) Gold 5118。文中所用海洋生物数据集来自Open image V4和自行收集,共4 400张图片。数据集制作成voc格式,按照8∶1∶1划分训练集、验证集和测试集,数据集主要包括以下9个类别:Crab、Sea cucumber、Sea turtle、Shark、Starfish、Jellyfish、Lobster、Skates、Oyster。
3.2 评价指标
为了综合评估算法的准确率和速度,该文选择类别精度(AP)、平均类别精度(mAP)以及FPS(frames per second)指标作为评估标准。FPS即每秒检测的图片数目,通过输入视频流即可检测。AP能表示单类别的精度,而mAP表示所有类别精度的平均值。AP测量需要用到交并比(IOU),IOU高于阈值的样本为正样本,低于的为负样本。AP计算需要用到精度(Precision)、召回率(Recall),具体如下式所示:
(8)
(9)
(10)
其中,TP为预测为正的正样本,FP为预测为正的负样本,FN为预测为负的正样本,p(r)为精度-召回率曲线。
3.3 实验过程与结果
实验中采用迁移学习的策略降低训练难度并提高检测效果,模型在预训练好的VGG16模型上训练,损失函数与原SSD网络保持一致,batch size设为32,最大训练次数为250 epoch,动量因子0.9,权重衰减系数0.000 5,学习率设为0.003,当迭代epoch分别达到150和200时,将学习率减小为当前学习率的1/10,优化器选择SGD算法。输入图片大小为300×300,采用数据增广操作对图片进行翻转、裁剪等操作以扩充数据集,降低过拟合风险。损失曲线如图5所示。可以看到当迭代到200个epoch后损失基本不再下降,总loss约1.3,训练结束。
为了进一步验证文中算法带来的提升,将原始SSD网络和文中网络进行了详细的类别比较,结果如表1所示。
图5 训练损失曲线 表1 单类别精度
目标SSD/%改进SSD/%Crab83.086.2Sea cucumber74.278.1Sea turtle84.491.0Shark85.388.8Lobster68.571.6Starfish88.889.5Jellyfish84.287.4Skates63.877.4Oyster50.357.2mAP/%75.880.8
结果显示,对于数据集中的9个类别,文中改进算法较原始网络均有较大性能提升,其中Oyster和Sea turtle等小目标提升明显,Oyster较原始网络提高了6.9%,Sea turtle提升6.6%。
除此之外,为了进一步对比网络的检测能力,在海洋生物验证集上,将改进的算法与当前一系列优秀算法进行了比较。对比结果如表2所示。当输入大小为300×300时,文中算法参数量为27.03 M,参数量仅比初始网络多了1.97 M,但mAP却提高了5%。算法参数量明显低于DSSD、FSSD等优秀的改进算法,但准确率远高于这些改进算法,检测速度为74 FPS,略低于原SSD网络的83 FPS,高于其他改进算法,能满足海洋生物检测的实时性要求。
表2 不同算法检测能力对比
图6为效果展示。其中左侧为SSD网络检测效果展示,而右侧为文中改进算法的效果展示。根据(a)、(c)图可见,原始SSD网络对小目标的检测效果不好,容易漏检残缺或者重叠的目标,而文中改进算法对小目标的检测效果不错。(b)显示由于SSD各个特征层单独检测,缺少综合分析上下文信息,容易造成重复检测,改进算法通过融合上下信息,可以有效避免重复检测问题。原始SSD网络对小目标和重叠目标识别效果差,漏检率高,而文中改进算法效果良好,能满足海洋生物检测要求。
图6 效果展示
4 结束语
该文提出了一种基于改进SSD网络的海洋生物识别算法。算法模型通过融合模块增强Conv4_3、Conv7以及Conv8_2的特征表达能力,大大提高了网络的检测性能。为了进一步提高检测性能,在Conv4_3、Conv7后加入两个特征增强模块,提高浅层的特征表达能力。通过上述轻量化的模块,在引入很少参数量计算量的前提下,很好地提高了浅层特征的信息表达能力,大幅度提高了对海洋生物,尤其是对小目标的检测效果。实验结果表明,该算法模型综合检测性能较原始网络及其他改进网络好,具有准确率高、检测速度快的优点,能够很好地满足海洋生物检测的要求。