ECCV2020 | CPNDet:Anchor-free两阶段的目标检测框架,详解

2020-11-19 17:19:15 浏览数 (1)

作者丨Liaojiajia2019

来源丨https://blog.csdn.net/mary_0830/article/details/107820599

编辑丨AI深度学习视线

CPNDet

  • 1 Introduction
  • 2 Approach
    • 2.1 CPN 网络框架
    • 2.2 Inference 阶段
  • 3 Experiments
  • 4 Conclusion

论文地址:https://arxiv.org/abs/2007.13816

开源代码:https://github.com/Duankaiwen/CPNDet

其他解读:https://mp.weixin.qq.com/s/pPvDC_3SuGgZ2z6e5F8RDQ

本文亮点

  1. 提出了一种anchor-free两阶段的目标检测框架。
  2. 第一阶段的感兴趣区域是使用anchor-free来提取的,查找可能的角点关键点组合来提取多个候选目标object proposals。第二阶段是借鉴了一阶段中的角点组合进行提取proposal,使用两步分类器对proposal进行过滤,为每个候选object分配一个类别标签。

1 Introduction

  • 本文提出了一种基于anchor-free的两阶段的角点目标检测器。第一阶段是通过角点提取出感兴趣区域,第二阶段是对感兴趣区域进行预测与回归。
  • 提出这种方法,有两个论点:
  1. 为什么是基于anchor-free?——检测方法的召回率取决于它对不同几何形状的物体的定位能力,尤其是那些形状罕见的物体,而anchor-free方法(尤其是基于定位物体边界的方法)在这项任务中可能更好;
  2. 为什么要两阶段?——anchor-free方法通常会产生大量的误检,因此需要单独的分类器来提高检测精度。
  • 基于CornerNet的关键点检测方法但是并没有使用对关键点进行分组来实现目标检测;而是使用将所有有效的角点组合作为潜在对象,并且借用二阶段的思想,即训练一个分类器,根据对应的区域特征来区分真实物体和错误匹配的关键点。
  • 分类器有两个步骤:
  1. 二元分类器,过滤掉不符合目标的proposal。
  2. 多元分类器,对仍存在的多个类别的目标分数进行排序。

图解:

  • 上图实验中,评估了四种目标提取proposal的方法。
  • 第一行:基于anchor-based方法(faster rcnn)很难找到具有特殊形状的目标(比如大尺寸目标、目标的横纵比例很大),并且没有得到更高的召回率。
  • 第二行:基于anchor-free方法(cornerNet)由于缺乏语义信息,可能会错误地将不相关的关键点分组到一个目标中,导致出现大量的错误检测。
  • 绿色框表示true positives,蓝色框表示false positives,红色框表示false negatives。

2 Approach

作者的核心观点:

  1. anchor-free定位方法具有更好地灵活性来定位任意几何形状的对象,可以获得较高的召回率。
  2. 由于anchor-free的方法可能会检测出大量的错误检测,因此需要采用二阶段的方法来过滤出错误检测。

基于anchor的方法是通过实验和经验设定锚点,因为是人为设置anchor,导致了算法不够灵活,也不能够对特殊形状的物体进行精确检测,容易发生漏检问题。


图解:

  • 基于anchor的faster rcnn的召回率较低,实验发现,对于纵横比为5:1、8:1等情况下,召回率特别低,甚至比anchor-free的方法都低,原因是:这种纵横比没有预定义anchor。
  • FCOS也存在类似的现象,FCOS是一种anchor-free方法,它通过关键点和到边界的距离来表示对象。当边界远离中心时,很难预测准确的距离。
  • 实验发现,cornerNet和centerNet就没有这个问题,因为它是将关键点分组到一个对象中,解决了角点对距离的问题。
  • 因此,本文作者选择了anchor-free的方法,特别是选择了角点对分组的方法来提高目标检测的召回率。

图解:

  • 对比在anchor-free方法下,不同的backbone计算得到的AP和召回率的结果。
  • APoriginal AP_{original} APoriginal表示原始输出的AP, APrefined AP_{refined} APrefined表示删除非目标proposal之后的AP, APcorrect AP_{correct} APcorrect表示每个留下来的proposal正确分配标签后的AP。
  • 实验表明,修正过后的AP和AR都得到了提高,因此说明这个想法的可行性。

参数说明:

  • I:原始图像区域
  • bn∗, n=1,2,…… , N:ground-truth bbox
  • cn∗, n=1,2,……, N:ground-truth 对应的类别
  • In∗, n=1,2,……, N:ground-truth 相对应边界框的图像区域
  • bm, m=1,2,……, M:定位目标的bbox
  • bm:定位目标对应的类别标签

2.1 CPN 网络框架

图解:

  • 上图是本文提出的CPN的网络结构图。它使用anchor-free方法提取object proposal,然后进行有效的区域特征计算和分类以滤除误报。
  • 第一步,先预测角点,组成多个目标proposal;
  1. 每个对象都有两个关键点(左上角和右下角)来确定其位置。 对于每一个类别,计算两个热图(热图上的每个值表示对应位置出现角点的概率),与原始图像相比分辨率降低了4倍。热图有两个loss:

分别表示热图上关键点损失(用于定位热图上的关键点)和热图中偏移损失(用于学习其偏移到准确的角点位置)。

  1. 对每一对有效的关键点定义一个目标的proposal(有效指的是两个关键点属于同一个类,且左上角的x和y坐标要分别小于右下角的x和y的坐标)。但是,这可能会导致大量的误报,因此把区分和分类交给二阶段来做。
  • 第二步,使用两步分类过滤出错误检测,为每一个留下来的proposal分配一个类别标签。
  1. 用一种轻量级的二元分类器滤除掉80%的proposal(大量的非目标),然后用一个更精细的分类器来确定每个留下来的proposal的类别标签和置信度。
  2. 假设M是K个左上角和K个右下角关键点生成的目标proposal总数(基于centernet将 K设置为70,会使得每个图像上平均有2500个目标proposal)。因此,设计了一种两步分类过滤器。
  • 两步分类器具体过程:
  • 第一步: 训练一个二进制分类器,以确定每个proposal是否是一个目标对象。
  1. 首先采用卷积核大小为7×7的RoIAlign来提取每个proposal上的box特征。
  2. 然后通过32×7×7的卷积层得到每个proposal的分类分数。从而建立一个二元分类器。二分类的损失函数为:

其中, N表示正样本的数量,pm∈[0,1],pm∈[0,1]表示第m个proposal的置信度分数,IoUm表示第m个proposal与所有gt bbox之间最大的IoU值。τ表示IoU的阈值(设置为0.7)。α=2表示平滑损失函数的超参数, π=0.1。

  • 第二步: 为每个留下来的proposal分配一个类别标签。
  1. 使用C输出训练另一个分类器,其中C是数据集中类别的数目。
  2. 基于第一步提取的RoIAlign特征的基础上,从类别特征映射中提取特征以保留更多的信息,对于每一个留下来的proposal,使用256×7×7的卷积层获得 C C C维(表示类别)的向量。然后建立C−way分类器(为每个留下来的proposal建立单独的分类器),其损失函数为:

其中, M^和 N^分别表示留下来proposal的数量和在这其中正样本的数量。IoUm,c表示第m个proposal与第c个类别中所有gt bbox之间最大的IoU值。τ表示IoU的阈值保持不变(设置为0.7)。qm,c表示第 m m m个目标中第c个类别的分类分数。β=2与α=2相似的作用。

整个网络的损失函数为:

  • 前两项表示关键点定位和偏移损失,后两项表示二分类和多分类的损失。

PS: DeNet (《Denet: Scalable real-time object detection withdirected sparse sampling》)和本文的方法在想法上是相似的。不同之处在于,本文为每个角点配备一个多类别标签而不是一个二进制标签,因此本文的方法可以依靠类别标签消除不必要的无效角点对,以节省整个框架的计算成本;其次,本文使用一种额外的轻量级二进制分类方法减少分类网络要处理的proposal数量,而DeNet仅依赖一个分类网络。最后,本文的方法为两个分类器设计了一种新的focal损失函数变体,它不同于DeNet中的最大似然函数,这主要是为了解决训练过程中正样本和负样本之间的不平衡问题。


2.2 Inference 阶段

  • 推理阶段与训练阶段类似,只是设置了阈值过滤掉低质量的proposals。由于proposals的预测分数都较低,因此选择了较低的阈值(这里设置为0.2),让更多的proposals都留下来。
  • 当阈值设置为0.2时,平均保留下来的ROI大约占总量的20%,二分类所使用的计算量约为多分类计算量的10%,更凸显了第二阶段的优势。
  • 对于保留在第二步的proposals,为其分配最多两个类别标签,对应于角点的主要类别和proposals的主要类别(两个类别可能不同,若不同时,proposal将成为两个得分可能不同的proposal)。
  • 对于每个候选类别,使用 s 1 s_{1} s1表示角点分类分数(两个角点关键点的平均值,范围是(0,1)。若两个角点的分数不同,将两个角点的平均得分作为 s 1 s_{1} s1)。 s 2 s_{2} s2表示区域分类分数(多类别分类器预测的proposal类别标签的概率,范围是(0,1))。
  • 通过公式计算最终的类别分数:s c = ( s 1 0.5 ) ( s 2 0.5 ) s_{c}=(s_{1} 0.5)(s_{2} 0.5) sc=(s1 0.5)(s2 0.5),最后将 s c s_{c} sc进行标准化到[0,1]。
  • 最后,选取分数最高的100个proposals进行评估。
  • 下图中,显示了两个分类器对CPN的检测性能对比。

图解:

  • 由上表可知,两个分类器起到了信息互补的作用,使得检测精度大幅度的提升了。

3 Experiments

  • backbone: 52/104层的Hourglass网络
  • 数据集: MS-COCO
  • 框架: Pytorch
  • baseline: 基于CornerNet和CenterNet

图解:

  • “R”、“X”、“HG”、“DCN”和“†”分别表示ResNet、ResNeXt、Hourglass、可变形卷积网络和多尺度训练或测试。
  • 上图表示各个模型精度的对比。

图解:

  • AF表示平均错误发现率,该值越低越好,表示错误检测的个数就越少。
  • CPN-52和CPN-104报告的AF分别为33.4%和30.6%,低于直接使用baseline:CornerNet和CenterNet。
  • AF=1−AP~

图解:

  • 上图表示在两个不同的检测方法中加入同样的创新点,效果差别不大。

图解:

  • 上图表示三种方法的检测结果图对比。从上至下分别是:CornerNet, CenterNet 和CPN。
  • 绿色框表示true positive,红色框表示false positive。

图解:

  • 上图表示各个网络模型速度的对比。
  • 在相同的设置下,CPN-104的FPS/AP为7.3/46.8% 比CenterNet-104 5.1/44.8%,速度极快,效果又好。
  • CPN-52的主干网较小,其FPS/AP为9.9/43.8%,同样也优于CornerNet52和CenterNet-52。

4 Conclusion

  1. 提出了一种anchor-free两阶段的目标检测框架。
  2. 基于anchor-free方法提取proposal更加灵活,通过两步分类方法进行预测。

本文仅做学术分享,如有侵权,请联系删文。

0 人点赞