CenterNet算法笔记(目标检测论文)

论文名称:CenterNet: Keypoint Triplets for Object Detectiontection

论文链接:https://arxiv.org/abs/1904.08189

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


简介

该论文是由中科院,牛津大学以及华为诺亚方舟实验室联合提出。截至目前(2019.04.19),CenterNet应该是one-stage目标检测方法中性能(精度)最好的方法。

传统的基于关键点的目标检测方法例如最具代表性的CornerNet通过检测物体的左上角点和右下角点来确定目标,但在确定目标的过程中,无法有效利用物体的内部的特征,即无法感知物体内部的信息,从而导致该类方法产生了很多误检 (错误目标框)。

本文利用关键点三元组即中心点、左上角点和右下角点三个关键点而不是两个点来确定一个目标,使网络花费了很小的代价便具备了感知物体内部信息的能力,从而能有效抑制误检。另外,为了更好的检测中心点和角点,该论文分别提出了center poolingcascade corner pooling来提取中心点和角点的特征。该方法在MS COCO上,获得了47% AP,超过了所有已知的 one-stage 检测方法,并大幅度领先,其领先幅度至少达4.9%,推理时间略慢(270ms using a 52-layer hourglass backbone and 340ms using a 104-layer hourglass backbone per image)。

Anchor-based缺陷:anchor数量巨大,anchor人工自主设计,anchor与gt不对齐不利于分类

 

Anchor-free缺陷:Cornernet的全局信息获取能力较弱,无法正确group同一物体的两个点如上图,前100个预测框中有很多是长宽比不协调的误检(CornerNet通过embedding vector来group角点,但是该机制通过corner pooling仅依赖物体的边沿,并没有利用物体内部信息,事实证明根据人类vision pattern确定一个物体更多考虑其内部信息),这个问题可以通过互补信息解决——比如aspect ratio(anchor利用宽高比加速回归,但是角点无法)

CenterNet原理

预测框与gt有高iou并且gt的中心在预测框的中心区域,则这个预测框有更高的可能性是准确的,所以通过判断一个proposal的中心区域是否包含一个同类物体的中心点来决定它是否正确。如下图:

 

提出更好的两种检测角点和中心点的机制center poolingcascade corner pooling。center pooling用于预测中心点分支,通过相加特征图水平和垂直方向上最大值获得。cascade corner pooling类似与原来的corner pooling模块,只不过同时获取内部和边沿信息以增加稳定性。

Baseline and Motivation

使用CornerNet作为基准,CornerNet使用heatmaps、embeddings、offsets确定目标的左上右下角点以确定物体位置类别,具体不予阐述,可参考博主另一篇博文CornerNet论文笔记

为了能够量化的分析误检问题,本论文提出了一种新的衡量指标,称为FD (false discovery) rate, 此指标能够很直观的反映出误检情况。FD rate 的计算方式为 FD = 1-AP, 其中 AP 为 IoU 阈值取[0.05 : 0.05 : 0.5]下的平均精度。统计了 CornerNet 的误检情况,如下表table1所示:

 

可以看到,FD = 37.8,而FD5高达32.7,这意味着即使把gt匹配条件限制的很严格:只有那些与 ground-truth 的 IoU< 0.05 的才被认定为错误目标框,每100个预测框中仍然平均有32.7 个错误目标框!而小尺度的目标框其FDs更是达到了60.3!关键问题在于让网络具备感知物体内部信息的能力。一个较容易想到的方法是把 CornerNet 变成一个 two-stage 的方法,即利用 RoI pooling 或 RoI align 提取预测框的内部信息,从而获得感知能力。但这样做开销很大,因此本文提出了用关键点三元组来检测目标,这样使得本文在 one-stage 的前提下就能获得感知物体内部信息的能力。并且开销较小,因为只需关注物体的中心,从而避免了 RoI pooling 或 RoI align 关注物体内部的全部信息。

方法介绍

利用关键点三元组检测物体

 

上图figure2为 CenterNet 的结构图。网络通过 center pooling 和 cascade corner pooling 分别得到 center heatmap 和 corner heatmaps,用来预测关键点的位置。得到角点的位置和类别后,通过 offsets 将角点的位置映射到输入图片的对应位置,然后通过 embedings 判断哪两个角点属于同一个物体,以便组成一个检测框。正如前文所说,组合过程中由于缺乏来自目标区域内部信息的辅助,从而导致大量的误检。为了解决这一问题,CenterNet 不仅预测角点,还预测中心点。对每个预测框定义一个中心区域,通过判断每个目标框的中心区域是否含有中心点,若有则保留,并且此时框的 confidence 为中心点、左上角点和右下角点的confidence的平均,若无则去除,使得网络具备感知目标区域内部信息的能力,能够有效除错误的目标框。

另外中心区域的尺度会影响错误框去除效果。中心区域过小导致很多小尺度的错误目标框无法被去除,而中心区域过大导致很多大尺度的错误目标框无法被去除,因此本文提出了尺度可调节的中心区域定义法如下公式(1)。该方法可以在预测框的尺度较大时定义一个相对较小的中心区域,在预测框的尺度较小时预测一个相对较大的中心区域。如下图figure3所示,n的值根据边界框是否大于150进行设置为3或5。

 

 

丰富中心点和角点特征

 Center pooling:一个物体的中心并不一定含有很强的,易于区分于其他类别的语义信息。例如,一个人的头部含有很强的,易于区分于其他类别的语义信息,但是其中心往往位于人的中部。本文提出了center pooling 来丰富中心点特征。上图figure4(a)为该方法原理,center pooling提取中心点水平方向和垂直方向的最大值并相加,以此给中心点提供所处位置以外的信息。这一操作使中心点有机会获得更易于区分于其他类别的语义信息。Center pooling 可通过不同方向上的 corner pooling 的组合实现。一个水平方向上的取最大值操作可由 left pooling 和 right pooling通过串联实现,同理,一个垂直方向上的取最大值操作可由 top pooling 和 bottom pooling通过串联实现,具体操作如下图figure5(a)所示,特征图两个分支分别经过一个3×3Conv-BN-ReLU做水平方向和垂直方向的corner pooling,最后再相加(图b为Cascade corner pooling模块,注意与图(a)并没有连接)。

Cascade corner pooling: 该模块用于预测物体的左上和右下角点,一般情况下角点位于物体外部,所处位置并不含有关联物体的语义信息,这为角点的检测带来了困难。Figure4(b)为传统做法,称为corner pooling(CornerNet中提出)。它提取物体边界最大值并相加,该方法只能提供关联物体边缘语义信息,对于更加丰富的物体内部语义信息则很难提取到。Figure4 (c)为cascade corner pooling 原理,它首先提取物体边界最大值,然后在边界最大值处继续向内部(图中沿虚线方向)提取最大值,并与边界最大值相加,以此给角点特征提供更加丰富的关联物体语义信息。Cascade corner pooling可通过不同方向上的 corner pooling 的组合实现,如图figure5(b)所示,展示了cascade top corner pooling 原理(博主认为Cascade corner pooling只是为了通过内部信息丰富角点特征,也就是级联不同方向的corner pooling达到内部信息的叠加,最终目的还是要预测角点,所以左上角点通过cascade top corner pooling+cascade left corner pooling实现,右下角点通过cascade right corner pooling+cascade bottom corner pooling实现,figure5(b)只是画出了其中一个module,其他3个module类似,也就是用cascade corner pooling module代替原CornerNet中的Corner Pooling)。

训练和推理

 

损失函数如上式(2),由角点位置损失(focal loss)+中心点位置损失+embedding损失+角点和中心点offsets损失(l1loss)组成,结构与CornerNet相似,只是增加中心点损失项,α,β和γ分别为0.1,,01,1。使用batch size为48在8 Tesla V100 (32GB) GPUs上迭代480K次,前450K次学习率为2.5×10-4,后30K次学习率降为2.5×10-5。代码使用pytorch实现,没有预训练,输出分辨率为511×511,损失函数优化策略为adam。

实验

 

实验结果表明 CenterNet 获得了47%的AP,超过了所有已知的 one-stage 检测方法,并大幅度领先,其领先幅度至少达4.9%。最近目标检测方法在COCO数据集上基本在以百分之零点几的精度往前推进,因为coco数据集难度很高,而CenterNet往前推进了将近5个百分点。同时,CenterNet 的结果也接近two-stage方法的最好结果。值得注意的是,CenterNet 训练输入图片分辨率只有 511X511,在 single-scale下,测试图片的分辨率为原图分辨率(~500),在 multi-scale下,测试图片的分辨率最大为原图分辨率的1.8倍。而two-stage的输入图片的分辨率一般最短边也要>600,甚至更大,比如D-RFCN+SNIP和 PANet。而且本文方法是 Train from scratch。

 

上表Table3为 CenterNet 与 CornerNet 的单独对比,可以看出在coco数据集上CenterNet消除大量误检框,尤其是在小物体上。

速度方面,Two-stage 方法论文中一般是不报的。One-stage方法只在较浅的backbone上如VGG-16上报速度,一般处理一张图片需要十几毫秒,在较深的backbone上速度为慢一些,处理一张图片需要几百毫秒,但还是要比 two-stage 的方法快。本文在一张 Nvidia Tesla P100 显卡上比较了CornerNet和CenterNet,CornerNet511-104 测试速度约为 300ms/帧,而 CenterNet511-104 的测试速度约为340ms/帧,比 baseline 慢约 40ms/帧。但对于更轻backbone,CenterNet511-52的测试速度约为270ms/帧,比CornerNet511-104快约30ms/帧,而且其精度无论是single-scale test 还是 multi-scale test 都比CornerNet511-104高。

 

上图figure6表明CenterNet 与 CornerNet 的对比结果。(a) 和 (b) 表明 CenterNet 能有效去除小尺度的错误目标框。(c) 和 (d) 表明 CenterNet 能有效去除中等尺度和大尺度的错误目标框。(e)是否采用center pooling检测中心点。(f)对比分别使用corner pooling和cascade corner pooling检测角点。

 

上图figure7表明, CenterNet 去除了大量错误的目标框,因此即使在目标框的 confidence 较低的情况下,依然能保证较好的检测结果,上图展示了 confidence 在0.5以上的目标框分布情况。

 

上表Table4 为消融实验。第一行为CornerNet结果。中心点的加入 (CRE) 使得网络提升了2.3% (37.6% vs 39.9%)。对于中心点的检测,本实验使用传统的卷积操作进行。其中小尺度目标提升的最多,提升了4.6% (18.5% vs 23.1%),而大尺度目标几乎没有发生变化。这说明小尺度的错误目标框被去除的最多,这是因为从概率上讲,小尺度目标框由于面积小更容易确定其中心点,因此那些错误的小目标框不在中心点附近的概率更大,因此去除的最多。Center pooling (CTP) 的加入使网络进一步提升了0.9%。值得注意的是,大尺度目标提升了1.4% (52.2% vs 53.6%),小目标和中等目标也得到了一定的提升,这表明 center pooling 能够使中心点获得更易于区分于其他类别的语义信息Cascade corner pooling (CCP) 使得使网络性能进一步提升。第二行的试验中,我们将 CornerNet 的corner pooling 替换成了 cascade corner pooling,性能提升了0.7% (37.6% vs 38.3%)。可以观察到大目标的 AP 没有发生变化,AR 却提升了1.8% (74.0% vs 75.8%), 这说明 cascade corner pooling 通过加入了物体内部信息能够感知更多的物体,但是由于大目标由于面积过大,使其容易获得较明显的内部特征而干扰了边缘特征,因此使得预测出的目标框位置不精确。当结合了 CRE 后,由于 CRE 能够有效去除错误目标框,因此使大目标框的AP得到了提升 (53.6% vs 55.8%).

 

上表Table5 为错误实验分析。将检测的中心点用真实的中心点代替,实验结果表明中心点的检测准确度还有很大的提升空间。同时该结果还表明要想更进一步的提升检测精度,需要进一步提升中心点的检测精度。

总结

这篇CenterNet使用关键点三元组(左上,右下,中心点)来确定一个目标,与CornerNet相比增加一个中心点来消除误检框,故事点在于“网络具备感知物体内部信息的能力”,并在最后作者认为可以移植到其余anchor或anchor-free的检测器上,博主比较同意作者所提观点,比如目前潮流的attention机制就是增强物体之间的relation或者增强物体内部语义信息。与此相比,原CornerNet团队提出的CornerNet-Lite中的CornerNet-Saccade将原任务分为两个阶段,第一阶段粗检利用attention maps找到可能存在目标的中心点,第二阶段精检crop区域的所有目标,此两阶段方法与本文思想类似,都是通过加入中心点这一限定增强检测器性能。

转载于:https://www.cnblogs.com/gawain-ma/p/10882113.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elementUI的container布局设置全屏宽度

进用element UI的 container 布局&#xff0c;发现不能全屏铺满 添加了一行代码&#xff1a; .el-container{height:100%;padding:0;margin:0;width:100%;}发现高度占满全屏&#xff0c;但是宽度还没有 继续给 html,body加了 width&#xff1a;100%&#xff1b;还是没有任何…

CSS border-radius边框圆角

在CSS3中提供了对边框进行圆角设定的支持&#xff0c;可对边框1~4个角进行圆角样式设置。 目录 1. 介绍 2. value值的格式和类型 3. border-radius 1~4个参数说明 4. 在线示例 1. 介绍 1.1 圆角属性 CSS3提供了5种圆角属性 border-radius &#xff1a;同时设置4个边框的…

element实现动态路由+面包屑

要掌握&#xff1a;localStorage&#xff0c;组件封装 ​​​​ emm&#xff0c;第一次上传视频转gif的图片&#xff0c;效果不咋好。。。 视频转gif 的软件连接 http://www.zxt2007.com/downloads.html 找到一个可以截取部分视频制作gif图的软件https://soft.onlinedo.cn/gif…

Oracle最新的Java 8更新破坏了您的工具-它是如何发生的?

如果您最近一直在关注Java世界的消息&#xff0c;那么您可能听说过Oracle发布的最新Java 8构建&#xff0c;Java 8u11&#xff08;和Java 7u65&#xff09;引入了错误并破坏了一些流行的第三方工具&#xff0c;例如ZeroTurnaround的JRebel&#xff0c;Javassist&#xff0c;Goo…

为什么选择Dojo - 记Dojo中文博客正式开张

公告栏里写到&#xff1a;Dojo的高门槛一旦跨过&#xff0c;必将别无所求。含义有二&#xff1a;第一&#xff0c;Dojo难学&#xff1b;第二&#xff0c;Dojo很强大。 这也揭示了本博客的目标&#xff1a;帮助大家用好Dojo这个优秀的Ajax框架。 在回答为什么选择Dojo之前&#…

ExtJS 4.2 第一个程序

本篇介绍如何创建一个ExtJS应用程序。并通过创建目录、导入文件、编写代码及分析代码等步骤来解释第一个ExtJS程序。 目录 1. 创建程序 1.1 创建目录建议 1.2 实际目录 1.3 index.html 1.4 运行图 2. 代码分析 2.1 Ext.onReady() 2.2 Ext.create() 1. 创建程序 1.1 创建目录…

ZooKeeper,策展人以及微服务负载平衡的工作方式

Zookeeper如何确保每位工人都能愉快地从工作委托经理那里得到一些工作。 Apache ZooKeeper是注册&#xff0c;管理和发现在不同计算机上运行的服务的工具。 当我们必须处理具有许多节点的分布式系统时&#xff0c;它是技术堆栈中必不可少的成员&#xff0c;这些节点需要知道其…

elementUI清空弹框中的表单数据

点击此处直达应用场景示例 官网&#xff1a;https://element.eleme.cn/#/zh-CN/component/form 补充&#xff1a;改变表头颜色&#xff1a; <el-table :data"tableData" border style"width: 100%" :header-cell-style"{background:#d3dce6,col…

.Net4.0 Parallel编程(三)Data Parallelism下

在上篇文章中介绍了如何Break、Stop循环&#xff0c;以及如何定义线程局部变量。在本文中介绍如何在外部去取消循环、以及异常的处理。 Cancel 在并行的循环中支持通过传递ParallelOptions参数中的CancellationToken进行取消循环的控制&#xff0c;我们可以CancellationTokenSo…

根据可视窗口判断面板向上还是向下展开

本demo以element-ui框架为视图模板~ HTML代码 JS代码 CSS代码 转载于:https://www.cnblogs.com/dreamsqin/p/10885502.html

编写JUnit测试的另一种方法(Jasmine方法)

最近&#xff0c;我为一个小型个人项目编写了很多Jasmine测试。 我花了一些时间才终于感到正确地完成了测试。 此后&#xff0c;当我切换回JUnit测试时&#xff0c;我总是很难过。 出于某种原因&#xff0c;JUnit测试不再那么好&#xff0c;我想知道是否有可能以类似于Jasmine的…

解决vue项目在ie浏览器中不显示的问题

安装 “babel-polyfill” npm install babel-polyfill --save-dev 或者 cnpm install babel-polyfill --save-dev在入口 main.js 文件引入&#xff1a;import babel-polyfill在 build 文件下的 webpack.base.conf.js 文件中修改代码&#xff1a; entry: {app: ["babel-p…

清空表单时出现问题

打开页面时报警告&#xff1a; 解决办法&#xff1a; &#xff08;1&#xff09;npm i default-passive-events -S &#xff08;2&#xff09;main.js中加入&#xff1a;import ‘default-passive-events’ 参考&#xff1a;https://www.jianshu.com/p/23850d4cade8 出现原…

如何在JSF中实现自定义密码强度指示器

使用JavaScript验证密码强度是一项常见任务。 在本文中&#xff0c;我将展示如何向基于JSF的Web应用程序添加密码强度指示器。 的 PrimeFaces中的密码组件已经具有密码强度的反馈指示符&#xff0c;但是它有两个主要缺点&#xff1a; 反馈指示器没有响应&#xff08;固定宽度…

关于vue打包的问题

一、vue-cli2 二、vue-cli3 一、vue-cli2 错误提示&#xff1a; npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! hewelry1.0.0 build: node build/build.js npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the hewelry1.0.0 build script. npm ERR! This is prob…

html笔记(一)html4+css2.0、css基础和属性、盒模型

w3c 官网 这里是 html4 的内容 大标题小节一、关于HTML1. 基本语法2. HTML常用标签3. 相对路径和绝对路径二、css基础1. 表单元素2. 创建样式表3. css语法4. css选择器三、css的相关属性1. 列表 li 独有的属性list-style2. 边框属性border3. overflow4. 浮动 float 遇到的坑5.…

返回顶部小火箭

代码如下&#xff1a; <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title></title><style>body {width: 2000px;}.top{position: fixed;right:50px;bottom:100px;display: none;}</style&…

最佳5本Java性能调优书籍–精选,必读

为什么Java开发人员应该阅读有关性能调优的书&#xff1f; 当我很久以前第一次面对这个问题时&#xff0c;我以为以后会做&#xff0c;但是我很长一段时间都没有回过头来。 仅当我在用Java编写的任务关键型服务器端财务应用程序中遇到严重的性能和可伸缩性问题时&#xff0c;我…

html笔记(三)html5+css3(html5、css3、文字相关)

W3school在线教程 html5css3基本不兼容ie678。 大标题小节一、html51. html4 和 html5 的区别2. 标签语义化3. 智能表单的使用和规范二、css3选择器1. 属性选择器2. 结构性伪类选择器&#xff08;层级选择器/符&#xff09;3. UI状态性伪类选择器4. 相邻兄弟选择器5. 其他选择…