论文地址:https://arxiv.org/abs/1808.01244v1

论文代码:https://github.com/umich-vl/CornerNet

概述

CornerNet是一篇发表在ECCV 2018的目标检测论文。有别于主流目标检测算法基于anchor box的思想,CornerNet将关键点检测用于目标检测,通过检测目标区域的左上角和右下角这两个关键点来获取预测框。CornerNet创新性强,而且检测效果很好,在MS COCO数据集上的AP达到42.1%。

CornerNet介绍

Anchor box的使用使得单阶段算法具有与两阶段算法相当的检测效果,但是anchor box(1)数目巨大,而且容易造成正负样本不平衡,训练速度慢(2)引入了许多超参数设置和结构设计。受Newell等人在多人姿态估计上下文关联embedding的启发,作者提出了CornerNet,将一个目标检测为一个关键点对(边界框的左上角和右下角),使用单个卷积神经网络来预测heatmap(左上角、右下角),以及每个角点的embedding vector,该向量用于组合同一目标的角点对。CornerNet的大体流程如下图所示:

如图2所示,不同目标的角点没有相似特征。那么,怎样确定边界框的角点呢?

文中提出了一种新的池化层来解决这个问题。注意到目标的左上角的角点向右可以得到目标的顶部特征信息,向下可以得到目标的左侧特征信息,右下角的角点类似。作者提出Corner pooling的池化方式来获得这些信息。以左上角的角点为例,Corner pooling的示意图如下:

具体计算示例如图6所示,简单来讲,左上角的Corner pooling就是自右向左扫描的水平max-pooling、自底向上扫描的垂直max-pooling,将两个结果做元素和。右下角的池化类似。

网络结构

CornerNet的网络结构如下:

CornerNet使用Hourglass网络作为backbone提取特征,之后的两个预测模块分别用于预测左上角和右下角的角点,每个预测模块首先是一个Corner pooling层,其后有三个分支:heatmaps、embeddings和offsets。

Heatmaps就是角点位置的预测,一共两组分别表示左上角和右下角,每组有C个通道(C为类别数目,不含背景类),大小为H*W,每个通道都是二进制mask用于表示该类的角点的位置。注意到对于每个角点,只有ground-truth处是正,其余所有位置都是负的。但是实际上如果一对false角点距离ground-truth很近,那么它仍然可以生成与ground-truth重叠程度很大的框,如图5所示。所以用同样的权值惩罚负位置是不合理的。

因此,文中提出了focal loss的变体来处理heatmap损失:

其中,pcij是类别c在位置(i, j)的score,ycij是非标准化高斯增强的ground-truth,N是图像中目标数,α和β是超参数(实验中α设为2,β 设为4)。

Offsets则是位置偏移。下采样的使用使得输出尺寸小于原始图像尺寸,假设下采样因子为n,则图像中(x, y)映射到Heatmaps的([x/n], [y/n])。取整计算会导致精度丢失,使用offsets来更准确地进行Heatmaps到输入图像的映射。

训练过程中使用smooth L1损失,即:

Embedding用于确定左上角和右下角的一对角点是否来自同一个目标边界框。Embedding产生每个角点的embedding vector,如果左上角和右下角的一对角点属于同一个目标,那么它们embedding vector之间的距离应该很小。该部分的训练通过如下两个损失函数实现,其中(4)用于缩小属于同一目标的两个角点的embedding向量的距离,(5)用来放大不属于同一目标的两个角点的embedding向量的距离:

预测模块的详细结构如下图所示:

第一部分采用residual block结构,首先使用两个128通道的3*3卷积模块处理特征,然后使用corner pooling层。将池化特征输入256通道的3*3的conv-BN层,加上shortcut,然后通过卷积模块和conv-ReLU-conv层产生输出结果。

实验

网络随机初始化,没有在任何数据集上进行预训练。训练过程中,输入图像尺度为511*511,输出为128*128,。采用随机水平翻转、随机缩放、随机裁剪、随机色彩抖动等数据扩增技术。

Full loss如下:

其中,α和β都设为0.1,γ设为1。

测试细节:在角点Heatmaps上使用3*3 max-pooling,使用NMS后处理产生100个左上和100个右下角点。去掉Embedding vector的距离大于0.5或者包含不同类别的角点对。检测分数为左上角和右下角的平均得分。不对图像resize,使用0填充的方式产生指定大小的图像作为输入。同时应用原始图像和翻转图像进行测试,并结合二者的检测结果,使用softmax抑制冗余,仅保留前100个预测框。

实验结果

可见,使用corner pooling使得AP提升了两个点。

采用基于目标的半径衰减损失效果明显优于固定半径和不使用衰减惩罚损失的方法。

Heatmaps和offsets的引入大大提升了AP值。

CornerNet511的多尺度模型在COCO数据集上的AP达到42.1。

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints的更多相关文章

  1. [论文理解] CornerNet: Detecting Objects as Paired Keypoints

    [论文理解] CornerNet: Detecting Objects as Paired Keypoints 简介 首先这是一篇anchor free的文章,看了之后觉得方法挺好的,预测左上角和右下 ...

  2. 【论文阅读】CornerNet: Detecting Objects as Paired Keypoints

    以下内容将介绍ECCV2018的一篇目标检测的文章<CornerNet: Detecting Objects as Paired Keypoints>.该文章讲述了一个老子就是不用anch ...

  3. CornerNet: Detecting Objects as Paired Keypoints

    CornerNet是一种anchor free的目标检测方法,不需要设置anchor,而是通过检测关键点(Keypoints),即目标的左上角(Top-Left Corners)和右下角(Bottom ...

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

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

  5. 【CV论文阅读】Detecting events and key actors in multi-person videos

    论文主要介绍一种多人协作的视频事件识别的方法,使用attention模型+RNN网络,最近粗浅地学习了RNN网络,它比较适合用于处理序列的存在上下文作用的数据. NCAA Basketball数据集 ...

  6. 论文阅读笔记五十一:CenterNet: Keypoint Triplets for Object Detection(CVPR2019)

    论文链接:https://arxiv.org/abs/1904.08189 github:https://github.com/Duankaiwen/CenterNet 摘要 目标检测中,基于关键点的 ...

  7. 论文阅读笔记五十三:Libra R-CNN: Towards Balanced Learning for Object Detection(CVPR2019)

    论文原址:https://arxiv.org/pdf/1904.02701.pdf github:https://github.com/OceanPang/Libra_R-CNN 摘要 相比模型的结构 ...

  8. 论文阅读笔记四十九:ScratchDet: Training Single-Shot Object Detectors from Scratch(CVPR2019)

    论文原址:https://arxiv.org/abs/1810.08425 github:https://github.com/KimSoybean/ScratchDet 摘要 当前较为流行的检测算法 ...

  9. 论文阅读笔记四十四:RetinaNet:Focal Loss for Dense Object Detection(ICCV2017)

    论文原址:https://arxiv.org/abs/1708.02002 github代码:https://github.com/fizyr/keras-retinanet 摘要 目前,具有较高准确 ...

随机推荐

  1. 回顾2017系列篇(五):人工智能给UI/UX设计带来的影响

    如今,我们正处于设计新纪年的转折点上,用机器人和人工智能方面的专家说法表达即“The end is near(终点近了)”.但这并不意味着世界末日,但未来机器人将毫无疑问地接管一部分目前被人类占领的工 ...

  2. Google Tango Java实例程序

    Java API:https://developers.google.com/tango/apis/java/reference/ 1. java_augmented_reality_example ...

  3. 使用JavaScript获取CSS伪元素属性

    我们可以通过DOM元素的 style 属性获取基本的CSS样式值, 但怎么获取CSS伪元素属性呢? 如下 // 获取 .element:before 的 color 值 var color = win ...

  4. Python3常见Exception

    异常                                     描述BaseException                    新的所有异常类的基类Exception        ...

  5. jmeter阶梯式加压测试

    转自:https://www.cnblogs.com/imyalost/p/7658816.html#4226560 性能测试中,有时需要模拟一种实际生产中经常出现的情况,即:从某个值开始不断增加压力 ...

  6. C# 字符,字符串和文本处理。

    1. 字符: 在.net中 字符是表示成16为Unicode代码值.每个字符都是System.Char结构(一个值类型)的实例. public class StringTempte { public ...

  7. Android-读取操作系统通话记录并/拨打电话/发送短信/复制号码到拨号盘

    apps目录的contacts应用(有读取通话记录功能),是访问provider目录的provider.contacts应用(有暴露通话记录),所以要阅读Android操作系统源码-->pack ...

  8. IE8下window.open 二次无法加载页面

    我原先的IE是系统默认自带的IE7,升级到IE8之后,就出现了此现象: 打开一个窗口(window.open方式)后,再打开时,新窗口的页面显示空白,无法加载其内容.关闭ie后,重新偿亦是如此,第一次 ...

  9. [转载].NET开发常用的10条实用代码

    1.读取操作系统和CLR的版本 OperatingSystem os = System.Environment.OSVersion; Console.WriteLine(“Platform: {0}” ...

  10. 相当郁闷的问题,TabHost选项卡标签图标始终不出现?

    在学习Android TabHost布局过程中,很多教程告诉我,这样来显示选项卡标签的图标和文字: TapSpec spec1 = tabHost.newTabSpec("tab 1&quo ...