文章目录
资源
论文题目: Objects as Points
论文地址:https://arxiv.org/pdf/1904.07850.pdf
发布时间:2019.4.16
机构:UT Austin,UC Berkeley
代码:https://github.com/xingyizhou/CenterNet
相关解读:(本文是基于这两篇文章的学习整理)
https://blog.csdn.net/c20081052/article/details/89358658
https://zhuanlan.zhihu.com/p/66048276
原理
简介
此检测器采用关键点估计来找到中心点,并回归到其他目标属性,例如尺寸,3D位置,方向,甚至姿态。
- 对于2D BBox检测, 先生成热力图找到关键点,再回归关键点在特征图和原图间的偏移,再回归宽高
- 对于3D BBox检测,我们直接回归得到目标的深度信息,3D框的尺寸,目标朝向
- 对于人姿态估计,我们将关节点(2D joint)位置作为中心点的偏移量,直接在中心点位置回归出这些偏移量的值
相关研究
使用anchor的目标检测
- fast-rcnn
一组候选框中枚举出目标框,再对每个对象进行卷积分类
- faster-rcnn
卷积网络中生成候选区域区域, IOU > 0.7作为前景,否则为背景,再进行分类
优势
- 仅在目标位置设置关键点,没有了全图枚举或区域提案RPN生成检测框,不用设置阈值做前后框分类
- 不需要NMS后处理来去除重复检测框。
- 使用更大的分辨率(缩放4倍),传统目标检测缩放16倍
总体来说,CenterNet结构优雅简单,直接检测目标的中心点和大小,是真anchor-free。比其他方法更简单,更快。
使用关键点的目标检测
- ExtremeNet
检测所有目标的 最上,最下,最左,最右,中心点
- CornerNet
将bbox的两个角作为关键点
优势
它们都需要经过一个关键点grouping阶段(对关键点以人为单位分组,具体没去看),这会降低算法整体速度,centernet仅仅提取每个目标的中心点,无需对关键点进行grouping 或者是后处理
单目3D目标检测
- Deep3Dbox
使用一个 slow-RCNN 风格的框,该网络先检测2D目标,然后将目标送到3D 估计网络
- 3D RCNN
在Faster-RCNN上添加了额外的head来做3D projection
- Deep Manta
使用一个 coarse-to-fine的Faster-RCNN ,在多任务中训练
优势
同one-stage版本的Deep3Dbox 或3D RCNN相似,同样,CenterNet比它们都更简洁,更快。
网络结构
预备知识
令 为输出图像,其宽W,高H。
- 关键点热力图定义, R 是输出stride(即尺寸缩放比例),默认为4, C是关键点类型数(即输出特征图通道数),C=80,则为COCO目标类别,C=17,则为COCO姿态点.
-
表示检测到的关键点
-
表示背景
-
将真实关键点分布到特征图上, 真实关键点 对于下采样后的坐标,我们设为,通过高斯核分散到热力图上,如果对于同个类 c (同个关键点或是目标类别)有两个高斯函数发生重叠,我们选择元素级最大的。
高斯生成的中心点
损失函数
- 中心点损失函数,像素级逻辑回归的focal loss
其中 和是focal loss的超参数,实验中两个数分别设置为2和4, N是图像 I 中的关键点个数,除以N主要为了将所有focal loss归一化。
解读:
如果预测的中心点真值为1,那该点为易学目标,更加减小预测正确的损失值,增大错误的损失值。
如果预测的中心点真值不为1,真值中心点很少,正负样本不均衡,通过加大远离真值为1的中心点损失值,减小靠近真值1的中心点损失值。靠近真实点的地方为易学点通过增大靠近真实点预测错误的损失值,和在靠近真实点处相互牵制
- 目标中心的偏置损失,下采样4倍的真实关键点可能为小数,而预测点为整数,映射到原始图像,会有精度误差,这个偏置值用L1 loss来训练
是我们预测出来的偏置,则是在训练过程中提前计算出来的实际误差
- 目标大小的损失,对每个目标的size进行回归,最终回归到 ,使用L1 loss来训练
- 整体的损失函数为物体损失、大小损失与偏置损失的和,每个损失都有相应的权重
推理
2D检测
找到关键点:
在推理的时候,我们分别提取热力图上每个类别的峰值点。如何得到这些峰值点呢?做法是将热力图上的所有响应点与其连接的8个临近点进行比较,如果该点响应值大于或等于其八个临近点值则保留,最后我们保留所有满足之前要求的前100个峰值点
产生bbox:为偏移预测结果,为宽高预测结果
3D检测:
每个中心点需要3个附加信息:depth, 3D dimension, orientation。我们为每个信息分别添加head.
depth:对于每个中心点,深度值depth是一个维度的, 然后depth很难直接回归, 在特征点估计网络上添加了一个深度计算通道, 该通道使用了两个卷积层,然后做ReLU 。输出为,$ \sigma$为sigmoid函数,我们用L1 loss来训练深度估计器。
3D维度:目标的3D维度是三个标量值。我们直接回归出它们(长宽高)的绝对值,单位为米,用的是一个独立的head,和L1 loss
方向:方向默认是单标量的值,然而其也很难回归。用两个bins来呈现方向,且i做n-bin回归。特别地,方向用8个标量值来编码的形式,每个bin有4个值。对于一个bin,两个值用作softmax分类,其余两个值回归到在每个bin中的角度。
人体姿态估计
设人体关键点为
- 通过中心点,回归出个关节点的偏移,得到关节点用到了L1 loss,我们通过给loss添加mask方式来无视那些不可见的关键点(关节点)。此处参照了slow-RCNN。
- 估计个人体关节点热力图,检测出所有人体关键点(热力图上值小于0.1的直接略去)。使用focal loss和像素偏移量。
- 分配关节点到人,将第一步的中心偏移 作为一个grouping的线索,来为每个关键点(关节点)分配其最近的人,回归得到的位置与最近的检测关节点进行分配 ,只对检测到的目标框中的关节点进行关联。
backbone
我们实验了4个结构:ResNet-18, ResNet-101, DLA-34, Hourglass-104. 我们用deformable卷积层来更改ResNets和DLA-34,按照原样使用Hourglass 网络
- Resnet-18 with up-convolutional layers : 28.1% coco and 142 FPS
Xiao et al. [55]等人对标准的ResNet做了3个up-convolutional网络来得到更高的分辨率输出(最终stride为4)。为了节省计算量,我们改变这3个up-convolutional的输出通道数分别为256,128,64。up-convolutional核初始为双线性插值。
- DLA-34 : 37.4% COCOAP and 52 FPS
即Deep Layer Aggregation (DLA),是带多级跳跃连接的图像分类网络,我们采用全卷积上采样版的DLA,用deformable卷积来跳跃连接低层和输出层;将原来上采样层的卷积都替换成3x3的deformable卷积。在每个输出head前加了一个3x3x256的卷积,然后做1x1卷积得到期望输出。
- Hourglass-104 : 45.1% COCOAP and 1.4 FPS
堆叠的Hourglass网络,通过两个连续的hourglass 模块对输入进行了4倍的下采样,每个hourglass 模块是个对称的5层 下和上卷积网络,且带有skip连接。该网络较大,但通常会生成最好的关键点估计。
(a):Hourglass
(b):使用反卷积的ResNet
(c ):DLA-34
(d):DLA-34,底层添加了更多的跳转连接,并对每个卷积层替换为可变形卷积层的上采样阶段
代码解读
未完待续…