CenterNet(Objects as Points)学习笔记

论文: Objects as Points
Code: https://github.com/xingyizhou/CenterNet

CenterNer的提出

  • 一般的detection方法将object识别成(无旋转的)矩形框。大部分成功的object检测器会枚举出很多object的位置和尺寸,对每一个候选框进行分类。这是浪费的、低效的。
  • 常规方法中的后处理方法(nms等)是很难微分(differentiate)和训练的。

本文中采取了一种不同的方法,它把object建模成一个点–对应bounding box的中心点, 该方法基于中心点,称作CenterNet。相比于对应的基于bbouding box的检测器,CenterNet是端到端可微分的,更简洁的,更快的,而且更精确的。

确立了中心点后,一些其他的特征,比如物体的尺寸,3D里的orientation, dimension, depth等信息,姿势估计里的关键点等信息,都可以直接该中心点的图像特征回归得到。因此,在这种思路下,object detection就是一个标准的关键点估计问题:把图像送入一个全卷积网络,产生一张heatmap,这张heatmap里的peaks就是物体的中心,在每一个peak位置的图像特征用来预测objects的宽度和高度。在检测时,没有nms作为后处理,是一个单一的forward-pass过程。

CenterNet方法是通用的,只需少量工作就可以扩展到其他的问题,如3D的object detection, 多人的姿态估计。实验结果也证明了这一点。

CenterNet 有什么优点?

  • 它不基于anchor,不需要很多人工设置的超参数(anchor的尺寸,anchor的正负overlap iou阈值)
  • 它不需要nms操作,容易训练
  • 输出的分辨率较大(output stride = 4), 传统的目标检测器一般为 output stride = 16, 因此它可以忽略了需要多个尺寸检测的需求
  • 相比于CornerNet、ExtremeNet等free-anchor的方法,它不需要把预测的点进行group的过程,因此更快。

CenterNet介绍

I ∈ R W ∗ H ∗ 3 I \in R^{W * H * 3} IRWH3表示一张宽W、高H的输入图像。CenterNet的目标是产生一张关键点heatmap Y ^ ∈ [ 0 , 1 ] W R ∗ H R ∗ C \hat Y \in [0, 1]^{\frac{W}{R} * \frac{H}{R}*C} Y^[0,1]RWRHC, R R R是输出的stride, C是关键点类别的数量, 在COCO的object detection里 C C C = 80。 R R R一般选用4。骨干网络论文中采取了stacked hourglass network, up-ResNet和deep layer aggregation(DLA).

整个网络的输出包含C + 4个通道,所有的这些输出共享相同的全卷积骨干网络。接下来介绍的loss函数里会详细说明为啥是+4通到

heatmap中的值只有0,1是如何实现的?从论文下面介绍来看,这里产生的heatmap的大小还是在0-1之间,表示置信度。之后再看一下源码,确认一下。

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表示是背景。

CenterNet的Loss函数

  • 关键点的分类loss

    对于每一个关键点 p ∈ R 2 p \in R^2 pR2, 设它的类别是 c c c, 我计算它的低分率表示 p ~ = ⌊ p R ⌋ \tilde p = \lfloor{\frac{p}{R}}\rfloor p~=Rp, 这样可以通过如下的高斯核得到一个ground truth的heatmap Y ∈ [ 0 , 1 ] W R ∗ H R ∗ C Y \in [0, 1]^{\frac{W}{R} * \frac{H}{R} * C} Y[0,1]RWRHC
    Y x y c = e x p ( − ( x − p ~ x ) 2 + ( y − p ~ y ) 2 2 σ p 2 ) Y_{xyc} = exp(-\frac{(x - \tilde p_x)^2 + (y - \tilde p_y)^2}{2\sigma^2_p}) Yxyc=exp(2σp2(xp~x)2+(yp~y)2)
    如果某一类的两个Gaussians重叠了,则选择最大值。

    loss函数为惩罚削减的逐像素的逻辑回归focal loss

    L k = − 1 N Σ x y c = { ( 1 − Y ^ x y c ) α l o g ( Y ^ x y c ) , Y x y c = 1 ( 1 − Y x y c ) β ( Y ^ x y c ) α l o g ( 1 − Y ^ x y c ) , o t h e r s L_k = \frac{-1}{N}\Sigma_{xyc} = \begin{cases} (1-\hat Y_{xyc})^\alpha log(\hat Y_{xyc}), Y_{xyc} = 1 \\\\ (1-Y_{xyc})^\beta (\hat Y_{xyc})^\alpha log(1 - \hat Y_{xyc}), others \end{cases} Lk=N1Σxyc=(1Y^xyc)αlog(Y^xyc),Yxyc=1(1Yxyc)β(Y^xyc)αlog(1Y^xyc),others
    α \alpha α β \beta β是focal loss中的超参数,这里设置为 α = 2 \alpha = 2 α=2, β = 4 \beta = 4 β=4 N N N是在图像 I I I里的关键点的数量,选择N进行归一化。

  • 偏移(offset) loss
    由于output stride的存在,也产生了离散化误差, p R − p ~ = p R − ⌊ p R ⌋ \frac{p}{R} - \tilde p = \frac{p}{R} - \lfloor{\frac{p}{R}}\rfloor Rpp~=RpRp,所以在每个中心点处也预测偏移 O ^ ∈ R W R ∗ W R ∗ 2 \hat O \in R^{\frac{W}{R} * \frac{W}{R} * 2} O^RRWRW2,所有的c个类别贡献偏移预测量。

    偏移loss采取的L1 loss,
    L o f f = 1 N Σ p ∣ O ^ p ~ − ( p R − p ~ ) ∣ L_{off} = \frac{1}{N} \Sigma_p|\hat O_{\tilde p} - (\frac{p}{R} - \tilde p)| Loff=N1ΣpO^p~(Rpp~)

    偏移loss只计算在关键点位置 p ~ \tilde p p~的误差,其它所有的位置都会被忽略掉。

  • 尺寸loss(宽、高)

    ( x 1 ( k ) , y 1 ( k ) , x 2 ( k ) , y 2 ( k ) ) (x_1^{(k)}, y_1^{(k)}, x_2^{(k)}, y_2^{(k)}) (x1(k),y1(k),x2(k),y2(k))表示objcet的bounding box, 它的类别是 c k c_k ck
    我们使用 Y ^ \hat Y Y^来预测中心点,除此之外,论文中还要对每一个object k进行回归尺寸 s k = ( x 2 ( k ) − x 1 ( k ) , y 2 ( k ) − y 1 ( k ) ) s_k = (x_2^{(k)} - x_1^{(k)}, y_2^{(k)} - y_1^{(k)}) sk=(x2(k)x1(k),y2(k)y1(k))

    为了减轻计算负担,论文中对所有的object类别采用单一的尺寸预测 S ^ ∈ R W R ∗ H R ∗ 2 \hat S \in R^{\frac{W}{R} * \frac{H}{R} * 2} S^RRWRH2, 尺寸loss也采用L1 loss,

    L s i z e = 1 N Σ k = 1 N ∣ S ^ p k − s k ∣ L_{size} = \frac{1}{N}\Sigma_{k=1}^N|\hat S_{pk} - s_k| Lsize=N1Σk=1NS^pksk

    这里没有对尺度(scale)进行归一化,而是直接使用了元素图像的坐标。

训练的总的loss为
L d e t = L k + λ s i z e L s i z e + λ o f f L o f f L_{det} = L_k + \lambda_{size}L_{size} + \lambda_{off}L_{off} Ldet=Lk+λsizeLsize+λoffLoff
其中, λ s i z e = 0.1 , λ o f f = 1 \lambda_{size} = 0.1, \lambda_{off} = 1 λsize=0.1,λoff=1

CenterNet的预测

在预测时首先独立的在heatmaps提取每一个类别的peaks。作者把heatmap中大于等于8邻域的位置当做是peaks,并选取top 100。

CenterNet最终预测多少个检测框呢或者通过什么方式控制的呢?有待解决

P ^ c \hat P_c P^c表示类别c的n个检测中心, P ^ = ( x ^ i , y ^ i ) i = 1 n \hat P = {(\hat x_i, \hat y_i)}_{i=1}^n P^=(x^i,y^i)i=1n, 每一个关键点位置的坐标都是整数 ( x i , y i ) (x_i, y_i) (xi,yi), Y ^ x i , y i , c \hat Y_{x_i, y_i, c} Y^xi,yi,c是它检测的置信度,从而可以产生一个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 , ) (\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,) (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,)

其中 ( δ x ^ i , δ y i ) = O ^ x ^ i , y ^ i (\delta \hat x_i, \delta y_i) = \hat O_{\hat x_i, \hat y_i} (δx^i,δyi)=O^x^i,y^i是偏移量, ( w ^ i , h ^ i ) = S ^ x ^ i , y ^ i (\hat w_i, \hat h_i) = \hat S_{\hat x_i, \hat y_i} (w^i,h^i)=S^x^i,y^i是尺寸预测。

Peak keypoint提取可以同可以通过 3 x 3 的 maxpooling操作实现。

CenterNet的性能

速度和精度如下所示

CenterNet(Objects as Points)学习笔记_第1张图片

CenterNet(Objects as Points)学习笔记_第2张图片

CenterNet有什么缺点

  • 当两个不同的object完美的对齐,可能具有相同的center,这个时候只能检测出来它们其中的一个object。

不确定的地方

  • 每一个heatmap预测多少个object? 或者由heatmap怎么得到有效的center points?
  • 当两个不同的object完美的对齐,可能具有相同的center,这个时候只能检测出来它们其中的一个object。 为什么只能检测出一个?

你可能感兴趣的:(计算机视觉)