• 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})

  • 相关阅读:
    php数组函数array_slice、array_splice
    php使用curl_init()和curl_multi_init()多线程的速度比较详解
    mysql忘记root密码
    php的RSA非对称加密
    phpstudy开启xdebug
    Centos7系统yum安装软件 No more mirrors to try
    python数据分析与数据可视化入门级
    第一周博客总结
    python——pandas初体验
    第十六周博客总结
  • 原文地址:https://www.cnblogs.com/yongjieShi/p/14812145.html
Copyright © 2020-2023  润新知