专栏首页计算机视觉战队角网络——目标检测(文后有paper地址及源码)

角网络——目标检测(文后有paper地址及源码)

导读】今天分享的技术提出了一种新目标检测方法,用单个卷积网络将目标边界框检测为一对关键点(即边界框的左上角和右下角)。通过将目标检测为成对关键点,消除现有的one stage检测器设计中对一组anchors的需要。除此之外,还引入了corner pooling,一种新型的池化层,可以帮助网络更好的定位边界框的角点。最终CornerNet在MS COCO上实现了42.1%的AP,优于所有现有的one stage检测器。

背景

基于卷积神经网络的目标检测器已经在各种具有挑战性的基准测试数据集中有了最新成果。现有技术方法的一个共同组成部分是anchor boxes,包含各种尺寸和宽高比的边界检测框,目标检测的候选框。Anchor boxes广泛用于one stage检测器中,它可以获得与two stage检测器相当的检测结果,同时效率更高。

One stage检测器将anchor boxes密集分布在图像上,通过对anchor boxes进行评分,并通过回归来改进其坐标来生成最终的边界框预测。但anchor boxes的使用有两个缺点。

  • 通常需要一组非常多的anchor boxes,比如在DSSD中超过4万个,在RetinaNet中超过10多万个, 这是因为训练器被训练以分类每个anchor boxes是否与ground truth充分重叠,并且需要大量anchor boxes以确保与大多数ground truth充分重叠。 结果,只有一小部分anchor boxes与ground truth重叠; 这在正负样本之间造成了巨大的不平衡,减慢了训练速度;
  • Anchor boxes的使用引入了许多超参数和设计选择。 这些选择主要是通过ad-hoc启发式方法进行的,并且当与多尺度架构相结合时可能会变得更加复杂,其中单个网络在多个分辨率下进行单独预测,每个尺度使用不同的特征和它自己的一组anchor boxes。

新技术亮点

今天要分享的CornerNet,这是一种新的one stage目标检测方法,可以消除anchor boxes。,将一个目标物体检测为一对关键点(即:边界框的左上角和右下角),使用单个卷积网络来预测同一物体类别的所有实例的左上角的热图,所有右下角的热图,以及每个检测到的角点的嵌入向量。

嵌入用于对属于同一目标的一对角点进行分组——训练网络以预测它们的类似嵌入。 我们的方法极大地简化了网络的输出,并且无需设计anchor boxes。新方法受到Newell等人在多人姿态估计上下文中关联嵌入的启发,下图说明了新方法的整体流程:

CornerNet的另一个新颖组件是corner pooling,一种新的池化层方式,可帮助卷积网络更好的定位边界框的角点。 边界框的一角通常在目标之外,参考圆形的情况以及下图的例子。

如上图这种情况,角点不能根据当前的信息进行定位。相反,为了确定像素位置是否有左上角,需要水平地向右看目标的最上面边界,垂直地向底部看物体的最左边边界。

这就激发了新方法的corner pooling layer:它包含两个特征图;在每个像素位置,它最大池化从第一个特征映射到右侧的所有特征向量,最大池化从第二个特征映射下面的所有特征向量,然后将两个池化结果一起添加,如下图所示:

动机

假设了两个原因,为什么检测角点会比检测边界框中心或proposals好?

  • 边界框的中心可能更难以定位,因为它取决于目标的所有4个边,而定位角取决于2边,因此更容易,甚至更多的corner pooling,它编码一些明确的关于角点定义的先验信息;
  • 角点提供了一种更有效的方式来密集地离散边界框的空间,只需要用O(wh)角点来表示O(w^2*h^2)可能的anchor boxes。

新方法证明了CornerNet对MS COCO数据集的有效性。CornerNet实现了42.1%的AP,优于所有现有的one-stage检测器。此外,通过ablation studies,发现Corner pooling对于CornerNet的卓越性能起到至关重要的作用。

相关技术

Two-stage目标检测器

Two-stage目标检测由R-CNN首次引入并推广。Two-stage检测器生成一组稀疏的感兴趣区域(RoIs),并通过网络对每个区域进行分类。R-CNN使用低层次视觉算法生成(RoIs),然后从图像中提取每个区域,由ConvNet独立处理,这将导致大量计算冗余。

后来SPP-Net和Fast R-CNN改进了R-CNN,设计了一个特殊的池化层(金字塔池化),将每个区域从feature map中池化。然而,两者仍然依赖于单独的proposals算法,不能进行端到端训练。

Faster-RCNN通过引入区域生成网络(RPN)来去除低层次的proposals算法,RPN从一组预先确定的候选框中生成proposals。这不仅使检测器更加高效,通过RPN与检测网络的联合训练,可实现端到端训练。

R-FCN将全连接子检测网络替换为完全卷积子检测网络,进一步提高了Faster R-CNN的检测效率。其他的工作主要集中在结合子类别信息,用更多的上下文信息在多个尺度上生成目标的proposals,选择更好的特征,提高速度,并行处理和更好的训练过程。

One-stage目标检测器

YOLOSSD推广了one-stage方法,该方法消除了RoI池化步骤,并在单个网络中检测目标。

One-stage检测器通常比two-stage检测器计算效率更高,同时在不同的具有挑战性的基准上保持着具有竞争性的性能。SSD算法将anchor boxes密集地放置在多个尺度的feature maps之上,直接对每个anchor boxes进行分类和细化。YOLO直接从图像中预测边界框坐标,后来在YOLO V2中,通过使用anchor boxes进行了改进。

DSSDRON采用了类似沙漏的网络,使它们能够通过跳跃连接将低级和高级特性结合起来,从而更准确地预测边界框。

RetinaNet出现之前,这些one-stage检测器的检测精度仍然落后于two-stage检测器。在RetinaNet中,作者认为密集的anchor boxes在训练中造成了正样本和负样本之间的巨大不平衡。这种不平衡导致训练效率低下,从而导致结果不佳,他们提出了一种新的loss——Focal Loss,来动态调整每个anchor boxes的权重,并说明了他们的one-stage检测器检测性能优于two-stage检测器。

RefineDet建议对anchor boxes进行过滤,以减少负样本的数量,并对anchor boxes进行粗略的调整。

DeNet是一种two-stage检测器,不使用anchor boxes就能生成RoIs。它首先确定每个位置属于边界框的左上角、右上角、左下角或右下角的可能性。然后,它通过列举所有可能的角点组合来生成RoI,并遵循标准的two-stage方法对每个RoI进行分类。

新提出的方法和DeNet很不一样。首先,DeNet不识别两个角是否来自同一目标,并依赖子检测网络来拒绝糟糕的RoI。相比之下,新方法是一种one-stage方法,使用单个卷积网络来检测和分组角点。其次,DeNet在人工确定的位置上的区域提取特征进行分类,而新方法不需要任何特征选择步骤。然后,引入corner pooling,一种新型的用于增强角点检测的layer。

新方法受到Newell等人在多人姿态估计上下文中关联嵌入的启发。Newell等人提出了一种在单个网络中检测和分组人类关节的方法。在他们的方法中,每个检测到的人类关节都有一个嵌入向量。这些关节是根据它们嵌入的距离来分组的。

本次新技术是第一个将目标检测任务定义为同时检测和分组角点的任务,另一个新颖之处在于corner pooling layer,它有助于更好定位角点,还对沙漏结构进行了显著地修改,并添加了新的focal loss的变体,以帮助更好地训练网络。

新算法框架爱

下图提供了CornerNet的概述。 使用沙漏网络作为CornerNet的骨干网络。 沙漏网络之后是两个预测模块:一个模块用于左上角,另一个模块用于右下角。 每个模块都有自己的corner pooling模块,在预测热图、嵌入和偏移之前,池化来自沙漏网络的特征。 与许多其他物体探测器不同,不使用不同尺度的特征来检测不同大小的物体,只将两个模块应用于沙漏网络的输出。

检测角点

预测两组热图,一组用于左上角,另一组用于右下角。 每组热图具有C个通道,其中C是分类的数量,并且大小为H×W。 没有背景通道。 每个通道都是一个二进制掩码,用于表示该类的角点位置。

上图,用于训练的“Ground-truth”热图。在正位置半径范围内(橙色圆圈)的方框(绿色虚线矩形)仍然与地ground-truth(红色实心矩形)有很大的重叠。

分组角点

图像中可能出现多个目标,因此可能检测到多个左上角和右下角。需要确定左上角和右下角的一对角点是否来自同一个目标边界框,新方法受到Newell等人提出的用于多人姿态估计任务的关联嵌入方法的启发。Newell等人检测所有人类关节,并为每个检测到的关节生成嵌入,他们根据嵌入之间的距离将节点进行分组。

关联嵌入的思想也适用于今天说的的任务,网络预测每个检测到的角点的嵌入向量,使得如果左上角和右下角属于同一个边界框,则它们的嵌入之间的距离应该小。 然后,可以根据左上角和右下角嵌入之间的距离对角点进行分组,嵌入的实际值并不重要,仅使用嵌入之间的距离来对角点进行分组。

Corner Pooling

如第个图,通常没有局部视觉证据表明存在角点。要确定像素是否为左上角,需要水平地向右看目标的最上面边界,垂直地向底部看物体的最左边边界。因此,提出corner Pooling通过编码显式先验知识来更好地定位角点。

预测模块从一个修改后的残块开始,其中将第一个卷积模块替换为corner pooling模块,修改后的残差块后面跟着一个卷积模块,新方法有多个分支用于预测热图、嵌入和偏移量。

预测模块的结构如上图所示。模块的第一部分是残差模块的修改版本。在这个修改后的残差模块中,将第一个3×3的卷积模块替换为一个corner pooling模块。这个残差模块,首先通过具有128个通道的2个3×3卷积模块的主干网络处理特征,然后应用一个corner pooling层。残差模块之后,将池化特征输入具有256个通道的3×3的Conv-BN层,然后加上反向projection shortcut。修改后的残块,后跟一个具有256个通道的3×3的卷积模块,和256个通道的3个Conv-ReLU-Conv层来产生热图,嵌入和偏移量。

沙漏网络

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

新方法的沙漏网络由两个沙漏组成,对沙漏模块的结构做了一些修改。不使用最大池,而是使用步长2来降低特征分辨率,减少了5倍的特征分辨率,并增加了特征通道的数量。当对特征进行上采样时用了两个残差模块,然后是一个最近的相邻上采样,每个跳跃连接还包含两个残差模块。沙漏模块中间有4个512通道的残差模块,在沙漏模块之前,使用128个通道7×7的卷积模块,步长为2,4倍减少的图像分辨率,后跟一个256个通道,步长为2的残差块。

新方法还在训练时增加了中间监督。但没有向网络中添加反向中间预测,因为发现这会损害网络的性能,在第一个沙漏模块的输入和输出,应用了一个3×3的Conv-BN模块。然后通过元素级的加法合并它们,后跟一个ReLU和一个具有256个通道的残差块,然后将其用作第二个沙漏模块的输入,沙漏网络的深度为104,与许多其他最先进的检测器不同,只使用整个网络最后一层的特征来进行预测。

实验结果

示例边界框预测覆盖在角点的预测热图上

在MS COCO test-dev上,CornerNet优于其他所有one-stage检测器


论文链接:https://arxiv.org/abs/1808.01244 代码链接:https://github.com/umich-vl/CornerNet

本文分享自微信公众号 - 计算机视觉战队(ComputerVisionGzq),作者:Edison_G

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 新年福利 | 2019深度学习工具汇总

    深度学习的进步也严重依赖于软件基础架构的进展。软件库如:Torch(2011), Theano(2012), DistBelief(2012), PyLearn...

    计算机视觉研究院
  • 干货 | 快速端到端嵌入学习用于视频中的目标分割

    我们开始进入今天的主题,接下来主要和大家分享目标在视频中的实时分割技术,来,一起学习吧!

    计算机视觉研究院
  • DL框架的未来发展,TensorFlow/MXNet/Torch, 选哪个?

    DL framework的学习成本还是不小的,以后未来的发展来看,你建议选哪个? 请主要对比分析下4个方面吧: 1. 实现新计算单元(layer)和网络结构的便...

    计算机视觉研究院
  • 走进Sass殿堂

    最近在学习sass,从sass新手的角度做一个简单的总结,总结的不对的地方期望各位大大们能多多指点,本文是针对sass3.4做的一个总结~ 一、变量篇 1.1 ...

    IMWeb前端团队
  • 资源的有限性与任务的复杂性之间的矛盾

    看了一篇文章How to Manage Connections Efficiently in Postgres, or Any Database, 文章讨论了如...

    Dylan Liu
  • 走进Sass殿堂

    最近在学习sass,从sass新手的角度做一个简单的总结,总结的不对的地方期望各位大大们能多多指点,本文是针对sass3.4做的一个总结~

    IMWeb前端团队
  • 通信协议详解

    传统意义上的“通讯”主要指电话、电报、电传。通讯的“讯”指消息(Message),媒体讯息通过通讯网络从一端传递到另外一端。媒体讯息的内容主要是话音、文字、图片...

    公众号php_pachong
  • 通过 PHP 代码发送 HTTP 响应与文件下载

    一个完整的 HTTP 响应报文包含状态行、响应头和响应实体,关于 HTTP 响应底层结构你可以参考 HTTP 报文简介及组成结构这篇教程

    学院君
  • Leetcode【46、47、89、357、659】

    同上面的 Leetcode 46,使用 DFS 回溯法。需要用集合 set 保存结果,然后再加入到集合前判断之前是否出现过。最后,将集合转化为列表输出即可。

    echobingo
  • 京东架构专家分享京东架构之路

    京东咚咚架构演进 咚咚是什么?咚咚之于京东相当于旺旺之于淘宝,它们都是服务于买家和卖家的沟通。 自从京东开始为第三方卖家提供入驻平台服务后,咚咚也就随之诞生了。...

    Java高级架构

扫码关注云+社区

领取腾讯云代金券