点击上方“计算机视觉工坊”,选择“星标”

干货第一时间送达

作者丨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:

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

  2. 对每一对有效的关键点定义一个目标的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更加灵活,通过两步分类方法进行预测。

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

下载1

在「计算机视觉工坊」公众号后台回复:深度学习,即可下载深度学习算法、3D深度学习、深度学习框架、目标检测、GAN等相关内容近30本pdf书籍。

下载2

在「计算机视觉工坊」公众号后台回复:计算机视觉,即可下载计算机视觉相关17本pdf书籍,包含计算机视觉算法、Python视觉实战、Opencv3.0学习等。

下载3

在「计算机视觉工坊」公众号后台回复:SLAM,即可下载独家SLAM相关视频课程,包含视觉SLAM、激光SLAM精品课程。

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

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

  1. 两阶段3D目标检测网络 SIENet: Spatial Information Enhancement Network for 3D Object Detection from Point Cloud

    本文介绍一篇两阶段的3D目标检测网络:SIENet. 这里重点是理解本文提出的 Hybrid-Paradigm Region Proposal Network 和 Spatial Informatio ...

  2. 【百度飞浆】RCNN系列目标检测算法详解

    RCNN系列目标检测算法详解 目录 两阶段目标检测算法发展历程 R-CNN R-CNN网络结构 R-CNN网络效果 Fast R-CNN Fast R-CNN网络效果 Faster R-CNN Fas ...

  3. 基于YOLOv5的目标检测系统详解(附MATLAB GUI版代码)

    摘要:本文重点介绍了基于YOLOv5目标检测系统的MATLAB实现,用于智能检测物体种类并记录和保存结果,对各种物体检测结果可视化,提高目标识别的便捷性和准确性.本文详细阐述了目标检测系统的原理,并给 ...

  4. 【百度飞浆】YOLO系列目标检测算法详解

    YOLO系列目标检测算法详解 1 YOLO发展史 2 YOLO v3目标检测原理 3 PaddleDetection中YOLO v3模型介绍 4 YOLO v3配置演练 1 YOLO发展史 2 YOL ...

  5. 详解两阶段3D目标检测网络 Voxel R-CNN:Towards High Performance Voxel-based 3D Object Detection

    本文介绍一篇两阶段的3D目标检测网络:Voxel R-CNN,论文已收录于AAAI 2021. 这里重点是理解本文提出的 Voxel RoI pooling. 论文链接为:https://arxiv. ...

  6. 详解两阶段3D目标检测网络PVRCNN:Point-Voxel Feature Set Abstraction for 3D Object Detection

    在<动手学无人驾驶(4):基于激光雷达点云数据3D目标检测>一文中介绍了3D目标检测网络PointRCNN.今天介绍该作者新提出的3D检测模型:PVRCNN,论文已收录于CVPR2020. ...

  7. YOLO系列目标检测算法详解

    目录 前言 YOLO发展历程 目标检测 YOLO开山之作 ---- YOLO(v1) YOLOv2 YOLOv3 PaddleDetection中YOLOv3模型介绍 总结 前言 YOLO发展历程 F ...

  8. YOLOv1——YOLOX系列及FCOS目标检测算法详解

    文章目录 一. 开山之作:YOLOv1 1.1. YOLOv1简介 1.2 YOLOv1 检测原理 1.3 YOLOv1网络结构 1.4 YOLOv1 损失函数 1.5 YOLOv1优缺点 二. YO ...

  9. PointPillar 3D目标检测模型详解

    一.参考资料 pointpillars 论文 pointpillars 论文 PointPillars - gitbook_docs 使用 NVIDIA CUDA-Pointpillars 检测点云中 ...

  10. 基于mmrotate的旋转目标检测入门详解

    一.旋转目标检测方法对比 1 当前前沿方法的对比 首先我们打开papers with code 网站 https://paperswithcode.com/ 我们在搜索栏输入 oriented obj ...

最新文章

  1. 一款强大而实用的图片去水印神器
  2. 给定一个字典,通过查找这个字典,替换给定的字符串中的中文为英文
  3. java垃圾_Java很垃圾吗?
  4. 研究人员的AI技术能够实时匹配活页乐谱与MIDI音频
  5. .Net Core 3.0依赖注入替换 Autofac
  6. iOS App的图标,启动画面及其它
  7. python开发飞船游戏
  8. 测试接口python常用命令_用python实现接口测试(四、操作MySQL)-阿里云开发者社区...
  9. Python+SQLite开发无界面版通信录管理系统
  10. pc网站调用微服务器,【微服务】前后端分离-跨域问题和解决方案
  11. java拦截器_springMVC入门(八)------拦截器
  12. 小学计算机小蘑菇教案,森林里的小蘑菇教案.doc
  13. 《诗经》诗无邪 —— 雅篇
  14. difference softreference and weakreference
  15. 【车间调度】基于matlab模拟退火算法求解单约束车间流水线调度问题【含Matlab源码 1457期】
  16. 虚拟打印机 android版,Doro PDF Writer
  17. mapbox绘制航线图
  18. matlab工程热力学大程序,西安交通大学工程期末编程大作业(完整版
  19. 湖南省中职学业水平考试复习试题(语文)
  20. C1083:无法打开源文件

热门文章

  1. tarjan 割点 割边
  2. BZOJ 2432 兔农
  3. 关于父窗口、子窗口的操作(如关闭、打开、调用方法、刷新等等)
  4. 查找算法之二 二分查找(C++版本)
  5. VIM之taglist
  6. 关于RestTemplate的小笔记
  7. 怎样访问服务器系统盘,访问云服务器上的系统盘
  8. 非酋用计算机弹唱,非酋简谱 薛明媛/朱贺 听说爱情就是这样子
  9. oracle-关于分组函数的小细节
  10. linux删除系统日志文件,Linux不小心删除日志文件syslog的解决方法