MMDetection学习系列(2)——SSD深度探索与实战指南

B站影视 2025-01-15 10:22 2

摘要:编辑目标检测是计算机视觉领域的一个重要任务,它旨在从图像中识别出感兴趣的目标,并确定它们的位置和大小。在众多目标检测算法中,SSD(Single Shot MultiBox Detector)以其高效和精确的性能,受到了广泛关注。本文将带你走进SSD目标检测算

编辑目标检测是计算机视觉领域的一个重要任务,它旨在从图像中识别出感兴趣的目标,并确定它们的位置和大小。在众多目标检测算法中,SSD(Single Shot MultiBox Detector)以其高效和精确的性能,受到了广泛关注。本文将带你走进SSD目标检测算法,一起探索它的工作原理和实践应用。

论文信息:SSD: Single Shot MultiBox Detector论文链接:https://arxiv.org/pdf/1512.02325

摘要

论文中提出了一种使用单一深度神经网络检测图像中物体的方法。我们的方法被命名为SSD,它将边界框的输出空间离散化为一组默认框,每个特征图位置的长宽比和比例各不相同。在预测时,该网络会对每个默认框中存在的每个物体类别进行评分,并对框进行调整,以更好地匹配物体形状。此外,该网络还结合了来自不同分辨率的多个特征图的预测结果,从而自然地处理各种尺寸的物体。相对于需要物体提案的方法,SSD非常简单,因为它完全省去了提案生成和后续的像素或特征重采样阶段,并将所有计算封装在一个网络中。这使得SSD易于训练,并可直接集成到需要检测组件的系统中。在PASCAL VOC、COCO和ILSVRC数据集上的实验结果证实,SSD的精确度与使用额外对象建议步骤的方法相比具有竞争力,而且速度更快,同时还为训练和推理提供了统一的框架。对于300×300的输入,SSD在Nvidia TitanX上以59 FPS的速度进行的VOC2007测试中实现了74.3%的mAP1;对于 512×512的输入,SSD实现了76.9%的mAP,超过了同类最先进的Faster R-CNN模型。与其他单级方法相比,即使输入图像尺寸较小,SSD的准确率也要高得多。

SSD介绍

当前最先进的对象检测系统主要基于以下流程:首先假设(或生成)一系列边界框(bounding boxes),然后对每个框重新采样像素或特征,并应用高质量的分类器。

这种方法自选择性搜索(Selective Search)工作以来,在对象检测基准测试中一直占据主导地位。最新的成果,如基于Faster R-CNN的PASCAL VOC、COCO和ILSVRC检测,都采用了这种方法,但使用了更深层次的特征。尽管这些方法在准确性方面表现出色,但它们对计算资源的需求很高,对于嵌入式系统来说过于复杂,甚至在高端硬件上也难以实现实时应用。

与需要生成对象提议的方法相比,SSD方法简单得多。它完全消除了提议生成和后续的像素或特征重采样阶段,将所有计算封装在单个网络中。这使得SSD易于训练,并且可以直接集成到需要对象检测组件的系统中。

实验结果表明,SSD在PASCAL VOC、COCO和ILSVRC数据集上与使用额外对象提议步骤的方法在准确性上具有竞争力,同时速度更快。对于300×300的输入,SSD在VOC2007测试集上达到了74.3%的平均精度(mAP),在Nvidia Titan X上的速度为每秒59帧;对于512×512的输入,SSD的mAP达到了76.9%,超过了类似的最先进的Faster R-CNN模型。

与其他单阶段方法相比,即使在较小的输入图像尺寸下,SSD也展现出更好的准确性。

网络结构

可以分为两个主要部分:基础网络和附加网络。

基础网络

基础网络主要用于提取图像的多尺度特征,通常采用预训练的分类网络,如VGG16或ResNet。以下是基础网络的一般结构:

VGG16网络结构(以VGG16为例):

输入图像经过一系列卷积层(Conv1-Conv5)和最大池化层(Pooling),逐渐提取图像的深层特征。

Conv1-Conv5包含多个卷积层,每个卷积层后面通常跟着一个ReLU激活函数和一个最大池化层。

在SSD中,通常会对VGG16进行一些修改,例如将全连接层(fc6和fc7)转换为卷积层(conv6和conv7),以适应目标检测任务。

附加网络

附加网络是SSD的核心部分,它负责生成一系列默认框(Default Boxes),并对这些框进行分类和回归。附加网络的结构如下:

多尺度特征图:在基础网络的基础上,附加网络通过一系列卷积层(如Conv6-Conv7)生成不同尺度的特征图。这些特征图具有不同的分辨率,可以捕捉到不同大小的目标。

默认框(Default Boxes):对于每个特征图位置,SSD会生成一系列具有不同宽高比和尺度的默认框。这些默认框会在后续的检测过程中用于预测目标的类别和位置。

分类和回归:对于每个默认框,网络会输出两个部分:一个是分类得分(表示该框内包含各个类别的概率),另一个是位置偏移量(用于调整默认框的位置,使其更准确地匹配目标)。

结构细节:SSD网络的具体结构通常包括以下卷积层:Conv6、Conv7、Conv8_1、Conv8_2、Conv9_1、Conv9_2、Conv10_1、Conv10_2、Conv11_1和Conv11_2。

每个卷积层后面通常会跟着一个ReLU激活函数,除了最后一层卷积层外。图中的架构为VGG16作为baseNet的SSD模型结构。

相比于YOLOV1,其差别如下:

主要差别在于 (1)多尺度预测; (2)引入了anchor;(3) 全卷积形式,接下来按照目标检测通用算法流程思路来讲解。ssd也是包括backbone、head、正负样本选取、bbox编解码和损失函数5个部分。

backbone

SSD的骨架是VGG16,其是当前主流的分类网络,其主要特点是全部采用3x3的卷积核,然后通过多个卷积层和最大池化层堆叠而成,是典型的直筒结构。VGG16是在ILSVRC CLS-LOC数据集上预训练过,为了更加适合目标检测,作者进行了适当扩展:

(1) 借鉴DeepLab-LargeFOV思想,将VGG16的全连接层fc6和fc7转换成3x3卷积层conv6和1x1的conv7,同时将池化层pool5由原来的stride=2的2x2变成stride=1的3x3,为了配合这种变化,对conv6(3x3卷积且空洞率为6)采用了空洞卷积,其在不增加参数与模型复杂度的条件下指数级扩大卷积的视野,其使用扩张率(dilation rate)参数来表示扩张的大小。

(2) 然后移除原始vgg的dropout层和fc8层,并新增一系列卷积层,在检测数据集上做微调。SSD算法包括两个模型分别是SSD300和SSD512,后面数字表示输入图片size,这两个模型都是新增一系列卷积层,但是SSD512模型新增的卷积会多一些,其余都是完全相同。

head

backbone模块会输出n个不同尺度的特征图,head模块对每个特征图进行处理,输出两条分支:分类和回归分支。假设某一层的anchor个数是m,那么其分类分支输出shape=(b,(num_cls+1)×m,h',w'),回归分支输出shape=(b,4*m,h',w')。

正负样本选取

1)正样本选取

为每个标注框匹配正样本的步骤有两个:

为每个标注框匹配一个iou最大的预设框作为正样本;

每个预测框与每个标注框计算iou,大于阈值(0.5)则认为是正样本;如此操作简化学习成本,允许网络预测出多个交叠的高分bbox。

2)负样本选取

在选取过正样本后,剩下的未匹配预设框均为负样本,其数量远远大于正样本,对此,SSD将所有的负样本预设框按照loss的置信度降序排序,选取其top 3*正样本数量的预设框作为负样本。

bbox编解码

对于任何一个正样本anchor位置,其gt bbox编码方式采用的依然是Faster rcnn里面的变换规则DeltaXYWHBBoxCoder即

g表示gt bbox,d表示anchor,可以看出中心点xy预测是gt bbox中心点减掉anchor中心点,然后利用anchor的wh进行归一化,而wh预测是基于gt bbox的wh除以anchor的wh,最后利用log来压缩大小gt bbox范围差异。

损失函数

总体损失:总体的损失函数是有位置损失和置信度损失的加权和,如公式(1)所示。

位置损失:用Smooth L1损失来表示,位置计算时,使用预设框d距离中心(cx, cy)的相对距离(相对预设框的宽w高h),其中l表示标注框,g表示预设框,d^w、d^h表示预设框的宽和高。

置信度损失:使用多类softmax损失,如公式(3)所示。

模型训练

在SSD中提出应该采用大量有效的数据增强来提升目标检测性能。在SSD中其提出了:

使用原始图片输入;采样部分,使得采样的部分与目标的最小交叠比为0.1,0.3,0.5,0.7或0.9;随机采样图中的一部分。

采样的尺寸是原始图片尺寸的[0.1, 1],放缩比介于0.5-1之间,若标注的box的中心在采样部分,则保留其交叠部分。采样过后,每个采样被resize到固定大小,并以0.5的概率水平翻转。

实验结果

基础网络

实验全部基于在 ILSVRC CLS-LOC 数据集上预先训练过的VGG16;与DeepLab-LargeFOV 算法类似,我们将fc6和fc7转换为卷积层,对fc6和fc7的参数进行子采样,将pool5从2×2-s2改为3×3-s1,并使用三角算法来填补 “漏洞”;删除了所有滤波层和fc8层。使SGD对生成的模型进行微调,初始学习率为10-3,动量为0.9,权重衰减为0.0005,批量大小为32。

PASCAL VOC2007

在VOC2007测试集(4952张图片)上,与Fast R-CNN和Faster R-CNN进行比较;SSD300模型使用conv4_3、conv7 (fc7)、conv8_2、conv9_2、conv10_2和conv11_2进行位置和置信度预测;SSD300在VOC2007 trainval上的表现已经超过Fast R-CNN,SSD512在更大的输入图像尺寸下表现更好,超过Faster R-CNN。

PASCAL VOC2012

使用与VOC2007相同的设置,但在更大的数据集上进行训练和测试。SSD300和SSD512在VOC2012测试集上的表现与VOC2007测试集上观察到的性能趋势一致。

COCO

在COCO数据集上训练SSD300和SSD512架构。由于COCO中的对象倾向于更小,因此使用更小的默认框。SSD300在COCO test-dev2015上的表现优于Fast R-CNN,SSD512在更大的图像尺寸下表现更好。

ILSVRC结果

将相同的网络架构应用于ILSVRC DET数据集。SSD300在ILSVRC2014 DET train和val1上的训练结果达到了43.4 mAP。

总结

SSD是一种适用于多个类别的快速单次物体检测器。模型的一个主要特点是使用多尺度卷积边界框输出,并将其连接到网络顶部的多个特征图上。通过这种表示方法,我们可以对可能的框形状空间进行有效建模。我们通过实验验证,在适当的训练策略下,精心选择更多的默认边界框可以提高性能。与现有方法相比,我们建立的SSD模型对方框位置、比例和长宽比的预测采样至少多了一个数量级。我们证明,在相同的VGG-16基本架构下,SSD在准确性和速度方面都优于最先进的物体检测器。在PASCAL VOC和COCO上,我们的SSD512模型在准确性方面明显优于最先进的Faster R-CNN,同时速度快3倍。我们的实时SSD300模型以59 FPS的速度运行,比目前的实时YOLO更快,同时检测准确率也明显更高。

来源:小码科普君

相关推荐