Python中如何实现实时多人姿态估计?基于CVPR'17 (Oral)论文的实践分享

实时多人的姿态估计 [ CVPR'17 (Oral)]

视频地址: http://posefs1.perception.cs.cmu.edu/Users/ZheCao/humanpose.mp4

项目地址: https://github.com/ZheC/Realtime_Multi-Person_Pose_Estimation

机器学习分享: http://www.tensorflownews.com/


Python中如何实现实时多人姿态估计?基于CVPR'17 (Oral)论文的实践分享

12 回复

看起来很厉害


我最近也在搞这个,CVPR’17那篇《Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields》确实是经典。OpenPose就是基于这篇论文的,不过自己从头实现确实挺有挑战的。

核心思路是用双分支网络:一个分支预测身体部位的热力图(Part Confidence Maps),另一个分支预测部位关联场(Part Affinity Fields, PAFs)来连接这些部位。最后用二分图匹配算法(比如匈牙利算法)把检测到的关键点组装成完整的人体姿态。

直接用OpenPose库是最快的:

import cv2
import numpy as np

# 使用OpenPose的Python封装(需要先安装OpenPose)
net = cv2.dnn.readNetFromTensorflow('graph_opt.pb')

def estimate_pose(frame):
    # 预处理
    inp = cv2.resize(frame, (368, 368))
    inp = cv2.cvtColor(inp, cv2.COLOR_BGR2RGB)
    inp = inp.astype(np.float32) / 255.0
    inp = np.expand_dims(inp, 0)
    
    # 前向传播
    net.setInput(inp)
    output = net.forward()
    
    # 解析输出:前19个通道是关键点热力图,后38个是PAFs
    heatmaps = output[:, :19, :, :]
    pafs = output[:, 19:, :, :]
    
    # 这里需要实现关键点提取和组装逻辑
    # (OpenPose原版用C++实现,Python版需要自己写这部分)
    return parse_poses(heatmaps, pafs)

如果想自己实现简化版,可以用轻量级网络(如MobileNet)作为backbone,然后接两个卷积头分别预测热力图和PAFs。训练数据要用COCO或MPII这种带多人标注的数据集。

不过说实话,实时多人姿态估计对算力要求挺高的,如果要在普通设备上跑,建议用轻量级模型如MoveNet或MediaPipe的Pose方案。

用现成的库吧,自己实现太费劲。

666

明明是很严肃的东西但是看图还是忍不住笑

哈哈哈哈哈哈哈哈

火柴人

cmu 的 openpose 不是早就有了吗?识别的都是 2d 的。今年还有个能输出 3d 的比较有意思

请问输出 3d 的哪篇论文呢

谢谢啦!

回到顶部