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 ...
随机推荐
- Oracle Linux6下安装Oracle 12c实战
经过N次安装尝试吐血总结,希望对大家有所帮助,同时做下记录备忘: 总结:安装前的准备工作是关键!!!Check and recheck! 参考:http://docs.oracle.com/cd/E1 ...
- git tag 常用操作-创建、查看、推送、删除等
创建tag 1.创建tag: git tag -a v0.0.1 或者 对某一提交的信息打tag标签,末尾是一个commit id git tag -a v0.0.1 cc16905 2.创建tag带 ...
- [BUUCTF][WEB][极客大挑战 2019]Upload 1
打开靶机url,看到一个页面可以上传文件 上传一个图片试一下,发现上传的路径是 http://a7661b03-4852-41de-9ea4-d48c47cb50f0.node4.buuoj.cn:8 ...
- Elasticsearch系列之-查询
Elasticsearch之-查询 查询分类: 基本查询:使用es内置查询条件进行查询 组合查询:把多个查询组合在一起进行复合查询 过滤:查询的同时,通过filter条件在不影响打分的情况下筛选数据 ...
- centos docker服务问题
概述 docker的应用版本正式上线,结果一上线就出各种幺蛾子. 本文档主要介绍centos系统安装docker和启动的问题解决方法. 环境 docker registry:2 centos 6 &a ...
- 【Azure Developer】如何通过Azure REST API 获取到虚拟机(VM)所使用的公共IP地址信息
问题描述 如何通过Azure REST API 获取到虚拟机(VM)所使用的公共IP地址信息 问题解答 由于直接获取到的虚拟机信息(Virtual Machines - Get)中,并不会包含虚拟机的 ...
- 图像识别算法--VGG16
前言:人类科技就是不断烧开水(发电).丢石头(航天等).深度学习就是一个不断解方程的过程(参数量格外大的方程) 本文内容: 1.介绍VGG16基本原理 2.VGG16 pytorch复现 图像识别算法 ...
- Java 对象数组题目 + 改进(封装方法)
1 /** 2 * 3 * @Description 4 * @author Bytezero·zhenglei! Email:420498246@qq.com 5 * @version 6 * @d ...
- apt-get upgrade 和apt-get dist-upgrade区别
kali linux系统或者 debian等系统 以及centos 在系统升级后经常会出现系统无法启动,或者启动之后GUI功能没有的问题: 笔记: 区别这两种用法 apt-get update ...
- Zabbix6.0使用教程 (四)—zabbix6.0从源代码安装
接上篇zabbix部署安装前置要求,本期我们将先讲讲如何从源代码安装zabbix6.0,还在为如何安装使用zabbix的小伙伴可以仔细看看. 一. 安装Zabbix守护进程 1 下载源代码压缩包 前往 ...