CenterNet:Corner-Center三元关键点,检测性能全面提升 | ICCV 2019
为了解决CornerNet缺乏目标内部信息的问题,提出了CenterNet使用三元组进行目标检测,包含一个中心关键点和两个角点。从实验结果来看,CenterNet相对于CornerNet只增加了少量推理时延,但带来了将近5个点的AP提升
来源:晓飞的算法工程笔记 公众号
论文: CenterNet: Keypoint Triplets for Object Detection

Introduction

CornerNet将目前常用的anchor-based目标检测转换为keypoint-based目标检测,使用角点对表示每个目标,CornerNet主要关注目标的边界信息,缺乏对目标内部信息的获取,很容易造成误检,如图1所示。为了解决这个问题,论文提出CenterNet,在角点对的基础上加入中心关键点组成三元组进行检测,既能捕捉目标的边界信息也能兼顾目标的内部信息。另外,为了更好地提取特征,论文还提出了center pooling和cascade corner pooling,分别用于更好地提取中心关键点和角点。
Baseline and Motivation
CenterNet以CornerNet为基础,为了检测角点,CornerNet分别预测左上角点和右下角点的热图。另外,为每个角点预测了embedding向量和偏移值,相同目标的角点的embedding向量距离会非常小,偏移值则是对角点进行小范围调整。最后分别选择top-k个左上角点和top-k个右下角点,根据embedding向量距离进行配对,预测框置信度为角点对的置信度均值。

论文对CornerNet的误检率进行了分析,如表1所示,大部分的误检集中在低IoU区域,有32.7%的预测结果与GT的IoU低于0.05,而小目标的误检率高达60.3%,可能的原因是CornerNet无法感知目标内部的信息,这个问题可以通过ROI池化二次分类来弥补,但是计算消耗很大。于是,论文提出高效的替代方案CenterNet,在CornerNet的角点对上再加入一个目标内部点组成三元组,以最低的成本捕捉目标的内部信息。
Object Detection as Keypoint Triplets

CenterNet的整体结构如图2所示,将每个目标表示为中心关键点和角点对。在CornerNet的基础上增加一个中心关键点的热图输出,先按CornerNet的方法获取top-k个预测框,然后使用中心关键点对预测框进行过滤和排序:
- 根据分数选择top-k个中心关键点
- 结合对应的偏移值将中心关键点映射到输入图片
- 定义每个预测框的中心区域,检查中心区域是否包含中心关键点
- 如果中心区域包含中心关键点,保留该预测框,将分数替换为三个关键点的分数均值。如果中心区域不包含中心关键点,则去除该预测框。
中心区域的大小对检测结果有直接的影响,区域过小会导致小目标召回率低,而区域过大则会导致大目标准确率低。为此,论文提出了尺寸可知(scale-aware)的中心区域,能够根据预测框的大小进行调整。定义\(tl_x\)和\(tl_y\)为预测框的左上角点坐标,\(br_x\)和\(br_y\)为预测框的右下角点坐标,\(ctl_x\)和\(ctl_y\)为中心区域的左上角点坐标,\(cbr_x\)和\(cbr_y\)分别为右下角点的坐标,四个点应满足以下关系:

\(n\)为奇数,决定中心区域的尺寸大小,论文对于尺寸小于150和大于150的预测框分别将\(n\)设为3和5。

图3展示了\(n=3\)和\(n=5\)的中心区域,根据公式1计算尺寸可知的中心区域,然后检查中心区域是否包含中心关键点。
Enriching Center and Corner Information
Center pooling
通常,目标的几何中心不一定包含重要的分辨信息,比如人最有辨识度的地方在头部,而几何中心却在人体的中间。为了解决这个问题,论文提出中心池化来提取更丰富的可辨认信息。

如图a所示,主干网络输出特征图后,在判断中心关键点时,取特征图水平方向和垂直方向的最大值之和作为分数,这样能够很好地帮助中心关键点的检测。
Cascade corner pooling

由于角点通常在目标之外,缺少目标的相关信息,CornerNet使用corner pooling来解决这个问题,如图b所示,取边界方向的最大值作为分数,但这会导致角点过于关注边界信息。

为了解决这个问题,需要让角点能够关注目标的内部,cascade corner pooling如图c所示,首先在边界方向找到最大值,然后在边界最大值处向内找到内部最大值,将两个最大值相加作为分数输出,这样角点能够同时关注边界信息和目标信息。

Center pooling和cascade corner polling可通过组合不同方向的corner pooling进行简单实现,如图5所示。需要注意,图5b为cascade top corner pooling模块,只输出左上角点在top方向值,还要加上cascade left corner pooling输出的left方向值。cascade left corner pooling的结构跟图5b类似,只是交换Top pooling和Left pooling的位置。
Training and Inference
Training
CenterNet的输入分辨率为\(511\times 511\),最后的热图大小为\(128\times 128\),完整的网络损失函数为:

\(L^{co}_{det}\)和\(L^{ce}_{det}\)为focal loss,用来训练网络检测角点和中心关键点,\(L^{co}_{pull}\)和\(L^{co}_{push}\)为角点pull损失和push损失,用来最大化和最小化embedding向量的距离,\(L^{co}_{off}\)和\(L^{ce}_{off}\)为L1损失,用来调整角点和中心点的偏移值。
Inference
测试时同时使用原图和水平翻转图片,每个图分别保留70个中心关键点、左上角点和右上关键点来预测,最后综合两个图片的结果进行Soft-nms输出。
Experiments

与SOTA目标检测方法对比。

与CornerNet的错误率优化对比。

对比实验。
CONCLUSION
为了解决CornerNet缺乏目标内部信息的问题,CenterNet使用三元组进行目标检测,包含一个中心关键点和两个角点。从实验结果来看,CenterNet相对于CornerNet只增加了少量推理时延,但带来了将近5个点的AP提升。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

CenterNet:Corner-Center三元关键点,检测性能全面提升 | ICCV 2019的更多相关文章
- CenterNet算法笔记(目标检测论文)
论文名称:CenterNet: Keypoint Triplets for Object Detectiontection 论文链接:https://arxiv.org/abs/1904.08189 ...
- dlib人脸关键点检测的模型分析与压缩
本文系原创,转载请注明出处~ 小喵的博客:https://www.miaoerduo.com 博客原文(排版更精美):https://www.miaoerduo.com/c/dlib人脸关键点检测的模 ...
- PCL—低层次视觉—关键点检测(NARF)
关键点检测本质上来说,并不是一个独立的部分,它往往和特征描述联系在一起,再将特征描述和识别.寻物联系在一起.关键点检测可以说是通往高层次视觉的重要基础.但本章节仅在低层次视觉上讨论点云处理问题,故所有 ...
- PCL—低层次视觉—关键点检测(rangeImage)
关键点又称为感兴趣的点,是低层次视觉通往高层次视觉的捷径,抑或是高层次感知对低层次处理手段的妥协. ——三维视觉关键点检测 1.关键点,线,面 关键点=特征点: 关键线=边缘: 关键面=foregro ...
- 用keras实现人脸关键点检测(2)
上一个代码只能实现小数据的读取与训练,在大数据训练的情况下.会造内存紧张,于是我根据keras的官方文档,对上一个代码进行了改进. 用keras实现人脸关键点检测 数据集:https://pan.ba ...
- keras实现简单CNN人脸关键点检测
用keras实现人脸关键点检测 改良版:http://www.cnblogs.com/ansang/p/8583122.html 第一步:准备好需要的库 tensorflow 1.4.0 h5py ...
- 『关键点检测』CPN:Cascaded Pyramid Network for Multi-Person Pose Estimation
论文连接 网络简介 face++2017年coco keypoint benchmark 数据集冠军的文章,发表于CVPR201 1 提出了一种金字塔型的串接模型,即CPN(cascaded pyr ...
- 『计算机视觉』Mask-RCNN_从服装关键点检测看KeyPoints分支
下图Github地址:Mask_RCNN Mask_RCNN_KeyPoints『计算机视觉』Mask-RCNN_论文学习『计算机视觉』Mask-RCNN_项目文档翻译『计算机视觉』Mas ...
- 机器学习进阶-人脸关键点检测 1.dlib.get_frontal_face_detector(构建人脸框位置检测器) 2.dlib.shape_predictor(绘制人脸关键点检测器) 3.cv2.convexHull(获得凸包位置信息)
1.dlib.get_frontal_face_detector() # 获得人脸框位置的检测器, detector(gray, 1) gray表示灰度图, 2.dlib.shape_predict ...
- OpenCV实战:人脸关键点检测(FaceMark)
Summary:利用OpenCV中的LBF算法进行人脸关键点检测(Facial Landmark Detection) Author: Amusi Date: 2018-03-20 ...
随机推荐
- 【Android】Message、Handler、MessageQueue、Looper 详解
1 前言 Handler 即处理器,常用于跨线程通讯:线程A 和线程 B 拥有同一个 handler 对象,在线程 A 中使用 handler 的 sendMessage() 方法发送消息,在线程 ...
- linux 快速安装LAMP教程
最近学习linux,安装lamp遇到一些问题,记录下来分享一下: ------------------------------------------------------------------- ...
- oracle 使用comment语句添加表注释
使用oracle comment语句可以给表.字段.视图等对象添加备注信息. 大致语法为: comment on TABLE table_name IS '备注内容'; 权限要求: 默认情况下用户只能 ...
- 理解[].forEach.call()并说明为什么要使用[].forEach.call()
[].forEach.call(elems, callback) 相当于: Array.prototype.forEach.call(elems, callback) 又相当于: function(e ...
- 使用go module导入本地包
go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具. 前提 假设我们有learngo和mypackage两个 ...
- Java链接Mysql数据库整理,尽管很简单,但还是分享出来,希望对那些初级朋友有所帮助!!!
Java MySQL 连接 Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL 数据库. Java 连接 MySQL 需要驱动包,最新版下载地址为: ...
- 记一次酣畅淋漓的 K8s Ingress 排错过程(302,404,503,...)
故事开始 第 1 关:[流量重定向到 /] 第 2 关:[应用返回 302,重定向到 /,引入 503 错误] 第 3 关:[静态资源访问遇到 503 问题] 第 4 关:[静态资源访问遇到 403 ...
- 【Azure App Service】当App Service中使用系统标识无法获取Access Token时
问题描述 App Serive上的应用配置了系统标识(System Identity),通过系统标识获取到访问Key Vault资源的Access Token.但这次确遇见了无法获取到正常的Acces ...
- 【Azure API 管理】是否可以将Swagger 的API定义导入导Azure API Management中
问题描述 是否可以将Swagger 的API定义导入导Azure API Management中? 操作步骤 是的,可以通过APIM门户导入单个的API Swagger定义文件.具体步骤如下: 第一步 ...
- 关于Cortex-M3报错解决方法总结:Flash Download failed错误
事情原因:在一次使用ST-LINK v2下载程序时,突然出现 Error:Flash Download Failed-"Cortex-M3"这个错误,显示没有错误,没有警告.芯片型 ...