zoukankan      html  css  js  c++  java
  • object as point阅读笔记

    object as point阅读笔记

    这篇文章做了啥

    作者的主要动机是,绝大多数的object detectors都几近枚举大量的潜在的物体locations并且对他们进行分类。这种方式是非常浪费的,不足够的,以及需要额外的后处理。在这篇文章中,我们采用了一种不一样的方法。作者将物体建模为一个点,这个点是其bbx的中心点。作者是使用关键点估计的方法来找到这个中心点,并且回归其他的物体特性,比如size或者是3D location,方向甚至是pose。

    作者提出来的这种方法,centernet是一个end2end的,可微分的,简单且快速,甚至比基于bbx的detectors还要快。centernet达到了最佳的speed-accuracy trade-off 在coco数据集上,

    比如AP达到28.1%,则帧率为142FPS,37.4%的AP,帧率能在52, 以及更高的45.1的AP,1.4FPS的帧率。

    作者使用同样的方法来在KITTI数据集中估计3D bbx,或者是COCO 的keypoint检测数据集上,同样的能比其他更复杂的keypoint检测算法达到更高的精度。

    方法初步

    假设输入的图片为(I in R^{W imes H imes 3}), 作者的目标是产生一个关键点heatmap (hat{Y} in[0,1]^{frac{W}{R} imes frac{H}{R} imes C}), 其中(R)是stride,C表示有多少个keypoint type,如果是人体姿态估计的话,则(C=17),如果是物体检测的话,则(C=80)。作者默认(R=4)。如果一个prediction (hat{Y}_{x, y, c}=1), 则对应为检测到的关键点,如果(hat{Y}_{x, y, c}=0),则为背景。我们使用一系列的不同的全卷积的encoder-decoder的网络结构来从一个image (I)里面来预测 (hat{Y}),网络结构主要包括stacked hourglass network, 上卷积的残差网络,以及DLA模块。

    作者follow Law和Deng的方法来训练keypoint prediction network。对于一个ground truth的keypoint (p in mathcal{R}^{2}),作者先做一个低分辨率的近似,来得到等效的点( ilde{p}=leftlfloorfrac{p}{R} ight floor), 然后,作者将所有的gt的点都放到一个heatmap (Y in[0,1]^{frac{W}{R} imes frac{H}{R} imes C}) , 其中

    [Y_{x y c}=exp left(-frac{left(x- ilde{p}_{x} ight)^{2}+left(y- ilde{p}_{y} ight)^{2}}{2 sigma_{p}^{2}} ight) ]

    而,(sigma_p)为随着物体尺寸而改变的物体的方差,如果同一类的两个高斯重叠的话,作者取element-wise maximum。训练的目标使用penalty-reduced pixel-wise logistic regression with focal loss:

    [L_{k}=frac{-1}{N} sum_{x y c}left{egin{array}{cl} left(1-hat{Y}_{x y c} ight)^{alpha} log left(hat{Y}_{x y c} ight) & ext { if } Y_{x y c}=1 \ left(1-Y_{x y c} ight)^{eta}left(hat{Y}_{x y c} ight)^{alpha} & \ log left(1-hat{Y}_{x y c} ight) & ext { otherwise } end{array} ight. ]

    其中(alpha)(eta)分别是focal loss的超参数。(N)表示图片中有多少keypoints.

    为了能够恢复通过output stride引入的量化误差,作者对每一个中心点都额外的预测了一个local offset

    [hat{O} in mathcal{R}^{frac{W}{R} imes frac{H^{prime}}{R} imes 2} ]

    所有的classes c都共享一个相同的offset prediction,offset使用L1 loss进行训练

    [L_{o f f}=frac{1}{N} sum_{p}left|hat{O}_{ ilde{p}}-left(frac{p}{R}- ilde{p} ight) ight| ]

    这个监督只在locations ( ilde{p})上进行约束,其他的location都会被忽略。

    Objects as Points

    (left(x_{1}^{(k)}, y_{1}^{(k)}, x_{2}^{(k)}, y_{2}^{(k)} ight))为物体(k),类别(c_k)的的bbx。作者使用他们的keypoint estimator (hat{Y}), 来预测所有的中心点,除此之外还会预测物体(k)的尺寸(s_{k}=left(x_{2}^{(k)}-x_{1}^{(k)}, y_{2}^{(k)}-y_{1}^{(k)} ight))。为了减少计算压力,作者对所有的物体种类都使用单个size predictor (hat{S} in mathcal{R}^{frac{W}{R} imes frac{H}{R} imes 2}). 同时作者使用了L1 loss,定义如下

    [L_{ ext {size }}=frac{1}{N} sum_{k=1}^{N}left|hat{S}_{p_{k}}-s_{k} ight| ]

    总共的训练的loss定义如下

    [L_{ ext {det }}=L_{k}+lambda_{ ext {size }} L_{ ext {size }}+lambda_{ ext {of } f} L_{ ext {off }} ]

    作者选取(lambda_{size} = 0.1)(lambda_{off}=1)

    作者只选取一个网络来预测关键点 (hat{Y}, ext { offset } hat{O}, ext { and size } hat{S})。所以通道一共是(C+4)个,每个位置的输出都是(C+4)个预测结果。

    在验证阶段,我们首先提取heatmap的peaks。然后检测所有的,pixel value大于其周围8个值的那些value,然后保存100个peak。假设(hat{mathcal{P}}_{c})是对C类,n个检测到的中心点的集合,可以表述为(hat{mathcal{P}}=left{left(hat{x}_{i}, hat{y}_{i} ight) ight}_{i=1}^{n})。作者使用key point values (hat{Y}_{x_{i} y_{i} c})作为检测的confidence的度量.对于预测的bbx,可以表示为

    [egin{array}{l} left(hat{x}_{i}+delta hat{x}_{i}-hat{w}_{i} / 2, quad hat{y}_{i}+delta hat{y}_{i}-hat{h}_{i} / 2 ight. \ left.hat{x}_{i}+delta hat{x}_{i}+hat{w}_{i} / 2, quad hat{y}_{i}+delta hat{y}_{i}+hat{h}_{i} / 2 ight) end{array} ]

    上述公式包含位置的偏差,以及预测得到的长宽。从关键点估计的所有的输出都能够被直接处理,而不需要IoU-based的NMS或者是其他的后处理。Peak keypoint extraction其实可以看做是NMS的一种替代方案,这种方案可以直接通过(3*3)的max pooling来实现。

    人体姿态估计

    人体姿态估计涉及到对每一个人实体,估计(k)个2D的人体关节点。对于coco而言,(k=17)。作者将pose视作中心点的(k*2)维度特性。作者直接使用l1 loss回归joint offsets (in pixels) (hat{J} in mathcal{R}^{frac{W}{R} imes frac{H}{R} imes k imes 2})

    作者忽视看不见的节点。为了更进一步refine这种keypoints, 作者进一步估计(k)个human关节的heatmap (hat{Phi} in mathcal{R}^{frac{W}{R} imes frac{H}{R} imes k}),使用的方法是标准的bottom-up的multi-human pose estimation方法。

    这里有一个疑问是:作者说的是使用multi-human pose estimation,并且引用了一些文献,我的问题是,这些文献是根据已经检测到的关键点来进行后期的姿态估计吗?

    作者还说,作者测center offset是用作一个group的cue。通过把每一个keypoint分配给最近的person instance。特别地,假设((hat{x}, hat{y}))为检测到的中心点,我们首先regress 所有的joint locations

    [l_{j}=(hat{x}, hat{y})+hat{J}_{hat{x} hat{y} j} ext { for } j in 1 ldots k ]

    然后作对于所有的joint type (j) 从对应的heatmap $hat{Phi} ldots j $ 提取了所有的关键点的位置(L_{j}=left{ ilde{l}_{j i} ight}_{i=1}^{n_{j}}). 然后作者对每一个regressed的location (l_j) 福一个它最近的detedted keypoint (arg min _{l in L_{j}}left(l-l_{j} ight)^{2})

  • 相关阅读:
    PNG文件格式具体解释
    opencv2对读书笔记——使用均值漂移算法查找物体
    Jackson的Json转换
    Java实现 蓝桥杯VIP 算法训练 装箱问题
    Java实现 蓝桥杯VIP 算法训练 装箱问题
    Java实现 蓝桥杯VIP 算法训练 单词接龙
    Java实现 蓝桥杯VIP 算法训练 单词接龙
    Java实现 蓝桥杯VIP 算法训练 方格取数
    Java实现 蓝桥杯VIP 算法训练 方格取数
    Java实现 蓝桥杯VIP 算法训练 单词接龙
  • 原文地址:https://www.cnblogs.com/yongjieShi/p/14812145.html
Copyright © 2011-2022 走看看