AlphaPose姿态估计论文翻译和代码解读RMPE: Regional Multi-Person Pose Estimation

本文主要是介绍AlphaPose姿态估计论文翻译和代码解读RMPE: Regional Multi-Person Pose Estimation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

姿态估计模型AlphoPose模型的论文 或者论文V3版 ICCV2017接收,上海交大和腾讯优图的论文
代码 ,基于pytorch或者Tensorflow
如果想了解姿态估计的简单概述,可以点击我的另一篇综述文章

RMPE: Regional Multi-Person Pose Estimation

Abstract

自然场景的多人姿态估计是一个极大的挑战。虽然最好的人类检测器已经有很好的效果了,但是,小的定位、识别的误差是不可避免的。这些误差可以引起单人姿态估计(SPPE)的错误,尤其是那些仅仅依赖检测结果的方法。本文中,我们我们创新的提出一个基于区域的多人姿态估计RMPE框架(regional multi-person pose estimation)来促进当下人类检测器输出的不太准确的包围框下姿态估计的性能。(个人评价:太贬低目标检测精度了,19年旷世研究说目标检测精度不是很低的话对姿态估计精度影响不大,详情点这)
我们的框架包含三个部分:

  1. 对称空间变换网络Symmetric Spatial Transformer Network (SSTN),在不准确的行人检测框中得到高质量的单人姿态估计,使用一个并行的SPPE分支来优化网络
  2. 参数化姿态最极大抑制Parametric Pose NonMaximum-Suppression (NMS),使用姿态距离测量来比较pose相似度,以此去除相似的Pose。使用数据驱动的方法来优化姿态距离参数。
  3. 姿态指导区域产生器Pose-Guided Proposals Generator (PGPG),来进行强化训练数据。通过学习输出结果中不同姿态的描述信息,我们模仿人体区域的生成过程来进一步产生更大的训练集。
    我们的方法能处理不准确的包围框和冗余的检测。在MPII上达到76.7mAP,带来了17%的提高

Introduction

多人姿态估计有两个主流方案:

  1. Two-step framwork,检测环境中每个人的包围框,独立的检测每个人体区域的姿态Top-down。姿态估计精度高,依赖目标检测框的质量
  2. Part-based framework,检测环境中所有关节节点,在拼接得到骨架Bottom-up。两个人距离近容易混起来。对全局的信息获取有欠缺

本文采用Top-down的方法。目标是检测出正确的人体姿态,即使目标检测框不是很精确。
我们使用Faster R-CNN检测网络和单人姿态估计SPPE Stacked Hourglass进行试验,主要的问题是位置识别错误和识别冗余。
图1
图2
图1和图2说明两个问题:
图1中,即便IOU大于0.5,但是过大过小的检测框都有可能导致检测不到关键点。
图2中,由于检测框独立识别姿态,因而冗余的检测框也会产生冗余的姿态估计无法去除(个人评价:你可能会说NMS会去除冗余的目标检测包围框,这个不算缺点,但是比较密集的人的情况下NMS效果会很差,会漏掉很多人)
我们的RMPE框架是通用的,适用不同的行人检测器和单人姿态估计模型。我们还进行了消融实验,验证了每个组件的有效性。

2 Related Work

2.1 单人姿态估计

传统方法考虑图结构模型。随机森林模型已经证明在姿态估计中非常有效。基于图的模型比如条件随机场random field models已经被广泛应用。
最近几年,深度学习方法中,包括DeepPose等。
都需要高性能目标检测器,这很难满足的其实

2.2多人姿态估计

Part-based Framework,基于部件的网络,最终的定位使用所有的激活的poselets来平均。
Two-step Framework,我们的工作也是two-step的,使用基于SPPE的CNN网络来估计姿态。分别提高目标检测器和单人姿态估计模型的性能。我们的论文致力于解决不精确的目标检测器结果下的单人姿态估计的最大效能

3基于区域的多人姿态估计RMPE

如图3的网络结构,对称STN包括STN和SDTN两个部分,分别在SPPE的前后。
STN接收包围框,SDTN产生pose推荐区域。并行的SPPE在训练阶段扮演额外的正则化矩阵。最后,参数化姿态NMS,即p-Pose NMS来消除冗余的姿态估计。
不同于传统的训练,我们训练SSTN和SPPE模型时通过PGPG来产生图像的。
图3
训练过程中并行的SPPE是为了避免局部最小值,并且进一步提高了SSTN的性能。
PGPG(pose-guided proposals generator )姿态指导区域产生器来增强训练样本。

3.1对称空间变换STN 和 并行SPPE

SPPE单人姿态估计是训练在单人图像上的,对定位错误十分敏感。通过微小的变化、修剪可提高SPPE效果。因而目标检测算法得到的人体包围框不适合SPPE。
SSTN 和 Parallen SPPE可以在不完美的人体检测结果下有效增强SPPE效果。
图4
图4表示了SSTN + Parallel SPPE模块的结构,SDTN结构接收一个由定位网络生成的参数θ,然后为反向转换计算参数γ。我们使用网格生成器和采样器去提取一个人的所在区域,在Parallel SPPE中,制定一个中心定位姿态标签。我们冻结Parallel SPPE的所有层的所有权重来增强STN去提取一个单人姿态区域。
STN and SDTN(spatial de-transformer network,空间反变换网络)。STN能很好地自动选取ROI,使用STN去提取一个高质量的人体区域框。

公式1
其中 θ 1 , θ 2 和 θ 3 θ_1,θ_2和θ_3 θ1θ2θ3都是二维空间的向量, x i s , y i s 和 x i t , y i t {x^s_i,y^s_i}和{x^t_i,y^t_i} xis,yisxit,yit分别表示转换之前的坐标和转换之后的坐标。在SPPE结束的时候,姿态结果会被映射到原始的人体区域框中(就是把姿态线绘制到对应的人体区域框中)。因此,SDTN应该将估计的人体姿态反映射回原图坐标中(这样子的话人体姿态线就会存在于原图尺寸的图像中)。SDTN中需要为反向转换和生成网格计算一个Y
公式2
因为SDTN是STN结构的反结构,所以可以得到
公式34
为了在SDTN中进行反向传播, ∂ J ( W , b ) / ∂ θ ∂J(W,b)/∂θ J(W,b)/θ 可以分解为
公式5
在得到高质量的人体检测框后,可以使用现成的SPPE算法来继续高精度的人体姿态检测,训练过程中,SSTN和SPPE共同更新参数。
(all:STN+SPPE+SDTN,姿态估计结果映射到原图,调整原本的框,使他更精确)

Parallel SPPE。为了进一步帮助STN去提取更好的人体区域位置,在训练阶段添加了一个Parallel SPPE分支。这个Paralell SPPE也是从STN中链接出来,然后和SPPE并行处理,但是SDTN被忽略掉。这个分支的人体姿态标签被指定为中心。更准确的说,SPPE网络的输出直接和人体姿态标签的真实值进行对比。在训练过程中会关闭Parallel SPPE的所有层。这个分支的权重是固定的,其目的是将姿态定位后产生的误差反向传播到STN模块。如果STN提取的姿态不是中心位置,那么Parallel SPPE会返回一个较大的误差。 通过这种方式,我们可以帮助STN聚焦在正确的中心位置并提取出高质量的区域位置。 在测试阶段,Parallel SPPE不会使用,因此只有在训练阶段Parallel SPPE才会产生作用。
Discussions。Parallel SPPE可以看作是训练阶段的正则化过程,有助于避免局部最优的情况(STN不能把姿态转换到提取到人体区域框的居中位置)。但是SDTN的反向修正可以减少网络的错误进而降低陷入局部最优的可能性。这些错误对于训练STN是很有影响的。通过Parallel SPPE,可以提高STN将人体姿态移动到检测框中间的能力。

感觉上似乎可以在SPPE的输出时添加一个中心定位点的回归损失来取代Parallel SPPE。然而,这种方法会降低我们整个系统的性能。尽管STN可以部分修改输入,但是不可能完美的将人定位在标签的位置。在坐标空间上的输入和SPPE标注的差异会很大程度的损害训练姿态估计的能力。这会导致我们主分支SPPE的性能下降。因此,为了确保STN和SPPE同时发挥自己的作用,一个固定权重的Parallel SPPE是不可缺少的。Parallel SPPE总是会产生较大的误差因为会将没有中心的姿态来推动STN产生一个有中心的姿态,但是不会影响到主分支SPPE的效果。

3.2 Parametric Pose NMS 参数化姿态非最大抑制

对于一个人的姿态Pi,有m 个关节点记做 ( k i 1 , c i 1 ) , ( k i 2 , c i 2 ) , . . . , ( k i m , c i m ) {(k^1_i,c^1_i),(k^2_i,c^2_i),...,(k^m_i,c^m_i)} (ki1,ci1),(ki2,ci2),...,(kim,cim) k i j 和 c i j k^j_i 和 c^j_i kijcij 分别表示第 j 个部位的坐标位置和置信度分数。

NMS schema。NMS体系。 回顾NMS,首先选取最大置信度的姿态作为参考。根据消除准则将靠近该参考的区域框进行删除。这个过程重复多次,直到冗余的识别框被消除并且每一个识别框都是唯一的出现。
Elimination Criterion。消除法则。 定义姿态相似度。 d ( P i , P j ∣ Λ ) d(P_i,P_j|Λ) d(Pi,PjΛ) 作为姿态之间的距离度量。定义η作为消除标准的阈值,在这里的Λ表示函数d(⋅)的一个参数集合。我们的消除标准可以定义为下面的形式:
公式7
如果d(⋅)小于阈值η,那么f(⋅)的输出是1,表示姿态Pi应该被消除,因为对于参考的Pj来说Pi是冗余的。
Pose Distance。姿态距离 定义距离函数 d p o s e ( P i , P j ) d~pose~(P_i,P_j) d pose (Pi,Pj)。假设姿态Pi的区域框是Bi。然后我们定义一个软匹配函数:
公式8
B ( k i n ) B(k^n_i) B(kin) 表示部位i的区域位置,维度上大约是整体图像的1/10。Tanh可以滤掉低置信度的姿态,当两个姿态的置信度都比较高的时候,上述函数的输出接近1。这个距离表示了姿态之间不同部位的匹配数。空间距离可以定义为:
公式9
最终距离定义为:
公式10
其中λ是一个权重系数,来平衡这两种距离,Λ表示{σ1,σ2,λ},参考之前的pose NMS进行参数设置。

Optimization 。优化。 给定检测到的冗余姿态,消除标准f(Pi,Pj|Λ, η)的这四个参数被优化以实现验证集的最大mAP。由于在4D空间中的穷举搜索是难以处理的,所以在迭代的过程中,固定两个参数变化另外两个参数进行搜索最优解。一旦收敛,这些参数将会固定,并用在测试阶段。

3.3 Pose-guided Proposals Generator 姿态引导的区域框生成器

Data Augmentation 数据增强

对于Two-Stage姿态识别,适当的数据增强有助于让SSTN+SPPE适应不完美的人体区域定位结果。否则,模型在测试阶段运行时可能不是很适应奇怪的人体定位结果。一种直观的方法是在训练阶段使用检测出来的区域框。然而,目标检测对于一个人而言只会产生一个定位区域。
通过使用生成的人体定位,可以产生一定得效果。因为我们已经有了每一个人的真实位置和检测出来的定位框,我们可以通过与人体检测结果一致的样本生成一个大样本的训练集 。通过这种技术,我们可以进一步提高系统的性能。

Insight

我们寻找对于不同姿态之间真实值和实际预测值的相对偏移量的分布。为了进一步明确过程,这里定义 P ( δ B ∣ P ) P(δB|P) P(δBP) ,δB表示检测到的人体位置的坐标和实际人体的标注坐标之间的偏移量,P是真实情况中一个人。我们可以根据目标检测得到的推荐位置生成一些训练集。

Implementation

直接学习 P ( δ B ∣ P ) P(δB|P) P(δBP) 对于易变的人体姿态是比较困难的。因此我们使用 P ( δ B ∣ a t o m ( P ) ) P(δB|atom(P)) P(δBatom(P)) a t o m ( P ) atom(P) atomP 表示P的原子组成部分(P是一个姿态,包含多个关节点)。为了得到姿态的原子结构,我们首先排列好所有的具有相同长度的关键点序列。然后使用K-means聚类得到的聚类中心做为姿态的原子姿态。

对于每一个共享原子姿态a的实例,计算真实值和检测边界框的偏移量。然后使用该方向上的真实边框的边长进行归一化处理。处理后,偏移量会形成一个频率分布,并将我们的数据拟合成高斯混合分布。对于不同的原子姿态,我们会得到不同的高斯混合分布,如图5:
图5
每个不同的院子姿态的高斯分布的包围框。补充了更多的result
表1
Proposals Generation

在训练阶段的SSTN+SPPE,对于每一个在训练集中标注的姿态,我们首先找到对应的原子姿态a。然后通过密集采样计算P(δB|a)来得到增强的训练建议。

实验

4.1 评估数据集

MPII :多人,3844训练,1758测试,有遮挡和重叠,28000个单人姿态估计样本。使用单人数据集中所有训练数据和90%多人训练集来微调SPPE,留下10%用于验证。
MS COCO: 105698训练,80000测试,100W个关键点。

4.2 测试实现细节

基于VGG的SSD-512作为人体检测器。检测到人体后,高度和宽度都延伸30%。使用stacked hourglass模型做单人姿态估计。对于STN网络,采用ResNet-18作为本地化网络,使用较小的4-stacked hourglass作为并行SPPE。
(开始论文中还用Faster R-CNN做检测器,PyraNet作为姿态估计,mAP又高了10多个点,但是V3论文中删除了这部分)

4.3 Result

表1,表2展示了效果
表2

4.4 消融shiyan

为了验证这三个组件的有效性:SSTN,PGPG,PP-NMS。移除或者使用常规方法来替代。
表3

Symmetric STN and Parallel SPPE

a中,去掉SSTN和并行SPPE效果有下降;只去掉平行SPPE性能也有下降。这俩都有用

Pose-guided Proposals Generator

表3b中,通过抖动人体检测器产生的边框和横纵比,以产生大量附加的推荐区域,根据分部生成训练的区域推荐,有效提高精度

Parametric Pose NMS
c中,冗余姿势数量的增加最终会降低精确度。且这个NMS是比较快的

Upper Bound of Our Framework 上界

使用ground-truth的边界框作为人体提议框,如表3(e),84.2mAP ,(在MSCOCO keypoints 上63.3mAP),表示使用更强的人体检测器,我们的框架可以有更好的性能,证明RMPE框架是通用的,适合不同的人体检测器。

结论Conclusion

在本文中,提出了一种新的区域多人姿态估计(RMPE)框架,其在准确性和效率方面明显优于最先进的多人人体姿态估计方法。当SPPE适用于人体检测器时,它验证了two-step框架的潜力,即人体检测器+ SPPE。我们的RMPE框架由三个新颖的组件组成:具有并行SPPE的对称STN,参数姿势NMS和姿态引导建议生成器(PGPG)。
特别地,PGPG用于通过学习针对给定人体姿势的边界框提议的条件分布来极大地增强了训练数据。由于使用对称STN和并行SPPE,SPPE变得善于处理人体本地化错误。最后,参数姿势NMS可用于减少冗余检测。

这篇关于AlphaPose姿态估计论文翻译和代码解读RMPE: Regional Multi-Person Pose Estimation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095196

相关文章

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d