demo_system_algorithm/docs/openpose.md

3.9 KiB
Raw Permalink Blame History

OpenPose — 人体姿态估计

概述

OpenPose 是卡耐基梅隆大学CMU提出的开源实时多人姿态估计框架采用多阶段、多分支网络结构,通过 Part Affinity Fields (PAFs) 和关键点热力图实现多人姿态的精准检测与关联。

核心特性

特性 说明
模型类型 多人 2D 姿态估计
输入形式 单张 RGB 图像
输出形式 关键点坐标 + 骨架连接 + 置信度
关键点数量 19 个身体关键点
核心思想 PAFs (Part Affinity Fields) + 关键点热力图

模型架构

graph LR
    A[输入图像] --> B[轻量骨干网络]
    B --> C[Stage 1: 热力图分支]
    B --> D[Stage 1: PAF 分支]
    C --> E[Stage 2: 精细化热力图]
    D --> F[Stage 2: 精细化PAF]
    E --> G[关键点热力图]
    F --> H[部位亲和场]
  • 热力图分支Heatmap — 预测每个关键点(关节)的位置概率分布
  • PAF 分支Part Affinity Fields — 预测关键点之间的连接方向和置信度
  • 多阶段细化Multi-stage Refinement — 多个 stage 逐级优化预测质量

目标应用场景

  • 运动分析 — 运动员动作捕捉与分析
  • 人机交互 — 手势控制、AR/VR 应用
  • 康复医疗 — 患者姿态评估与康复训练
  • 安防监控 — 行人姿态分析与异常行为检测

参考来源


输入 / 输出规格

模型接口

方向 名称 数据类型 维度 尺寸 说明
输入 INPUT:0 UINT8 4D 1 × 1 × 256 × 1272 输入灰度图 (H×W=256×1272)
输出 OUTPUT:0 FP32 4D 1 × 19 × 32 × 53 热力图 (19 个关键点)
输出 OUTPUT:1 FP32 4D 1 × 38 × 32 × 53 PAF (19×2 个连接方向)
输出 OUTPUT:2 FP32 4D 1 × 19 × 32 × 53 细化热力图
输出 OUTPUT:3 FP32 4D 1 × 38 × 32 × 53 细化 PAF

19 个身体关键点包括:鼻子、颈部、双肩、双肘、双手腕、双髋、双膝、双脚踝等。


后处理流程

flowchart TD
    A[热力图] --> B[NMS 非极大值抑制]
    B --> C[定位候选关键点]
    C --> D{置信度 > 阈值?}
    D -->|是| E[保留关键点候选]
    D -->|否| F[丢弃]
    A --> G[PAF 部位亲和场]
    E --> H[基于 PAF 连接评分]
    G --> H
    H --> I[构建骨架候选边]
    I --> J[筛选高置信度连接]
    J --> K[组装完整姿态]
    K --> L[多人聚类与去重]
    L --> M[最终多人姿态]

步骤说明

步骤 操作 说明
1 NMS 从热力图中定位候选关键点位置(非极大值抑制)
2 关键点对齐 基于坐标形成潜在的骨架连线候选
3 PAF 评分 利用部位亲和场筛选高置信度连接
4 姿态组装 将筛选出的骨架连接组装成完整姿态
5 多人聚类 将属于不同人的骨架分配到各自的姿态条目

执行与性能

运行方式

python openpose.py

性能指标

指标 数值
推理平台 边缘板卡NPU
推理时间 ~60.35 ms
输出 2 FE 均值误差 0.001579
输出 2 FE 最大误差 0.350395
输出 3 FE 均值误差 0.000503
输出 3 FE 最大误差 0.209612

FE 相似度反映板卡输出与 PC 端参考输出的偏差,数值越低一致性越好。


输出示例

姿态估计结果

人体姿态估计结果

图中骨骼线表示检测到的人体姿态,不同颜色区分不同个体。结果图保存路径:../resource/openpose/result.jpg