(一)论文阅读 | 目标检测之CornerNet


简介

在这里插入图片描述

图1:论文原文

论文是发表在 ECCV2018 上的一篇基于 Anchor-Free 的目标检测论文。该篇文章开创了基于关键点的目标检测算法,其主要思路来源于人体姿态估计。在 CornerNet 中,目标检测任务被分为以下流程:关键点检测关键点配对并生成边界框边界框的分类和回归。实验结果为在 COCO 数据集上的 AP 达到 42.1% 。论文原文 源码


0. Abstract

论文提出一种新的目标检测思路:将边界框的检测首先转换为检测框的左上角和右下角两个关键点,再通过某种机制匹配一对合适的关键点,然后生成目标的边界框。该过程避免了有关 Anchor 的设置,包括大小和宽高比等,是一种 Anchor-Free 的目标检测算法。

论文贡献:(一)提出一种新的基于关键点的 Anchor-Free 目标检测方法;(二)提出角点池化可以更好地寻找高质量角点;(三)基于人体姿态估计等相关工作,将目标检测上升到一种方法论,可以看到后面有许多工作均借鉴了论文所提出的思路。


1. Introduction

Anchor 广泛应用于目标检测算法中,基于 Anchor 的方法通常是首先在一幅图像上铺设大量的 Anchor,然后根据其与标注框的交并比等对 Anchor 进行筛选,即确定其是否会参与训练或作为正负样本参与训练。显然,上述过程存在两个方面的问题:(1)铺设在图像上的 Anchor 区域内大都不包含目标,如果不使用合适的方案减少此类 Anchor 的数量,就会造成正负样本的数量极不均衡,从而影响模型的训练;(2) Anchor 本身会包含大量超参数,如大小、宽高比以及每个位置铺设 Anchor 的数量等。

论文提出的 CornerNet 是一种 Anchor-Free 的目标检测方法,通过检测目标的边界框的左上角和右下角关键点来定位目标。首先,角点通过卷积神经网络得到的热图得到,热图是一个特定大小、通道数为类别数的特征图,左上角和右下角的角点检测分别在不同的热图实现。其次,单个角点的位置并没有太多的全局信息,作者提出一种角点池化的方法来帮助定位角点。因为检测的角点含有大量全局信息。以左上角点为例,从它的位置水平向右或垂直向下看就能包含目标的相关边缘信息,所以作者考虑的是当前角点的位置与其水平方向和垂直方向有关,而提出的角点池化就是利用这一性质。最后,使用嵌入向量的概念对特征距离相近的角点进行配对,进而生成目标的边界框。下图展示了其整体结构:
在这里插入图片描述

图2:CornerNet 整体结构

最后,作者指出 CornerNet 相比于传统方法的优势:通常边界框需要四个属性值才能实现定位,而 CornerNet 只需关注两个角点,同时角点池化利用图像全局信息以生成高质量的角点;该方法共产生 O ( w h ) O(wh) O(wh) 个可能的角点位置,而基于边界框的方法需要产生 O ( w 2 h 2 ) O(w^2h^2) O(w2h2) 个 Anchor,同时减少了计算量和参数。


2. Related Works

相关工作部分作者首先介绍了经典的两阶段目标检测算法R-CNN、SPP、Fast-RCNN、Faster-RCNN、R-FCN、DeNet 等和一阶段目标检测算法 YOLO、RetinaNet、RefineDet、SSD 等。其中,DeNet 也是一种基于关键点的检测方法,它首先通过卷积生成特征图,然后根据特征图产生角点。接着对角点进行稀疏化采样以生成可能的边界框,然后对边界框进行分类、回归等操作,是一种两阶段检测方法。

CornerNet 主要受到 这篇 关于人体姿态估计的文章的启发,它使用一自下而上的方法,即首先对人体每个关键点部件进行检测,然后将各部分检测结果拼接成整个人体姿态。下图是来自原文的一张配图:在这里插入图片描述

图3:人体姿态估计


3. CornerNet

本部分介绍 CornerNet 实现细节,下图是 CornerNet 的整体结构。
在这里插入图片描述

图4:CornerNet整体检测流程

3.1 Detecting Corners

CornerNet 预测两组热图(一幅图中以不同颜色表示该位置是角点的概率,如图中以红色表示该位置是角点的概率高、而以蓝色表示该位置是角点的概率低),一组用于预测左上角角点、另一组用于预测右下角角点。热图的大小是 C × H × W C×H×W C×H×W C C C 表示热图的通道即数据集的类别数、 H × W H×W H×W 表示热图的二维大小。

对于某个位置的预测角点而言,只有标注框对应的角点一个表示正类,其他的均为负类。同时,在训练过程中对每个负类角点的惩罚也是不同的。如图 4 所示,红色边框为标注框,橙色圆以标注角点为圆心、半径根据保证圆内的角点组成的边界框与标注框的交并比大于 0.7 而确定。具体地,在圆内的角点组成的边界框与标注框的交并比均大于给定的阈值,它们都是质量较高的预测结果,如图中绿色虚线框所示。
在这里插入图片描述

图5:Detecing Corners

p c i j p_{cij} pcij 表示热图中位置 ( i , j ) (i,j) (i,j) 对类别 c c c 的预测概率; y c i j y_{cij} ycij 表示热图中的真实值,即 y c i j = 1 y_{cij}=1 ycij=1 表示位置 ( i , j ) (i,j) (i,j) 对应的类别为 c c c,其余位置的 y c i j = 0 y_{cij}=0 ycij=0 N N N 表示图像中目标的数量。结合 F o c a l   L o s s {\rm Focal\ Loss} Focal Loss 的形式,得到文中给出的第一部分损失,即角点检测的损失 L d e t L_{det} Ldet
L d e t = − 1 N ∑ c = 1 C ∑ i = 1 H ∑ j = 1 W { ( 1 − p c i j ) α l o g ( p c i j ) i f   y c i j = 1 ( 1 − y c i j ) β ( p c i j ) α l o g ( 1 − p c i j ) o t h e r w i s e (1) L_{det} =\frac{-1}{N}\sum\limits_{c=1}^{C}\sum\limits_{i=1}^{H}\sum\limits_{j=1}^{W}\left\{ \begin{aligned} &(1-p_{cij})^αlog(p_{cij}) &if\ y_{cij}=1\\ &(1-y_{cij})^β(p_{cij})^αlog(1-p_{cij})&otherwise \end{aligned} \right.\tag{1} Ldet=N1c=1Ci=1Hj=1W{(1pcij)αlog(pcij)(1ycij)β(pcij)αlog(1pcij)if ycij=1otherwise(1)

由上式可知,当 y c i j = 1 y_{cij}=1 ycij=1 时对应的就是原 F o c a l   L o s s {\rm Focal\ Loss} Focal Loss 的形式;当 y c i j ≠ 1 y_{cij}≠1 ycij=1 时,直观上我们要让越接近真正位置的预测结果对应的损失越大,所以 y c i j y_{cij} ycij 的值随着其所在位置越接近标注位置而越接近 1。而这种距离的度量采用二维高斯分布,如下:
y c = { e − x 2 + y 2 2 σ 2 x 2 + y 2 ≤ r 2 0 o t h e r w i s e (2) y_c =\left\{ \begin{aligned} &e^{-\frac{x^2+y^2}{2σ^2}}&x^2+y^2≤r^2\\ &0&otherwise \end{aligned} \right.\tag{2} yc=e2σ2x2+y20x2+y2r2otherwise(2)

另一方面,假设下采样倍数是 n n n,原图上 ( x , y ) (x,y) (x,y) 的位置对应于下采样后的 ( ⌊ x n ⌋ , ⌊ y n ⌋ ) (\lfloor\frac{x}{n}\rfloor,\lfloor\frac{y}{n}\rfloor) (nx,ny)。当从下采样后的图像重新映射回原图时会有精度的损失即数值取整产生的损失,这在小目标检测时会产生较大的误差。为了缓解这个问题,论文提出增加一个位置偏移的预测 o k o_k ok
o k = ( x k n − ⌊ x k n ⌋ , y k n − ⌊ y k n ⌋ ) (3) o_k=(\frac{x_k}n{}-\lfloor\frac{x_k}{n}\rfloor,\frac{y_k}n{}-\lfloor\frac{y_k}{n}\rfloor)\tag{3} ok=(nxknxk,nyknyk)(3)

记预测位置的偏差为 o ^ k \widehat{o}_k o k,第二部分损失函数参考 S m o o t h L 1 {\rm SmoothL1} SmoothL1 损失函数,得到偏移损失 L o f f L_{off} Loff

L o f f = 1 N ∑ k = 1 N S m o o t h L 1 L o s s ( o k , o ^ k ) (4) L_{off} =\frac{1}{N}\sum\limits_{k=1}^{N}{\rm SmoothL1Loss}(o_k,\widehat{o}_k)\tag{4} Loff=N1k=1NSmoothL1Loss(ok,o k)(4)

3.2 Grouping Corners

如图 4,网络的另一个输出是 Embeddings,即嵌入向量,它的大小是 1 × H × W 1×H×W 1×H×W、其作用是对检测出的角点按照某种属性进行配对。具体地,为热图的每个位置预测一个嵌入向量,作者根据如果一个左上角角点和右下角角点属于同一边界框,那么二者对应的嵌入向量的距离应该足够小这一性质,令 e t k e_{t_k} etk e b k e_{b_k} ebk 分别表示第 k k k 个目标的左上角角点和右下角角点的嵌入向量。则定义如下损失 L p u l l L_{pull} Lpull L p u s h L_{push} Lpush

L p u l l = 1 N ∑ k = 1 N [ ( e t k − e k ) 2 + ( e b k − e k ) 2 ] . (5) L_{pull} =\frac{1}{N}\sum\limits_{k=1}^{N}[(e_{t_k}-e_k)^2+(e_{b_k}-e_k)^2].\tag{5} Lpull=N1k=1N[(etkek)2+(ebkek)2].(5)

L p u s h = 1 N ( N − 1 ) ∑ k = 1 N ∑ j = 1 , j ≠ k N m a x ( 0 , ∆ − ∣ e k − e j ∣ ) . (6) L_{push} =\frac{1}{N(N-1)}\sum\limits_{k=1}^{N}\sum\limits_{j=1,j≠k}^{N}max(0,∆-|e_k-e_j|).\tag{6} Lpush=N(N1)1k=1Nj=1,j=kNmax(0,ekej).(6)

其中公式 (5)用于减小属于同一边界框的角点间的嵌入距离, e k = e t k + e b k 2 e_k=\frac{e_{t_k}+e_{b_k}}{2} ek=2etk+ebk。公式(6)用于增大属于不同边界框的角点间的嵌入距离,∆ 为超参数,即如果一对角点间的嵌入距离大于我们设定的阈值,则认为它们来自不同目标的边界框,同时设定损失值为 0 而不参与训练。

3.3 Corner Pooling

为了确定当前位置是否属于左上角角点或右下角角点,本文提出了 Corner Pooling(角点池化),前面介绍了使用角点池化的初衷,现在来具体说明其执行过程。假设现在我们需要确定某个位置 ( i , j ) (i,j) (i,j) 是否是一个左上角角点,具体的做法如下:
t i j = { m a x ( f t i j , t ( i + 1 ) j ) i f   i < H f t H j o t h e r w i s e (7) t_{ij} =\left\{ \begin{aligned} &max(f_{t_{ij}},t_{(i+1)j})&if\ i<H\\ &f_{t_{Hj}}&otherwise \end{aligned} \right.\tag{7} tij={max(ftij,t(i+1)j)ftHjif iHotherwise(7)

l i j = { m a x ( f l i j , l i ( j + 1 ) ) i f   j < W f l i W o t h e r w i s e (8) l_{ij} =\left\{ \begin{aligned} &max(f_{l_{ij}},l_{i(j+1)})&if\ j<W\\ &f_{l_{iW}}&otherwise \end{aligned} \right.\tag{8} lij={max(flij,li(j+1))fliWif jWotherwise(8)

上式中 H H H W W W 分别表示热图的高和宽,初始时 i = H i=H i=H j = W j=W j=W 表示热图中的边缘位置。 t i j t_{ij} tij l i j l_{ij} lij 分别表示垂直方向和水平方向的池化过程,具体观察等式可以发现其是一个递归的过程。如下图:
在这里插入图片描述

图6:Corner Pooling

如果我们要确定左上方角点池化后的结果,首先找到它的下边缘位置和右边缘位置,然后根据等式(7)和等式(8),依次取较大值,最后将两个方向得到值相加得到该位置的池化结果。以上过程是以左上角角点为例,右下角角点的过程类似。最后,下图是 CornerNet 的检测模块:
在这里插入图片描述

图7:预测模块

3.4 Hourglass Network

CornerNet 使用的主干网络是 Hourglass Network(沙漏网络),沙漏网络的最初设计用于人体姿态估计:
在这里插入图片描述

图8:沙漏模块

可以看到每个沙漏模块中包含大量下采样和上采样操作,最终得到的特征图的大小与输入特征图相同。最后,通过堆叠不同数量的沙漏模块即形成整个沙漏网络,即 CornerNet 用于提取特征的部分。


4. Experiments

CornerNet 整体的损失函数定义为:
L = L d e t + α L p u l l + β L p u s h + γ L o f f . (9) L=L_{det}+αL_{pull}+βL_{push}+γL_{off}.\tag{9} L=Ldet+αLpull+βLpush+γLoff.(9)

在这里插入图片描述

图9:是否使用角点池化的实验对比

上图是就是否使用角点池化的实验结果对比,可以看到使用角点池化后对模型的整体性能均有提升,尤其是在较大目标的检测上。
在这里插入图片描述

图10:是否使用固定半径的实验对比

上图是就是否使用固定半径的实验结果对比,其中第一行表示不使用这种策略;第二行表示使用固定半径;第三行表示根据角点形成的边界框与标注框的交并比而动态确定的半径,即论文所采用的策略。可以看到,除在小目标检测上,在其他指标上,论文所使用的策略均取得了最佳的结果。
在这里插入图片描述

图11:论文创新点的实验对比

上图是关于论文所使用的创新点的实验对比。其中第一行表示论文的结果;第二行表示使用标注信息代替预测的热图(去掉热图的预测);第三行表示使用标注信息代替预测的热图及偏移(进一步去掉偏移预测)。由结果可知,在第一行和第二行的对比实验中,模型性能的提升非常明显,而对比第二行和第三行的结果则不那么明显。这说明,寻找高质量的角点是这一类基于关键点的目标检测算法的瓶颈

在这里插入图片描述

图12:目标检测的实验结果对比


5. Conclusion

论文提出了一种基于关键点的 Anchor-Free 的目标检测算法,CornerNet。它不同于 YOLOv1 和 DenseBox 等方法,而是提出一种方法论,即通过关键的检测完成目标检测整个流程。阅读该论文有利于理解后续 CenterNet、 ExtremeNet、 CentripetalNet等方法。但同时根据相关目标检测方法实验的对比,我们可以观察到,这类方法对小目标的检测不具有鲁棒性,以后可以考虑重点关注基于关键点的检测方法在小目标检测上的工作。


参考

  1. Law H, Deng J. Cornernet: Detecting objects as paired keypoints[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 734-750.
  2. https://blog.csdn.net/u014380165/article/details/83032273.
  3. Newell A, Yang K, Deng J. Stacked hourglass networks for human pose estimation[C] //European conference on computer vision. Springer, Cham, 2016: 483-499.


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值