DSSD : Deconvolutional Single Shot Detector

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_36670529/article/details/99614032


本文的主要贡献是将附加上下文引入到最先进的一般目标检测中。为了实现这一点,我们首先结合了一个最先进的分类器和一个快速检测框架。然后,我们使用反褶积层来增加SSD+Residual-101,以在目标检测中引入额外的大规模上下文,并提高准确性,特别是对于小目标,我们将生成的系统DSSD称为反卷积单阶段检测器。虽然这两个贡献很容易在高层进行描述,但是一个简单的实现是不会成功的。相反,我们展示了仔细添加额外的学习转换阶段,特别是反褶积中的前馈连接模块和一个新的输出模块,使这种新方法成为可能,并为进一步的检测研究形成了一个潜在的前进道路。结果表明,PASCAL VOC和COCO 检测。我们的513×513输入的DSSD在VOC2007测试中实现了81.5%的mAP,在VOC 2012测试中实现了80.0%的mAP,在COCO上实现了33.2%的mAP,在每个数据集上都优于目前最先进的R-FCN方法。

一、简介

本文的主要贡献是将附加上下文引入到最先进的一般目标检测中。最终的结果达到了目前在PASCAL VOC上单阶段检测的最高精度,同时也保持了与之前最先进的检测相当的速度。为了实现这一点,我们首先结合了一个最先进的分类器(Residual-101)和一个快速检测框架(SSD)。然后,我们使用反褶积层来增加SSD+Residual-101,以在目标检测中引入额外的大规模上下文,并提高准确性,特别是对于小目标,我们将生成的系统DSSD称为反卷积单阶段检测器。虽然这两个贡献很容易在高层进行描述,但是一个简单的实现是不会成功的。相反,我们展示了仔细地添加额外的学习转换阶段,特别是反褶积中的前馈连接模块和新的输出模块,使这种新方法成为可能,并为进一步的检测研究形成了一种潜在的前进方式。

把这项工作放在上下文中来看,在过去的两年里,目标检测技术又回到了滑动窗口技术。其思想是,不像选择性搜索和R-CNN派生方法那样,首先为图像中的目标提出潜在的边界框,然后对它们进行分类,而是将分类器应用于图像中一组固定的可能的边界框。虽然滑动窗口方法从未完全消失,但在HOG和DPM的鼎盛时期之后,它们已经不再受欢迎,因为必须考虑到要跟上最先进水平的盒子位置越来越多。随着集成深度学习的更强大的机器学习框架的开发,它们正在回归。这些方法允许考虑更少的潜在边界框,但是除了每个框的分类得分外,还需要预测目标捕捉的实际位置的偏移量,以确定其空间范围。最近,这些方法被证明是有效的包围框建议,而不是自底向上分组分割。甚至最近,这些方法不仅被用于作为潜在目标位置的边界框评分,而且还被用于同时预测目标类别的评分,有效地结合了区域建议和分类的步骤。这是YOLO所采用的方法,它计算一个全局特征图,并使用一个完全连接的层来预测在一组固定区域内的检测。进一步采用这种单阶段方法,为每个尺度添加一层特征图,并使用卷积滤波器进行预测,单阶段多盒检测器(SSD)的准确度显著提高,目前在速度与精度之间的权衡方面,SSD是最好的检测器。

在寻找进一步提高检测精度的方法时,除了提高边界框预测过程的空间分辨率外,明显的目标是更好的特征网络和添加更多的上下文,尤其是对于小目标。以前的SSD版本是基于VGG网络,但是许多研究人员使用Residual-101实现了更好的任务精度。观察现在在检测之外的研究,已经有了集成上下文的工作“编码-解码”网络,网络中层的bottleneck层用来编码一幅图像的输入信息,然后逐渐增大的图层将其解码成一张覆盖整个图像的映射。由此产生的宽、窄、宽的网络结构通常被称为沙漏。这些方法在最近的语义分割和人体姿态估计中得到了广泛的应用。不幸的是,使用更深层的Residual-101或在SSD特性层的末尾添加反褶积层,这两种修改都不能““out of the box”。相反,需要仔细构建用于集成反褶积的组合模块,并在训练过程中输出模块来隔离Residual-101层,从而实现有效的学习。

二、相关工作

主要的目标检测方法,包括SPPnet、Fast R-CNN、Faster R-CNN、R-FCN和YOLO,在不同层上,使用卷积层的最高层来进行目标检测。虽然功能强大,但是对于单层来说,为所有可能的目标规模和形状建模是一个很大的负担。有各种各样的方法来提高检测精度,利用多层在一个卷积网络。第一组方法结合了不同层次的卷积神经网络的特征图,并使用组合的特征图进行预测。ION使用L2正则化将来自VGGNet的多个层和来自合并层的对象建议的池特性组合起来。HyperNet也遵循类似的方法,并使用组合层来学习目标建议和共享特性。由于合并后的特征图具有来自输入图像不同抽象层次的特征,因此合并后的特征更具描述性,更适合于定位和分类。然而,组合的特征映射不仅显著增加了模型的内存占用,而且降低了模型的速度。

另一组方法使用对流网络中的不同层来预测不同尺度的对象。由于不同层中的节点具有不同的接收域,所以很自然地从具有大接收域的层(称为ConvNet中的更高或更高层)预测大对象,并使用具有小接收域的层来预测小对象。SSD[18]将不同规模的默认框分散到一个ConvNet中的多个层,并强制每个层专注于预测特定规模的对象。MS-CNN[2]在一个ConvNet的多个层上应用反褶积,在使用这些层学习区域建议和池特性之前,提高feature map的分辨率。然而,为了更好地检测小对象,这些方法需要使用来自接收域小、特征图密集的浅层的一些信息,这可能会导致小对象性能低下,因为浅层对对象的语义信息较少。通过使用反褶积层和跳过连接,我们可以在密集(反褶积)特征图中注入更多的语义信息,从而帮助预测小对象。

另一组方法使用对流网络中的不同层来预测不同尺度的对象。由于不同层中的节点具有不同的接收域,所以很自然地从具有大接收域的层(称为ConvNet中的更高或更高层)预测大目标,并使用具有小接收域的层来预测小目标。SSD将不同规模的默认框分散到一个ConvNet中的多个层,并强制每个层专注于预测特定规模的目标。MS-CNN在一个ConvNet的多个层上应用反褶积,在使用这些层学习区域建议和池特性之前,提高feature map的分辨率。然而,为了更好地检测小目标,这些方法需要使用来自接收域小、特征图密集的浅层的一些信息,这可能会导致小目标性能低下,因为浅层对对象的语义信息较少。通过使用反褶积层和跳过连接,我们可以在密集(反褶积)特征图中注入更多的语义信息,从而帮助预测小目标。

还有另一项工作试图包含用于预测的上下文信息。多区域CNN池的功能不仅来自区域建议,而且预定义的区域,如半部分,中心,边界和上下文区域。在语义分割和位姿估计已有研究成果的基础上,提出了一种采用编解码器沙漏结构在进行预测前传递上下文信息的方法。反褶积层不仅解决了卷积神经网络中特征图的收缩分辨率问题,而且为预测提供了上下文信息。

三、反卷积的单阶段检测器DSSD

我们首先回顾了SSD的结构,然后描述了新的预测模块,当使用Residual-101作为SSD的基础网络时,可以显著提高训练效率。接下来,我们将讨论如何添加反褶积层来构建沙漏网络,以及如何集成新的反褶积模块来传递最终DSSD模型的语义上下文信息。

3.1、SSD

单镜头多盒探测器(SSD)建立在一个“基础”网络的顶部,该网络的末端(或被截断到末端)带有一些卷积层。SSD添加了一系列逐渐变小的卷积层,如图1顶部的蓝色所示(基本网络显示为白色)。每个添加的层,以及一些较早的基本网络层用于预测一些预定义的默认边界框的得分和偏移量。这些预测由3x3x#channels维度过滤器执行,每个类别得分一个过滤器,回归的边界框的每个维度一个过滤器。采用非最大抑制(NMS)对预测进行后处理,得到最终的检测结果。更多的细节可以在SSD原文中找到,其中检测器使用VGG作为基本网络。

3.2、用VGG代替Residual-101

我们的第一个修改是使用Residual-101来代替原始SSD论文中使用的VGG,特别是我们使用了中的Residual-101网络。目标是提高精确度。图1顶部显示了以Residual-101作为基本网络的SSD。这里,我们在conv5 x块之后添加层,并预测来自conv3 x、conv5 x和其他层的得分和框偏移量。这本身并没有改善结果。考虑到表4中消融研究结果,最上面一行显示的是在321×321输入条件下,用于PASCAL VOC 2007测试的SSD残差-101为76.4。这低于300×300输入VGG的SSD的77.5(见表3)。但是,添加一个额外的预测模块(接下来将介绍)可以显著提高性能。

预测模型

在原始的SSD中,由于梯度的大小较大,目标函数直接应用于所选的特征图上,而conv4 - 3层则使用L2归一化层。MS-CNN指出,改进每个任务的子网络可以提高准确率。这一原则,我们添加一个为每个预测残差块层如图2所示的变体(c)。我们也尝试了最初的SSD方法(a)和版本的残块跳过连接(b)以及两个连续的残块(d)。消融研究不同预测模块如表4所示,在第四节讨论。我们注意到,对于更高分辨率的输入图像,Residual-101和预测模块的性能似乎明显优于没有预测模块的VGG。

反卷积SSD

为了在检测中包含更多的高层上下文,我们将预测移动到原SSD设置之后的一系列反褶积层中,有效地构建了一个不对称的沙漏网络结构,如图1底部所示。实验中的DSSD模型建立在残差为101的SSD上。增加额外的反褶积层,逐步提高特征映射层的分辨率。为了增强特性,我们采用了沙漏模型中的“跳过连接”思想。虽然沙漏模型在编码器和解码器阶段都包含对称层,但由于两个原因,我们使解码器阶段非常浅。首先,检测是视觉中的基本任务,可能需要为下游任务提供信息。因此,速度是一个重要的因素。建立对称网络意味着推理的时间将增加一倍。这不是我们在这个快速检测框架中想要的。其次,目前还没有针对ILSVRC cl - loc数据集的分类任务训练解码器阶段的预训练模型,因为分类在检测中给出的是单一的整幅图像标签,而不是局部标签。最先进的检测器依赖于转移学习的能力。该模型针对ILSVRC cl - loc数据集的分类任务进行了预训练,与随机初始化模型相比,该模型使我们的检测器的精度更高,收敛速度更快。由于我们的解码器没有预先训练的模型,我们不能利用传输学习的优势对解码器层进行训练,而这些层必须从随机初始化开始。反褶积层的一个重要方面是计算成本,尤其是在除反褶积过程外,还添加来自前一层的信息时。

反卷积模块

为了帮助集成来自早期特征图和反褶积层的信息,我们引入了一个反褶积模块,如图3所示。如图1底部的实心圆圈所示,该模块适合于整个DSSD体系结构。反褶积模块的灵感来自Pinheiro等人,他提出了一个用于细化网络的反褶积模块的分解版本与更复杂的版本具有相同的精度,并且网络将更加高效。我们进行了以下修改,并在图3中显示。首先,在每个卷积层之后添加一个批处理归一化层。其次,我们使用学习反褶积层代替双线性上采样。最后,我们测试了不同的组合方法:逐卷积求和和逐卷积乘积。实验结果表明,按元素排序的产品精度最高(见表4底部部分)。

训练

我们的训练政策和SSD几乎是一样的。首先,我们必须将一组默认框匹配到目标ground truth框。对于每个ground truth框,我们将它与最佳重叠默认框和Jaccard重叠大于阈值(例如0.5)的任何默认框匹配。在不匹配的默认框中,我们根据置信度损失选取一定的框作为负样本,与匹配框的比值为3:1。然后将关节定位损失(如光滑L1)和置信度损失(如 Softmax)。由于没有像Fast或Faster R-CNN那样的特征或像素重采样阶段,它依赖于广泛的数据增强,即随机裁剪原始图像,加上随机光度失真和随机翻转裁剪后的补丁。值得注意的是,最新的SSD还包括一个随机扩展增强的技巧,这已被证明是非常有助于检测小目标,我们也采用它在我们的DSSD框架。

我们还对之前的框长径比设置做了一个小的更改。在原来的SSD模型中,长宽比为2和3的框被实验证明是有用的。为了了解训练数据中包围框的宽高比(PASCAL VOC 2007和2012 trainval),我们对训练框进行K-means聚类,以box area的平方根为特征。我们从两个集群开始,如果误差可以提高20%以上,就增加集群的数量。我们在7个集群处收敛,结果如表1所示。由于SSD框架将输入调整为正方形,而且大多数训练图像都比较宽,所以大多数边界框都比较高就不足为奇了。从这个表格中我们可以看出,大部分的box ratio都在1-3的范围内。因此,我们决定在每个预测层上再添加一个纵横比1.6,并使用(1.6、2.0、3.0)。

四、实验

基本网络

我们的实验都是基于Residual-101,它是在ILSVRC cl - loc数据集上预训练的。在R-FCN之后,我们将conv5阶段的有效步长从32像素更改为16像素,以提高feature map的分辨率。将conv5阶段第一个步幅为2的卷积层修改为1。然后根据a trous算法,对于所有卷积层在conv5阶段,当核尺寸大于1时,我们将它们的膨胀量从1增加到2,以修复由于步幅减小而造成的“洞”。在SSD的基础上,对残差结构进行了拟合,利用残差块增加了若干层,减小了特征图的尺寸。表2显示了原始VGG架构和Residual-101中选择的特征层。深度是所选层在网络中的位置。只考虑卷积和池化层。注意这两个网络中第一个预测层的深度是很重要的。虽然Residual-101包含101个层,但是我们需要使用密集的feature layer来预测较小的目标,所以我们别无选择,只能选择conv3 x block中的最后一个feature layer。如果我们只考虑内核大小大于1的层,这个数字将下降到9。这意味着这一层神经元的接受域可能小于VGG中conv4 - 3神经元。与Residual-101中的其他层相比,该层由于特征强度较弱,预测性能较差。

PASCAL VOC 2007

我们的模型是在2007年trainval和2012年trainval的结合上进行训练的。对于原始SSD模型,我们对321×321输入的模型使用32个批次大小,对513×513输入的模型使用20个批次大小,并在前40k迭代中开始学习速度为10 - 3。然后,我们在60K和70k迭代时分别将其降低到10 - 4和10 - 5。我们将这个已训练好的SSD模型作为DSSD的预训练模型。在第一个阶段,我们只通过冻结原始SSD模型的所有权值来训练额外的反褶积边。我们将前20k迭代的学习率设置为10 - 3,然后继续以10 - 4的学习率进行10k迭代的培训。对于第二阶段,我们对整个网络进行微调,第一个20k迭代的学习率为10 - 3,下一个20k迭代的学习率为10 - 4。表3显示了我们对PASCAL VOC2007测试检测的结果。SSD300*和SSD512*是最新的SSD结果,采用了新的扩展数据增强技术,这已经优于许多其他最先进的检测器。通过将VGGNet替换为Residual-101,如果输入图像很小,性能也会类似。例如,SSD321-Residual-101类似于SSD300*-VGGNet,尽管Residual-101似乎收敛得更快(例如,我们只使用了VGGNet迭代的一半来训练我们的SSD版本)。有趣的是,当我们增加输入图像大小时,Residual-101比VGGNet大约好1%。我们假设它是至关重要的大的输入图像大小剩余- 101,因为它是重要的比VGGNet这样目标仍然可以有强壮的空间信息的一些很深的层次(如conv5 x)。更重要的是,我们看到,通过添加反褶积层和跳过连接,我们DSSD321 DSSD513持续约1 - 1.5%比那些没有这些额外的层。这证明了本文方法的有效性。值得注意的是,DSSD513比其他试图包含上下文信息的方法(如MR-CNN和ION)要好得多,尽管DSSD不需要任何手工编写的上下文区域信息。此外,我们的单模型精度比目前最先进的检测器R-FCN好1%。总之,在两个测试任务中,对于具有特定背景和小对象的类,DSSD都有很大的改进。例如,飞机、船、牛和羊类都有非常特殊的背景。飞机用的天空,牛用的草,等等,瓶子的例子通常都很小。这表明,所提出的DSSD模型解决了SSD中小目标检测的不足,对于具有唯一上下文的类具有更好的性能。

在VOC2007上的消融研究

为了了解添加到SSD的有效性,我们在VOC2007上运行具有不同设置的模型,并将它们的评估记录在表4中。PM =预测模块,DM =反褶积模块。使用321个输入的Residual-101的纯SSD是76.4% mAP。这个数字实际上比VGG模型更糟。通过添加预测模块,可以看出预测效果有所改善,其中最好的是在预测前使用一个残差块作为中间层。其思想是避免允许目标函数的梯度直接流入剩余网络的主干。如果我们在预测前叠加两个PM,我们不会看到太大的差异。在添加反褶积模块(DM)时,逐元素乘积在所有方法中表现最好(78.6%)。我们也尝试使用近似双线性池化方法,但是训练速度变慢,训练误差下降也非常缓慢。因此,我们没有在这里使用或计算它。更好的特征组合可以作为进一步提高DSSD模型精度的工作。我们还尝试在添加和微调DM组件之后对整个网络进行微调,但是我们没有看到任何改进,反而降低了性能。

PASCAL VOC 2012

对于VOC2012任务,我们遵循VOC2007的设置,这里有一些不同之处。我们使用07++12,包括VOC2007训练,VOC2007测试,VOC2012训练和VOC2012测试。由于训练数据较多,需要增加训练迭代的次数。对于SSD模型,我们训练前60k个迭代,学习速度为10 - 3,然后训练30k个迭代,学习速度为10 - 4,最后10k个迭代使用10 - 5。对于DSSD,我们使用训练好的SSD作为预训练模型。根据表4消融研究,我们只需要训练阶段1的模型。冻结原SSD模型的所有权值,训练反褶积边,前30k迭代学习速率为10 - 3,后20k迭代学习速率为10 - 4。如表5所示,结果再次验证了DSSD优于其他所有方法。需要注意的是,我们的模型是唯一一个在不使用额外的训练数据(如COCO)、复种或测试集成方法的情况下实现80.0% mAP的模型。

COCO

因为residul -101使用批处理标准化,为了得到更稳定的结果,我们将SSD321和COCO上的SSD513的批处理大小设置为48(这是我们在一台有4个P40 gpu的机器上进行训练时可以使用的最大批处理大小)。我们对第一个160k迭代使用10 - 3的学习率,然后对60k迭代使用10 - 4,最后20k使用10 - 5。根据我们的观察,小于16的批处理大小,并且在4个gpu上进行训练,会导致批处理归一化结果不稳定,影响精度。然后我们将这个训练有素的SSD模型作为DSSD的预训练模型。在第一个阶段,我们只通过冻结原始SSD模型的所有权值来训练额外的反褶积边。我们将前80k迭代的学习率设置为10 - 3,然后继续以10 - 4的学习率对50k迭代进行培训。根据表4的结果,我们没有在这里运行第二阶段的培训。从表6中可以看出,即使是很小的输入图像尺寸(300×300),SSD300*已经优于更快的R-CNN和ION。通过使用Residual-101替换VGGNet,我们看到了一个很大的改进(28.0% vs. 25.1%),而输入图像的大小(321 vs. 300)也差不多。有趣的是,ssd321 - residouble -101在较高的Jaccard重叠阈值(0.75)下大约比在0.5阈值下好3.5% (29.3% vs. 25.8%),而在0.5阈值下仅好2.3%。我们还观察到,对于大的目标,它比小的目标好7.9%,而对于小的对象没有改善。我们认为这表明Residual-101比VGGNet有更好的特性,VGGNet对大型目标有很大的改进。通过在SSD321-Residual-101上添加反褶积层,我们可以看到它在小目标上的性能更好(7.4% vs. 6.2%),不幸的是,我们没有看到在大大目标上的改进。

对于较大的模型,ssd513 - resibi -101已经比最先进的R-FCN[3]方法好1.3%(31.2% vs. 29.9%)。切换到residouble -101主要在大中型对象中提供了一个提升。dssd513 - residouble -101对所有尺寸的物体都进行了改进,实现了33.2%的map,比R-FCN好3.3%。根据这一观察,我们推测当增加输入图像的大小时,DSSD会受益更多,尽管需要更长的训练和推理时间。

推断时间

为了加快推理时间,我们在测试时使用以下公式来去除网络中的批处理归一化层。在式(1)中,卷积层的输出归一化的方法是减去均值,除以方差的平方根加上

,然后根据训练中所学的参数进行缩放和移位。为了简化和加快模型在测试过程中的速度,我们可以重写卷积层的权值(Eq. 2)和偏置(Eq. 3),去掉与批处理归一化相关的变量,如Eq. 4所示。我们发现,这个技巧通常可以提高1.2倍- 1.5倍的速度,并将内存占用减少到原来的三倍。

由于多种原因,我们提出的模型没有原始SSD模型快。首先,Residual-101网络有更多的层,比VGGNet慢得多。其次,我们添加到模型中的额外层,尤其是预测模块和反容量模块,会带来额外的开销。加速DSSD的一个潜在方法是用简单的双线性上采样代替反褶积层。第三,我们使用更多的默认框。表7显示,我们使用的默认框是以前版本SSD的2.6倍(43688对17080)。这些额外的默认框不仅在预测上花费了更多的时间,而且在非最大抑制之后也花费了更多的时间。我们使用批处理大小为1或泰坦X GPU内存中可以容纳的最大大小来测试模型。我们使用TitanXGPU和cuDNN v4以及Intel Xeon E5-2667v3@3.20GHz编译了表7中的结果。与R-FCN相比,SSD 513模型具有相似的速度和精度。我们的DSSD 513模型有更好的精度,但稍慢。与R-FCN相比,dssd321型号保持了速度优势,但精度略有下降。与其他探测器相比,我们提出的DSSD模型在保持合理速度的同时,达到了最先进的精度。

可视化

在图4中,我们展示了一些使用SSD321和DSSD321模型的COCO test-dev上的检测示例。与SSD相比,我们的DSSD模型在两种情况下得到了改进。第一种情况出现在包含小目标或密集对象的场景中,如图4a所示。由于输入量小,SSD在小目标上不能很好地工作,但DSSD有明显的改进。第二种情况是针对具有不同上下文的特定类。在图4中,我们可以看到具有特定关系的类的结果可以改进为tie and man In suit,baseball bat and baseball player,soccer and soccer player,tennis tennis player,skateboard and jumping person。(图4见原文,是一些目标检测可视化结果)。

五、结论

我们提出了一种将上下文添加到最先进的目标检测框架的方法,并在基准数据集上演示了它的有效性。虽然我们期望在寻找更有效和更有效的方法来结合编码器和解码器的特性方面有许多改进,但我们的模型仍然在PASCAL VOC和COCO上实现了最先进的检测结果。我们的新DSSD模型能够超越以前的SSD框架,特别是在小目标或特定上下文目标上,同时仍然保持与其他检测器相当的速度。虽然我们只将我们的编解码器沙漏模型应用于SSD框架,但是这种方法也可以应用于其他检测方法,比如R-CNN系列方法。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励