Human Pose Estimation with Iterative Error Feedback 论文解读

paper title: Human Pose Estimation with Iterative Error Feedback
paper link: https://arxiv.org/abs/1507.06550
oral or demo video:https://www.youtube.com/watch?v=dQ5Fa5IFaJ4
https://www.youtube.com/watch?v=p5n_apqyIwQ(网友测评)
project: -
github:https:https://github.com/pulkitag/ief
conf & anthor: CVPR 16,Joao Carreira et al
arXiv submit v1: 2015.07 google citation:286(2019.07.12)

姿态估计系列:

主要内容
前馈结构(如卷积神经网络)通常能够学习到输入空间的良好表达,但是无法在输出空间中对依赖关系进行显式的建模,例如人体姿态估计和物体分割任务中的结构化关系。这篇文章主要内容是提出了一个通用的框架,通过从输入和输出的联合空间学习特征提取器,对输入和输出空间中丰富的结构化信息进行建模。文章引入了自顶向下的反馈机制,不直接预测目标输出,而是在前馈过程中,预测当前估计的偏差并反馈迭代修正预测值,文中称之为IEF(Iterative Error Feedback)。

网络结构
IEF的基本结构如下图所示:
IEF
其中:

  • I I I表示输入的图像;
  • ϵ t \epsilon_t ϵt表示预测输出与真实值的偏差(可以看做是一个坐标的offset);
  • y t y_t yt表示第t次迭代后的预测输出输出,由上一次的 y t − 1 y_{t-1} yt1和当前预测的 ϵ t \epsilon_t ϵt得到,可以是直接相加,也可以是其他的非线性函数;
  • x t = I ⨁ y t x_t=I\bigoplus{y_t} xt=Iyt为卷积网络的输入, ⨁ \bigoplus 表示concat;
  • f ( ) f() f()表示前馈网络;
  • g ( ) g() g()表示从预测输出到视觉表示的一个映射,比如从输出的关节点位置到使用高斯分布模拟的heat map的映射;
    整个过程可以用数学表达式表示为:
    ϵ t = f ( x t )     ( 1 ) y t + 1 = y t + ϵ t     ( 2 ) x t + 1 = I ⨁ y t     ( 3 ) \epsilon_t=f(x_t) \ \ \ (1) \\ y_{t+1}=y_t+\epsilon_t \ \ \ (2)\\ x_{t+1}=I\bigoplus{y_t} \ \ \ (3) ϵt=f(xt)   (1)yt+1=yt+ϵt   (2)xt+1=Iyt   (3)

损失函数
L o s s = ∑ t T ∣ ∣ ϵ t , e ( y , y t ) ∣ ∣ 2     ( 4 ) Loss=\sum_t^T||\epsilon_t,e(y,y_t)||^2 \ \ \ (4) Loss=tTϵt,e(y,yt)2   (4)
在人体姿态估计中, e ( ) e() e()表示的是人体各关节点之间的误差。具体来说,人体关节点可表示为:
P : p k ∈ R 2 , k ∈ [ 1 , K ]     ( 5 ) P:{p^k\in R^2,k\in [1,K]} \ \ \ (5) P:pkR2,k[1,K]   (5)
y k y^k yk表示第k个关节点的位置,一共有K个关节点,第t次迭代中的t关节点的预测位置信息表示为 y t k y_t^k ytk,那么真实值与预测值之间的向量为:
u k = y k − y t k     ( 6 ) u^k=y^k-y_t^k \ \ \ (6) uk=ykytk   (6)
现在可以写出 e ( ) e() e()的具体形式:
e ( y , y t ) = ∑ k = 1 K m i n ( B , ∣ ∣ u k ∣ ∣ ) ∗ u k ∣ ∣ u k ∣ ∣ 2     ( 7 ) e(y,y_t)=\sum_{k=1}^Kmin(B,||u^k||)*\frac{u^k}{||u^k||_2} \ \ \ (7) e(y,yt)=k=1Kmin(B,uk)uk2uk   (7)
其中B表示每个关节点的偏移的最大范围,文章中设为20个像素点。

关于模型的训练:迭代初始的时候, y 0 y_0 y0设定一个初始值,经过 g ( y 0 ) g(y_0) g(y0)映射为heatmap,然后和图像一起送入 f ( ) f() f(),得到预测的校正值 ϵ t \epsilon_t ϵt,然后根据式(4)计算损失并反向传播更新网络参数, e ( ⋅ ) e(·) e()的形式在式(7)中给出。当距离回归目标较远的时候,由B确定了最大的目标回归偏移量;当距离目标较近的时候,回归的偏移是B的一个缩放,但方向仍然是一致的。
这里有一个关键的地方,文章中提到,文章中只假设在训练过程中只有人体关节点的真实值 y y y,但是不知道每次迭代过程中的 y 1 , y 2 , y 3 , . . . y_1,y_2,y3,... y1,y2,y3,...是多少。文章给出的一个简单的解决方法是,预先定义好这些值,由于 y 0 y_0 y0是已知的,则 y 1 y_1 y1可以根据 e ( y , y 0 ) + y 0 e(y,y_0)+y_0 e(y,y0)+y0计算得到,同理可以计算出其他值。这样在训练的时候,当进入第2个step时,使用的 y 1 y_1 y1直接是上述计算出来的值,而不是用 y 0 y_0 y0加上网络输出的偏移。
按照上面的处理,实际上每个迭代的step中,都是在回归一小步,做一个局部的优化。当距离目标较远时,每一步的优化的偏移都是固定的,接近真实目标的时候(偏移量小于B),优化的的偏移是之前的一个缩放量。这样的处理简化了学习问题,给定一张图片和初始的关节点位置,模型需要做的是预测一个固定方向的偏移量来移动关节点,并且在接近真实值的时候,减小移动的长度。
关于网络输入:网络的输入尺寸是 W x H x ( 3 + 16 + 1 ) WxHx(3+16+1) WxHx(3+16+1),W和H分别表示图像的宽高,3为RGB图像有三个通道,16为预测16个人体关节点,这里的1是一个marking-point,这个点位于是人体区域内的某一位置。
在图像中,以marking-point为中心,以图像短边长的0.3~1.4倍为边长裁剪9个box并缩放至256x256,然后选择最接近1.2倍人体高度的3个box,然后用这些图像上的224x224大小随机裁剪的patch进行训练;在测试的时候,会用一个VGG-S网络去预测9个box中的哪一个最接近1.2倍的人体高度。

论文结果
1.MPII数据集上,PCKh@0.5为81.3%;
2.LSP数据集上,PCP为72.5%。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值