openpose论文总结:Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

本文介绍了一种人体姿态估计网络的工作原理,包括输入图像的预处理、特征提取、关键点检测及关节连接的过程。该网络利用循环分支预测关键点位置(S)和肢体方向(L),并通过计算损失函数优化预测结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法:

1.以w*h大小的彩色图像作为输入
2.经过VGG的前10层网络得到一个特征度F
3.网络分成两个循环分支,一个分支用于预测置信图S:关键点(人体关节),一个分支用于预测L:像素点在骨架中的走向(肢体)
4.第一个循环分支以特征图F作为输入,得到一组S1,L1
5.之后的分支分别以上一个分支的输出St-1,Lt-1和特征图F作为输入
6.网络最终输出S,L
这里写图片描述
7.损失函数计算S,L的预测值与groundtruth(S*,L*)之间的L2范数
S和L的groundtruth根据标注的2D点计算,如果某个关键点标注缺失则不计算该点
这里写图片描述
损失函数为每一层循环网络的损失函数之和
这里写图片描述

CMP:confidence maps for part

关键点检测:(关节)
1.通过图像中标注的2D点Xj,k计算S的groundtruth(S*)//其中Xj,k表示图片中第k个人的第j种关节
计算方法:Sj*符合正态分布,当像素点P接近注释点Xj,k时,达到正态曲线的峰值,则每张图像中第j种关节的S,为图像中k个人的正态分布峰值
这里写图片描述
这里写图片描述 这里写图片描述

PAF:part affiity fields

关节连接:(肢体)
1.通过第k个人的两个关建点Xj1,k,Xj2,k之间任意像素p的单位向量计算L的groundtruth(Lc*)//其中k表示第k个人,j1和j2表示两个能够相连的关节(例如手肘和手腕直间通过手臂相连),c表示第c种肢体
计算方法:计算图像中第k个人的关键点Xj1,k指向Xj2,k的单位向量Lc,k*(P)=v(v大小和方向固定)
这里写图片描述这里写图片描述

其中像素P是否落在肢体上需要满足两个条件
这里写图片描述
每张图像中第c中肢体的Lc*,为k个人在位置p的向量平均值
这里写图片描述

评估两个关键点之间的相关性:

关键点dj1,dj2和PAF已知之后,计算两个关键点连线向量和两关键点连线上各像素的PAF向量之间的点积的积分作为两个关键点之间的相关性。
这里写图片描述
像素p进行采样:
这里写图片描述

多人检测:计算位姿骨架

例如图片中存在多个手肘和手腕时,如何确定每一个人的手腕和手肘并进行连接?即一张图像上存在n个手肘m个手腕(关键点),手肘标签Dj1{dj1^1,dj1^2….,dj1^n},手腕标签Dj2{dj2^1,dj2^2….,dj2^m},手臂(手腕和手肘相连)集合Zc。
关键点和关键点之间的相关性PAF已知,将关键点作为图的顶点,将关键点之间的相关性PAF看为图的边权,则将多人检测问题转化为二分图匹配问题,并用匈牙利算法求得相连关键点最优匹配。
这里写图片描述
Dj1,Dj2是两种关节的集合,Zc是第c种肢体的集合,Emn是两种关键点之间的相关性,求最优的zc集合。
这里写图片描述

二分图匹配:

二分图:是图的一种特例,图中包含两个点群X、Y,同一个点群内无边,不同点群之间有边。
这里写图片描述
二分匹配:二分图上进行匹配,一个点群中的点只与另一个点群中的点进行唯一匹配,即任意两条边没有公共顶点
这里写图片描述
最大匹配:匹配边数最多
完美匹配:所有点都是匹配点
最大权重匹配:所有匹配边权重之和最大
求解最大匹配方法:匈牙利算法

### OpenPose 实时多人 2D 姿态估计 OpenPose 是由卡内基梅隆大学感知计算实验室开发的一项开创性技术,旨在实现实时多人2D姿态估计。该系统能够在同一场景中同时检测多个人体的关键点,包括身体、手部、面部和脚部的位置[^1]。 #### 部分亲和域 (Part Affinity Fields) 为了提高姿态估计的准确性并解决遮挡问题,OpenPose引入了部分亲和域(Part Affinity Fields, PAFs)的概念。PAFs用于表示不同部位之间的连接关系,具体来说: - **定义**:对于每一对相连的身体部件(如肩膀到肘),构建一个二维向量场来描述这对部件的方向性和置信度。 - **作用机制**:通过分析这些向量场中的梯度方向可以推断出各个肢体间的相对位置以及它们之间是否存在关联。这使得即使某些关节被遮挡或不可见的情况下也能正确重建完整的骨架结构[^3]。 ```python import cv2 from openpose import pyopenpose as op params = dict() params["model_folder"] = "path/to/models" opWrapper = op.WrapperPython() opWrapper.configure(params) datum = op.Datum() cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() datum.cvInputData = frame opWrapper.emplaceAndPop([datum]) # Display keypoints and part affinity fields on the image cv2.imshow("Keypoints", datum.cvOutputData) if cv2.waitKey(1) & 0xFF == ord('q'): break cv2.destroyAllWindows() ``` 此代码片段展示了如何利用OpenPose库读取摄像头输入,并显示处理后的图像,其中包含了检测到的人体关键点及其对应的PAF可视化结果。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值