CornerNet: Detecting Objects as Paired Keypoints 论文笔记
CornerNet: Detecting Objects as Paired Keypoints
论文链接: https://arxiv.org/abs/1808.01244
一、 Problem Statement
Anchor boxes 有两个缺点:
- positive 和 negative anchors数量的不平衡,训练慢。
- 引入了超参数,比如大小,比例,数量等等。
二、 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}}e−2σ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=1∑Ci=1∑Hj=1∑W{(1−pcij)αlog(pcij)(1−ycij)β(pcij)αlog(1−pcij)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=(nxk−⌊nxk⌋,nyk−⌊nyk⌋)
其中,oko_kok是offset,xkx_kxk和yky_kyk是角点kkk的x,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=1∑NSmoothL1Loss(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=1∑N[(etk−ek)2+(ebk−ek)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(N−1)1k=1∑Nj=1j=k∑max(0,Δ−∣ek−ej∣)
其中,eke_kek是etke_{t_k}etk和ebke_{b_k}ebk的平均数。Δ\DeltaΔ为1。
和offset loss一样,我们只在ground-truth corner 位置上的点进行计算。
4. Corner Pooling
通常目标没有明确的角点特征。所以为了确定哪个像素是左上角角点, 我们需要水平向右看一个物体的最上面的边界,垂直向下看最左边的边界。 因此作者提出了Corner Pooling 来更好的定位角点。
假设我们判断像素位置(i,j)(i,j)(i,j)是否是左上角的角点,假设ftf_tft和flf_lfl为feature maps,ftijf_{t_{ij}}ftij和flijf_{l_{ij}}flij为位置(i,j)(i,j)(i,j)在ftf_tft和flf_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 论文笔记相关推荐
- CornerNet: Detecting Objects as Paired Keypoints论文笔记(详细)
看完Cornernet之后,不得不说这篇文章很复杂,可以扣的细节很多,而我自己也是反反复复读了好几遍才理清作者的思路,特此记录下来,以供之后回读. Cornernet作为one-stage目标检测器, ...
- 【目标检测】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 ...
- 【论文笔记】:CornerNet: Detecting Objects as Paired Keypoints
&Title: CornerNet: Detecting Objects as Paired Keypoints CornerNet: Detecting Objects as Paired ...
- 论文笔记: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 ...
- CornerNet论文详解CornerNet: Detecting Objects as Paired Keypoints
一.论文相关信息 1.论文题目:CornerNet: Detecting Objects as Paired Keypoints 2.发表时间:2018 3.文献地址:https://op ...
- ECCV2018 | 论文阅读CornerNet: Detecting Objects as Paired Keypoints
CornerNet论文阅读--CornerNet: Detecting Objects as Paired Keypoints 文章目录 CornerNet论文阅读--CornerNet: Detec ...
- 论文阅读笔记五十:CornerNet: Detecting Objects as Paired Keypoints(ECCV2018)
论文原址:https://arxiv.org/pdf/1808.01244.pdf github:https://github.com/princeton-vl/CornerNet 摘要 本文提出了目 ...
- 论文解读 | CornerNet: Detecting Objects as Paired Keypoints
https://blog.csdn.net/weixin_40414267/article/details/82379793 论文链接:https://arxiv.org/abs/1808.01244 ...
- CornerNet:Detecting Objects as Paired Keypoints
论文思想 将检测问题建模成关键点检测问题,通过检测左上.右下两个关键点来回归出检测框,是一种anchor free 的目标检测算法.主要解决了anchor based方法的两大问题: anchor b ...
最新文章
- 数字消费时代 传统行业互联网转型方向
- 11.如何在非固定大小的地图图片上正确渲染ROS小车的位置和运行轨迹
- Android studio官网资料
- 华为主题包hwt下载_华为主题 | 星黛露
- IJCAI 2019 《GraspSnooker: Automatic Chinese Commentary Generation for Snooker Videos》论文笔记
- 【bzoj4566】[Haoi2016]找相同字符【后缀自动机】
- 《JavaScript高级程序设计》阅读笔记(一):ECMAScript基础
- spring aop实现原理_Spring 异步实现原理与实战分享
- 深度学习花书-2.10 PCA数学推导
- Noip2011提高组 聪明的质监员
- Leetcode 372.超级次方
- java对接银联商务扫码支付(银联商务扫码支付文档)
- HLA高层体系结构+RTI(2)
- tensorflow中的shape问题
- Android面试必问!记录下我磕磕碰碰的三个月找工作经历,面试心得体会
- msk 频偏_基于MSP430的MSK调制解调实现.doc
- Nim游戏 —— 巴什博弈
- 堆排序(大根堆与小根堆)
- 如何统计项目的代码行数
- android+智能家居控制系统,基于Android的智能家居控制系统设计与实现