Single-Shot Refinement Neural Network for Object Detection

Single-Shot Refinement Neural Network for Object Detection

目标检测的单次优化神经网络

Shifeng Zhang, Longyin Wen, Xiao Bian, Zhen Lei, Stan Z. Li
CBSR & NLPR, Institute of Automation, Chinese Academy of Sciences, Beijing, China. University of Chinese Academy of Sciences, Beijing, China. GE Global Research, Niskayuna, NY. Faculty of Information Technology, Macau University of Science and Technology, Macau, China.

发表于: CVPR2018

一、 研究动机

     现阶段目标检测网络可分为两类:(1)单阶段的方法(2)双阶段的方法双阶段的方法是使用第一阶段先生成的候选框在第二阶段进行分类和回归,双阶段的方法往往准确率比较高单阶段方法是通过对位置、尺度和长宽比的固定和密集采样来检测对象。这样做的主要优点是计算效率高。但是因为单阶段的方法存在严重的类别不平衡的问题,所以单阶段方法往往准确率不如双阶段的方法。

     双阶段的网络与单阶段网络相比有三个优点:

1. 使用启发式采样的双阶段的结构处理类别不平衡的问题。
2. 使用两步级联的方法对目标框的参数进行回归。
3. 使用两阶段的特征描述目标。

     本篇文章就是为了继承他们优点的同时克服他们的缺点(融合SSD,RPN,FPN为一体),最终实现一个比双阶段的网络更准确,比单阶段网络更快的方法。

二、 论文创新点

     RefineDet 由两个相互连接的模块组成,anchor细化模块(ARM)目标检测模块(ODM)。 具体来说,ARM的目的(1)过滤掉负锚以减少分类器的搜索空间(2)粗略地调整锚的位置和大小,以便为后续回归器提供更好的初始化。 一句话说ARM的作用就是既像RPN一样有生成候选框提案的作用,又能提前过滤掉容易分类的负锚缓解了类别不平衡问题。ODM 将ARM细化后的锚作为的输入,以进一步提高回归并预测多类标签。 如下图所示,这两个相互连接的模块模仿了双阶段的结构,从而继承了上述双阶段网络的三个优点,可以高效地产生准确的检测结果。 此外,传输连接块 (TCB)用来 来传输 ARM 中的特征 ,以预测 ODM 中对象的位置、大小和类别标签。 多任务损失函数使我们能够以端到端的方式训练整个网络。

三、 相关工作

  经典的目标检测网络

     早期的目标检测方法是基于滑动窗口范式,将手工制作的特征和分类器应用于密集图像网格来寻找目标。Viola 和 Jones 使用 Haar 特征和 AdaBoost 训练了一系列级联分类器进行人脸检测,取得了令人满意的准确率和高效率。DPM 使用多尺度可变形零件模型的混合来表示高度可变的对象类,多年来在 PASCAL VOC 上保持最佳结果。然而,随着深度卷积网络的到来,目标检测任务很快被基于 CNN 的检测器主导,大致可分为两类,即双阶段方法和单阶段方法。

  双阶段的方法

     两阶段方法由两部分组成,其中第一部分(例如,选择性搜索、EdgeBoxes、DeepMask、RPN)生成一组稀疏的候选框提议,第二部分使用确定准确的对象区域和相应的类标签卷积网络。两阶段方法(例如,R-CNN、SPPnet、Fast R-CNN 到 Faster R-CNN)在几个具有挑战性的数据集(例如 PASCAL VOC 2012 和 MS COCO)上是实现了很好的性能。

  单阶段的方法

     考虑到高效率,单阶段方法最近引起了更多的关注。 Sermanet 等人提出了基于深度 ConvNets 的 OverFeat 分类、定位和检测方法,该方法是端到端训练的,从原始像素到最终类别。雷德蒙等人使用单个前馈卷积网络直接预测对象类别和位置,称为 YOLO,速度极快。之后,提出了 YOLOv2在几个方面改进 YOLO,即在所有卷积层上添加批量归一化、使用高分辨率分类器、使用带有锚框的卷积层而不是全连接层来预测边界框等。Liu等人提出了 SSD 方法,该方法将不同尺度的锚点分散到 ConvNet 中的多个层,并强制每一层专注于预测特定尺度的对象。 DSSD 通过反卷积将额外的上下文引入 SSD 以提高准确性。 DSOD遵循 SSD 的网络结构,设计了一个高效的框架和一套原则来从头开始学习目标检测器。为了提高准确性,一些单阶段方法旨在通过重新设计损失函数或分类策略来解决极端的类不平衡问题。尽管单阶段检测器取得了不错的进展,但它们的准确性仍然落后于双阶段方法。

四、 主要内容

     RefineDet类似于SSD,是基于前馈卷积的网络,该网络产生固定数量的边界框和指示这些框中存在不同类别的对象分数,然后通过NMS产生最终结果。RefineDet中的三个核心组件:(1)传输连接块(TCB),将特征从ARM转换到ODM进行检测; (2) 两步级联回归,准确回归物体的位置和大小; (3) 负锚过滤,早期拒绝分类良好的负锚并缓解不平衡问题。

  Transfer Connection Block(传输连接块儿 TCB)

在这里插入图片描述

     TCB是为了将ARM的不同层的特征转换为ODM所需的形式,以便于ODM可以共享ARM的特征。TCBs的另一个功能是整合大规模上下文,将更高层次的含有高语义信息的特征添加到前边的特征层中(简单理解就是FPN的上采样+特征融合),以提高检测的准确性。使用反卷积操作来放大高级特征图并以元素方式对它们进行求和进而统一不同特征层的维度。然后,在求和之后添加一个卷积层,以确保检测特征的可辨别性。

  Two-Step Cascaded Regression(两步级联回归)

     目前的单阶段方法依赖于基于具有不同尺度的各种特征层的一步回归来预测对象的位置和大小,这在一些具有挑战性的场景中是相当不准确的,尤其是对于小目标。所以先用ARM调整锚的位置和大小,以便为ODM回归提供更好的初始化。具体来说,将n个锚框与特征图上的每个固定划分的单元相关联。每个锚框相对于其对应单元格的初始位置是固定的。在每个特征图单元中,预测细化的锚框相对于初始锚的四个偏移量和两个置信度分数,表明这些框中存在前景对象。因此,我们可以在每个特征图单元产生 n 个细化的锚框。这 n 个细化后的锚框在ODM中作为类似SSD中使用的默认框作为输入进行进一步的检测,产生更准确的结果,对小物体作用明显。

  Negative Anchor Filtering(负锚过滤)

     用负锚过滤机制,提前过滤不太好的框,解决类别不平衡问题。 在训练阶段,对于一个细化的anchor box,如果其负置信度大于预设阈值(即根据经验设置 θ = 0.99),将在训练ODM时将其丢弃。 也就是说,只通过Hard Negative AnchorRefined anchor来训练 ODM。 同时,在推理阶段,如果一个细化的anchor box的负置信度大于 θ,它将在ODM阶段被丢弃。

  损失函数

     RefineDet的损失函数主要包含ARM和ODM两部分。在ARM部分包含二分类损失损失 Lm 和回归损失 Lr ;同理在ODM部分包含多分类损失 Lm 和回归损失 Lr 。需要注意的是虽然RefineDet大致上是RPN网络和SSD的结合,但是在Faster R-CNN算法中RPN网络和检测网络的训练可以分开也可以end to end,而这里的训练方式就完全是end to end了,ARM和ODM两个部分的损失函数都是一起向前传递的。损失函数公式如下:

在这里插入图片描述

     其中 i 表示一个 batch 中的第几个Anchor,li* 表示对应 anchor 的ground truth bbox(GT)类别,gi* 表示的GT框位置和大小,pi 表示置信度,xi 表示ARM中Anchor 的坐标。ci 表示预测的类别,ti 表示ODM中预测的坐标信息。Narm 和 Nodm 分别表示ARM和ODM中的 positive anchor 数量。Lb 表示二分类损失,Lm 表示多分类损失,Lr 表示回归损失。

  推理阶段

     在推理阶段,ARM首先过滤掉负置信度分数大于阈值的anchor,然后细化剩余anchor的位置和大小。 之后,ODM 接管这些细化的锚框,并为每张图像输出前 400 个高置信度的锚框。 最后,我们应用NMS, jaccard 重叠率 0.45 ,保留每张图像的前 200 个高置信度检测以产生最终结果。

五、 实验结果

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

版权声明:本文为CSDN博主「撒浪嘿呦x」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45806470/article/details/122633154

撒浪嘿呦x

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

目标检测指标计算

一、指标 True Positive,TP :预测为正样本(Positive),实际为正样本,则True,预测正确。 True Negative,TN &#x

Deep Learning 目标检测

对检测到的结果进行解析  #----------------------------目标检测*解析字典result------------------------------------------- from numpy import arr

YOLOV3预选框验证

对于一个输入图像,比如416*416*3,相应的会输出 13*13*3 26*26*3 52*52*3 10647 个预测框。我们希望这些预测框的信息能够尽量准确的反应出哪些位置存在对象,是哪种对