【AICon】硅谷视野+中国实践,汇聚全球顶尖技术的 AI 科技盛会 >>> 了解详情
写点什么

真 Anchor Free 目标检测:CenterNet 详解

  • 2019-07-14
  • 本文字数:3240 字

    阅读完需:约 11 分钟

真Anchor Free目标检测:CenterNet详解

SIGAI 特约作者 Johnny

研究方向:计算机视觉


最近 anchor free 的目标检测方法很多,尤其是 centernet,在我心中是真正的 anchor free + nms free 方法,这篇 centernet 对应的是"Objects as Points",不是另外一篇"CenterNet- Keypoint Triplets for Object Detection"。作者 xinyi zhou 也是之前 ExtremeNet 的作者。


CenterNet 厉害的地方在于他不仅可以做 2D 目标检测,只需要少量扩展就可以迁移到 3D 目标检测和人体关键点检测上。


引言

CenterNet 属于 anchor-free 系列的目标检测,相比于 CornerNet 做出了改进,使得检测速度和精度相比于 one-stage 和 two-stage 的框架都有不小的提高,尤其是与 YOLOv3 作比较,在相同速度的条件下,CenterNet 的精度比 YOLOv3 提高了 4 个左右的点。



在 coco 上用 resnet18 作为 backbone 可以达到精度 28.1 速度 142FPS,用 hourglass 做 backbone 可以达到精度 45.1 速度 1.4FPS。可谓是实现了速度和精度的平衡。

CenterNet 相比 One Stage 和 Two Stage 算法的区别

那 CenterNet 相比于之前的 one-stage 和 two-stage 的目标检测有什么区别?


区别主要来自两个方面


1)CenterNet 没有 anchor 这个概念,只负责预测物体的中心点,所以也没有所谓的 box overlap 大于多少多少的算 positive anchor,小于多少算 negative anchor 这一说,也不需要区分这个 anchor 是物体还是背景 - 因为每个目标只对应一个中心点,这个中心点是通过 heatmap 中预测出来的,所以不需要 NMS 再进行来筛选。


2)CenterNet 的输出分辨率的下采样因子是 4,比起其他的目标检测框架算是比较小的(Mask-Rcnn 最小为 16、SSD 为最小为 16)。之所以设置为 4 是因为 centernet 没有采用 FPN 结构,因此所有中心点要在一个 Feature map 上出,因此分辨率不能太低。


看下图可以比较直观的看出 centernet 的建模方法



总体来说,CenterNet 结构十分简单,直接检测目标的中心点和大小,是真正意义上的 anchor-free。

网络结构

论文中 CenterNet 提到了三种用于目标检测的网络,这三种网络都是编码解码(encoder-decoder)的结构:


  1. Resnet-18 with up-convolutional layers : 28.1% coco and 142 FPS

  2. DLA-34 : 37.4% COCOAP and 52 FPS

  3. Hourglass-104 : 45.1% COCOAP and 1.4 FPS


每个网络内部的结构不同,但是在模型的最后输出部分都是加了三个网络构造来输出预测值,默认是 80 个类、2 个预测的中心点坐标、2 个中心点的偏置。


三种网络结构如下图所示



在整个训练的流程中,CenterNet 学习了 CornerNet 的方法。对于每个标签图(ground truth)中的某一类,我们要将真实关键点(true keypoint) 计算出来用于训练,中心点的计算方式如下



,对于下采样后的坐标,我们设为



,其中 R 是文中提到的下采样因子 4。所以我们最终计算出来的中心点是对应低分辨率的中心点。


然后我们对图像进行标记,在下采样的[128,128]图像中将 ground truth point 以下采样的形式,用一个高斯滤波



来将关键点分布到特征图上。

损失函数

中心点的损失函数如下:



其中 α 和 β 是 Focal Loss 的超参数, N 是图像 I 的的关键点数量,用于将所有的 positive focal loss 标准化为 1。在这篇论文中 α 和 β 分别是 2 和 4。这个损失函数是 Focal Loss 的修改版,适用于 CenterNet。


看一下官方的这张图可能有助于理解:传统的基于 anchor 的检测方法,通常选择与标记框 IoU 大于 0.7 的作为 positive,相反,IoU 小于 0.3 的则标记为 negative,如下图 a。这样设定好 box 之后,在训练过程中使 positive 和 negative 的 box 比例为 1:3 来减少 negative box 的比例(例如 SSD 没有使用 focal loss)。


而在 CenterNet 中,每个中心点对应一个目标的位置,不需要进行 overlap 的判断。那么怎么去减少 negative center pointer 的比例呢?CenterNet 是采用 Focal Loss 的思想,在实际训练中,中心点的周围其他点(negative center pointer)的损失则是经过衰减后的损失(上文提到的),而目标的长和宽是经过对应当前中心点的 w 和 h 回归得到的:


目标中心的偏置损失

因为上文中对图像进行了 R=4 的下采样,这样的特征图重新映射到原始图像上的时候会带来精度误差,因此对于每一个中心点,额外采用了一个 local offset 去补偿它。所有类 c 的中心点共享同一个 offset prediction,这个偏置值(offset)用 L1 loss 来训练:



这个偏置损失是可选的,我们不使用它也可以,只不过精度会下降一些。

目标大小的损失

我们假设 (X1(k), Y1(k), X2(k), Y2(k)) 为为目标 k ,所属类别为 c ,它的中心点为



我们使用关键点预测 Y^ 去预测所有的中心点。然后对每个目标 K 的 size 进行回归,最终回归到


Sk = (X2(k)-X1(k), Y2(k)-Y1(k)) ,这个值是在训练前提前计算出来的,是进行了下采样之后的长宽值。


作者采用 L1 loss 监督 w,h 的回归



整体的损失函数为物体损失、大小损失与偏置损失的和,每个损失都有相应的权重。



在论文中 size 和 off 的系数分别为 0.1 和 1 ,论文中所使用的 backbone 都有三个 head layer,分别产生[1,80,128,128]、[1,2,128,128]、[1,2,128,128],也就是每个坐标点产生 C+4 个数据,分别是类别以及、长宽、以及偏置。

测试阶段

在预测阶段,首先针对一张图像进行下采样,随后对下采样后的图像进行预测,对于每个类在下采样的特征图中预测中心点,然后将输出图中的每个类的热点单独地提取出来。具体怎么提取呢?就是检测当前热点的值是否比周围的八个近邻点(八方位)都大(或者等于),然后取 100 个这样的点,采用的方式是一个 3x3 的 MaxPool,类似于 anchor-based 检测中 nms 的效果。


下图展示网络模型预测出来的中心点、中心点偏置以及该点对应目标的长宽:



那最终是怎么选择的,最终是根据模型预测出来的 ,也就是当前中心点存在物体的概率值,代码中设置的阈值为 0.3,也就是从上面选出的 100 个结果中调出大于该阈值的中心点作为最终的结果。

扩展

关键点回归任务和 3D 任务:


这里在原来的分支上额外多出一两个任务即可将 centernet 扩展到关键点和 3D 上。


对于关键点,coco 每个人有 17 个关键点,可以直接通过中心点预测出 17 个关键点的 offset,然后再预测一个 heatmap 做 match,因为直接回归关键点没有 heatmap 准。


对于 3D,只需要多回归 3Dsize,depth 和 orientation 即可。


具体信息如下图所示:


可视化结果

centernet 在不同任务上都取得了不过的表现,潜力很大,具体效果见下图所示。



可以看到无论是在 2D 检测,3D 检测还是 keypoint 任务上都取得了不错的效果。

总结

CenterNet 的优点如下


  1. 设计模型的结构比较简单,一般人也可以轻松看明白,不仅对于 two-stage,对于 one-stage 的目标检测算法来说该网络的模型设计也是优雅简单的。

  2. 2.该模型的思想不仅可以用于目标检测,还可以用于 3D 检测和人体姿态识别,虽然论文中没有是深入探讨这个,但是可以说明这个网络的设计还是很好的,我们可以借助这个框架去做一些其他的任务。

  3. 虽然目前尚未尝试轻量级的模型,但是可以猜到这个模型对于嵌入式端这种算力比较小的平台还是很有优势的。


当然说了一堆优点,CenterNet 的缺点也是有的,那就是:


  1. 在实际训练中,如果在图像中,同一个类别中的某些物体的 GT 中心点,在下采样时会挤到一块,也就是两个物体在 GT 中的中心点重叠了,CenterNet 对于这种情况也是无能为力的,也就是将这两个物体的当成一个物体来训练(因为只有一个中心点)。同理,在预测过程中,如果两个同类的物体在下采样后的中心点也重叠了,那么 CenterNet 也是只能检测出一个中心点,不过 CenterNet 对于这种情况的处理要比 faster-rcnn 强一些的,具体指标可以查看论文相关部分。

  2. 有一个需要注意的点,CenterNet 在训练过程中,如果同一个类的不同物体的高斯分布点互相有重叠,那么则在重叠的范围内选取较大的高斯点。


本文转载自公众号 SIGAI(ID:SIGAICN)


原文链接


https://mp.weixin.qq.com/s/CEcN5Aljvs7AyOLPRFjUaw


2019-07-14 08:007071

评论

发布
暂无评论
发现更多内容

华为云开源项目OpenTiny的TinyNG组件库的设计理念是什么?

英勇无比的消炎药

前端 开源项目 OpenTiny UI组件库

【重磅发布】易观千帆用户体验分析产品领先版正式发布

易观分析

金融 银行 用户分析

LED显示屏十大应用领域值得你收藏

Dylan

LED显示屏 户外LED显示屏 户内led显示屏

面试官:说一说mysql的varchar字段最大长度?

程序员小毕

MySQL 数据库 程序员 面试 架构师

云原生:驱动企业数字化新模式

北京好雨科技有限公司

云原生 数字化 rainbond 企业号 4 月 PK 榜

雀氏牛,Alibaba分布式微服务成长手册,GitHub已开源

做梦都在改BUG

Java 分布式 微服务

如何用 YonBuilder 构建线索管理应用?

YonBuilder低代码开发平台

软件测试/测试开发丨H5性能分析实战

测试人

软件测试 性能测试 自动化测试 H5 W3C

探索网络世界的核心:TCPIP协议四层模型解析

做梦都在改BUG

Java 计算机网络 网络协议 TCP/IP

企业云管平台是什么?有什么用?

行云管家

云计算 云管理 云管

又搞事!阿里400页JDK并发源码指南,再次被GitHub置顶了!

做梦都在改BUG

Java jdk 多线程 高并发 源码剖析

特斯拉和OpenAI的加持,马斯克简直人生赢家

这我可不懂

人工智能 低代码 马斯克 新能源

ZBC 荣登OKX涨幅榜前列,生态持续发力是关键

EOSdreamer111

SpringBoot整合RocketMQ,老鸟们都是这么玩

做梦都在改BUG

Java RocketMQ Spring Boot

“字节”再次起跳!内部651页剖析HotSpot 源码手册,GitHub已开源

做梦都在改BUG

Java JVM 虚拟机 hotspot

简化你的代码,提高生产力:这10个Lambda表达式必须掌握

做梦都在改BUG

Java Lambda

文献管理软件:EndNote 20 v20.5激活版

真大的脸盆

Mac Mac 软件 文献管理 文献管理工具

🔥InfoQ写作社区三周年主题征文火热开启

InfoQ写作社区官方

热门活动 三周年征文

一份深入解析Java虚拟机HotSpot手册,让我卷成美团架构师

程序知音

Java JVM java架构师 hotspot Java进阶

大模型高效开发的秘密武器:大模型低参微调套件MindSpore PET

华为云开发者联盟

人工智能 华为云 大模型 华为云开发者联盟 企业号 4 月 PK 榜

构建系列之前端脚手架vite

江湖修行

Vue vite cli

详解事务模式和Lua脚本,带你吃透Redis 事务

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

Gartner最新报告,分析超大规模边缘解决方案

阿里云视频云

云计算 边缘计算 边缘云

[直播预告]行云管家堡垒机V7.0版本说明会

行云管家

行云管家

玩转Github:三分钟教你如何用 Github 快速找到优秀的开源项目

程序知音

Java GitHub 编程语言 后端技术

成都开发者Meetup|聚焦云原生开源,点亮企业创新活力

阿里巴巴云原生

阿里云 容器 微服务 云原生

阿里P8架构师20年经验总结成微服务设计企业架构转型之道笔记

程序知音

Java 微服务 java架构 Java进阶 后端技术

真下饭!字节技术官DDD(领域驱动设计)手册,拆解业务代码首选

做梦都在改BUG

Java 架构 领域驱动设计 DDD

Atlassian后Server时代 | Server版vs.数据中心版,二者的区别在哪里?

龙智—DevSecOps解决方案

Atlassian 数据中心版 server版

什么是可信云?通过可信云评估意味着什么?

行云管家

可信云

MySQL数据库和Redis缓存一致性的更新策略

做梦都在改BUG

Java MySQL 数据库 redis 缓存

真Anchor Free目标检测:CenterNet详解_软件工程_Johnny_InfoQ精选文章