人体姿态估计综述

任务介绍

人体姿态估计的目标是从给定的图像或视频中确定人的身体关键点(部位/关节)的位置或空间位置,如图一所示,因此,姿态估计使用基于图像的观察获得关节人体的姿态,关节人体由关节和刚性部分组成。
在这里插入图片描述
在估计给定图像中的人体姿势时,最常见的两种方法:1)Top-down的方法,处理从低分辨率到高分辨率进行,首先使用边界框对象检测器检测图像中的各个实例,然后重点确定它们的姿态。如图5:
在这里插入图片描述
然而这些方法总是受到早期检测的影响,这意味着如果最开始对个人的检测失败,就没有恢复的可能性。此外,当多个个体有重叠,模型很容易受到攻击。再者,计算成本取决于图像中的人数,人越多计算成本越大。因此,这些方法的运行时间与人数量成正比。
2)bottom-up的方法处理从高分辨率到低分辨率进行。它从定位无身份语义实体(关键点)开始,然后将它们分组到个人实例中。自下而上的方法克服了早期检测的影响,并显示出独立于图像中人数的运行时复杂性,如图6所示。此外,一些使用自下而上方法的研究使用了来自其他身体部位和其他人的全局上下文线索。然而,当人与人之间有很大重叠时,自下而上的方法在对身体部位进行分组时面临挑战。
在这里插入图片描述
原则上,每一个最先进的(SOTA)姿势估计模型包括一个组件,该组件检测身体关节或估计它们的位置,并在身体部位假设之间形成成对的项,这有助于将成对的项分类为有效的人体姿势配置。因此,我们面临着一些挑战。比如图像中每个人的位置和比例;几乎看不见的关节;人与人之间的相互作用,由于服装、照明变化、接触、服装、背景和肢体关节对单个部件的遮挡而带来复杂的空间干扰,这使得部件的关联变得困难。

如何生成heatmap

如下图所示如果右侧图中红色十字为一个关键点,假设生成的热图大小与原图像大小一致,生成的热图会在相应的坐标处生成一个成高斯分布的概率区域,区域的中心支最大,最接近1,越向四周,概率越小。
在这里插入图片描述
标准坐标解码方法是根据模型性能根据经验设计的,具体地,给定由训练模型预测的热图h,首先识别最大激活(m)和第二最大激活(s)的坐标,然后,关节位置就被预测为:
在这里插入图片描述
其中0.25像素在热图空间向第二最大激活移动。原始图像中的最终坐标预测计算如下:
在这里插入图片描述
(1)中的子像素移位的目的是补偿图像分辨率下采样的量化效应,也就是说,预测热图中的最大激活不对应于原始坐标空间中关节的精确位置,而仅对应于粗略位置,所以要做一个这样的转变!这样的操作缺乏解释,但是并没有其他的办法。

Dataset:

FLIC:该数据集是通过对30部电影的每10帧运行一个人检测器SOTA模型,从好莱坞受欢迎的30部电影中获得的。这些图像包含穿着不同服装的不同姿势的个体。从数据集中,每个个体被标记为10个身体关节。在大多数情况下,该图像数据集被用于单人和多人姿态估计模型。
LSP(&LSPE):这些图像大多来自体育活动,这使得它们的外观非常具有挑战性。除此之外,图像中的大多数个体的长度已经缩放到大约150个像素。在LSP数据集中,每个人的全身都标有总共14个关节,这表明与FLIC相比,关节的数量增加了。具体来说,LSP数据集总共有2000个带注释的图像,其中有10000个图像。在大多数情况下,这两个数据集都用于单人姿势估计模型。
MPII人体姿态数据集[22]包含约25,000幅图像,其中包括40,000多名带有注释的身体关节的个体。这些图像是为了展示人类日常活动而收集的。在MPII中,每个人的身体都标有15个身体关节,如引言部分所述。MPII人体姿态数据集也被用于单人和多人姿态估计模型。
MS-COCO或通常称为COCO(上下文中的公共对象)是微软(MS)的产品。COCO数据集是一个非常大的数据集的集合,具有对象检测、关键点检测、填充分割、全景分割和图像字幕的注释类型。JSON文件用于存储注释。COCO数据集包含总共200,000幅图像,这些图像包含250,000个具有关键点的人,每个人的实例都用17个关节进行标记。COCO数据集从2014年开始大量生产数据集。
JTA是Fabbri等人[3]通过从视频游戏《侠盗猎车手v》中提取视频,收集到的用于行人姿态估计和跟踪的合成数据集。JTA中对人体姿态的标注包括22个关键点、一个跟踪id和可见度标志。可见性标志区分关键点是可见的、遮挡的还是自聚焦的。为了在不同的数据集之间比较方法,JTA的注释通过简单地丢弃和重新排序关键点来匹配CrowdPose的格式。
CrowdPose数据集[6]包含约20000张图片和总计80000个人体姿势,其中有14个标记关键点.与前几个数据集相比,这个数据集包含的人更多,也更密集,某些方法在这个数据集上的指标比前几个数据集要下降0.2左右。甚至openpose会下降0.3.

Model

在这里插入图片描述

DeepPose: Human pose estimation via deep neural networks
为了解决当前对于姿态估计中仅仅使用局部的观点来估计关节点的坐标
整篇论文的基调在于一个关节点位置的回归,因为CNN网络对于图像大小的限定,而且对于多个关节点直接使用MSE进行梯度下降,求解最优,这种方法检测关节点的定位精确度不是很高。所以,作者提出先在一整幅图像上进行粗略的姿态估计,然后由多个DNN-based回归器对关节点的领域子图像进行优化预测。
在这里插入图片描述

ConvNet POSE: EFFICIENT OBJECT LOCALIZATION USING CONVOLUTIONAL NETWORKS
这篇文章的主要贡献是利用卷积神经网络的方法从单目RGB图像中内隐地利用图像的feature与图像相关的空间模型学习了人体姿态。首先作者提出,人体姿态估计问题需要使用其他肢体部分的提示。如果想要利用好这些肢体点的提示,就需要扩大卷积网络的感受野。方法就是使用dakernel多stride+pooling的方法,快速获得更大感受野。在网络中如果想要利用好身体肢体点之间的相互关系,就要建立在一个准确的大致估计,也就是一个粗略的heatmap当中。作者之所以使用了multistage来refine整个估计,就是为了能够将下一步的结果建立在上一步精炼过的姿态之上。而这样,就自然而然引出了中间监督的过程。
Stacked Hourglass Networks for Human pose Estimation
提取并整合所有scale下的特征
这个网络由多个堆叠起来的Hourglass module组成。每个Hourglass module的结构都包含一个bottom-up过程和一个top-down过程,前者通过卷积和pooling将图片从高分辨率降到低分辨率,后者通过upsampling将图片从低分辨率回复到高分辨率。
每个Hourglass module的结构如下图所示,其中每个box都是一个残差结构,可以看到在top-down阶段,对于两个相邻分辨率的feature map,通过upsampling对较低分辨率的feature map进行上采样,然后通过skip connection将bottom-up阶段较高分辨率的feature map拿过来,此时再通过element wise addition将这两部分特征进行合并。通过这种方式,在top-down阶段将不同分辨率下的特征逐步进行了融合。
在这里插入图片描述

DeeperCut: A DEEPER,STRONGER, AND FASTER MULTI-PERSON POSE ESTIMATION MODEL
DeeperCut表明了一种强大的身体部位检测器,可以为社体关节生成有效的自下而上的建议,并采用极深的残差网络(ResNet)进行人体检测,而DeepCut则采用快速R-CNN进行任务。所提出的的关键点使用图像条件成对项被组装成可变数量的一致身体部位配置。与DeepCut不同,DeeperCut使用增量优化策略,更有效地探索搜索空间,从而提高性能和加速因子。调整ResNet使这项工作能够解决渐变消失的问题,因为ResNet通过遍历相同的图层和建模独立的函数来解决这个问题。
优化问题表示为integer linear program(ILP)问题,可以用数学方法得到有效的求解对于多人姿态估计问题,可以转化为一个优化问题。优化问题需要解决三个问题:
A,body part condidate的选择,即节点的选择
B,每个选择的节点的标记问题,即该节点属于身体的哪个部分,eg:胳膊,腿。手等
C,分类问题,即每个选择的节点属于哪一个人。
DeeperCut是在DeepCut的基础上,对其进行改进,改进的方式基于以下两个方面:
1)使用最新提出的residual net进行body part的提取,效果更佳准确,精度更高。
2)使用image-conditioned pairwise terms的方法,能够将众多候选区域的节点压缩到更少数量的节点,这也是本文faster的原因所在,该方法的原理是通过候选节点之间的距离来判断是否为同一个重要节点。
在这里插入图片描述

IEF:HUMAN POSE ESTIMATION WITH ITERATIBE ERROR FEEDBACK
IEF人体姿态估计基本上是基于预测的概念,识别这个预测的错误,并通过自上而下的反馈机制迭代地纠正它们。IEF采用了一个扩展层次特征提取器(ConvNet)的框架,以包括输入和输出空间。在IEF,误差预测通过一个自校正模型反复渐进地反馈到初始解,以代替一次直接识别关键点。这个框架被称为迭代误差反馈(IEF),图13显示了用于人体姿态估计的IEF实现。
在图13的左侧,存在由图像1和最初猜测的关键点y0(前一时刻的输出yt-1的表示),假设三个关键点指向头部(红色)、右手腕(绿色)和左手腕(蓝色)。然后,定义输入xt=I+g(yt-1),其中I表示图像,yt-1表示前一时刻的输出。函数f(xt)建模为ConvNet,产生矫正因子εt作为输出,该输出与当前输出yt相加,产生yt+1,这意味着考虑校正。函数g(yt+1)将每个关键点位置转换为一个高斯热图通道,这样它就可以成为下一次迭代的图像输入的一部分。这个过程重复进行,并逐步进行T次,直到得到一个精确的、十分接近ground truth的yt+1。
在这里插入图片描述

CPN: CASCADED PYRAMID NETWORK FOR MUL TI-PERSON POSE ESTIMATION
作者提出CPN(级联金字塔网络),该网络可以有效缓解“hard”keypoints的检测问题,CPN网络分为两个阶段:GlobalNet和RefineNet。GlobalNet是一个特征金字塔网络,该网络用语定位简单的关键点,如眼睛和手等,但是对于遮挡点和不可见的点可能缺乏精确地定位;RefineNet通过集成来自GlobalNet的多级别特征来明确解决“难点”的检测问题。本文中,作者采用了top-down的方法,现在image上使用一个human detector得到人的bounding-boxes,然后再使用cpn网络精细渐渐点的检测。本文重点是cpn网络实现的关键点检测。
在这里插入图片描述

REAL TIME MUL TI-PERSON2D POSE ESTIMATION USING PART AFFINITY FIELDS(OPENPOSE)
本文最大的创新点在于提出了一种PAF的方法,能够有效的针对多人进行姿态估计,同时在保证精度的情况下,可以做到实时的效果。
传统的方法采用top-down的方法,即先检测人,然后对每一个人进行姿态估计,但是当人离得比较近的时候,检测人体的方法无效;并且人数越多,检测所花的时间约多,不能做到实时效果。因此本文采用bottom-up的方式,但是也利用了全局上下文信息。PAF:本文提出的Part Affinity Field(PAFs)是一个2D向量集合,每一个2D向量集合都会编码一个limb的位置和方向。这些field和关节的置信图一起经过CNN进行联合学习和预测。
方法
1,使用置信图进行关节检测 每一个关节对应一个置信图,图像每一个像素点都有一个置信度,置信图中每点的值与ground truth的距离相关。关于多个人的检测,是将K个人的置信图合并取该点每个人的最大值。这里使用最大而不是平均是因为即使峰值很近也不会影响精度。测试阶段使用非极大值抑制来获得身体部分的候选。
2,使用PAF进行身体部分组合 对于多个人的问题,检测了不同人的部分,但是还需要将每个人的身体分别组合在一起形成full-body,使用的方法就是论文的精华PAF。这个方法的好处在于将位置和方向信息都包含了。每一种limb(肢)在关联的两个body part之间都有一个亲和区域,其中的每一个像素都有一个2D 向量的描述方向。亲和区map的维度是wh2 (因为向量是二维的)。若某个点有多人重叠,则将k个人的vector求和,再除以人数。 3,bottom-up方法 在得到了置信图和PAF之后,需要考虑如何利用这些信息找到两两body-part最优化的连接方式,这转换为图论问题。论文使用的是Hungarian algorithm。图中的节点就是body part中的检测候选,边就是这些候选最优的连接方式。每条边上的权值就是亲和区的聚合。因此这样的匹配问题就是找到一组连接使得没有两条边是共享一个节点的,也就是找到权值最大的边连接方式。
在这里插入图片描述
在这里插入图片描述

HRNet: DEEP HIGH-RESOLUTION REPRESENTATION LEARNING FOR HUMAN POSE ESTIMATION
应用于人体姿态估计的通常趋势是将高分辨率特征图下采样到低分辨率,然后尝试从低分辨率特征图中恢复高分辨率值。基于这一动机,本研究提出了一种直观且不同的模型,称为高分辨率网络(HRNet),以在整个过程中保持高分辨率的表示
在堆叠沙漏[27]中,高到低分辨率和低到高分辨率过程都是对称的。在CPN [32]和简单基线[31]中,从高分辨率到低分辨率的处理被主干架构视为分类网络的一部分,主干架构较重,但反向过程相对较轻。在这个网络架构的第一阶段有一个高分辨率的子网,如图17所示。然后逐渐地一个接一个地添加一个高分辨率到低分辨率的子网,以获得多个阶段的输出。最后,并联的多分辨率子网络的输出被连接。它执行重复的多尺度融合,使得每个高分辨率到低分辨率的特征地图表示可以一次又一次地从其他并行表示分支接收信息,以获得信息更丰富的高分辨率表示。最终,网络输出的关键点热图和空间分辨率更加准确。因为重复的多尺度融合,HRNet不需要像以前的工作那样使用中间热图监督。
HRNet由并行的高到低分辨率子网络组成,在多分辨率子网络之间重复进行信息交换(多尺度融合)。水平和垂直方向分别对应于网络的深度和要素地图的比例。共有三个规模分支。在每个比例分支的正向传播过程中,特征图的分辨率不会改变。即使每个规模分支之间会有信息交换,但三个分支是不同的。例如,在正向过程中,分支1(图中的顶部分支)将对其要素图进行下采样,然后将其转移到分支2。分支2也将通过上采样将放大的特征发送到分支1。两个操作可以在同一个阶段执行。
CFA: CASCADE FEATURE AGGREGATION FOR HUMAN POSE ESTIMATION
CFA提出了一个级联的多重沙漏,并聚集了低、中、高级别特征,以更好地捕捉局部详细信息和全局语义信息[26]。CFA网络架构背后的动机是结合堆叠沙漏、CPN 和HRNet网络架构中隐含的概念
在这里插入图片描述
在这里插入图片描述

在CFA模型的所有阶段都有三种不同的特征聚合:低级特征聚合、中级特征聚合和高级特征聚合。
图19简要描述了CFA不同阶段之间的特征聚合。详细的局部信息包含在底层功能中,有助于它们定位人为干扰点的准确位置。另一方面,为了在复杂背景和部分遮挡的情况下精确定位,存在包含发射信息的高级特征。最后,所有这些不同的特征集合被转发作为下一阶段的输入,这使得预测更加稳定。
OccNet: HUMAN POSE ESTIMATION FOR REAL-WORLD ROWDED SCENARIOS
该模型是在估计现实世界拥挤区域中个人姿势的动机中提出的[73]。在人口如此密集的地区,评估姿势的挑战包括人与人之间的距离、相互遮挡和部分可见性。该方法是一种两阶段、自上而下的方法,首先定位个体,然后对每个检测到的人执行单人姿势估计。该模型提出了两个遮挡检测网络:occlusion Net(OccNet)和occlusion Net Cross Branch(OccNetCB),如图20所示,主干网络为ResNet。
在操作控制网中,为了学习前几层的联合表示,网络经过两次转置卷积后分裂。OccNet为每个姿势的关键点位置生成两组热图:一组用于可见关键点的热图,一组用于遮挡关键点的热图。另一种架构OccNetCB仅在一次转置卷积后分裂。在OCCNETB中,两个分支都有机会获取彼此提取的信息,因为在OCCNETB中,两层的输出是共享的。

DarkPose: DISTRIBUTION-AWARE COORDINATE REPRESENTATION FOR HUMAN POSE ESTIMATION
本文是可以很好地解决前面提到的heatmap中的缺陷。提出的坐标解码方法探索预测热图的分布结构以推断潜在的最大激活。具体做法:为了获得亚像素级的精确位置,我们假设预测的热图遵循2D高斯分布,与在热图中仅考虑第二最大激活的标准方法相比,所提出的坐标解码充分探索了热图分布统计,以便更准确地揭示潜在的最大值。理论上,我们的方法是基于训练监督一致假设下的原则分布近似,即热图是高斯分布。关键是,它的计算效率非常高,因为它只需要计算每个热图中一个位置的一阶和二阶导数。因此,现有的人类姿态估计方法可以容易地受益,而没有任何计算成本障碍。
在这里插入图片描述
以上是一些方法的介绍,这些方法的AP在MPII和MS-COCO数据集上已经达到了80%以上,但在crowedpose上效果还不是特别好,目前常用的开源框架有OPENPOSE(crowedpose数据集上效果不好)、Mask-RCNN、ALPHAPOSE
在这里插入图片描述

https://github.com/MVIG-SJTU/AlphaPose(Alphapose)
实时全身多人姿势估计与跟踪系统。它是第一个开源系统,在COCO数据集上达到70+ mAP(75 mAP),在MPII数据集上达到80+ mAP(82.1 mAP)。为了在帧中匹配与同一个人相对应的姿势,还提供了一种称为Pose Flow的高效在线姿势跟踪器。它是第一个在PoseTrack Challenge数据集上达到60+ mAP(66.5 mAP)和50+ MOTA(58.3 MOTA)的开源在线姿势跟踪器。AlphaPose支持Linux和Windows。
https://github.com/CMU-Perceptual-Computing-Lab/openpose(openpose)
https://github.com/facebookresearch/detectron2(Mask RCNN)

### 3D Human Pose Estimation Research Overview #### Datasets and Benchmarks The field of 3D human pose estimation has seen significant advancements through large-scale datasets that provide comprehensive data for training and evaluating algorithms. The **Human3.6M** dataset offers extensive motion capture sequences under controlled conditions, which serve as foundational resources for developing accurate models[^1]. Additionally, the **MPI-INF-3DHP** dataset extends beyond laboratory settings by capturing more diverse scenarios using multiple RGB cameras, enhancing generalization capabilities across different environments. #### Evaluation Metrics A widely adopted metric in assessing performance is MPJPE (Mean Per Joint Position Error), measuring average distance between predicted joint positions and ground truth annotations over all joints per frame. Lower values indicate better accuracy when comparing various approaches on standardized benchmarks like those mentioned above. #### Sensor Fusion Techniques Sensor fusion plays an essential role in improving tracking reliability especially within complex scenes involving interactions among multiple individuals where occlusions occur frequently. By integrating information from depth sensors alongside traditional visual inputs, systems can achieve higher precision even during challenging situations described previously regarding multi-person activities captured in real-world contexts[^2]. #### Challenges and Future Directions Applying these technologies towards autonomous vehicles or caregiving robots requires addressing specific challenges associated with estimating poses accurately amidst crowded spaces characterized by frequent physical contacts between people. For instance, the **PoseTrack** dataset highlights common occurrences found in everyday life, serving not only as valuable test material but also highlighting areas needing improvement concerning robustness against partial visibility issues caused by overlapping bodies[^3]. ```python def calculate_mpjpe(predicted_pose, true_pose): """ Calculate Mean Per Joint Position Error. Args: predicted_pose (numpy.ndarray): Predicted 3D coordinates of body joints. true_pose (numpy.ndarray): Ground-truth 3D coordinates of body joints. Returns: float: Average error value representing overall prediction quality. """ errors = np.linalg.norm(predicted_pose - true_pose, axis=1) return np.mean(errors) # Example usage demonstrating how one might evaluate model predictions versus actual measurements predicted_joints = ... # Array containing estimated locations for each keypoint true_joints = ... # Corresponding array holding correct answers obtained via mocap system etc. error = calculate_mpjpe(predicted_joints, true_joints) print(f"MPJPE Score: {error:.4f}") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值