人体姿态估计_CVPR2020_heatmap新思考


目前在人体姿态估计任务中,广泛采用heatmap作为训练目标,heatmap的编码和解码都遵从固定范式,却从未被深入探究。
不同于大量对网络结构的创新,CVPR 2020 中出现了两篇文章对heatmap提出了新的理解,并引入了无偏的编码/解码方式。这也揭示了一个全新的研究方向。


一、回顾heatmap的传统编解码方式

heatmap是keypoints的概率分布图,通常建模成围绕每个keypoint的高斯分布的叠加。

编码(encoding):原始图像 --> ground truth heatmap
解码(decoding):predicted heatmap --> 原始图像中的keypoint坐标

受限于计算开销,原始图像通常需要进行下采样,再输入网络中;预测出来的heatmap中的坐标信息也需要恢复到原始图像尺度。在这个过程中,就引入了sub-pixel的系统量化误差

传统的编码过程包括:

  1. 下采样
    g ′ = ( u ′ , v ′ ) = g λ = ( u λ , v λ ) \boldsymbol{g}^{\prime}=\left(u^{\prime}, v^{\prime}\right)=\frac{\boldsymbol{g}}{\lambda}=\left(\frac{u}{\lambda}, \frac{v}{\lambda}\right) g=(u,v)=λg=(λu,λv)
  2. 量化
    g ′ ′ = ( u ′ ′ , v ′ ′ ) =  quantise  ( g ′ ) =  quantise  ( u λ , v λ ) \boldsymbol{g}^{\prime \prime}=\left(u^{\prime \prime}, v^{\prime \prime}\right)=\text { quantise }\left(\boldsymbol{g}^{\prime}\right)=\text { quantise }\left(\frac{u}{\lambda}, \frac{v}{\lambda}\right) g=(u,v)= quantise (g)= quantise (λu,λv)
  3. 高斯分布生成
    G ( x , y ; g ′ ′ ) = 1 2 π σ 2 exp ⁡ ( − ( x − u ′ ′ ) 2 + ( y − v ′ ′ ) 2 2 σ 2 ) \mathcal{G}\left(x, y ; \boldsymbol{g}^{\prime \prime}\right)=\frac{1}{2 \pi \sigma^{2}} \exp \left(-\frac{\left(x-u^{\prime \prime}\right)^{2}+\left(y-v^{\prime \prime}\right)^{2}}{2 \sigma^{2}}\right) G(x,y;g)=2πσ21exp(2σ2(xu)2+(yv)2)

传统的解码过程包括:

  1. 预测关节点的sub-pixel位置:一个常用做法是以最大值点为原点,向第二大值点偏移0.25个像素单位(0.25是人工设定的偏移量,至于为什么是0.25可以看下文UDP-Pose中的量化分析)
    p = m + 0.25 s − m ∥ s − m ∥ 2 \boldsymbol{p}=\boldsymbol{m}+0.25 \frac{s-\boldsymbol{m}}{\|\boldsymbol{s}-\boldsymbol{m}\|_{2}} p=m+0.25sm2sm
  2. 恢复到原图尺度
    p ^ = λ p \hat{p}=\lambda \boldsymbol{p} p^=λp

二、DARK-Pose

《Distribution-Aware Coordinate Representation for Human Pose Estimation》

这篇文章思路很直观,方法也很简单,符合直觉,看得很舒服。

它的核心思想就是编码和解码应保持一致性

在传统方法中,编码时我们将heatmap作为一种高斯概率分布,解码时却只利用了最大值信息。DARK-Pose认为模型预测出的heatmap应与ground truth有一致性,即假设预测出的heatmap也是一个高斯分布,我们应该利用整个分布的信息来进行keypoint的精确位置预测。具体地,通过泰勒二阶展开,我们可以预测从最大值点到真实keypoint的偏移。具体推导见论文。

在这里插入图片描述

整个解码过程如上图所示,其中第一步就是将预测出的heatmap进行平滑(使用与编码时相同的高斯核),消除真值附近的多个峰值;第二步是根据分布信息预测偏移;第三步是恢复到原图尺度。

编码过程中,不再进行量化,直接以sub-pixel精度的为中心点生成高斯分布。这就是无偏编码 unbiased encodinng。

这个改进是模型无关的,且计算量较小,可以非常轻松且无害地集成到现有方法中。在训练阶段,只需要修改ground truth heatmap的生成方式;在测试阶段,只需要修改predicted heatmap的解码方式。而模型的内部结构、训练方式、损失函数都不需要任何改变。

对于较小尺度的图片,该方法的精度提升更明显。

在这里插入图片描述

三、UDP-Pose

《The Devil Is in the Details: Delving Into Unbiased Data Processing for Human Pose Estimation》

这篇文章对有偏数据处理引入的系统误差进行了量化分析,并提出了无偏的数据处理流程(UDP,Unbiased Data Processing),适用于大部分top-down的检测算法。此处笔者存疑:为什么特意指出top-down算法,看流程感觉bottom-up算法也能用。此外,文中说该算法是模型无关的,但它对heatmap的处理改变了模型的预测输出,还是需要对结构和loss进行调整的,不如Dark-Pose那样轻量级。

1 量化分析

定义 k q \mathbf{k}_{q} kq 是一个关节点的在gt heatmap中量化后的坐标, R \mathcal{R} R是取整函数。
k q = ( m q , n q ) = R ( k ) = ( R ( m ) , R ( n ) ) \mathbf{k}_{q}=\left(m_{q}, n_{q}\right)=\mathcal{R}(\mathbf{k})=(\mathcal{R}(m), \mathcal{R}(n)) kq=(mq,nq)=R(k)=(R(m),R(n))
假设在最理想情况下,即预测出的heatmap与gt heatmap完全一致,那么可以定位最大值点
k ^ q = ( m ^ q , n ^ q ) = argmax ⁡ ( H ^ ) \hat{\mathbf{k}}_{q}=\left(\hat{m}_{q}, \hat{n}_{q}\right)=\operatorname{argmax}(\hat{\mathcal{H}}) k^q=(m^q,n^q)=argmax(H^)
我们预测的关节点坐标(以x轴为例)如下,其中 F \mathcal{F} F C \mathcal{C} C分别代表floor和ceil操作:
m ^ q = { F ( m )  if  m − F ( m ) < 0.5 C ( m )  otherwise  \hat{m}_{q}=\left\{\begin{array}{ll}\mathcal{F}(m) & \text { if } m-\mathcal{F}(m)<0.5 \\ \mathcal{C}(m) & \text { otherwise }\end{array}\right. m^q={F(m)C(m) if mF(m)<0.5 otherwise 

在这里插入图片描述
容易得出各方向的期望误差是 E ( ∣ m − m ^ q ∣ ) = E ( ∣ n − n ^ q ∣ ) = 1 / 4 E\left(\left|m-\hat{m}_{q}\right|\right)=E\left(\left|n-\hat{n}_{q}\right|\right)=1 / 4 E(mm^q)=E(nn^q)=1/4,这也是为什么传统解码会取0.25单位长度作为偏移量的原因。

2 UDP之encoding-decoding

提出了一种结合分类和回归的heatmap编解码方式。

编码时,生成一张二值的heatmap
H ( x , y , k ) = { 1  if  ( x − m ) 2 + ( y − n ) 2 < R 0  otherwise  \mathcal{H}(x, y, \mathbf{k})=\left\{\begin{array}{ll}1 & \text { if }(x-m)^{2}+(y-n)^{2}<R \\ 0 & \text { otherwise }\end{array}\right. H(x,y,k)={10 if (xm)2+(yn)2<R otherwise 
和两张offset map
X ( x , y , k ) = m − x Y ( x , y , k ) = n − y \begin{aligned} \mathcal{X}(x, y, \mathbf{k}) &=m-x \\ \mathcal{Y}(x, y, \mathbf{k}) &=n-y \end{aligned} X(x,y,k)Y(x,y,k)=mx=ny

(这显然需要改变原模型的尾部结构和loss)

解码时,首先用高斯模糊对三张预测的map都进行平滑,然后得到预测位置
k ^ = k ^ h + [ X ^ ( k ^ h , k ) ⊗ K , Y ^ ( k ^ h , k ) ⊗ K ] T \hat{\mathbf{k}}=\hat{\mathbf{k}}_{h}+\left[\hat{\mathcal{X}}\left(\hat{\mathbf{k}}_{h}, \mathbf{k}\right) \otimes K, \hat{\mathcal{Y}}\left(\hat{\mathbf{k}}_{h}, \mathbf{k}\right) \otimes K\right]^{T} k^=k^h+[X^(k^h,k)K,Y^(k^h,k)K]T
其中
k ^ h = argmax ⁡ ( H ^ ⊗ K ) \hat{\mathbf{k}}_{h}=\operatorname{argmax}(\hat{\mathcal{H}} \otimes K) k^h=argmax(H^K)

3 UDP之flip alignment

文中还提到,在inference过程中使用flip test时,会出现misalignment,引入系统误差。作者通过以unit length作为图片度量单位(取代pixel),优雅地解决了这个问题。数学公式较多,感兴趣的读论文。

比较有意思的一点是,通过误差的量化分析,发现原图尺寸更大时,该误差更小。这也从一个方面解释了为什么大尺寸的图片能够达到更高精度,而小尺寸的图片检测精度较差。

在这里插入图片描述

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值