资源

论文题目: 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检测, 先生成热力图找到关键点,再回归关键点在特征图和原图间的偏移,再回归

CenterNet论文学习解读

  • 对于3D BBox检测,我们直接回归得到目标的深度信息3D框的尺寸目标朝向

CenterNet论文学习解读

  • 对于人姿态估计,我们将关节点(2D joint)位置作为中心点的偏移量,直接在中心点位置回归出这些偏移量的值

CenterNet论文学习解读

相关研究

使用anchor的目标检测

  • fast-rcnn

一组候选框中枚举出目标框,再对每个对象进行卷积分类


  • faster-rcnn

卷积网络中生成候选区域区域, IOU > 0.7作为前景,否则为背景,再进行分类


优势

  1. 仅在目标位置设置关键点,没有了全图枚举区域提案RPN生成检测框,不用设置阈值做前后框分类
  2. 不需要NMS后处理来去除重复检测框。
  3. 使用更大的分辨率(缩放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比它们都更简洁,更快。


网络结构

预备知识

IRW×H×3I \in R^{W×H×3}为输出图像,其宽W,高H。

  • 关键点热力图定义, R 是输出stride(即尺寸缩放比例),默认为4, C是关键点类型数(即输出特征图通道数),C=80,则为COCO目标类别,C=17,则为COCO姿态点.

Y^[0,1]WR×HR×C \hat Y \in [0,1]^{ \frac{W}{R} ×\frac{H}{R}×C}

  • Y^x,y,c=1\hat Y _{x,y,c} = 1 表示检测到的关键点

  • Y^x,y,c=0\hat Y _{x,y,c} = 0 表示背景

  • 将真实关键点分布到特征图上, 真实关键点pR2p \in R^2 对于下采样后的坐标,我们设为p~=pR\tilde p = |\frac{p}{R}|,通过高斯核分散到热力图Y^\hat Y上,如果对于同个类 c (同个关键点或是目标类别)有两个高斯函数发生重叠,我们选择元素级最大的。

Yxyc=exp((xp~x)2+(yp~y)22σp2) Y _{xyc} = exp(-\frac{(x- \tilde p_x)^2 + (y- \tilde p_y)^2}{2\sigma^2_p})
CenterNet论文学习解读

高斯生成的中心点

损失函数

  • 中心点损失函数,像素级逻辑回归的focal loss

Lk=1N{(1Y^xyc)αlog(Y^xyc),                   ifYxyc=1(1Yxyc)β(Y^xyc)αlog(1Y^xyc),  otherwise L_k = \frac{-1}{N}\sum \begin{cases}(1 - \hat Y_{xyc})^\alpha log(\hat Y_{xyc}), \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ifY_{xyc}=1 \\ \\ (1-Y_{xyc})^\beta(\hat Y_{xyc})^\alpha log(1-\hat Y_{xyc}), \ \ otherwise \end{cases}
其中 α\alphaβ\beta是focal loss的超参数,实验中两个数分别设置为2和4, N是图像 I 中的关键点个数,除以N主要为了将所有focal loss归一化。

解读

如果预测的中心点真值为1,那该点为易学目标,更加减小预测正确的损失值,增大错误的损失值。

如果预测的中心点真值不为1,真值中心点很少,正负样本不均衡,通过(1Yxyc)β(1-Y_{xyc})^\beta加大远离真值为1的中心点损失值,减小靠近真值1的中心点损失值。靠近真实点的地方为易学点通过(Y^xyc)α(\hat Y_{xyc})^\alpha增大靠近真实点预测错误的损失值,(1Yxyc)β(1-Y_{xyc})^\beta(Y^xyc)α(\hat Y_{xyc})^\alpha靠近真实点处相互牵制

  • 目标中心的偏置损失,下采样4倍的真实关键点可能为小数,而预测点为整数,映射到原始图像,会有精度误差,这个偏置值用L1 loss来训练

Loff=1NpO^p~(PRp~) L_{off} = \frac{1}{N}\sum_{p}|\hat O_{\tilde p} - (\frac{P}{R} - \tilde p)|
O^p~\hat O_{\tilde p} 是我们预测出来的偏置,(PRp~)(\frac{P}{R} - \tilde p)则是在训练过程中提前计算出来的实际误差

  • 目标大小的损失,对每个目标的size进行回归,最终回归到 sk=(x2(2)x1(2),y2(2)y1(2))s_k = ( x_2^{(2)} - x_1^{(2)}, y_2^{(2)} - y_1^{(2)}),使用L1 loss来训练

Lsize=1Nk=1NS^pksk L_{size} = \frac{1}{N}\sum_{k=1}^N|\hat S_{p_k} - s_k|

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

Ldet=Lk+λsizeLsize+λoffLoff L_{det} = L_k + \lambda_{size}L_{size} + \lambda_{off}L_{off}


推理

2D检测

找到关键点:
在推理的时候,我们分别提取热力图上每个类别的峰值点。如何得到这些峰值点呢?做法是将热力图上的所有响应点与其连接的8个临近点进行比较,如果该点响应值大于或等于其八个临近点值则保留,最后我们保留所有满足之前要求的前100个峰值点

产生bbox:(δx^i,δy^i)(\delta \hat x_i,\delta \hat y_i)为偏移预测结果,(w^i,h^i)(\hat w_i, \hat h_i)为宽高预测结果
(x^i+δx^iw^i/2,y^i+δy^ih^i/2,x^i+δx^i+w^i/2,y^i+δy^i+h^i/2) (\hat x_i + \delta \hat x_i - \hat w_i/2, \hat y_i + \delta \hat y_i - \hat h_i/2,\\ \hat x_i + \delta \hat x_i + \hat w_i/2, \hat y_i + \delta \hat y_i + \hat h_i/2)


3D检测:

每个中心点需要3个附加信息:depth, 3D dimension, orientation。我们为每个信息分别添加head.

depth:对于每个中心点,深度值depth是一个维度的, 然后depth很难直接回归, 在特征点估计网络上添加了一个深度计算通道D^[0,1]WR×HR\hat D \in [0,1]^{\frac{W}{R}\times \frac{H}{R}}, 该通道使用了两个卷积层,然后做ReLU 。输出为d=1/σ(d^)1d=1/ \sigma (\hat d)-1,$ \sigma$为sigmoid函数,我们用L1 loss来训练深度估计器。

3D维度:目标的3D维度是三个标量值。我们直接回归出它们(长宽高)的绝对值,单位为米,用的是一个独立的head,和L1 loss

方向:方向默认是单标量的值,然而其也很难回归。用两个bins来呈现方向,且i做n-bin回归。特别地,方向用8个标量值来编码的形式,每个bin有4个值。对于一个bin,两个值用作softmax分类其余两个值回归到在每个bin中的角度

人体姿态估计

设人体关键点为kk

  1. 通过中心点,回归出kk个关节点的偏移J^RWR×HR×k×2\hat J \in R^{\frac{W}{R} \times \frac{H}{R} \times k \times 2},得到关节点lj=(x^,y^)+J^x^y^j forj1...kl_j = (\hat x, \hat y)+ \hat J_{\hat x \hat y j} \ for j \in 1...k用到了L1 loss,我们通过给loss添加mask方式来无视那些不可见的关键点(关节点)。此处参照了slow-RCNN。
  2. 估计kk人体关节点热力图,检测出所有人体关键点(热力图上值小于0.1的直接略去)。使用focal loss和像素偏移量。
  3. 分配关节点到人,将第一步的中心偏移J^\hat J 作为一个grouping的线索,来为每个关键点(关节点)分配其最近的人,回归得到的位置ljl_j最近的检测关节点进行分配argminlLj(llj)2arg\,\min_{l \in L_j }(l-l_j)^2 ,只对检测到的目标框中的关节点进行关联。

backbone

我们实验了4个结构:ResNet-18, ResNet-101, DLA-34, Hourglass-104. 我们用deformable卷积层来更改ResNets和DLA-34,按照原样使用Hourglass 网络

CenterNet论文学习解读


  • 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连接。该网络较大,但通常会生成最好的关键点估计。


CenterNet论文学习解读
(a):Hourglass

(b):使用反卷积的ResNet

(c ):DLA-34

(d):DLA-34,底层添加了更多的跳转连接,并对每个卷积层替换为可变形卷积层的上采样阶段

代码解读

未完待续…

相关文章:

  • 2022-01-04
  • 2021-07-05
  • 2021-06-19
  • 2022-12-23
  • 2022-12-23
  • 2021-09-20
  • 2021-10-14
  • 2021-05-02
猜你喜欢
  • 2021-06-24
  • 2021-08-02
  • 2021-10-09
  • 2021-09-14
  • 2021-10-18
  • 2021-04-03
  • 2021-11-30
相关资源
相似解决方案