CenterNet是在2019年论文Objects as points中提出,相比yolo,ssd,faster_rcnn依靠大量anchor的检测网络,CenterNet是一种anchor-free的目标检测网络,在速度和精度上都比较有优势,值得学习下。

对于CenterNet的理解主要在于四方面:网络结构,heatmap生成,数据增强,loss函数理解。

1. CenterNet网络结构

  除了检测任务外,CenterNet还可以用于肢体识别或者3D目标检测等,因此CenterNet论文中提出了三种backbone的网络结构,分别是Resnet-18, DLA-34和Hourglass-104, 三种backbone准确度和速度如下:

  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

  实际工作中我主要用CenterNet进行目标检测,常用Resnet50作为backbone,这里主要介绍resnet50_center_net,其网络结构如下:

  可以发现CenterNet网络比较简单,主要包括resnet50提取图片特征,然后是反卷积模块Deconv(三个反卷积)对特征图进行上采样,最后三个分支卷积网络用来预测heatmap, 目标的宽高和目标的中心点坐标。值得注意的是反卷积模块,其包括三个反卷积组,每个组都包括一个3*3的卷积和一个反卷积,每次反卷积都会将特征图尺寸放大一倍,有很多代码中会将反卷积前的3x3的卷积替换为DCNv2(Deformable ConvetNets V2)来提高模型拟合能力。

  关于DCN(Deformable ConvetNets)参见:https://zhuanlan.zhihu.com/p/37578271, https://zhuanlan.zhihu.com/p/53127011

CenterNet的模型计算流程如下:

  • 图片缩放到512x512尺寸(长边缩放到512,短边补0),随后将缩放后1x3x512x512的图片输入网络

  • 图片经过resnet50提取特征得到feature1尺寸为1x2048x16x16

  • feature1经过反卷积模块Deconv,三次上采样得到feature2尺寸为1x64x128x128

  • 将feature2分别送入三个分支进行预测,预测heatmap尺寸为1x80x128x128(表示80个类别),预测长宽尺寸为1x2x128x128(2表示长和宽),预测中心点偏移量尺寸为1x2x128x128(2表示x, y)

 

关于另外两种backbone没有尝试过,以后再写

    DLA-34网络即Deep Layer Aggregation, 其理解参见:https://cloud.tencent.com/developer/article/1676834

    Hourglass网络主要用于人体姿态估计,其理解参见:https://zhuanlan.zhihu.com/p/45002720

2. heatmap(热力图)理解和生成

2.1 heatmap生成

  CenterNet将目标当成一个点来检测,即用目标box的中心点来表示这个目标,预测目标的中心点偏移量(offset),宽高(size)来得到物体实际box,而heatmap则是表示分类信息。每一个类别都有一张heatmap,每一张heatmap上,若某个坐标处有物体目标的中心点,即在该坐标处产生一个keypoint(用高斯圆表示),如下图所示:

产生heatmap的步骤解释如下:

如下图左边是缩放后送入网络的图片,尺寸为512x512,右边是生成的heatmap图,尺寸为128x128(网络最后预测的heatmap尺度为128x128。其步骤如下:

  • 1.将目标的box缩放到128x128的尺度上,然后求box的中心点坐标并取整,设为point

  • 2.根据目标box大小计算高斯圆的半径,设为R

  • 3.在heatmap图上,以point为圆心,半径为R填充高斯函数计算值。(point点处为最大值,沿着半径向外按高斯函数递减)

(注意:由于两个目标都是猫,属于同一类别,所以在同一张heatmap上。若还有一只狗,则狗的keypoint在另外一张heatmap上)

2.2 heatmap高斯函数半径的确定

  heatmap上的关键点之所以采用二维高斯核来表示,是由于对于在目标中心点附近的一些点,期预测出来的box和gt_box的IOU可能会大于0.7,不能直接对这些预测值进行惩罚,需要温和一点,所以采用高斯核。借用下大佬们的解释,如下图所示:

  关于高斯圆的半径确定,主要还是依赖于目标box的宽高,其计算方法为下图所示。 实际情况中会取IOU=0.7,即下图中的overlap=0.7作为临界值,然后分别计算出三种情况的半径,取最小值作为高斯核的半径r

参考:https://zhuanlan.zhihu.com/p/96856635?utm_source=wechat_session

3. 数据增强

  关于CenterNet还有一点值得注意的是其数据增强部分,采用了仿射变换warpAffine,其实就是对原图中进行裁剪,然后缩放到512x512的大小(长边缩放,短边补0)。实际过程中先确定一个中心点,和一个裁剪的长宽,然后进行仿射变换,如下图所示,绿色框住的图片会被裁剪出来,然后缩放到512x512(实际效果见图二中六个子图中第一个)

  下面是上图选择不同中心点和长度进行仿射变换得到的样本。除了中心点,裁剪长度,仿射变换还可以设置角度,CenterNet中没有设置角度(代码中为0),是由于加上旋转角度后,gt_box会变的不是很准确,如最右边两个旋转样本

4. loss函数理解

  center_net的loss包括三部分,heatmap的loss,目标长宽预测loss,目标中心点偏移值loss。其中heatmap的LK采用改进的focal loss,长宽预测的Lsize和目标中心点偏移Loff都采用L1Loss, 而且Lsize加上了0.1的权重。

heatmap loss

  heatmap loss的计算公式如下,对focal loss进行了改写,α和β是超参数,用来均衡难易样本和正负样本。N是图像的关键点数量(正样本个数),用于将所有的positive focal loss标准化为1,求和符号的下标xyc表示所有heatmap上的所有坐标点(c表示目标类别,每个类别一张heatmap),为预测值,Yxyc为标注真实值。

  关于focal loss的理解参考:https://www.cnblogs.com/silence-cho/p/12987476.html , https://zhuanlan.zhihu.com/p/66048276

  相比focal loss,负样本的loss里面多了一个(1-Yxyc)β​, 是为了抑制0<Yxyc​<1的负样本的loss(heatmap高斯中心点附近那些点)

中心点偏移值损失

  Loff损失函数公式如下, 其只对正样本的偏移值损失进行计算。其中 表示预测的偏移值,p为图片中目标中心点坐标,R为缩放尺度,为缩放后中心点的近似整数坐标

假设图片实际中心点p为(125, 63),由于图片的尺寸为512*512,缩放尺度R=4,因此缩放后的128x128尺寸下中心点坐标为p\R(31.25, 15.75), 相对于整数坐标(31, 15)的偏移值即为(0.25, 0.75), 即(p/R - )

长宽预测损失值

​  损失函数公式如下,也是只对正样本的损失值计算,Spk为预测尺寸,​Sk为真实尺寸

参考:

  https://zhuanlan.zhihu.com/p/96856635?utm_source=wechat_session

  https://zhuanlan.zhihu.com/p/165313457?utm_source=wechat_session

  https://zhuanlan.zhihu.com/p/66048276

  https://zhuanlan.zhihu.com/p/73516696

CenterNet原理详解相关推荐

  1. 【目标监测】CenterNet原理详解

    enterNet是在2019年论文Objects as points中提出,相比yolo,ssd,faster_rcnn依靠大量anchor的检测网络,CenterNet是一种anchor-free的 ...

  2. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

  3. LVS原理详解(3种工作方式8种调度算法)--老男孩

    一.LVS原理详解(4种工作方式8种调度算法) 集群简介 集群就是一组独立的计算机,协同工作,对外提供服务.对客户端来说像是一台服务器提供服务. LVS在企业架构中的位置: 以上的架构只是众多企业里面 ...

  4. jQuery中getJSON跨域原理详解

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp28 jQuery中getJSON跨域原理详解 前几天我再开发一个叫 河蟹工 ...

  5. nginx配置文件及工作原理详解

    nginx配置文件及工作原理详解 1 nginx配置文件的结构 2 nginx工作原理 1 nginx配置文件的结构 1)以下是nginx配置文件默认的主要内容: #user nobody; #配置用 ...

  6. EMD算法之Hilbert-Huang Transform原理详解和案例分析

    目录 Hilbert-Huang Transform 希尔伯特-黄变换 Section I 人物简介 Section II Hilbert-Huang的应用领域 Section III Hilbert ...

  7. 图像质量损失函数SSIM Loss的原理详解和代码具体实现

    本文转自微信公众号SIGAI 文章PDF见: http://www.tensorinfinity.com/paper_164.html http://www.360doc.com/content/19 ...

  8. 深入剖析Redis系列(三) - Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  9. 【Android架构师java原理详解】二;反射原理及动态代理模式

    前言: 本篇为Android架构师java原理专题二:反射原理及动态代理模式 大公司面试都要求我们有扎实的Java语言基础.而很多Android开发朋友这一块并不是很熟练,甚至半路初级底子很薄,这给我 ...

最新文章

  1. linux tomcat 进程杀掉_Linux-(一)常用命令总结
  2. 阿里JAVA面试题剖析:一般实现分布式锁都有哪些方式?使用 Redis 如何设计分布式锁?...
  3. python先序、中序、后序排序
  4. 【网址收藏】linux namespace和cgroup
  5. 分布式事务:两段式提交(最终一致性)
  6. 基于xml的方式配置AOP
  7. 上海j计算机一级分值,计算机一级考试内容及分值
  8. 协议转换器主要是应用在哪些地方?
  9. decimal 和 numeric (Transact-SQL)
  10. [活动通知]Nanjing GDG 2013年4月活动
  11. 2016CCF-CCSP竞赛:第1题-虚拟机设计(共3题)
  12. MyBatis的环境搭建(图文)
  13. win10 查看电脑mac 地址和ip
  14. Java常用工具类-根据物流单号,从快递100中获取物流详细信息,包含发货,签收等
  15. 中央银行会计核算数据集中系统(ACS系统)
  16. 如何删除PDF中指定的一页或几页?
  17. Buffer的基本用法
  18. PowerBuilder常用函数
  19. 用Remix部署Solidity合约
  20. 方向导数、梯度、等高线、数量场与向量场

热门文章

  1. Q130:PBRT-V3,非均匀介质的采样(11.3.3章节、15.2.2章节)
  2. 问题三十七:C++怎么解一元四次方程?(3)——怎么解一元四次方程
  3. jdk8下载要先有Oracle账号吗,【转载】linux安装jdk8--附带oracle账号
  4. 动手学习数据分析(四)——数据可视化
  5. 商业智能BI的数据价值
  6. asp.net 读取mysql_ASP.NET连接数据库并获取数据
  7. L2-006 树的遍历(建树)
  8. POJ2104 K-th Number (平方分割 + 二分)
  9. java将图书信息写入原有文件里_Java保存图书信息
  10. 不规则矩形中心求法 c语言,不规则矩形