论文阅读 | CenterNet:Object Detection with Keypoint Triplets
相关链接
论文地址: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的更多相关文章
- 读论文系列:Object Detection CVPR2016 YOLO
CVPR2016: You Only Look Once:Unified, Real-Time Object Detection 转载请注明作者:梦里茶 YOLO,You Only Look Once ...
- [论文阅读] Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks(MTCNN)
相关论文:Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks 概论 用于人脸检测和对 ...
- 读论文系列:Object Detection NIPS2015 Faster RCNN
转载请注明作者:梦里茶 Faster RCNN在Fast RCNN上更进一步,将Region Proposal也用神经网络来做,如果说Fast RCNN的最大贡献是ROI pooling layer和 ...
- 读论文系列:Object Detection ICCV2015 Fast RCNN
Fast RCNN是对RCNN的性能优化版本,在VGG16上,Fast R-CNN训练速度是RCNN的9倍, 测试速度是RCNN213倍:训练速度是SPP-net的3倍,测试速度是SPP-net的3倍 ...
- 读论文系列:Object Detection SPP-net
本文为您解读SPP-net: Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition Motivat ...
- 读论文系列:Object Detection ECCV2016 SSD
转载请注明作者:梦里茶 Single Shot MultiBox Detector Introduction 一句话概括:SSD就是关于类别的多尺度RPN网络 基本思路: 基础网络后接多层featur ...
- 论文阅读笔记五十一:CenterNet: Keypoint Triplets for Object Detection(CVPR2019)
论文链接:https://arxiv.org/abs/1904.08189 github:https://github.com/Duankaiwen/CenterNet 摘要 目标检测中,基于关键点的 ...
- 深度学习论文翻译解析(四):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 ...
- 目标检测(一)RCNN--Rich feature hierarchies for accurate object detection and semantic segmentation(v5)
作者:Ross Girshick,Jeff Donahue,Trevor Darrell,Jitendra Malik 该论文提出了一种简单且可扩展的检测算法,在VOC2012数据集上取得的mAP比当 ...
随机推荐
- python 数据清洗
前言 1. 删除重复 2. 异常值监测 3. 替换 4. 数据映射 5. 数值变量类型化 6. 创建哑变量 统计师的Python日记[第7天:数据清洗(1)] 前言 根据我的Python学习计划: N ...
- [GO]通过结构体生成json
package main import ( "encoding/json" "fmt" ) type IT struct { //一定要注意这里的成员变量的名字 ...
- webstorm最新破解方法
方法来自 Rover12421 大神. 1.从官网下载WebStorm2016.1安装. 2.下载 破解补丁 并解压,记住路径 3.编辑WebStorm安装目录下 bin 文件夹中的 WebStorm ...
- save is not valid without active transaction
org.hibernate.HibernateException: save is not valid without active transaction at org.hibernate.cont ...
- JVM指令集(指令码、助记符、功能描述)
JVM指令集(指令码.助记符.功能描述) 指令码 助记符 功能描述 0x00 nop 无操作 0x01 aconst_null 指令格式: aconst_null 功能描述: null进栈. 指令 ...
- WSAGetOverlappedResult函数
WSAGetOverlappedResult函数 通过WSAWaitForMultipleEvents函数来得到重叠操作完成的通知,那么自然也需要一个函数来查询一下重叠操作的结果,定义如下 BOOL ...
- Android-Handler+Message-消息机制
我的理解是,子线程要和主线程通讯,就需要Handler+Message-消息机制 案例一:倒计时Demo(子线程+Handler+Message) package liudeli.async; imp ...
- JavaScript 类型转换(2)
隐式类型转换 1. var a = "123"; a++; 这时候会将调用Number("123")将"123"转换成数字类型,然后再自增. ...
- putty连接fedora
putty提示“Connection refused” 但可以ping通 经查,解决方法如下: 首先判断是否安装ssh rpm -qa openssh rpm -qa openssh-server 之 ...
- Question | 网站被黑客扫描撞库该怎么应对防范?
本文来自网易云社区 在安全领域向来是先知道如何攻,其次才是防.针对题主的问题,在介绍如何防范网站被黑客扫描撞库之前,先简单介绍一下什么是撞库. 撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对于 ...