CenterNet:Objects as Points论文阅读笔记


前言:CenterNet这篇文章,我觉得作者思路特别清晰,每一步怎么做,该怎么进行实验,而且我觉得CenterNet的实验挺详实的,真的是一篇很好的文章。

(一)Title

image-20201101111752877

(二)Summary

​ 在本文中,我们采取了不同的方法。我们将对象建模为一个点,即其边界框的中心点。我们的detector使用关键点估计来找到中心点,并回归到所有其他对象属性(object properties),如大小、3D位置、方向,甚至姿势。CenterNet比基于bounding box的检测器更容易、更简单、更快、更准确,并且是端到端可微分的。

CenterNet的性能表现

在MS COCO数据集上取得了28.1% AP at 142 FPS, 37.4% AP at 52 FPS, and 45.1% AP with multi-scale testing at 1.4 FPS.这个要比CornerNet-Squeeze要强啊!

KITTI benchmark上估计3D bounding box

COCO keypoint dataset上进行human pose估计

同复杂的多阶段方法比较,我们的取得了有竞争力的结果,而且做到了实时的。

CenterNet用于目标检测的特点

  • 输入图像输入到全卷积网络中得到heatmap,其中heatmap的峰值对应着物体的中心位置
  • 使用heatmap峰值点的图像特征预测边界框的长和高
  • 模型利用标准dense supervised learning进行训练,Inference就是单个网络的前向传播,没有使用NMS做后处理

相比其他的基于关键点的目标检测,比如CornerNet和ExtremeNet,他们在关键点检测之后需要一个组合分组阶段(比如cornerNet中的对左上角和右下角根据嵌入向量进行分组),而CenterNet则不需要分组或者后处理,提高了算法的速度。

(三)Research Objective

本文提出了另外一种框架去解决目标检测的问题,使用边界框中心点来表示对象。对象的其他属性,如对象大小、尺寸、3D范围、方向和姿态,则直接从中心位置的图像特征进行回归。

(四)Problem Statement

大多数成功的object detectors列举出一个几乎详尽的可能的物体位置列表,并对每个位置进行分类。这是浪费的、低效的,并且需要额外的后处理(比如NMS)。后处理的过程很难微分以及训练。

(五)Method

5.1 Loss Fuction

在CenterNet中,我们的损失函数包括3个部分:关键点估计损失(Focal Loss)、回归关键点偏移损失(由下采样造成的关键点精度损失)以及wh回归损失

关键点估计损失(Focal Loss)

关键点预测 Y ^ ϵ [ 0 , 1 ] W R × H R × C \hat{Y}\epsilon [0,1]^{\frac{W}{R}\times \frac{H}{R}\times C} Y^ϵ[0,1]RW×RH×C,

关键点真实值 Y ∈ [ 0 , 1 ] W R × H R × C Y \in[0,1]^{\frac{W}{R} \times \frac{H}{R} \times C} Y[0,1]RW×RH×C通过高斯核 Y x y c = exp ⁡ ( − ( x − p ~ x ) 2 + ( y − p ~ y ) 2 2 σ p 2 ) Y_{x y c}=\exp \left(-\frac{\left(x-\tilde{p}_{x}\right)^{2}+\left(y-\tilde{p}_{y}\right)^{2}}{2 \sigma_{p}^{2}}\right) Yxyc=exp(2σp2(xp~x)2+(yp~y)2)分散到热力图
L k = 1 N ∑ x y c { ( 1 − Y ^ x y c ) α log ⁡ ( Y ^ x y c )  if  Y x y c = 1 ( 1 − Y x y c ) β ( Y ^ x y c ) α log ⁡ ( 1 − Y ^ x y c )  otherwise  L_{k}=\frac{1}{N} \sum_{x y c}\left\{\begin{array}{cl} \left(1-\hat{Y}_{x y c}\right)^{\alpha} \log \left(\hat{Y}_{x y c}\right) & \text { if } Y_{x y c}=1 \\ \left(1-Y_{x y c}\right)^{\beta}\left(\hat{Y}_{x y c}\right)^{\alpha} \log \left(1-\hat{Y}_{x y c}\right) & \text { otherwise } \end{array}\right. Lk=N1xyc(1Y^xyc)αlog(Y^xyc)(1Yxyc)β(Y^xyc)αlog(1Y^xyc) if Yxyc=1 otherwise 
其中 α \alpha α用于调整正确分类和错误分类的权重,是Focal Loss的核心,而 β \beta β用于调整负样本 Y x y c Y_{xyc} Yxyc不为1的权重,负样本数量较大,而且还是经过高斯核处理过的,负样本数量更多了。因此, β \beta β取大一些。

回归关键点偏移损失(C个类别共用:前提假设下采样后的特征图上一个像素位置至多一个object)

offset预测 O ^ ∈ R W R × H R × 2 \hat{O} \in \mathcal{R}^{\frac{W}{R} \times \frac{H}{R} \times 2} O^RRW×RH×2

offset真实值 ( p R − p ~ ) (\frac{p}{R}-\tilde{p}) (Rpp~),其中 p p p为Ground Truth关键点的位置, p ~ = ⌊ p R ⌋ \tilde{p}=\left \lfloor \frac{p}{R} \right \rfloor p~=Rp.

这里的预测和真实值是怎么一一对应上的呢?
L o f f = 1 N ∑ p ∣ O ^ p ~ − ( p R − p ~ ) ∣ L_{o f f}=\frac{1}{N} \sum_{p}\left|\hat{O}_{\tilde{p}}-\left(\frac{p}{R}-\tilde{p}\right)\right| Loff=N1pO^p~(Rpp~)
wh回归损失

wh回归预测值 S ^ ∈ R W R × H R × 2 \hat{S} \in \mathcal{R}^{\frac{W}{R} \times \frac{H}{R} \times 2} S^RRW×RH×2

wh回归真实值 s k = ( x 2 ( k ) − x 1 ( k ) , y 2 ( k ) − y 1 ( k ) ) s_{k}=\left(x_{2}^{(k)}-x_{1}^{(k)}, y_{2}^{(k)}-y_{1}^{(k)}\right) sk=(x2(k)x1(k),y2(k)y1(k)),其中 ( x 1 ( k ) , y 1 ( k ) , x 2 ( k ) , y 2 ( k ) ) \left(x_{1}^{(k)}, y_{1}^{(k)}, x_{2}^{(k)}, y_{2}^{(k)}\right) (x1(k),y1(k),x2(k),y2(k))表示第k个物体的边界框(这里 x 1 ( k ) x_{1}^{(k)} x1(k)应该表示的是box在x方向的像素坐标最小值, x 1 ( k ) x_{1}^{(k)} x1(k)表示的是box在x方向像素坐标的最大值)

这里的预测和真实值是怎么一一对应上的呢?
L size = 1 N ∑ k = 1 N ∣ S ^ p k − s k ∣ L_{\text {size}}=\frac{1}{N} \sum_{k=1}^{N}\left|\hat{S}_{p_{k}}-s_{k}\right| Lsize=N1k=1NS^pksk
最终的整体损失
L det = L k + λ size L size + λ off L off L_{\text {det}}=L_{k}+\lambda_{\text {size}} L_{\text {size}}+\lambda_{\text {off}} L_{\text {off}} Ldet=Lk+λsizeLsize+λoffLoff

5.2 网络架构和inference

image-20201103135402926

图4中显示了3个任务的输出情况:分别是2D目标检测3D目标检测以及位姿估计这3种任务,对于3D目标检测以及位姿估计任务的最终输出向量大小我不是很清楚。

5.2.1 目标检测任务

目标检测网络输出

在目标检测任务中:我们使用single network来预测关键点 Y ^ \hat Y Y^、offsets O ^ \hat O O^和wh大小 S ^ \hat S S^,网络的整体输出向量为 W R × H R × ( c + 4 ) {\frac{W}{R} \times \frac{H}{R} \times (c+4)} RW×RH×(c+4),这些输出共用一个全卷积的backbone网络。然后分别经过一个单独的 3 × 3 3\times3 3×3卷积+ReLU+ 1 × 1 1\times1 1×1卷积。

目标检测的inference

  • 从预测 Y ^ , W R × H R × c \hat Y,{\frac{W}{R} \times \frac{H}{R} \times c} Y^,RW×RH×c中获取每一个类别对应的关键点,这里对于每一个类别,分别的提取其对应heatmap W R × H R \frac{W}{R} \times \frac{H}{R} RW×RH上的peaks(peaks的定义是其8邻域中的所有值都小于等于中心位置的预测值),然后保留前100个峰值,此时我们得到了C个类别所有的关键点大致位置,其中第c类别的中心点位置为 P ^ c \hat{\mathcal{P}}_{c} P^c。假设其总数为n,那么这n个点的表示方式为: P c ^ = { ( x ^ i , y ^ i ) } i = 1 n \hat{\mathcal{P}_c}=\left\{\left(\hat{x}_{i}, \hat{y}_{i}\right)\right\}_{i=1}^{n} Pc^={(x^i,y^i)}i=1n,每一个关键点都对应着一个坐标 ( x ^ i , y ^ i ) (\hat{x}_{i}, \hat{y}_{i}) (x^i,y^i)

  • 预测的像素级offset为 ( δ x ^ i , δ y ^ i ) = O ^ x ^ i , y ^ i \left(\delta \hat{x}_{i}, \delta \hat{y}_{i}\right)=\hat{O}_{\hat{x}_{i}, \hat{y}_{i}} (δx^i,δy^i)=O^x^i,y^i

  • 预测的像素级宽和高为 ( w ^ i , h ^ i ) = S ^ x ^ i , y ^ i \left(\hat{w}_{i}, \hat{h}_{i}\right)=\hat{S}_{\hat{x}_{i}, \hat{y}_{i}} (w^i,h^i)=S^x^i,y^i

这样我们就得到了bounding box的四个点的坐标位置
( x ^ i + δ x ^ i − w ^ i / 2 , y ^ i + δ y ^ i − h ^ i / 2 , x ^ i + δ x ^ i + w ^ i / 2 , y ^ i + δ y ^ i + h ^ i / 2 ) , \begin{array}{c} \left(\hat{x}_{i}+\delta \hat{x}_{i}-\hat{w}_{i} / 2, \quad \hat{y}_{i}+\delta \hat{y}_{i}-\hat{h}_{i} / 2,\right. \\ \left.\hat{x}_{i}+\delta \hat{x}_{i}+\hat{w}_{i} / 2, \quad \hat{y}_{i}+\delta \hat{y}_{i}+\hat{h}_{i} / 2\right), \end{array} (x^i+δx^iw^i/2,y^i+δy^ih^i/2x^i+δx^i+w^i/2,y^i+δy^i+h^i/2)
所有的outputs都是直接从关键点估计产生,并且求keypoint peaks可以通过 3 × 3 3\times3 3×3的max pooling操作实现。

5.2.2 3D目标检测任务

3D目标检测网络输出

对于一个对象来说,3D检测的任务是,需要确定中心点,同时需要确定中心点的三个附加属性:depth、3D dimension和orientation,这3个附加属性是通过3个不同的head进行预测的。对于第k个object,从3个输出特征图上提取输出结果 d ^ k ∈ R , γ ^ k ∈ R 3 , α ^ k ∈ R 8 \hat{d}_{k} \in R, \hat{\gamma}_{k} \in R^{3}, \hat{\alpha}_{k} \in R^{8} d^kR,γ^kR3,α^kR8

  • 网络预测depth输出为 D ^ ∈ [ 0 , 1 ] W R × H R \hat{D} \in[0,1]^{\frac{W}{R} \times \frac{H}{R}} D^[0,1]RW×RHdepth很难直接去回归,作者令网络的输出经过变换 d = 1 / σ ( d ^ ) − 1 d=1 / \sigma(\hat{d})-1 d=1/σ(d^)1之后得到网络的depth,其中 d d d为真实的depth, d ^ \hat d d^为网络输出的预测值, σ \sigma σ为sigmoid函数。在backbone之后接卷积+ReLU+卷积进行depth的预测,输出经sigmoid取倒数后-1变换到真实的depth尺度上,利用L1距离计算损失。

    损失表示为:
    L d e p = 1 N ∑ k = 1 N ∣ 1 σ ( d ^ k ) − 1 − d k ∣ L_{d e p}=\frac{1}{N} \sum_{k=1}^{N}\left|\frac{1}{\sigma\left(\hat{d}_{k}\right)}-1-d_{k}\right| Ldep=N1k=1Nσ(d^k)11dk

  • 预测3D dimension,直接回归,网络输出 Γ ^ ∈ R W R × H R × 3 \hat{\Gamma} \in \mathcal{R}^{\frac{W}{R} \times \frac{H}{R} \times 3} Γ^RRW×RH×3,并计算L1损失

    损失表示为:
    L dim = 1 N ∑ k = 1 N ∣ γ ^ k − γ k ∣ L_{\text {dim}}=\frac{1}{N} \sum_{k=1}^{N}\left|\hat{\gamma}_{k}-\gamma_{k}\right| Ldim=N1k=1Nγ^kγk

  • 预测orientation encoding为 A ^ ∈ R W R × H R × 8 \hat{A} \in R^{\frac{W}{R} \times \frac{H}{R} \times 8} A^RRW×RH×8,原本orientation θ \theta θ是一个标量,作者这里使用Mousavian et al. [24,38]的想法,使用8个标量去编码方向从而能够更好地训练。

    关于角度这里的思想,我们还需要读一读[24,38]这两片论文体会下。

    这8个标量被分成两组,一组的角度范围是 [ − 7 π 6 , π 6 ] [-\frac{7\pi}{6},\frac{\pi}{6}] [67π,6π],另一组角度范围是 [ − π 6 , 7 π 6 ] [-\frac{\pi}{6},\frac{7\pi}{6}] [6π,67π],并且每一组中有4个标量,其中两个标量 b i ∈ R 2 b_i\in R^2 biR2用于softmax分类表示,(疑问为什么一个bin里面的softmax 分类是2维的?)。剩下两个标量 a i ∈ R 2 a_i\in R^2 aiR2表示到bin中心 m i m_i mi的offset的sin和cos值。因此一个bin的预测结果为: α ^ = [ b ^ 1 , a ^ 1 , b ^ 2 , a ^ 2 ] \hat{\alpha}=\left[\hat{b}_{1}, \hat{a}_{1}, \hat{b}_{2}, \hat{a}_{2}\right] α^=[b^1,a^1,b^2,a^2],其损失函数的表示为:
    L o r i = 1 N ∑ k = 1 N ∑ i = 1 2 ( softmax ⁡ ( b ^ i , c i ) + c i ∣ a ^ i − a i ∣ ) L_{o r i}=\frac{1}{N} \sum_{k=1}^{N} \sum_{i=1}^{2}\left(\operatorname{softmax}\left(\hat{b}_{i}, c_{i}\right)+c_{i}\left|\hat{a}_{i}-a_{i}\right|\right) Lori=N1k=1Ni=12(softmax(b^i,ci)+cia^iai)
    其中 c i = 1 ( θ ∈ B i ) , a i = ( sin ⁡ ( θ − m i ) , cos ⁡ ( θ − m i ) ) c_{i}=\mathbb{1}\left(\theta \in B_{i}\right), a_{i}=\left(\sin \left(\theta-m_{i}\right), \cos \left(\theta-m_{i}\right)\right) ci=1(θBi),ai=(sin(θmi),cos(θmi)) c i c_i ci表示示性函数(这里我觉得 c i c_i ci应该是 R 2 R^2 R2的)最终的角度inference结果为
    θ ^ = arctan ⁡ 2 ( a ^ j 1 , a ^ j 2 ) + m j \hat{\theta}=\arctan 2\left(\hat{a}_{j 1}, \hat{a}_{j 2}\right)+m_{j} θ^=arctan2(a^j1,a^j2)+mj
    其中 j j j是具有较大分类score的那个组。

我觉得这里应该也有一个关键点的预测网络,即 Y ^ ∈ R W R × H R × c \hat Y\in R^{\frac{W}{R} \times \frac{H}{R} \times c} Y^RRW×RH×c,然后,这些不同类别的关键点属性(depth,3D dimension以及orientation encoding)公用同一个预测结果

5.2.3 人体位姿估计

人体姿态估计旨在为图像中的每个人体object估计k个2D人体关节位置(对于COCO,k = 17)。作者将每个关节位置看成是中心点的属性,利用关节位置相比于中心点位置的偏移来定义关节位置 J ^ ∈ R W R × H R × k × 2 \hat{J} \in \mathcal{R}^{\frac{W}{R} \times \frac{H}{R} \times k \times 2} J^RRW×RH×k×2,并且这里直接使用像素距离来表示损失,利用L1距离计算损失,作者通过masking loss来忽略那些不可见的keypoints。

预测k个关节的heatmap,以及对应的偏移位置 Φ ^ ∈ R W R × H R × k \hat{\Phi} \in \mathcal{R}^{\frac{W}{R} \times \frac{H}{R} \times k} Φ^RRW×RH×k(这里使用focal loss),同时对这些关节,预测offset,offset是对所有类别的关节通用的,因此预测的offset大小为 R W R × H R × 2 \mathcal{R}^{\frac{W}{R} \times \frac{H}{R} \times 2} RRW×RH×2(这里和目标检测任务中offset使用相同的损失),

说明:这应该是一个由粗到细的过程(个人看论文的理解)

作者应该在关节位置估计上:首先对于一个人体目标(已经知道中心点的位置)来说只估计其他点相对于中心点的offsets,这样使用 W R × H R × k × 2 {\frac{W}{R} \times \frac{H}{R} \times k \times 2} RW×RH×k×2参数,但是得到的距离中心点的偏移位置不准确,因此,需要对每一个关节位置预测一个偏移offset,因为我们预测的偏移是一个 W R × H R × 2 {\frac{W}{R} \times \frac{H}{R} \times 2} RW×RH×2大小的,也就是我们需要确定这个偏移究竟是哪一个关节的偏移。

假设我们当前仅考虑第j个关节,我们先找到中心点位于 ( x ^ , y ^ ) (\hat{x}, \hat{y}) (x^,y^)位置的第j个关节的粗略位置
l j = ( x ^ , y ^ ) + J ^ x ^ y ^ j  for  j ∈ 1 … k l_{j}=(\hat{x}, \hat{y})+\hat{J}_{\hat{x} \hat{y} j} \text { for } j \in 1 \ldots k lj=(x^,y^)+J^x^y^j for j1k
然后我们根据另一个特征图 Φ ^ ∈ R W R × H R × k \hat{\Phi} \in \mathcal{R}^{\frac{W}{R} \times \frac{H}{R} \times k} Φ^RRW×RH×k的第j个关节上的子图 R W R × H R \mathcal{R}^{\frac{W}{R} \times \frac{H}{R}} RRW×RH上的值>0.1的位置记录下来,一共有 n j n_j nj个,也就是第j个关节可能出现的位置 L j = { l ~ j i } i = 1 n j L_{j}=\left\{\tilde{l}_{j i}\right\}_{i=1}^{n_{j}} Lj={l~ji}i=1nj。然后在所有第j个关节可能出现的位置上,找到和中心点位于 ( x ^ , y ^ ) (\hat{x}, \hat{y}) (x^,y^)位置的第j个关节的粗略位置 l j l_j lj最接近的那个位置 l ∈ L j l \in L_j lLj,这个位置对应的偏移就是我们应该加到 l j l_j lj上的偏移。

我这里的疑问是:为什么还要引入 Φ ^ \hat{\Phi} Φ^而不直接预测基于当前粗略的关节位置,对应到预测的offset图上。这样不是更加简单一些吗?

(六)实现上的一些细节问题

image-20201103163514352

backbone采用了四种方式:ResNet-18, ResNet-101 [55], DLA-34 [58], and Hourglass-104 。并且使用可变形卷积层(deformable convolution layers)修改了ResNets以及DLA-34。

  • Hourglass-104首先将输入下采样4倍,然后是两个连续的Hourglass Module。每个Hourglass Module是一个带有跳跃连接的对称的5层down- and up-convolutional network。这个网络相当大,但是产生了最优关键点估计

  • ResNet,使用3个up-convolutional networks对标准的残差网络进行扩充,使得网络能有一个更高的输出分辨率(输出步长为4),3个上卷积网络的特征图通道分别为256,128,64.并且在每一个上卷积网络前增加一个3 × 3的可变形卷积层。上卷积核被初始化为双线性插值。

  • DLA是一个带有层间跳跃连接的图像分类网络,我们利用DLA的完全卷积上采样版本进行密集预测,它使用迭代深度聚合来对称地提高feature map的分辨率,我们用从较低层到输出的可变形卷积来增强跳跃连接,在具体实现上,我们是使用3*3的可变形卷积代替原始卷积的。

    并且在每一个输出head前增加了一个256通道的 3 × 3 3\times3 3×3的卷积层,最后经过 1 × 1 1\times1 1×1卷积产生最后的输出。

6.1 训练阶段

  • 训练我们以512 × 512的输入分辨率进行训练。所有模型产生的输出分辨率为128×12。
  • 我们使用随机翻转、随机缩放(在0.6到1.3之间)、裁剪和颜色抖动作为数据增强,
  • 并使用Adam[28]来优化整体目标。
  • 我们不使用增强来训练3D估计分支,因为裁剪或缩放会改变3D测量。
  • 对于residual网络和DLA-34,batchsize=128(在8个GPU上),他们的学习率策略没有理解。对于Hourglass-104,使用batchsize=29(在5个GPU上,主GPU批处理大小为4),学习率也没有看明白。
  • 在检测时,我们从ExtremeNet [61]微调Hourglass-104以节省计算。Resnet101和DLA-34的下采样层用ImageNet预处理初始化,上采样层随机初始化。

6.2 Inference阶段

使用了3种级别的测试增强:no augmentation, flip augmentation, and flip and multi-scale(0.5, 0.75, 1, 1.25, 1.5)

在flip中,在编码bounding box之前对网络输出进行一个平均,

在multi-scale中,使用NMS合并结果。

(七)实验

在MS COCO上进行实验,我们报道的评价指标为:report average precision over all IOU thresholds (AP), AP at IOU thresholds 0.5(AP50) and 0.75 (AP75).

实验1

image-20201103165738292

Hourglass-104以相对较好的速度实现了最好的精度,并且在该backbone上的表现,CenterNet要优于CornerNet。运行时间的改进来自更少的output heads和更简单的box decoding方案。更高的精度表明中心点比拐角或极值点更容易检测。

实验2

然后再和一些state of art的网络进行比较:

image-20201103170455679

实验3

当两个不同的物体完全对齐,它们可能会共享同一个中心。在这种情况下,CenterNet将只检测到其中的一个。我们从研究这种情况在实践中发生的频率开始,并将它和一些和CenterNet能竞争的方法漏检情况联系起来。

首先就是统计CenterNet失效的情况(看看人家这定量分析,这是服了)

COCO训练集中614对物体以步幅4碰撞到同一个中心点,总共有860001个对象,概率小于 0.1 0.1 0.1%,这要比slow or fast RCNN由于inperfect region proposals(大约2%)造成的漏检小。

并且,比由于不充分的anchor放置,导致的anchor-based方法的漏检(20.0% for Faster-RCNN with 15 anchors at 0.5 IOU threshold)要小

最后,715对物体的IoU超过了0.7,这对于基于anchor的方法来说,在检测时很容易将两个框中的一个去掉,导致目标的漏检

因此我们漏检的概率是非常的小的。

实验4

我们说了我们的CenterNet可以不用做NMS这些后处理,我们口气那么大,肯定是有实验证明的

我们分别使用和不使用NMS做后处理,得到的AP结果对于DLA-34 (flip-test),从39.2% 变到 39.7%。对于Hourglass-104,AP还是保持42.2%。嗨,干脆不用了。

实验5

对于我们新增加的超参数,我们要做Ablation实验。我们选一个网络来做,DLA-34

实验5.1

image-20201103173322776

训练期间,我们将输入分辨率固定为512×512。

测试阶段,我们有两种方式:1.保持原来分辨率,然后将网络零填充到网络的最大步长(stide),对于ResNet以及DLA分别零填充32个pixels,对于HourglassNet,零填充128个pixels。2.固定分辨率进行测试。

从上图中可以看出,使用原图加零填充取得了最佳的效果,我想知道这里的原图是多大,会不会比512还大?

实验5.2

image-20201103193250505

回归损失比较了一个普通的L1损失以及一个smooth L1损失,看看哪个要好一些,普通L1的效果比smooth L1好的挺多的啊,这个地方解释很少啊,为什么L1损失要更好一些呢?

实验5.3

image-20201103193909837

调整损失函数中的 λ s i z e \lambda_{size} λsize也就是长宽回归的损失的权重,增大 λ s i z e \lambda_{size} λsize使得AP显著下降,这个因为长宽损失的范围是0到w和h(这里我觉得应该是这个,单看论文的话)而不是0-1,因此增加 λ s i z e \lambda_{size} λsize会显著增加网络对w和h的回归,而其他损失回归就会差很多,会造成网络精度的下降。

实验5.4

image-20201103194426561

epoch=140的情况是:前90epoch训练,然后进行学习率下降,再训练50个epoch

epoch=230的情况是:前180epoch训练,然后进行学习率下降,再训练50个epoch。

虽然性能会提升,但是相比于时间成本来说,不是很划算,为了节省计算资源(和北极熊),我们在消融实验中使用了140个epoch,但与其他方法相比,DLA使用了230个epoch。

实验5.5

作者他们还尝试了回归到一个以上的anchor上,但是实验没有取得成功

实验6

image-20201103195213683

我们的方法表现在AP和AOS指标上和同行不相上下,在BEV中略胜一筹。同时我们的CenterNet比这两种方法都快两个数量级。就是强

实验7

image-20201103195530579

我觉得这里的reg指的就是我之前问的问题,直接在预测的粗糙的关节点位置,加上预测的offsets训练出来的,而jd应该是增加了 Φ ^ \hat \Phi Φ^的关节位置的预测的情况,使得网络的性能得到了提升,实现了通用性的说明!

(八)Notes

1. 本文中的方法和anchor-based one-stage的方法很接近。

center point被看成是一个形状未知的anchor。不同之处在于:

  • 没有手动设置阈值用于前景和背景的分类
  • 每个物体而言,我们只有一个positive “anchor”,不需要做NMS
  • 具有larger output resolution(输出下采样比例为4),相比于传统的目标detectors(输出下采样比例到16),这样就不需要使用multiple anchors了,对于不同scale的特征图,使用不同大小的anchor。

2. 损失函数是怎么得到的呢?

符号说明:

I ϵ R W × H × 3 I\epsilon R^{W\times H\times 3} IϵRW×H×3为输入图像,其宽W,高H。我们目标是生成关键点热力图 Y ^ ϵ [ 0 , 1 ] W R × H R × C \hat{Y}\epsilon [0,1]^{\frac{W}{R}\times \frac{H}{R}\times C} Y^ϵ[0,1]RW×RH×C,其中R 是输出stride(即尺寸缩放比例),C是关键点类型数(即输出特征图通道数);关键点类型有: C = 17 的人关节点,用于人姿态估计; C = 80 的目标类别,用于目标检测。我们默认采用下采用数为R=4 ; Y ^ x , y , c = 1 \hat{Y}_{x,y,c}=1 Y^x,y,c=1表示检测到的关键点; Y ^ x , y , c = 0 \hat{Y}_{x,y,c}=0 Y^x,y,c=0表示背景;我们采用了几个不同的全卷积编码-解码网络来预测图像 I得到的 Y ^ \hat{Y} Y^stacked hourglass network , upconvolutional residual networks (ResNet), deep layer aggregation (DLA)

我们训练关键点预测网络时参照了Law和Deng (H. Law and J. Deng. Cornernet: Detecting objects as

paired keypoints. In ECCV, 2018.) 对于 Ground Truth(即GT)的关键点 c ,其位置为 p ϵ R 2 p \epsilon R^{2} pϵR2 ,计算得到低分辨率(经过下采样)上对应的关键点 p ~ = ⌊ p R ⌋ \tilde{p}=\left \lfloor \frac{p}{R} \right \rfloor p~=Rp. 我们将 GT 关键点 通过高斯核 Y x y c = exp ⁡ ( − ( x − p ~ x ) 2 + ( y − p ~ y ) 2 2 σ p 2 ) Y_{x y c}=\exp \left(-\frac{\left(x-\tilde{p}_{x}\right)^{2}+\left(y-\tilde{p}_{y}\right)^{2}}{2 \sigma_{p}^{2}}\right) Yxyc=exp(2σp2(xp~x)2+(yp~y)2)分散到热力图 Y ∈ [ 0 , 1 ] W R × H R × C Y \in[0,1]^{\frac{W}{R} \times \frac{H}{R} \times C} Y[0,1]RW×RH×C 上,其中 σ p \sigma_{p} σp目标尺度-自适应 的标准方差。如果对于同个类 c (同个关键点或是目标类别)有两个高斯函数发生重叠,我们选择元素级(element-wise maxi-mum)最大的。

训练目标函数如下,像素级逻辑回归的focal loss:
L k = 1 N ∑ x y c { ( 1 − Y ^ x y c ) α log ⁡ ( Y ^ x y c )  if  Y x y c = 1 ( 1 − Y x y c ) β ( Y ^ x y c ) α log ⁡ ( 1 − Y ^ x y c )  otherwise  L_{k}=\frac{1}{N} \sum_{x y c}\left\{\begin{array}{cl} \left(1-\hat{Y}_{x y c}\right)^{\alpha} \log \left(\hat{Y}_{x y c}\right) & \text { if } Y_{x y c}=1 \\ \left(1-Y_{x y c}\right)^{\beta}\left(\hat{Y}_{x y c}\right)^{\alpha} \log \left(1-\hat{Y}_{x y c}\right) & \text { otherwise } \end{array}\right. Lk=N1xyc(1Y^xyc)αlog(Y^xyc)(1Yxyc)β(Y^xyc)αlog(1Y^xyc) if Yxyc=1 otherwise 

其中 α \alpha α β \beta β是focal loss的超参数,分别用于调整正确分类样本和错误分类样本之间,正负样本之间的权重关系,实验中两个数分别设置为2和4, N是图像 I I I 中的关键点个数,这里的关键点值得是所有 Y x y c = 1 Y_{xyc}=1 Yxyc=1的点吗?,除以N主要为了将所有focal loss归一化。


由于图像下采样时,GT的关键点会因数据是离散的而产生偏差,我们对每个中心点附加预测了个局部偏移 O ^ ∈ R W R × H R × 2 \hat{O} \in \mathcal{R}^{\frac{W}{R} \times \frac{H}{R} \times 2} O^RRW×RH×2 所有类别 c 共享同个偏移预测(也就是说我们这里假设C个类别的中心不会在同一个位置),

这个偏移用 L1 loss来训练:
L o f f = 1 N ∑ p ∣ O ^ p ~ − ( p R − p ~ ) ∣ L_{o f f}=\frac{1}{N} \sum_{p}\left|\hat{O}_{\tilde{p}}-\left(\frac{p}{R}-\tilde{p}\right)\right| Loff=N1pO^p~(Rpp~)
很明显,这里只计算了关键点位置的offset损失。


( x 1 ( k ) , y 1 ( k ) , x 2 ( k ) , y 2 ( k ) ) \left(x_{1}^{(k)}, y_{1}^{(k)}, x_{2}^{(k)}, y_{2}^{(k)}\right) (x1(k),y1(k),x2(k),y2(k))表示第k个物体的边界框(这里 x 1 ( k ) x_{1}^{(k)} x1(k)应该表示的是box在x方向的像素坐标最小值, x 1 ( k ) x_{1}^{(k)} x1(k)表示的是box在x方向像素坐标的最大值),他的类别为 c k c_k ck,因此,其中心点坐标为: ( x 1 ( k ) + x 2 ( k ) 2 , y 1 ( k ) + y 2 ( k ) 2 ) \left(\frac{x_{1}^{(k)}+x_{2}^{(k)}}{2}, \frac{y_{1}^{(k)}+y_{2}^{(k)}}{2}\right) (2x1(k)+x2(k),2y1(k)+y2(k)),之前我们已经预测了所有的Center Keypoints,需要对长宽进行回归,这里作者采取的回归方法是直接回归像素级的长和宽,而不是使用对尺度进行归一化的方法,即 s k = ( x 2 ( k ) − x 1 ( k ) , y 2 ( k ) − y 1 ( k ) ) s_{k}=\left(x_{2}^{(k)}-x_{1}^{(k)}, y_{2}^{(k)}-y_{1}^{(k)}\right) sk=(x2(k)x1(k),y2(k)y1(k)),和之前offsets中假设相同,对于所有类别目标回归wh值 S ^ ∈ R W R × H R × 2 \hat{S} \in \mathcal{R}^{\frac{W}{R} \times \frac{H}{R} \times 2} S^RRW×RH×2

(也就是在特征图上(4倍下采样原图),C个类别的中心不会在同一个位置,或者说4个像素位置的大小,我们假设只存在一个物体,很显然物体的大小是要大于4个像素的,我们认为这个假设是合理的)

这里的长宽回归我们同样也使用L1损失函数:和offsets损失相同,我们同样仅对所有的目标点计算损失
L size = 1 N ∑ k = 1 N ∣ S ^ p k − s k ∣ L_{\text {size}}=\frac{1}{N} \sum_{k=1}^{N}\left|\hat{S}_{p_{k}}-s_{k}\right| Lsize=N1k=1NS^pksk
整体损失函数为:
L det = L k + λ size L size + λ off L off L_{\text {det}}=L_{k}+\lambda_{\text {size}} L_{\text {size}}+\lambda_{\text {off}} L_{\text {off}} Ldet=Lk+λsizeLsize+λoffLoff
作者论文中的设定为: λ off = 0.1 \lambda_{\text {off}}=0.1 λoff=0.1并且 λ size = 1 \lambda_{\text {size}}=1 λsize=1

(九)问题

问题1:offsets损失中的 O ^ p ~ \hat{O}_{\tilde{p}} O^p~和wh回归损失中的 S ^ p k \hat{S}_{p_{k}} S^pk在网络中的表示形式,

或者说怎么利用网络架构得到损失的计算值的?

问题2:3D目标检测以及位姿估计任务的最终输出向量大小

不知道这三种网络之间存在着的差异是什么?需要看看代码实现

问题3: 在inference确定key points时候保留的top 100个峰值指的是对每一个类别都保留还是全部类别一共保留前100个?