CPNDet:Corner Proposal Network for Anchor-free, Two-stage Object Detection(论文阅读)

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

代码:https://github.com/Duankaiwen/CPNDet(预计2020年8月开源)

1. 论文与摘要

                                  《Corner Proposal Network for Anchor-free,Two-stage Object Detection》

                                                      无锚点两阶段目标检测的角点建议网络  

      摘要:目标检测的最终目的是要从图片中确定检测目标的类别和位置。本文提出了一个无锚点的两阶段检测框架,该框架第一阶段通过角点确定提取感兴趣区域,然后在第二阶段给这些区域附上标签。实验证明,这个两阶段的检测器能端到端的训练,并且非常有效的提高目标的召回率和检测精度。我们的方法叫做CPNDet,它能检测任意不同的形状,并且能够有效的避免误检。该方法在COCO数据集上达到了49.2%的mAP,达到了当前最先进的检测效果。该方法的推理阶段也十分高效,mAP为41.6%/39.7%时的检测速度为26.2/43.3FPS,非常有竞争力。开源代码地址:https://github.com/Duankaiwen/CPNDet

2. 方法与实现

      2.1 Anchor-based or Anchor-free?

      作者的核心观点是:基于无锚点的方法能更好的定位任意形状的目标,因此具有更高的召回率。

      基于锚点的方法要根据经验设置锚点,这些算法不够灵活,并且对于特殊形状的物体容易漏检。如下表所示,基于锚点的Faster R-CNN的召回率较低,特别是对于大目标和目标长宽比大于5:1的情况下(因为这种长宽比下没有定义锚点)。

       如下图所示:

Caption

       2.2 One-stage or Two-stage?

       鉴于CornerNet角点标签预测不准确的情况,作者采用两阶段的方法解决该缺点。作者首先将得到的感兴趣区域进行二分类,去掉误检,紧接着用一个多分类重新给类别附上标签。由于第一阶段的二分类去掉了80%的proposals,提高了检测效率。第二阶段利用了proprosals内部的信息,所以分类更加准确。

       第一阶段二分类的损失函数如下:

Caption

       N:正样本的数量;

       p m:是物体的概率得分;

       IOUm: 物体与ground-truth的最大交并比。      

       第二阶段分类器的损失函数如下:

         q(m,c): 第m个物体属于第c类的得分。

      2.3 网络的整体架构

           算法框架如下图所示:

Caption

             整体的损失函数:             

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

3. 推理阶段与实现细节

      1. 推理阶段

          推理阶段和训练过程类似,只不过设置了阈值过滤掉低质量的proposals。由于proposals的预测侧分都偏低,因此作者选择了相对较低的阈值(论文中的阈值设置为0.2),从而让更多的proposals保留下来。当阈值设置为0.2时,平均被保留下来的感兴趣区域大约占总数量的20%,二分类所用的计算量约为多分类计算量的10%,这使第二阶段更具有竞争力。

          对于每一个在第二阶段保留的proposals,用S1表示角点的分类得分(由于两个角点的得分不同,因此去两个角点的平均得分作为S1),S2表示多分类的得分。通过一下公式计算最终的类别得分:Sc = (S1 + 0.5)(S2 + 0.5), 最后将Sc标准化到[0,1]。最后,作者选取得分最高的100个proposals进行评估。由下表可知,两个分类器起到了信息互补的作用,使检测的精度得到大幅提高。

Caption

            2. 实现细节

            作者运用Pytorch平台,代码参考了CornerNet,mmdetection和Centernet。作者用CornerNet和CenterNet作为baselines, 使用HG-104、HG-52和DLA-34作为主干网络来提取角点信息。主干网络的改动主要参考CenterNet,但是用普通层代替了可变形卷积层(个人观点,可能是因为考虑到部署问题)。

             训练过程,除了DLA-34用了预训练模型,其他的模型选择随机初始化。运用Cascade corner pooling使网络更好的检测角点,图片的输入为512x512,经过四倍下采样后得到的特征图为128x128。使用Adam优化器,batch size设置为48,初始学习率为2.5 × 10 −4, 训练5K次迭代后学习率变为之前的0.1倍。

             测试过程均使用来了水平翻转的数据数据增强,采用多尺度测试时分辨率分别为(0.6×, 1×, 1.2×, 1.5×, and 1.8×),采用soft-NMS过滤重框,最终选择得分最高的100个框进行评估。

4. 实验与效果

      精度对比:

Caption

         速度对比:

Caption

          效果对比:

Caption

5. 总结

      这篇文章,作者提出了一个无锚点、两阶段的目标检测框架。该方法首先提取关键点,通过组合关键点生成感兴趣区域。然后将感兴趣区域送入两阶段的分类器中过滤掉误检。该算法使目标的召回率和精度都得到了大幅提高,最终的结果排在现有检测算法前列。

       更重要的是,基于无锚点的检测方法更加灵活的提取proposal,通过二分类器提高了检测精度。当我们应用这个优秀的两阶段检测框架时,能高效的完成检测任务。因此,关于使用一阶段的检测器还是两阶段的检测器似乎就不那么重要了。

以上是博主对论文的理解,如需交流请留言或者QQ:1151583746.

猜你喜欢

转载自blog.csdn.net/Guo_Python/article/details/107715384