CenterNet论文阅读笔记

  • (一)Title
  • (二)Summary
  • (三)Research Objective
  • (四)Problem Statement
  • (五)Method
    • 5.1 Loss Fuction
    • 5.2 网络架构和inference
      • 5.2.1 目标检测任务
      • 5.2.2 3D目标检测任务
      • 5.2.3 人体位姿估计
  • (六)实现上的一些细节问题
    • 6.1 训练阶段
    • 6.2 Inference阶段
  • (七)实验
    • 实验1
    • 实验2
    • 实验3
    • 实验4
    • 实验5
      • 实验5.1
      • 实验5.2
      • 实验5.3
      • 实验5.4
      • 实验5.5
    • 实验6
    • 实验7
  • (八)Notes
    • 1. 本文中的方法和anchor-based one-stage的方法很接近。
    • 2. 损失函数是怎么得到的呢?
  • (九)问题
    • 问题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个?

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

(一)Title

  • CenterNet:Objects as Points论文笔记

(二)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​(x−p~​x​)2+(y−p~​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​=N1​xyc∑​⎩⎨⎧​(1−Y^xyc​)αlog(Y^xyc​)(1−Yxyc​)β(Y^xyc​)αlog(1−Y^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}) (Rp​−p~​),其中 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​=N1​p∑​∣∣∣​O^p~​​−(Rp​−p~​)∣∣∣​
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​=N1​k=1∑N​∣∣∣​S^pk​​−sk​∣∣∣​
最终的整体损失
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​+λsize​Lsize​+λoff​Loff​

5.2 网络架构和inference

图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^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),​
所有的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^k​∈R,γ^​k​∈R3,α^k​∈R8。

  • 网络预测depth输出为 D ^ ∈ [ 0 , 1 ] W R × H R \hat{D} \in[0,1]^{\frac{W}{R} \times \frac{H}{R}} D^∈[0,1]RW​×RH​,depth很难直接去回归,作者令网络的输出经过变换 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​=N1​k=1∑N​∣∣∣∣∣∣​σ(d^k​)1​−1−dk​∣∣∣∣∣∣​

  • 预测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​=N1​k=1∑N​∣γ^​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 bi​∈R2用于softmax分类表示,(疑问为什么一个bin里面的softmax 分类是2维的?)。剩下两个标量 a i ∈ R 2 a_i\in R^2 ai​∈R2表示到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​=N1​k=1∑N​i=1∑2​(softmax(b^i​,ci​)+ci​∣a^i​−ai​∣)
    其中 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 j∈1…k
然后我们根据另一个特征图 Φ ^ ∈ 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 l∈Lj​,这个位置对应的偏移就是我们应该加到 l j l_j lj​上的偏移。

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

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

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

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

实验2

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

实验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

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

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

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

实验5.2

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

实验5.3

调整损失函数中的 λ 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

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

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

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

实验5.5

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

实验6

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

实验7

我觉得这里的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​(x−p~​x​)2+(y−p~​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​=N1​xyc∑​⎩⎨⎧​(1−Y^xyc​)αlog(Y^xyc​)(1−Yxyc​)β(Y^xyc​)αlog(1−Y^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​=N1​p∑​∣∣∣​O^p~​​−(Rp​−p~​)∣∣∣​
很明显,这里只计算了关键点位置的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​=N1​k=1∑N​∣∣∣​S^pk​​−sk​∣∣∣​
整体损失函数为:
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​+λsize​Lsize​+λoff​Loff​
作者论文中的设定为: λ 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个?

CenterNet:Objects as Points论文阅读笔记相关推荐

  1. CenterNet:Objects as Points论文学习笔记+代码复现(demo+训练数据)【检测部分】

    目录 1.关键部分Heatmap了解 2.Centernet论文细节: 3.尝试复现CneterNet--INSTALL.md安装: 4.尝试复现CneterNet--跑跑demo.py: 5.尝试复 ...

  2. 论文精读——CenterNet :Objects as Points

    论文精读--CenterNet :Objects as Points 论文地址:https://arxiv.org/pdf/1904.07850.pdf 机构:UT Austin,UC Berkele ...

  3. centernet: objects as points

    轻松掌握 MMDetection 中常用算法(七):CenterNet - 知乎文@ 0000070 摘要 在大家的千呼万唤中,MMDetection 支持 CenterNet 了!! CenterN ...

  4. 《Segment as Points for Efficient Online Multi-Object Tracking and Segmentation》论文阅读笔记

    <Segment as Points for Efficient Online Multi-Object Tracking and Segmentation>论文阅读笔记 1.介绍 2.相 ...

  5. 论文阅读笔记——DLT-Net: Joint Detection of Drivable Areas, Lane Lines, and Traffic Objects)

    论文阅读笔记--DLT-Net: Joint Detection of Drivable Areas, Lane Lines, and Traffic Objects 论文简介 1 引言 2 DLT- ...

  6. 论文阅读笔记 | 目标检测算法——SAPD算法

    如有错误,恳请指出. 文章目录 1. Introduction 2. Soft Anchor-Point Detector 2.1 Detection Formulation with Anchor ...

  7. FCGF论文阅读笔记

    FCGF论文阅读笔记 0. Abstract 从三维点云或者扫描帧中提取出几何特征是许多任务例如配准,场景重建等的第一步.现有的领先的方法都是将low-level的特征作为输入,或者在有限的感受野上提 ...

  8. PointConv论文阅读笔记

    PointConv论文阅读笔记 Abstract 本文发表于CVPR. 其主要内容正如标题,是提出了一个对点云进行卷积的Module,称为PointConv.由于点云的无序性和不规则性,因此应用卷积比 ...

  9. DCP(Deep Closest Point)论文阅读笔记以及详析

    DCP论文阅读笔记 前言 本文中图片仓库位于github,所以如果阅读的时候发现图片加载困难.建议挂个梯子. 作者博客:https://codefmeister.github.io/ 转载前请联系作者 ...

最新文章

  1. 宁德时代机器人编程开发_全球首例丨可编程的活体机器人已诞生,100%青蛙基因,超级计算机时代,将无所不能?!...
  2. 中文Python:中文编程不是梦
  3. PHP使用swoole来实现实时异步任务队列
  4. boost::mp11::mp_any相关用法的测试程序
  5. 工程师如何培养美学思维
  6. linux终端<Terminal>使用ping
  7. 大数据日志分析项目架构
  8. 50. Pow(x, n) (MATH)
  9. Matlab计算矩阵的行列式
  10. 通过ESP8266手机或电脑浏览器网页能控制远程任意组任意路继电器开关并收发单片机指令 测试OK
  11. Linux下 timerfd创建定时器并使用 epoll 监听
  12. Scrum敏捷开发实践之有道云笔记
  13. 深大uooc学术道德与学术规范教育第一章
  14. 配置故障转移群集,livemigration系列之七
  15. Hadoop基础入门学习
  16. TCP协议RST:RST介绍、什么时候发送RST包
  17. 爬取微博热搜制作词云
  18. lammps 案例in文件汇总
  19. MATLAB 安装 MCR
  20. 2021.1山科马原大题

热门文章

  1. 测试设计与黑盒测试方法(五)
  2. PyTorch 自定义卷积核「数据」
  3. FlutterComponent最佳实践之动画那些词儿
  4. Android学习路线指南,flutter登录页
  5. Python 内置函数功能汇总
  6. 20135223何伟钦—信息安全系统设计基础第六周学习总结
  7. YOLOv4 论文阅读笔记
  8. html+css+js 下拉菜单
  9. Python先生,你好!(2)——对数据进行标准化处理
  10. hisi及unbuntu编译opencv