CornerNet: Detecting Objects as Paired Keypoints

论文链接: https://arxiv.org/abs/1808.01244

一、 Problem Statement

Anchor boxes 有两个缺点:

  1. positive 和 negative anchors数量的不平衡,训练慢。
  2. 引入了超参数,比如大小,比例,数量等等。

二、 Direction

Anchor-free的方法,检测bounding box的左上角和右下角的点,引入了Corner-pooling。

三、 Method

先来看一下它的整体框架:

可以看到网络具体包括两个部分,一个是Backbone,一个是prediction heads。

  • Backbone 由hourglass network组成。
  • Prediction heads由三部分组成,分别为两个heatmaps,一个embeddings vector 和一个offsets。通过这三部分加上后处理算法,形成了Bounding boxes。

1. Hourglass Backbone 和 prediction heads

角点检测,或者说目标点检测,最通用的一个backbone就是hourglass network。Hourglass 可以在一个建构中就捕捉global 和 local的特征。在这篇文章中,主要包括了两个hourglass modules。但有一点不同的是: 在hourglass modules中,没有使用 max pooling,而是简单使用了stride 为 2的卷积,来进行下采样。作者把特征分辨率下降了5倍,然后相对应增加它们的通道数(256,384,384,384,512).当进行上采样的时候,使用了2个residual modules 加1个nearest neighbor upsampling。

prediction heads结构如下:

2. Detecting Corner

预测角点是通过网络生成两个heatmaps实现的。 一个heatmaps用于左上角,一个heatmaps用于右下角。每一个heatmaps有C个通道,C是类别的总数。其大小为H×WH \times WH×W。没有background 的通道。每一个通道是一个二值掩膜(binary mask),表示一个类别中点的位置。
对于每一个角点,只有一个地方是ground-truth location,其他的都是negative。在训练的时候,作者引入了penalty机制。在positive 一定的半径范围内的negative locations,作者减少了penalty,因为这些位置上可以生成与ground-truth bounding boxes overlap较大的框。作者通过目标的大小决定半径,确保在半径范围内的一对点可以生成一个bounding box,与ground-truth有至少0.3 的IoU。penalty reduction是通过一个unnormalized 2D Gaussian (e−x2+y22σ2e^{-\frac{x^2+y^2}{2\sigma^2}}e2σ2x2+y2)实现的,其中心是positive location和σ\sigmaσ是半径的1/3。

假设pcijp_{cij}pcij是位置(i,j)(i,j)(i,j)和类别为ccc在heatmaps上的概率,ycijy_{cij}ycij是添加了unnormalized Guassian的ground-truth heatmaps。作者设计了以下Focal loss:

Ldet=−1N∑c=1C∑i=1H∑j=1W{(1−pcij)αlog(pcij)if  ycij=1(1−ycij)β(pcij)αlog(1−pcij)otherwiseL_{det} = -\frac{1}{N}\sum_{c=1}^C \sum_{i=1}^H \sum_{j=1}^W \bigg \{ \begin{aligned} (1-p_{cij})^{\alpha}log(p_{cij}) \quad& \text{if} ~ ~y_{cij}=1 \\ (1-y_{cij})^{\beta}(p_{cij})^\alpha log(1-p_{cij})\quad& \text{otherwise} \end{aligned} Ldet=N1c=1Ci=1Hj=1W{(1pcij)αlog(pcij)(1ycij)β(pcij)αlog(1pcij)ifycij=1otherwise

其中,NNN是图像中目标的数量。α,β\alpha, \betaα,β是超参数。

当从heatmaps重映射回去图像的时候,有可能会有误差。因此作者引入了一个offsets branch,预测location offsets,用于重映射回原图相分辨率大小之前,轻微调整角点的位置。
ok=(xkn−⌊xkn⌋,ykn−⌊ykn⌋)o_k=(\frac{x_k}{n} - \lfloor\frac{x_k}{n}\rfloor, \frac{y_k}{n}-\lfloor\frac{y_k}{n}\rfloor) ok=(nxknxk,nyknyk)

其中,oko_kok是offset,xkx_kxkyky_kyk是角点kkkx,yx,yx,y坐标。nnn是下采样因子。使用Smooth-L1 loss进行训练:
Loff=1N∑k=1NSmoothL1Loss(ok,o^k)L_{off} = \frac{1}{N}\sum_{k=1}^N SmoothL1Loss(o_k, \hat{o}_k) Loff=N1k=1NSmoothL1Loss(ok,o^k)

3. Grouping Corners

我们需要判断以下哪一个左上角的角点对应于哪一个右下角的角点,所以才能形成一个bounding box。这是通过一个embeding vector来实现的。网络对每一个角点预测了一个embedding vector,然后如果左上角和右下角的角点属于同一个Bounding box,它们的embedding距离应该是很小的。所以就可以直接诶把他们分为一组。embedding vector是一维的,用etKe_{t_K}etK表示目标kkk的左上角embedding,ebke_{b_k}ebk表示右下角。 使用"pull" loss和"push" loss来训练这个网络:

Lpull=1N∑k=1N[(etk−ek)2+(ebk−ek)2]L_{pull} = \frac{1}{N}\sum_{k=1}^N[{(e_{t_k}-e_k)^2 + (e_{b_k} - e_k)^2}] Lpull=N1k=1N[(etkek)2+(ebkek)2]

Lpush=1N(N−1)∑k=1N∑j=1j≠kmax⁡(0,Δ−∣ek−ej∣)L_{push} = \frac{1}{N(N-1)}\sum_{k=1}^N\sum_{ \begin{matrix} j=1 \\ j\neq k \end{matrix}}\max(0, \Delta - |e_k - e_j|) Lpush=N(N1)1k=1Nj=1j=kmax(0,Δekej)
其中,eke_keketke_{t_k}etkebke_{b_k}ebk的平均数。Δ\DeltaΔ为1。

和offset loss一样,我们只在ground-truth corner 位置上的点进行计算。

4. Corner Pooling

通常目标没有明确的角点特征。所以为了确定哪个像素是左上角角点, 我们需要水平向右看一个物体的最上面的边界,垂直向下看最左边的边界。 因此作者提出了Corner Pooling 来更好的定位角点。

假设我们判断像素位置(i,j)(i,j)(i,j)是否是左上角的角点,假设ftf_tftflf_lfl为feature maps,ftijf_{t_{ij}}ftijflijf_{l_{ij}}flij为位置(i,j)(i,j)(i,j)ftf_tftflf_lfl的向量。如果有H×WH \times WH×W大小的feature maps, Corner Pooling首先 max pooling 在区间(i,j)(i,j)(i,j)(i,H)(i, H)(i,H)中的所有特征向量,也就是在这一行内,找最大值。接着max pooling 在区间(i,j)(i,j)(i,j)到区间(W,j)(W,j)(W,j)的特征向量,也就是在这一列里面,找到最大值。最后把这两个值相加。如下图所示。这个过程可以用数学表示为:
tij={max⁡(ftij,t(i+1)j)if  i<HftHjotherwiset_{ij} = \biggl \{ \begin{matrix} \max(f_{t_{ij}}, t_{(i+1)j}) \quad \text{if} ~~ i< H \\ f_{t_{Hj}} \quad \quad \quad \quad \quad \quad \text{otherwise} \end{matrix} tij={max(ftij,t(i+1)j)ifi<HftHjotherwise
lij={max⁡(flij,li(j+1))if  j<WfliWotherwisel_{ij} = \biggl \{ \begin{matrix} \max(f_{l_{ij}}, l_{i(j+1)}) \quad \text{if} ~~ j< W \\ f_{l_{iW}} \quad \quad \quad \quad \quad \quad \text{otherwise} \end{matrix} lij={max(flij,li(j+1))ifj<WfliWotherwise

右下角的角点同样的方法。Corner Pooling 在prediction heads中使用,用来预测heatmaps, embeddings和offsets。

5. 整体的Loss:

L=Ldet+αLpull+βLpush+γLoffL=L_{det} + \alpha L_{pull} + \beta L_{push} + \gamma L_{off} L=Ldet+αLpull+βLpush+γLoff

四、 Conclusion

CornerNet 角点检测,如果任何一个角丢失了,就会丢失一个物体;需要精确的offset来生成紧密的边界框;不正确的embedding将导致许多错误的边界框。论文原文:

This suggests that although there is still ample room for improvement in both detecting and grouping corners, the main bottleneck is detecting corners.

但相对于一些anchors的检测器,它的bounding boxes质量会高很多,得益于corner pooling。

五、 Reference

CornerNet: Detecting Objects as Paired Keypoints 论文笔记相关推荐

  1. CornerNet: Detecting Objects as Paired Keypoints论文笔记(详细)

    看完Cornernet之后,不得不说这篇文章很复杂,可以扣的细节很多,而我自己也是反反复复读了好几遍才理清作者的思路,特此记录下来,以供之后回读. Cornernet作为one-stage目标检测器, ...

  2. 【目标检测】CornerNet: Detecting Objects as Paired Keypoints论文理解

    文章目录 摘要 1 引言 2 相关工作 2.1 两阶段检测器 2.2 单阶段检测器 2.3 anchor free的检测器 3 CornerNet 3.1 概述 3.2 检测角点 3.3 分组角点 3 ...

  3. 【论文笔记】:CornerNet: Detecting Objects as Paired Keypoints

    &Title: CornerNet: Detecting Objects as Paired Keypoints CornerNet: Detecting Objects as Paired ...

  4. 论文笔记:CornerNet—Detecting Objects as Paired Keypoints

    CornerNet: Detecting Objects as Paired Keypoints 1.摘要 2.细节 2.1.概览 2.2.检测角点 2.3.角点分组 2.4.角点池化 2.5.Hou ...

  5. CornerNet论文详解CornerNet: Detecting Objects as Paired Keypoints

    一.论文相关信息 ​ 1.论文题目:CornerNet: Detecting Objects as Paired Keypoints ​ 2.发表时间:2018 ​ 3.文献地址:https://op ...

  6. ECCV2018 | 论文阅读CornerNet: Detecting Objects as Paired Keypoints

    CornerNet论文阅读--CornerNet: Detecting Objects as Paired Keypoints 文章目录 CornerNet论文阅读--CornerNet: Detec ...

  7. 论文阅读笔记五十:CornerNet: Detecting Objects as Paired Keypoints(ECCV2018)

    论文原址:https://arxiv.org/pdf/1808.01244.pdf github:https://github.com/princeton-vl/CornerNet 摘要 本文提出了目 ...

  8. 论文解读 | CornerNet: Detecting Objects as Paired Keypoints

    https://blog.csdn.net/weixin_40414267/article/details/82379793 论文链接:https://arxiv.org/abs/1808.01244 ...

  9. CornerNet:Detecting Objects as Paired Keypoints

    论文思想 将检测问题建模成关键点检测问题,通过检测左上.右下两个关键点来回归出检测框,是一种anchor free 的目标检测算法.主要解决了anchor based方法的两大问题: anchor b ...

最新文章

  1. 数字消费时代 传统行业互联网转型方向
  2. 11.如何在非固定大小的地图图片上正确渲染ROS小车的位置和运行轨迹
  3. Android studio官网资料
  4. 华为主题包hwt下载_华为主题 | 星黛露
  5. IJCAI 2019 《GraspSnooker: Automatic Chinese Commentary Generation for Snooker Videos》论文笔记
  6. 【bzoj4566】[Haoi2016]找相同字符【后缀自动机】
  7. 《JavaScript高级程序设计》阅读笔记(一):ECMAScript基础
  8. spring aop实现原理_Spring 异步实现原理与实战分享
  9. 深度学习花书-2.10 PCA数学推导
  10. Noip2011提高组 聪明的质监员
  11. Leetcode 372.超级次方
  12. java对接银联商务扫码支付(银联商务扫码支付文档)
  13. HLA高层体系结构+RTI(2)
  14. tensorflow中的shape问题
  15. Android面试必问!记录下我磕磕碰碰的三个月找工作经历,面试心得体会
  16. msk 频偏_基于MSP430的MSK调制解调实现.doc
  17. Nim游戏 —— 巴什博弈
  18. 堆排序(大根堆与小根堆)
  19. 如何统计项目的代码行数
  20. android+智能家居控制系统,基于Android的智能家居控制系统设计与实现

热门文章

  1. 码农深夜骑车逆行被拦后爆发大哭,称压力好大!
  2. idea中隐藏或显示文件
  3. mysql使用delete from where in 删除时报错如何解决
  4. 网页代码中link标签的用法
  5. linux 打开终端自动运行脚本.barshrc
  6. 三年级神奇电子计算机教案,人教版三年级上册信息技术教案
  7. 我们离成为C++、C#、MySQL之父有多远?
  8. RocksDB问题点解决及相关学习记录
  9. 人工智能的“斯芬克斯之谜”
  10. c语言编程文件的加密解密,C语言实现任何文件的加密解密功能