相关链接

论文地址:https://arxiv.org/abs/1904.08189

代码链接:https://github.com/Duankaiwen/CenterNet

概述

CenterNet由中科院、牛津大学和华为诺亚方舟实验室联合提出,发展了以CornerNet为代表的基于关键点的目标检测方法。其主要思想在于,利用关键点的三元组(中心点、左上角点和右下角点)来确定一个目标,有效利用了目标内部信息。为了更好地提取中心点和角点特征,作者提出了center pooling和cascade corner pooling。CenterNet在MS COCO数据集上的AP高达47%,大幅领先于其他SOTA算法。

介绍

CornerNet利用一对角点(左上角和右下角)来确定目标,算法对目标的边缘信息很敏感,同时不知道哪组角点构成目标,所以经常产生一些错误的bbox,很多错误可以通过简单的补充信息过滤掉(比如宽高比)。考虑到如果bbox与gt有很高的IoU,那么中心区域的关键点的类别与之类别相同的概率会很大,反之亦然。在推理过程中,在将候选区生成为一对角关键点之后,通过检查同一类的中心关键点是否位于其中心区域来确定是否为目标。

为了提取中心关键点和角点的特征,作者提出了center pooling和cascade corner pooling。测试时间:Hourglass-52为270ms per image,Hourglass-104为340ms per image。

CenterNet

CenterNet使用CornerNet作为baseline。

CornerNet生成两个热图:左上角的热图和右下角的热图。热图表示不同类别的关键点的位置,并为每个关键点分配一个信任评分。此外,它还预测每个角点的embedding和offsets。embedding用于识别两个角点是否来自同一个对象。offsets学习将角点从heatmap重新映射到输入图像。为了生成目标的bbox,根据置信得分选取top-k的左上角点和右下角点,利用它们的embedding向量的距离来确定角点对是否来自同一目标(如果距离小于阈值则生成bbox),产生的bbox的置信分是角点对的平均分。

对CornerNet的分析:

FD(false discovery)的定义—— FD=1-AP

解决方案:引入center information。

CenterNet的网络结构:

产生top-k的bbox方式与CornerNet相同。过滤错误bbox的步骤:(1)根据置信分选取top-k的中心关键点(2)使用对应的offsets将中心关键点重新映射到输入图像(3)定义中心区域判断中心关键点是否落在该区域内。bbox的置信分取三点的平均值。

显然,中心区域的大小对检测结果影响很大。文中提出了一种scale-aware中心区域,倾向于小的bbox产生相对较大的中心区域,而大的bbox产生相对较小的中心区域。假设bbox的左上角点坐标为(tlx,tly),右下角点坐标为(brx,bry),中心区域的定义为:

其中n为奇数(文中n的设置:bbox的尺度小于150时,n取3;否则取5)。

Center pooling:累加水平方向和垂直方向的最大值

Corner pooling:累加边缘的最大值

Cascade pooling:累加边缘方向和内部方向的最大值

corner pooling使得角点对边缘信息很敏感,所以作者提出了cascade corner pooling:首先沿边缘方向找到边缘最大值,然后沿边缘最大值的方向寻找内部最大值,最后累加最大值。

训练和测试:

Pytorch

输入图像大小:511*511

heatmap大小:128*128

优化:Adam

损失函数:

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

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

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

整体损失函数:

GPU:8个Tesla V100

batch size:48

迭代:0-450k(lr=2.5e-4),450k-480k(lr=2.5e-5)

测试:单尺度测试输入原始图像和水平翻转的图像;多尺度测试时输入原始图像和水平翻转的图像(分辨率0.6,1,1.2,1.5,1.8)。选取top 70的关键点。采用Soft-NMS。选择top-100 bbox作为最终检测结果。

实验

在COCO上的检测结果:

误检率对比:

推理速度:

同样使用NVIDIA Tesla P100 GPU,CornerNet511-104为300ms/img,而CenterNet511-104是340ms/img。CenterNet511-52为270ms/img。

Ablation study:

中心区域、center pooling和cascade corner pooling

中心关键点有多重要?作者把预测的中心关键点替换为gt的中心,AP明显提升:

记得ExtremeNet也利用了中心关键点的信息,为什么效果没这篇的好?(可能是没有加入类别信息?)

论文阅读 | CenterNet:Object Detection with Keypoint Triplets的更多相关文章

  1. 读论文系列:Object Detection CVPR2016 YOLO

    CVPR2016: You Only Look Once:Unified, Real-Time Object Detection 转载请注明作者:梦里茶 YOLO,You Only Look Once ...

  2. [论文阅读] Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks(MTCNN)

    相关论文:Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks 概论 用于人脸检测和对 ...

  3. 读论文系列:Object Detection NIPS2015 Faster RCNN

    转载请注明作者:梦里茶 Faster RCNN在Fast RCNN上更进一步,将Region Proposal也用神经网络来做,如果说Fast RCNN的最大贡献是ROI pooling layer和 ...

  4. 读论文系列:Object Detection ICCV2015 Fast RCNN

    Fast RCNN是对RCNN的性能优化版本,在VGG16上,Fast R-CNN训练速度是RCNN的9倍, 测试速度是RCNN213倍:训练速度是SPP-net的3倍,测试速度是SPP-net的3倍 ...

  5. 读论文系列:Object Detection SPP-net

    本文为您解读SPP-net: Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition Motivat ...

  6. 读论文系列:Object Detection ECCV2016 SSD

    转载请注明作者:梦里茶 Single Shot MultiBox Detector Introduction 一句话概括:SSD就是关于类别的多尺度RPN网络 基本思路: 基础网络后接多层featur ...

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

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

  8. 深度学习论文翻译解析(四):Faster R-CNN: Down the rabbit hole of modern object detection

    论文标题:Faster R-CNN: Down the rabbit hole of modern object detection 论文作者:Zhi Tian , Weilin Huang, Ton ...

  9. 目标检测(一)RCNN--Rich feature hierarchies for accurate object detection and semantic segmentation(v5)

    作者:Ross Girshick,Jeff Donahue,Trevor Darrell,Jitendra Malik 该论文提出了一种简单且可扩展的检测算法,在VOC2012数据集上取得的mAP比当 ...

随机推荐

  1. redhad系统配置daocloud加速器

    一.注册daocloud账户网址:http://www.daocloud.io/ 配置加速器需要在daocloud上注册一个用户.注册之后,登陆进去可以看到[加速器]选项. 点击加速器选项之后,就可以 ...

  2. [GO]panic的应用

    对于异常的处理,error表示的是不太致使的错误,但是如果遇到数组越界或者是空指针这种会导致程序崩溃无法恢复的错误时,就需要使用以panic了 我们不应该使用panic去报error的错误,而是只使用 ...

  3. hadoop理解

    Hadoop的主核心有2部分: 1,HDFS 2, MapReduce 首先: HDFS HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),它是一个 ...

  4. Linux下oracle定时备份

    1. 设置数据库空表可导出(oracel11g) 用PL/SQL登录数据库(或者其他工具) 执行: select 'alter table '||table_name||' allocate exte ...

  5. FileAppender

    http://logback.qos.ch/manual/appenders.html#FileAppender <configuration> <appender name=&qu ...

  6. OpenSSH免密码登录SSH2

    SSH2免密码登录OpenSSHhttp://blog.csdn.net/aquester/article/details/23836299 两个SSH2间免密码登录http://blog.csdn. ...

  7. 用Java实现多线程服务器程序

    一.Java中的服务器程序与多线程 在Java之前,没有一种主流编程语言能够提供对高级网络编程的固有支持.在其他语言环境中,实现网络程序往往需要深入依赖于操作平台的网络API的技术中去,而Java提供 ...

  8. Transaction And Lock--由外键导致的死锁

    死锁发生情况:1. 存在表A和表B,表A的主键是表B的外键2.事务A在表A上申请到X锁以修改表A中数据和删除表A中的数据,然后需要检查表B中的数据是否满足外键约束,从而需要Range锁来锁住表B3.事 ...

  9. solr7.3集群搭建

    solr集群搭建 原博客:https://blog.csdn.net/gdsgdh308227363/article/details/81004706 注意,在搭建solr集群前,建议最好有一个sol ...

  10. sqlserver 事务日志已满解决方案

    sqlserver 事务日志已满解决方案 可参考这篇博客: https://www.cnblogs.com/strayromeo/p/6961758.html 一.删除日志文件:(不建议) 二.手动收 ...