基于改进SSD的少样本目标检测
2023-11-22毕忠勤单美静刘志斌徐富强
毕忠勤,单美静,刘志斌,徐富强
(1.上海电力大学 计算机科学与技术学院, 上海 200090;2.华东政法大学 信息科学与技术系,上海 201620)
0 引 言
目标检测任务是计算机视觉领域最重要的任务之一,其研究主要用于人脸检测、安全系统、行人检测、自动驾驶、车辆检测以及医疗领域等[1]。在目前已知的研究领域中,要训练一个好的模型往往需要大量的数据,而人工智能令人印象深刻的特征是能够仅通过一个或几个样本就快速建立对新颖概念的认知的能力。这意味着当前的目标检测技术还有很大的发展空间。为了提高目标检测应用的适用性,少样本目标检测任务成了当前研究的重点[2]。涉及到少样本目标检测的研究起步较早,早期的检测方法主要有基于模式匹配的方法,即使用小部分的样本作为模板,使用该样本在测试样本中寻找目标,后来也出现过形状匹配算法,即通过制定的标准来检测目标之间的相似性,然而传统的目标检测算法往往运算量大并且速度缓慢[3]。传统方法的特点是候选区域几何特征的选择,直线特征识别是早期图像目标的基本特征之一,其检测算法主要包括:标准霍夫变换(SHT)[4]、Burns[5]方法和LSD[6]方法等。由于霍夫变换对随机噪声和特征部分的遮挡具有较高鲁棒性,该方法得到了广泛的运用。而多边形特征识别是通过候选区域的各边界端点的图像二维坐标来进行描述,通过对各相邻特征点连线即可恢复完整的多边形信息。该方法的问题是,由于空间环境问题使得边界特征不完整,从而造成边界特征描述上的困难。传统的目标检测算法取得了很大的进展,但是仍然存在一些问题,例如,基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余,手工设计的特征对于环境多样性的变化并没有很好的鲁棒性。
随着深度学习的发展,基于深度学习的少样本目标检测逐渐成为了研究热点。根据监督机制的不同,基于深度学习的少样本目标检测算法主要分为有监督少样本目标检测、半监督少样本目标检测以及弱监督少样本目标检测。有监督少样本目标检测主要采用元学习方法、迁移学习方法或者数据增强方法。半监督少样本目标检测则主要基于自我训练或自我监督两种解决方案。弱监督少样本目标检测则主要包括基于主动对抗的方法、多实例学习方法以及基于度量学习的方法。
该文对SSD[7]网络运用于少样本目标检测任中存在的问题进行分析,优化SSD网络,优化后的模型不仅可以提高主干网络的特征提取能力,还可以有效提升对少样本数据集检测的准确性。首先将SSD网络中的主干网络替换成层数更深的ResNet-50,高层次的网络模型有效地提高了特征提取能力,并且利用残差单元避免了网络退化问题。其次,用FPN模块替换了原模型中的两个特征层,充分地融合了语义信息和位置信息。
1 SSD网络
SSD网络是传统的one stage目标检测算法,SSD的特点是生成的候选框都是相同尺寸,也是评分机制对候选框内的目标物体进行预测,最后使用非极大值抑制产生最终的检测结果。
SSD网络结构如图1所示。首先数据从输入层输入到模型中,接着由特征提取网络提取数据特征。SSD的特征提取网络是由原始的VGG16网络和另外的五个卷积层构成,增强了对复杂特征的提取能力。从图中可以直观看出这些层的尺寸不一样,是为了实现在不同的尺度上对特征图进行预测。
图1 SSD网络模型
SSD算法中,提出了一个新的概念,即先验框,在特征提取网络生成特征图之后,以每个特征图为中心都会产生一系列不同尺度的先验框,这些先验框与原图一一对应,通过损失函数检测先验框的位置与真实目标框的位置的重叠度,从而分析出这个先验框内目标物体的类别,而且通过检测,也会对先验框的形状进行调整,以使其大小和尺度与真实的目标框更贴合。
先验框包含两个参数:尺度S和宽高比a。假设特征提取网络总共产生m个特征图,那么每个特征图的先验框尺度的计算方式如公式(1)所示:
(1)
SSD算法对不同特征层生成特征图的尺度制定了如下规则:先验框的尺寸随着网络层数不断增加而增加,而特征图尺寸逐渐减小,不同特征层生成特征图的详细尺寸及先验框的大小如表1所示。
表1 每个特征图上的初始框尺度
对先验框的长宽比采用公式(2)的设置方式:
(2)
每个特征图上的初始框宽、高可以用公式(3)得出:
(3)
对于宽高比为1的初始框,又多增加了一个正方形的初始框,定义如公式(4)所示。
(4)
SSD所用到的特征图及其大小如表2所示。
表2 SSD网络所用到的特征图及其大小
为了得到更好的检测结果,SSD引入ground truth的概念,即那些预测正确的样本。算法的关键是要搞清楚用哪个候选框进行预测,SSD的操作是用先验框和训练样本中的ground truth进行比对,如果匹配成功,那与之对应的候选框就负责预测它。所以先验框和ground truth的匹配规则是算法是否有效的关键因素。SSD的先验框与ground truth的匹配规则可以分成以下两个步骤:
(1)对于图片中的众多候选目标,需要确定每个候选框对应的ground truth,计算不同先验框和ground truth的IOU,找出其中的最大值。这样就确定了一组匹配关系。因为IOU总有最大值,所以这种方式可以保证每个ground truth都不会被遗漏。如果某个先验框和ground truth成功匹配,称之为正样本。反之,该先验框对应的候选框定位失败,只能是负样本。
(2)在第一轮筛选中剩余的先验框,不能全部舍弃,通过设定一个阈值,当某个ground truth与先验框的IOU大于这个阈值,那么也能达成匹配。但是这可能导致某个ground truth与多个先验框匹配成功,这是可以的,但是一个先验框只能匹配一个ground truth。
2 改进SSD模型
SSD算法的训练已经非常成熟,因为它不需要生成候选框并且简化了特征提取的过程。通过实验表明,SSD在VOC2007数据集上的检测精度达到了74.3%,比目前最先进的Faster R-CNN算法效果更好。与同类型的one stage算法相比,检测速度也更快。然而,SSD仍然存在可以优化的地方:首先,该模型提出的先验框概念虽然有助于训练,但是先验框的初始尺度和长宽比需要手工设置,不能通过模型训练直接获得。而且SSD网络中每一层特征图使用的先验框的尺寸都不同,增加了训练的难度。其次,与Faster R-CNN算法相比,SSD对小样本的检测效果还存在明显的差距。因为SSD的底层特征图结构简单,无法对小目标的特征进行充分的提取。针对这些问题,该文对SSD算法进行优化,改进后的网络模型如图2所示,而对SSD算法提出的改进主要有:
(1)将SSD的特征网络VGG替换成网络层数更深的ResNet-50。增强对复杂特征的提取,并且利用残差单元,避免了网络层数加深带来的退化问题。
(2)将SSD结构中Conv8_2和Conv9_2两个特征层替换成FPN,更充分地融合不同层的语义信息,提升检测效果。
图2 改进的SSD模型结构示意图
下面对图2中的ResNet-50、FPN模块以及损失函数进行介绍。
2.1 ResNet模型
ResNet[8](残差网络)是由何凯明等提出的,解决了深层次网络模型退化的问题。ResNet模型是在VGG19模型的基础上进行了修改,该算法提出了残差单元这个概念。残差单元网络结构如图3所示。假设残差网络的输入为X,将学习到的特征记为H(X),使残差F(X)=H(X)-X,那么就会得到原始的特征为F(X)+X。当残差为0时,即使使用多个网络堆积到一起进行训练,也能保证网络性能不会下降,实际上残差不可能为0,那么深层次的网络结构就可以继续提取新的特征,从而拥有更好的性能。ResNet还有一个重要的训练原则:当特征图大小降低一半时,它的数量增加一倍,保持了网络层的复杂度。
2.2 FPN模块
传统的Faster R-CNN[9]网络集成了R-CNN系列算法的优点,逐步解决了R-CNN系列算法存在的问题,但是该算法在小样本检测任务中表现不是很好,原因在于无论是RPN[10]网络还是Fast R-CNN[11]网络,都是基于单个高层特征进行任务提取,那么小目标经过多次卷积池化,特征层中的小目标特征已经所剩无几。解决这种问题的常用方法是采用图像金字塔的方式在训练或测试阶段对图片进行多尺度变化增强,但是这样带来了极大的计算量。FPN主要解决的是物体检测中的多尺度问题,通过简单的网络连接改变,在基本不增加原有模型计算量的情况下,大幅度提升了小物体检测的性能。FPN[12]的提出是为了结合高层特征和低层特征,借鉴了ResNet的跳接结构,使得待检测的特征图中具有丰富的语义信息和位置信息。并且,该模型利用多尺度特征图检测,较好地处理了目标检测中的多尺度变化问题。
2.3 损失函数
损失函数一般用来评价模型的预测值和真实值的误差,对网络学习速度的快慢及最终模型预测效果的好坏起着关键的作用。IOU[13]是目标检测中常用的指标,用来反映预测框和目标框之间的检测效果,其定义为:
(5)
SSD中用CIOU[14]代替原始的BBOX的回归损失函数。对于目标检测来讲,在获得真实框之后需要先对真实框进行编码,将其转化为预测框的形式,然后将真实框与网络的预测结果进行对比,对网络结构进行优化,使框的预测更准确。CIOU是IOU的一个改进版,公式如下:
(6)
式中,b、bgt分别表示预测框和真实框的中心点;ρ2表示两个中心点的欧氏距离;c表示能够同时包含预测框和真实框的最小闭包区域的对角线距离。其中:
(7)
(8)
αν与真实框和预测框的框高有关系,二者越相近,αν的值越低,CIOU指的是真实框和预测框的偏离程度,则LOSS函数为:
3 实验及分析
3.1 公共基准数据集介绍
该文采用FSOD数据集作为测试数据集。FSOD数据集是专为少样本学习和评估新颖类别模型的通用性而设计的,该模型包含1 000个类别,分别用于训练和测试集的80/20分割,总共约66 000张图像和182 000个候选框。该数据集包含83种父级语义,例如哺乳动物、衣服、武器等,并进一步划分为1 000个叶子类别。数据集包含对象大小和纵横比差异很大的对象,由26.5%的图像组成,其中测试集中的对象不少于3个。测试集包含大量未包含在标签系统中的类别的候选框[15]。
3.2 实验环境及步骤
该文进行的实验是在Ubuntu16.04操作系统下完成的。实验所采用的硬件配置为:中央处理器(CPU):Intel Core i9-10900k;图像处理器(GPU):NVIDIA GTX 3080独立显卡,10G显存。使用的编程语言为Python3.6,机器学习开发框架为Pytorch1.7。
实验步骤如下:
(1)搭建文中网络。
(2)使用ResNet-50在Mini-ImageNet分类数据集进行预训练,得到预训练后的ResNet-50模型。
(3)进行迁移学习,去除ResNet-50模型的全连接层,加载其权重作为文中主干网络的初始参数,对类别预测分支、位置预测分支使用kaiming分布进行参数初始化,对其余部分参数随机初始化。
(4)加载Mini-ImageNet训练集图片,将图片大小设置为224×224,使用随机裁剪、缩放、翻转等方法进行数据增广,输入网络进行训练。
(5)使用随机梯度下降法作为优化器,初始学习率设置为0.001,batch_size大小设置为8,最大迭代次数设置为200。优化器使用Adam,其参数为step_size=1,gamma=0.95。
(6)保存训练模型。
(7)加载训练完毕的模型,输入Mini-ImageNet测试集图片,输出测试结果。
3.3 评价指标
在目标检测领域,往往使用平均精度均值(mean Average Precision,mAP)、平均精度(Average Precision,AP)、精确率(Precision)以及召回率(Recall)来评估模型的检测效果;使用每秒传输帧数(Frame Per Second,FPS)、每秒10亿的浮点运算次数(Giga Floating-point Operations Per Second,GigaFLOPS)来评估模型的检测性能。该文采用FPS和mAP两个指标衡量改进算法的效率。公式(9)和公式(10)为Precision和Recall的计算公式。
Precision=TP/(TP+FP)
(9)
Recall=TP/(TP+FN)
(10)
式中,TP代表模型认为是正样本且实际上是正样本的输入,FP代表模型认为是正样本但实际上不是正样本的输入,FN代表模型认为是负样本但实际上不是负样本的输入。
由Precision和Recall作为横纵坐标可以得到一条PR曲线,PR曲线下的面积则被称为AP指标,对精确率和召回率的结果进行了综合评估。定义如下:
(11)
式中,p(k)为召回率变化点k对应的精确率;Δr(k)为变化点k对应的召回率的变化量;N为召回率变化点的数量;不同类别AP不同,i为类别的索引值。
mAP指标则为所有的类的AP值进行求平均。定义如下:
(12)
式中,m为类别数量。
3.4 图片数据预处理
(1)灰度世界算法是基于灰度世界假设的,灰度世界算法在物理上假设自然界物体光的平均反射值通常是一个固定值,它近似于灰色。采用色彩平衡方法将该假设应用于训练集中的图像,可以从图像中消除环境光的影响,从而达到增强图像的效果。
(2)通过对训练样本旋转来实现数据扩增。旋转包括水平旋转、垂直旋转、镜像旋转,旋转的角度范围为+30°~-30°,并对新增样本进行筛选,去除劣质样本。
(3)数据集的制作。在经过对图像数据的预处理之后,得到的数据如表3所示,分为三类。第一类是原始图像训练集,第二类是经过图像增强后的训练集,第三类是经过样本扩增后的训练集。
表3 训练集数量
3.5 实验结果和对比分析
首先,为了验证提出的改进算法的有效性,对改进的SSD网络模型与SSD网络模型进行实验对比。
如表4所示,改进后的模型采用ResNet-50作为主干网络,经过实验,算法在Mini-ImageNet数据集上的mAP有了明显的提升。这是因为ResNet-50的网络层数更深,加强了对复杂特征的提取,提高了检测效果。
表4 改进的算法和原始SSD算法的平均精度对比
表5展示了所提算法与SSD系列改进算法DSOD、RSSD、DSSD、FSSD的详细对比。从表中可以看出SSD300的FPS最高,达到了46。所提改进算法在检测速度上对比SSD300有所下降,但是在输入图像分辨率、准确率这两个指标上达到了最优,改进后的算法在速度没有明显降低的情况下mAP达到了79.8%。
表5 所提算法与SSD系列改进算法的对比
4 结束语
该文提出了一种基于SSD算法的少样本目标检测算法,针对SSD算法在少样本目标检测中的问题,提出了改进思路。首先,用神经网络层数更深的ResNet-50替换原来的VGG,ResNet-50作为主干网络,可以对更加复杂的特征进行提取,并且利用残差单元避免了随着网络层数加深带来的退化问题;其次,用FPN替换SSD网络中间的两个特征层,充分融合不同层次的特征信息。通过实验,改进的SSD算法在Mini-ImageNet数据集的检测结果中,mAP值达到了79.8%,高于原始的SSD算法及其系列的改进算法,FPS也达到了38.3。实验结果表明提出的改进算法是有效的,并且具有良好的鲁棒性。另外,为了增强少样本检测的检测效果,提出了一种图像处理的方法,该方法会增加一定的计算量,如何设计出更理想的图像处理方案或者引入更适合研究的少样本数据集,这是后续研究值得考虑的问题。