前言:

目标检测的预测框经过了滑动窗口、selective search、RPN、anchor based等一系列生成方法的发展,到18年开始,开始流行anchor free系列,CornerNet算不上第一篇anchor free的论文,但anchor freee的流行却是从CornerNet开始的,其中体现的一些思想仍值得学习。

看过公众号以往论文解读文章的读者应该能感觉到,以往论文解读中会有不少我自己的话来表述,文章写得也很简练。但这篇论文的写作实在很好,以至于这篇解读文章几乎就是对论文的翻译,几乎没有改动。

论文提出了 CornerNet,这是一种新的目标检测方法,我们使用单个卷积神经网络将对象边界框检测为一对关键点,即左上角和右下角。 通过将对象检测为成对的关键点,我们无需设计一组在先前单级检测器中常用的锚框。 除了我们的新范式外,我们还引入了corner pooling,这是一种新型的池化层,可帮助网络更好地定位角点。

实验表明,CornerNet 在 MS COCO 上实现了 42.1% 的 AP,优于所有现有的单级检测器。

论文:https://arxiv.org/abs/1808.01244v2

代码:https://github.com/umichvl/CornerNet

关注公众号CV技术指南,及时获取更多计算机视觉的内容。

论文出发点|anchor box的缺陷

目标检测中SOTA模型中一个常见组成部分是锚框,它是各种大小和纵横比的框,用作检测候选框。Anchor box广泛应用于one-stage检测器中,可以在效率更高的情况下获得与two-stages检测器极具竞争力的结果。one-stage检测器将锚框密集地放置在图像上,并通过对锚框进行评分并通过回归细化其坐标来生成最终的框预测。

但是使用锚框有两个缺点。

首先,我们通常需要一组非常大的锚框,例如 在 DSSD 中超过 40k,在 RetinaNet 中超过 100k。这是因为检测器被训练来对每个锚框是否与一个ground truth框充分重叠进行分类,并且需要大量的anchor box来确保与大多数ground truth框有足够的重叠。结果,只有一小部分锚框会与ground truth重叠; 这会造成正负锚框之间的巨大不平衡并减慢训练速度。

其次,锚框的使用引入了许多超参数和设计选择。 这些包括多少个box、多大scale和多大aspect ratios。 这种选择主要是通过临时启发式进行的,当与多尺度体系结构相结合时会变得更加复杂,多尺度体系即单个网络在多个分辨率下进行单独预测,每个尺度使用不同的特征和自己的一组锚框。

methods

受到 Newell 等人提出的关联嵌入方法的启发。谁在多人人体姿势估计的背景下检测和分组关键点。论文提出了 CornerNet,这是一种新的one-stage目标检测方法,无需锚框。

我们将一个对象检测为一对关键点——边界框的左上角和右下角。我们使用单个卷积网络来预测同一对象类别的所有实例的左上角的热图、所有右下角的热图以及每个检测到的角的嵌入向量。嵌入用于对属于同一对象的一对角进行分组——网络经过训练以预测它们的相似嵌入。

这种方法极大地简化了网络的输出并消除了设计锚框的需要。

下图说明了方法的整体流程

CornerNet 的另一个新颖组件是corner pooling,这是一种新型的池化层,可帮助卷积网络更好地定位边界框的角点。 边界框的角通常在对象之外——考虑圆形的情况以及下面图(中)示例。

在这种情况下,不能基于局部证据来定位角。 相反,要确定像素位置是否有左上角,我们需要水平向右看对象的最上边界,垂直向下看最左边界。 基于这一点,我们提出了corner pooling。

它输入两个特征图; 在每个像素位置,它最大池化第一个特征图右侧的所有特征向量,最大池化第二个特征图正下方的所有特征向量,然后将两个合并的结果加在一起。

我们假设检测角点比边界框中心或提案更有效的两个原因。 首先,一个box的中心可能更难定位,因为它取决于目标的所有 4 个边,而定位一个角取决于 2 个边,因此更容易,对于corner pooling更是如此,它编码了一些关于角的定义的明确的先验知识。 其次,角提供了一种更有效的方法来密集离散框的空间:我们只需要 O(wh) 个角来表示 O(wh)^2 个可能的锚框。

一些细节

整体实现

在 CornerNet 中,我们将一个对象检测为一对关键点——边界框的左上角和右下角。卷积网络预测两组热图来表示不同对象类别的角的位置,一组用于左上角,另一组用于右下角。每组热图都有C个通道,C为类别数量(不含背景),每个通道是关于一个类别角点位置的二进制掩码。

该网络还为每个检测到的角点预测一个嵌入向量,使得来自同一对象的两个角点的嵌入之间的距离很小。 为了产生更紧密的边界框,网络还预测偏移量以稍微调整角的位置。 使用预测的热图、嵌入和偏移量,我们应用一个简单的后处理算法来获得最终的边界框。

使用沙漏网络作为 CornerNet 的骨干网络。沙漏网络之后是两个预测模块。一个模块用于左上角,而另一个用于右下角。每个模块都有自己的corner pooling模块,用于在预测热图、嵌入和偏移之前从沙漏网络中池化特征。 与许多其他目标检测器不同,我们不使用不同尺度的特征来检测不同尺寸的物体。 我们只将这两个模块应用于沙漏网络的输出。

对于每个Corner,有一个ground truth正位置,所有其他位置都是负位置。 在训练期间,我们不是对负位置进行同等惩罚,而是减少对正位置半径内的负位置的惩罚。 这是因为一对错误的角点检测,如果它们靠近各自的ground truth位置,仍然可以产生一个与ground truth框充分重叠的框。 我们通过对象的大小来确定半径,方法是确保半径内的一对点将生成一个具有至少 t IoU 的边界框,并带有ground truth标注。

Corners分组

使用“pull”损失训练网络对角点进行分组,使用“push”损失来分离角点:

Corner Pooling

预测模块

沙漏网络

CornerNet 使用沙漏网络作为其骨干网络。沙漏网络首先被引入用于人体姿势估计任务。它是一个完全卷积的神经网络,由一个或多个沙漏模块组成。沙漏模块首先通过一系列卷积和最大池化层对输入特征进行下采样。然后通过一系列上采样和卷积层将特征上采样回原始分辨率。由于最大池化层中的细节丢失,因此添加了跳过层以将细节带回上采样特征。沙漏模块在单个统一结构中捕获全局和局部特征。当多个沙漏模块堆叠在网络中时,沙漏模块可以重新处理特征以捕获更高级别的信息。这些特性也使沙漏网络成为目标检测的理想选择。事实上,目前很多检测器已经采用了类似于沙漏网络的网络。

结论

实验表明,CornerNet 在 MS COCO 上实现了 42.1% 的 AP,优于所有现有的单级检测器。

Corner Pooling的消融实验

本文来源于公众号 CV技术指南 的论文分享系列。

欢迎关注公众号 CV技术指南 ,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读。

在公众号中回复关键字 “技术总结” 可获取以下文章的汇总pdf。

其它文章

经典论文系列 | 目标检测--CornerNet & 又名 anchor boxes的缺陷

如何看待人工智能的泡沫

使用Dice loss实现清晰的边界检测

PVT--无卷积密集预测的多功能backbone

CVPR2021 | 开放世界的目标检测

Siamese network总结

视觉目标检测和识别之过去,现在及可能

在做算法工程师的道路上,你掌握了什么概念或技术使你感觉自我提升突飞猛进?

计算机视觉专业术语总结(一)构建计算机视觉的知识体系

欠拟合与过拟合技术总结

归一化方法总结

论文创新的常见思路总结

CV方向的高效阅读英文文献方法总结

计算机视觉中的小样本学习综述

知识蒸馏的简要概述

优化OpenCV视频的读取速度

NMS总结

损失函数技术总结

注意力机制技术总结

特征金字塔技术总结

池化技术总结

数据增强方法总结

CNN结构演变总结(一)经典模型

CNN结构演变总结(二)轻量化模型

CNN结构演变总结(三)设计原则

如何看待计算机视觉未来的走向

CNN可视化技术总结(一)特征图可视化

CNN可视化技术总结(二)卷积核可视化

CNN可视化技术总结(三)类可视化

CNN可视化技术总结(四)可视化工具与项目

经典论文系列 | 目标检测--CornerNet & 又名 anchor boxes的缺陷的更多相关文章

  1. 经典论文系列 | 缩小Anchor-based和Anchor-free检测之间差距的方法:自适应训练样本选择

    ​  前言  本文介绍一篇CVPR2020的论文,它在paperswithcode上获得了16887星,谷歌学术上有261的引用次数. 论文主要介绍了目标检测现有的研究进展.anchor-based和 ...

  2. 目标检测复习之Anchor Free系列

    目标检测之Anchor Free系列 CenterNet(Object as point) 见之前的过的博客 CenterNet笔记 YOLOX 见之前目标检测复习之YOLO系列总结 YOLOX笔记 ...

  3. 经典论文系列| 实例分割中的新范式-SOLO

    前言: 这是实例分割中的一篇经典论文,以往的实例分割模型都比较复杂,这篇论文提出了一个简单且直接的实例分割模型,如何设计这种简单直接的模型且要达到一定的精度往往会存在一些困难,论文中有很多思路或思想值 ...

  4. 目标检测 1 : 目标检测中的Anchor详解

    咸鱼了半年,年底了,把这半年做的关于目标的检测的内容总结下. 本文主要有两部分: 目标检测中的边框表示 Anchor相关的问题,R-CNN,SSD,YOLO 中的anchor 目标检测中的边框表示 目 ...

  5. Domain Adaptive Faster R-CNN:经典域自适应目标检测算法,解决现实中痛点,代码开源 | CVPR2018

    论文从理论的角度出发,对目标检测的域自适应问题进行了深入的研究,基于H-divergence的对抗训练提出了DA Faster R-CNN,从图片级和实例级两种角度进行域对齐,并且加入一致性正则化来学 ...

  6. yolo系列目标检测+自标注数据集进行目标识别

    1. yolov1的识别原理 参考:https://blog.csdn.net/u010712012/article/details/85116365 https://blog.csdn.net/gb ...

  7. 深度学习与CV教程(12) | 目标检测 (两阶段,R-CNN系列)

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

  8. 带你读AI论文丨用于目标检测的高斯检测框与ProbIoU

    摘要:本文解读了<Gaussian Bounding Boxes and Probabilistic Intersection-over-Union for Object Detection&g ...

  9. 大话目标检测经典模型(RCNN、Fast RCNN、Faster RCNN)

      目标检测是深度学习的一个重要应用,就是在图片中要将里面的物体识别出来,并标出物体的位置,一般需要经过两个步骤:1.分类,识别物体是什么 2.定位,找出物体在哪里 除了对单个物体进行检测,还要能支持 ...

随机推荐

  1. mybatis运行出现org.apache.ibatis.binding.BindingException

    今天学习mybatis的第一天,发现用junit测试报出了次异常:org.apache.ibatis.binding.BindingException: Type interface cn.dzp.d ...

  2. Pandas之:Pandas高级教程以铁达尼号真实数据为例

    Pandas之:Pandas高级教程以铁达尼号真实数据为例 目录 简介 读写文件 DF的选择 选择列数据 选择行数据 同时选择行和列 使用plots作图 使用现有的列创建新的列 进行统计 DF重组 简 ...

  3. Step By Step(编写C函数的技巧)

    Step By Step(编写C函数的技巧) 1. 数组操作:    在Lua中,"数组"只是table的一个别名,是指以一种特殊的方法来使用table.出于性能原因,Lua的C ...

  4. python 获取时间范围内日期列表

    python 获取时间范围内日期列表 import datetime def dateRange(beginDate, endDate): dates = [] dt = datetime.datet ...

  5. 快速导入GitHub上面的公钥

    有时候新装了一台linux机器, 又要找公钥导进去, 或者在自己电脑上执行ssh-copy-id, 有时候手边没有电脑就比较麻烦, 我们可以将GitHub上配置的公钥导入到机器里 首先包装GitHub ...

  6. camera中LENS和SENSOR的CRA是如何搭配的?

    camera中LENS和SENSOR的CRA是如何搭配的? camera中,lens和sensor的搭配是非常关键的问题.但这两者是如何搭配的呢? 一般在Sensor data sheet中会附有全视 ...

  7. 稀疏自编码器及TensorFlow实现

    自动编码机更像是一个识别网络,只是简单重构了输入.而重点应是在像素级重构图像,施加的唯一约束是隐藏层单元的数量. 有趣的是,像素级重构并不能保证网络将从数据集中学习抽象特征,但是可以通过添加更多的约束 ...

  8. 自主数据类型:在TVM中启用自定义数据类型探索

    自主数据类型:在TVM中启用自定义数据类型探索 介绍 在设计加速器时,一个重要的决定是如何在硬件中近似地表示实数.这个问题有一个长期的行业标准解决方案:IEEE 754浮点标准.1.然而,当试图通过构 ...

  9. JAVA并发(6)-并发队列ArrayBlockingQueue

    本文讲ArrayBlockingQueue 1. 介绍 一个基于数组的有界阻塞队列,FIFO顺序.支持等待消费者和生产者线程的可选公平策略(默认是非公平的).公平的话通常会降低吞吐量,但是可以减少可变 ...

  10. C# 强行锁定 第三方 外部 应用程序窗体窗口的分辨率尺寸大小 禁止鼠标拖拽改变窗口大小

    我们也许会有一些奇怪的需求,比如说禁止一个外部程序的窗口大小更改. 如果我们没法修改外部程序的代码,那要怎么做呢? 当然,我们可以通过DLL注入目标程序的方式去Hook或registry一个事件来检测 ...