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 ...
随机推荐
- Encrypt or Decrypt sensitive data using PLSQL - DBMS_CRYPTO
Oracle 10g introduced Transparent Data Encryption, which is about storing data physically as encrypt ...
- Java并发编程实例--8.在线程中处理未检查异常
java中有两类异常: 已检查异常:这类异常编译器要求开发者必须在代码中通过throws去处理. 例如:IOException和ClassNotFoundException. 未检查异常:不必显式的在 ...
- 海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储
前言 Hik防爆摄像头录像,因为防爆摄像头会有对应的APP软件,与普通的网络摄像头和球机不一样,默认认为它不可以通过web网页配置,所以弄了个来实测确认. 经测试实际上也是可以通过web网页配置 ...
- 项目实战:Qt+ffmpeg摄像头检测工具
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- Python全栈面试题及知识点总结
Python全栈面试题 Python全栈阶段总结:https://github.com/HkwJsxl/PythonFullStack/tree/master/Notes Python基础 基础 逻辑 ...
- 【LeetCode二叉树#15】二叉搜索树的最小绝对差(巩固迭代中序遍历#2)
二叉搜索树的最小绝对差(迭代法中序遍历巩固) 力扣题目链接(opens new window) 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值. 示例: 提示:树中至 ...
- 【Azure 事件中心】Kafka 生产者发送消息失败,根据失败消息询问机器人得到的分析步骤
问题描述 Azure Event Hubs -- Kafka 生产者发送消息存在延迟接收和丢失问题, 在客户端的日志中发现如下异常: 2023-06-05 02:00:20.467 [kafka-pr ...
- 【Azure事件中心】使用Python SDK(Confluent)相关方法获取offset或lag时提示SSL相关错误
问题描述 使用Python SDK(Confluent)相关方法获取offset或lag时, 提示SSL相关错误, 是否有更清晰的实例以便参考呢? 问题解决 执行代码,因为一直连接不成功,所以检查 c ...
- 【Azure 应用服务】Python3.7项目在引用pandas 模块后,部署报错
问题描述 参考"快速入门:在 Linux 上的 Azure 应用服务中创建 Python 应用" 文档,在App Service For Linux环境中部署Python应用,在添 ...
- 固态硬盘使用f2fs作为根分区安装linux
目录 前言 碰到的问题 对策 我的实际操作步骤 0.警告 1. 准备 2. 分区 3. 使用网络安装debian10 4. 备份根分区 5. 修改固态硬盘linux根分区为f2fs 6.恢复备份 7. ...