一、论文相关信息

​ 1.论文题目:CornerNet: Detecting Objects as Paired Keypoints

​ 2.发表时间:2018

​ 3.文献地址:https://openaccess.thecvf.com/content_ECCV_2018/papers/Hei_Law_CornerNet_Detecting_Objects_ECCV_2018_paper.pdf

4.论文作者: Hei Law · Jia Deng

​ 5.论文源码:https://github.com/princeton-vl/CornerNet

二、论文详情

背景与介绍:

无论是one-stage还是two-stage的detector,他们中最先进的模型都有一个公共的部分——anchor box。例如one-stage detectors 密集地再一张图片上放置anchor boxes,通过给这些anchor打分并回归调整坐标来实现最终的预测。正是通过anchor,one-stage detectors在精度上才有了很大的改进,但是anchor同时也给one-stage家族带来两个很大的缺点:

  1. one-stage detectors在每张图片上放置大量的boxes(如RetinaNet超过100k个)。如此密集的boxes是为了确保大多数的ground truth有足够的anchors与他们匹配,即与他们有足够的IoU值。但是,最终只有少部分的anchor boxes达到的匹配要求,绝大部分anchor boxes为负样本,使得样本出现了class imbalance,正负样本比例不平衡,验证影响训练结果与速度。于是one-stage 家族有了nms,按1:3比例采用正负样本,正是这种imbalance导致了训练低效,且性能无法提高,于是出现了RetinaNet文章中的focal loss等方法来解决这个class imbalance问题。
  2. 第二个缺点即anchors box 会引入很多的超参数以及设计选项,如boxes数量、尺寸、比例等,这些参数在多尺度的网络中显得更加复杂,需要为不同分辨率的特征层设置不同anchor boxes参数。

CornerNet创新

这里的CornerNet则采用了一种新的one-stage 方法做目标检测,该方法的创新在于两点:
一、抛弃了原有的anchor boxes,转而使用bounding box的左上角和右下角这样的一对keypoints来检测目标,卷积网络预测了两个heatmap来表示同类物体的corners信息。一个heatmap描绘属于同一类的所有instance的左上角corners信息,另一个heatmap描述该类的属于该类的所有instance的右下角的信息。此外,卷积网络还为每一个corner预测一个嵌入向量(embedding vector),embedding vector作用就是将一个物体的左上角和右下角两个corner做匹配,匹配原则为同一个物体的两个corner会有相似的vector(见下图)。如此,就极大的简化了网络,不再需要设计anchor boxes了。

二、使用了一种新的池化层——corner pooling layer来帮助更好的定位物体bounding box的对角。因为有时物体bounding box的两个对角处会没有信息,如下图:

这种情况下corner就很难通过局部特征进行定位。那么为了确定某个像素点是否有一个top-left corner,我们就需要从该点出发向其水平有方向去看看,以及向其垂直向下方向看看。那么这就是corner pooling layer要做的工作,它输入两个特征层,第一个特征层,在每个像素点做该点水平右边所有像素的最大池化得到该点的一个值,第二个特征层则对每个像素点做该点垂直下面所有像素的最大池化,最后将两个池化结果相加。如下图:

corner 相比anchor优点

使用corner检测比使用bounding box center 和proposal性能更好的原因可能有两点:
1.一边框中心来预测的方式需要依赖物体4个方位的信息,而使用corner的方式,预测物体每个corner只需要两个方位信息,加上有corner pooling,就使得corner更加容易定位物体。
2. 使用corner能更高效地计算boxes的离散空间位置:使用corner只要O(wh)计算复杂度就能得到所有的可能anchor boxes,但是使用anchor boxes需要O(w2h2)的复杂度。

CornerNet

CornerNet通过一对对角点来检测物体。通过一个卷积网络预测两个heatmaps来呈现不同物体种类的corner分布,一个heatmap用与左上角corner,一个右下角corner。网络随后预测一个嵌入向量来标识那些左上角和右下角corner是属于同一个物体的,即要使同一物体的两个corner的嵌入向量相似。为了产生更贴合的bounding box,网络还预测了每个corner偏移(offsets)来调整corners,最后通过一个简单的处理得到最终bounding box。

CornerNet结构图:


如上图见,CornerNet使用Hourglass Network做backbone提取特征,然后后接两个预测模块(Prediction Module),分别对应两个corner的预测,每个预测模块里面首先要进行一个corner pooling操作,然后才分别预测heatmaps、embeddings、offsets这些。

每个heatmaps有C个channel,对应C个种类,这里不考虑background,尺寸为H×W。每个channel都是一个binary mask,表明一个类的位置所在处。

检测Corners(Detect Corners)

每个corner会有一个ground-truth positive 位置,其它的位置都是negative。在这个ground-truth positive位置的一个半径(radius) 内的负样本得到的惩罚要比不在该范围内的小些。(因为即使没有在标准点,如果两个corner都靠近各自标准点那也能与ground truth有足够的IoU/重叠)。这里上述半径的值设置为能使处于这个半径范围内的一对corner能够与GT有足够的IoU,文中阈值为0.3。给定半径后,半径内corner减少的惩罚量通过一个以正样本corner为中心的非归一化的二维高斯函数得到,

其中σ 为半径的1/3。

让pcij表示heatmaps第c个channel上(i,j)位置的corner表示物体为类c的得分,ycij表示由高斯增强后的ground-truth heatmap值。我的理解为(i,j)位置与ground truth物体的(i,j)位置相比的一个分值,即若刚好为ground truth位置,则ycij=1,但如果在ground truth 的某个半径内,ycij也能有一个像高斯分布那样逐渐下降的值。然后设计得到一个focal loss 的变种作为检测损失。
检测损失

式子中,N表示的是总的物体数,α和β是控制每个点loss贡献的超参数,(α=2,与focal loss原文中对应值一样;β=4)。当ycij为1时,损失只有上半部分,α能降低那些得分较高的点的损失值。ycij不为1时,但(i,j)离ground truth很近了,ycij也会接近1,从而(1-ycij)能降低离ground truth位置很近的点的损失。

调整corner位置(Adjusted corner location)

网络在对输入图像做卷积操作时,往往会带有downsampling,使得输出小于imae原尺寸。比如image中的一个位置(x,y)会被映射到heatmaps上的(floor(x/n),floor(y/n))位置,最后再把heatmaps上的位置映射回image时就会产生精度损失,极大影响IoU。为解决这个问题,引入location offsets,在我们重新将corne location映射回输入分辨率上前做微调。

Ok即指corner k的在上述定义中的偏移(offset)。所有的类共享同一个左上角corner的offset 集合和一个右下角corner集合。训练时使用smooth L1 Loss:

Corner匹配/分组(Grouping Corner)

一副图像中有若干个物体,因此会有若干个top-left和bottom-rigt corners会被检测到。而我们需要确定哪些top-left和bottom-right corners属于同一个物体,即哪些是一对。类似的工作有预测多个人的关节点,这种方式也是在预测多个关节点之后通过一种嵌入向量相近匹配的方法去寻找哪些关节点是属于同一个人的。受这个工作的启发,这里使用一种嵌入向量(embedding vector)做corner对的匹配,属于同一个物体的corners的embedding vector会很相近,即距离很小。vector的值不重要,重要的是一对corners相似就行。
Embedding vector损失

embedding损失包含两部分,etk表示第k个目标的左上角角点的embedding vector,ebk表示第k个目标的右下角角点的embedding vector,ek表示etk和ebk的均值。pull loss用来缩小属于同一个目标(第k个目标)的两个角点的embedding vector(etk和ebk)距离。push loss用来扩大不属于同一个目标的两个角点的embedding vector距离,令Δ=1。

Corner Pooling

为了区分某个位置的像素是否是一个corner,仅仅局部的信息是不够的,我们需要将该点右边水平方向所有像素以及该点垂直向下所有像素考虑进来,分别做最大池化,得到该点出发的水平和垂直方向像素中各自的最大值,最后这两个方向最大值相加即为该点的一个corner值。
例如要求一个像素是否是left-corner,则要有一下步骤

其中ft为用于水平方向的特征图,fl为用于垂直方向的特征图。图像的尺寸为H×W。水平方向那个特征图上tij的值等于ft特征图上(i, j) 到 (i, H) 所有点的最大值。同理,垂直方向lij则为特征图fl上(i, j) 到 (W, j)所有点的最大值。 该池化操作是可以通过下面方式高效计算:

从右到左做max求每个点值得到水平特征图,从下到上求每个点值得到垂直特征图,最后相加即可。

Prediction module


最开始的结构讲到backbone之后连接两个prediction module,分别预测两个corner。这里详细介绍prediction module内部结构,以左上角corner(top-left corner)对应module为例。
backbone之接着两个3×3的卷积module(灰色的 3×3 Conv-BN-ReLU),这两个module各自输出1个feature map分别作为上文中提到的ft和fl传到Corner pooling做池化操作,然后pooling最后输出的结果再经过一个3×3 Conv-BN layer,然后再和shortcut相加后relu激活,激活结果紧跟一个卷积module,然后再跟着3个3×3 Conv-ReLU-Conv分支分别对应
heatmaps, embeddings 和offset的预测。

Hourglass(沙漏) Network介绍

CornerNet采用 Hourglass Network做骨干网,Hourglass Network是一个全卷积网络,由一个或多个hourglass module组成。每个hourglass module首先通过卷积c层和max pooling layer下采样输入特征层,然后通过一系列的上采样操作和卷积层上采样回原resolution。但是max pooling layer会丢失很多细节,于是增加了skip layer来补上细节。这样Hourglass Network就能同时捕获全局和局部特征。

上图是Hourglass Networks原论文中说说的hourglass module结构示意图,然后这里cornerNet作者对hourglass module做了一些修改,比如下采样时不使用max pooling layer,直接上conv的stride=2等等。其它的细节需要去查看Hourglass Network这篇论文来结合理解了,这里就只了解一些大体思路~

Train

总损失:


其中α, β和γ是三个权重,α, β 设置小些结果更好,都设为0.1,γ=1 。
采用Adm optimize
batchsize 49

Testing Details

使用简单的一些处理从heatmaps,embeddings 和 offsets中生成bounding box,然后通过在corner heatmaps做3×3 max pooling 达到非极大值抑制效果。然后从heatmaps中分别选择top100的top-left和bottom-right corners,通过offset调整他们位置,然后计算top-left和bottom-right corners之间的L1距离来配对,去除不是同一类的或者距离>0.5的。最后去top-left和bottom-right的得分平均值作为检测得分。
图片没有resize到固定大小,而是保留原有分辨率,并且在送入网络前做0padding。同时使用原图和翻转后的图片检测,然后综合检测结果做soft-nms去除冗余,最后之选前100个检测结果。

检测时间: Titan X (PASCAL) GPU上244ms/图片

实验结果

if this article helped you,please dian ge 赞,thank u~

CornerNet论文详解CornerNet: Detecting Objects as Paired Keypoints相关推荐

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

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

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

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

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

    CornerNet: Detecting Objects as Paired Keypoints 论文链接: https://arxiv.org/abs/1808.01244 一. Problem S ...

  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: Detecting Objects as Paired Keypoints(ECCV2018)

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

  6. 【目标检测】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 ...

  7. 目标检测系列(七)——CornerNet:detecting objects as paired keypoints

    文章目录 摘要 1.引言 2.相关工作 3.CornerNet 3.1 概况 3.2 检测角点 3.3 角点的分组 3.4 Corner Pooling 3.5 沙漏网络 论文链接: https:// ...

  8. CornerNet: Detecting Objects as Paired Keypoints

    CornerNet论文链接 Hourglass Network论文链接 一.背景 1.anchor-base缺点 (1).anchor的设置对结果影响很大,不同项目这些超参都需要根据经验来确定,难度较 ...

  9. 目标检测经典文章翻译4:CornerNet:Detecting Objects as Paired Keypoints(CornerNet带读)

    一.番外说明 大家好,我是小P,今天和大家带来目标检测经典论文翻译的CornerNet,该模型是第一个在一阶段网络中不使用anchor机制又能取得不错效果的模型,其后续的CornerNet-Lite版 ...

最新文章

  1. Application,Session,Cookie,ViewState和Cache区别
  2. zabbix 监控 elasticsearch
  3. aix 查看目前java进程_问一个 AIX 的命令 ps -ef|grep java
  4. 乒乓球比赛赛程_国乒今年最后一站比赛延期!赛程缩短比赛地温暖,教练组考察队员...
  5. 远离“数据呆” 对业务的理解和思考永远高于分析技术的选择
  6. Android 实现书籍翻页效果
  7. 计算机组成与设计概念总结
  8. OpenWrt下Transmission下载
  9. 监听软键盘中的删除键
  10. 大胜凭德--入行选领导(转载分析)
  11. 海王夺回王位科学深意:杂种是怎么一步步主宰地球的
  12. CST STUDIO SUITE 2022 软件下载与安装教程
  13. Sigfox的物联网生意经:弱水三千只取一瓢饮
  14. 《英语语法新思维初级教程》学习笔记(六)实义动词与(情态)助动词
  15. Linux下查看输入设备、获取输入事件的详细方法
  16. 海外自媒体多账号运营注意事项看这里!
  17. 软件测试安全性翻译成英语,软件可靠性测试充分性准则,software reliability testing adequacy criterion,音标,读音,翻译,英文例句,英语词典...
  18. 周志华----机器学习2
  19. 大数据工程师需要哪些基础知识?
  20. 什么是android应用程序未安装,Android 解决应用程序未安装的三种方法

热门文章

  1. 关于动物识别论文的阅读笔记——青鳉鱼的个体识别和“面部反转效应”
  2. 西门子200系列PLC通信编程指令讲解
  3. adb inputswipe shell_[Android]通过adb shell input上报命令模拟屏幕点击事件【转】
  4. 获取微信运动 php,微信运动数据抓取(PHP语言)
  5. SX1278 移植笔记
  6. android 卸载内置app,安卓全机型卸载预装软件
  7. Java二维码编码识别
  8. 一次百度网盘的悲惨经历
  9. System.setOut()重定向输出解释
  10. 编译超频Android内核,安卓超频工具apk下载