AlphaPose关键点连接规则:COCO 17点与Halpe 136点骨架定义
1. 人体姿态估计中的骨架连接挑战
你是否在使用AlphaPose时遇到过关键点连接混乱的问题?比如颈部与躯干错位、手指关节连接错误,或者在多人场景下出现骨架交叉?作为Real-Time and Accurate Full-Body Multi-Person Pose Estimation&Tracking System(实时精确的全身多人姿态估计与跟踪系统),AlphaPose支持多种关键点定义标准,其中COCO 17点和Halpe 136点是最常用的两种。本文将系统解析这两种骨架的连接规则,帮助开发者正确可视化和应用姿态估计结果。
读完本文你将获得:
- COCO 17点标准的18条连接规则及拓扑结构
- Halpe 136点扩展骨架的详细连接图谱(含面部、手部)
- 两种标准的转换方法与可视化实现代码
- 常见连接错误的排查与解决方案
2. COCO 17点骨架系统详解
2.1 关键点定义与编号
COCO(Common Objects in Context)数据集定义的17个身体关键点(KeyPoint,关键点)是姿态估计领域的基础标准,编号从0到16:
| 编号 | 身体部位(Body Part) | 坐标含义 |
|---|---|---|
| 0 | Nose(鼻子) | 鼻尖中心点 |
| 1 | Left Eye(左眼) | 眼球中心 |
| 2 | Right Eye(右眼) | 眼球中心 |
| 3 | Left Ear(左耳) | 耳屏中点 |
| 4 | Right Ear(右耳) | 耳屏中点 |
| 5 | Left Shoulder(左肩) | 肩峰点 |
| 6 | Right Shoulder(右肩) | 肩峰点 |
| 7 | Left Elbow(左肘) | 肘关节外侧 |
| 8 | Right Elbow(右肘) | 肘关节外侧 |
| 9 | Left Wrist(左手腕) | 腕关节内侧 |
| 10 | Right Wrist(右手腕) | 腕关节内侧 |
| 11 | Left Hip(左髋) | 股骨大转子 |
| 12 | Right Hip(右髋) | 股骨大转子 |
| 13 | Left Knee(左膝) | 膝关节外侧 |
| 14 | Right Knee(右膝) | 膝关节外侧 |
| 15 | Left Ankle(左脚踝) | 内外踝连线中点 |
| 16 | Right Ankle(右脚踝) | 内外踝连线中点 |
2.2 标准连接规则(18条骨骼)
COCO骨架通过以下连接形成人体结构,这些规则在AlphaPose的alphapose/datasets/mscoco.py中定义:
# COCO 17点骨架连接规则
skeleton = [
[16, 14], # 左踝 -> 左膝
[14, 12], # 左膝 -> 左髋
[17, 15], # 右踝 -> 右膝 (注:原数据中编号可能存在偏移,实际对应16->14)
[15, 13], # 右膝 -> 右髋 (注:实际对应14->12)
[12, 13], # 左髋 -> 右髋 (核心躯干连接)
[6, 12], # 左肩 -> 左髋
[7, 13], # 右肩 -> 右髋
[6, 7], # 左肩 -> 右肩 (肩部基线)
[6, 8], # 左肩 -> 左肘
[7, 9], # 右肩 -> 右肘
[8, 10], # 左肘 -> 左手腕
[9, 11], # 右肘 -> 右手腕
[2, 3], # 左眼 -> 左耳
[1, 2], # 鼻子 -> 左眼
[1, 3], # 鼻子 -> 右眼
[4, 5], # 右耳 -> 右肩 (注:原数据中5为左肩,存在编号调整)
[0, 1], # 颈部虚拟点 -> 鼻子 (扩展连接)
[0, 6], # 颈部虚拟点 -> 左肩 (扩展连接)
[0, 7] # 颈部虚拟点 -> 右肩 (扩展连接)
]
2.3 拓扑结构流程图
3. Halpe 136点扩展骨架系统
3.1 关键点定义与分区
Halpe数据集在COCO基础上扩展至136个关键点,新增面部五官(68点)、双手(21×2=42点)和双脚(6×2=12点),编号规则如下:
| 区域 | 点数 | 编号范围 | 说明 |
|---|---|---|---|
| 身体 | 17 | 0-16 | 同COCO标准 |
| 面部 | 68 | 17-84 | 基于68点面部标记系统 |
| 左手 | 21 | 85-105 | 含手腕、掌骨及手指关节 |
| 右手 | 21 | 106-126 | 含手腕、掌骨及手指关节 |
| 左脚 | 6 | 127-132 | 含踝、跗骨及趾关节 |
| 右脚 | 6 | 133-138 | 含踝、跗骨及趾关节 |
3.2 扩展连接规则(135条骨骼)
Halpe 136点骨架在alphapose/datasets/halpe_136.py中定义,核心连接包括:
# Halpe 136点骨架扩展规则(节选)
skeleton = [
# 基础身体连接(同COCO)
[15, 13], [13, 11], [16, 14], [14, 12], [11, 12],
[5, 11], [6, 12], [5, 6], [5, 7], [6, 8], [7, 9], [8, 10],
[1, 2], [0, 1], [0, 2], [1, 3], [2, 4], [3, 5], [4, 6],
# 面部连接(17-84点)
[17, 18], [18, 19], [19, 20], [20, 21], # 左眼眉
[22, 23], [23, 24], [24, 25], [25, 26], # 右眼眉
[27, 28], [28, 29], [29, 30], [30, 33], # 鼻梁
[31, 32], [32, 33], [33, 34], [34, 35], # 鼻翼
# ... 共68点面部连接
# 左手连接(85-105点)
[85, 86], [86, 87], [87, 88], [88, 89], # 左手拇指
[90, 91], [91, 92], [92, 93], [93, 94], # 左手食指
# ... 共20条手部连接
# 右手连接(106-126点)
[106, 107], [107, 108], [108, 109], [109, 110], # 右手拇指
# ... 共20条手部连接
# 脚部连接(127-138点)
[127, 128], [128, 129], [129, 130], [130, 131], # 左脚
[133, 134], [134, 135], [135, 136], [136, 137] # 右脚
]
3.3 面部关键点连接图谱
面部68点采用标准面部标记系统,连接规则形成特征轮廓:
4. 两种标准的转换与可视化
4.1 坐标转换矩阵
当需要在两种标准间转换时,可使用以下映射关系(身体部分):
| COCO编号 | Halpe编号 | 转换公式 |
|---|---|---|
| 0 (鼻子) | 0 (鼻子) | 直接映射 |
| 5 (左肩) | 5 (左肩) | 直接映射 |
| 6 (右肩) | 6 (右肩) | 直接映射 |
| ... | ... | 身体部分1:1对应 |
| - | 17-84 | 新增面部关键点 |
| - | 85-126 | 新增手部关键点 |
4.2 可视化实现代码
使用AlphaPose的vis.py工具可视化骨架:
from alphapose.utils.vis import vis_frame
# 加载模型和配置
from alphapose.utils.config import update_config
config = update_config('configs/coco/resnet/256x192_res50_lr1e-3_1x.yaml')
# 可视化COCO 17点骨架
coco_result = [{'keypoints': [x1,y1,c1, x2,y2,c2, ..., x17,y17,c17]}] # 17点坐标+置信度
vis_frame(img, coco_result, config, dataset='coco')
# 可视化Halpe 136点骨架
halpe_result = [{'keypoints': [x1,y1,c1, ..., x136,y136,c136]}] # 136点完整数据
vis_frame(img, halpe_result, config, dataset='halpe')
5. 常见问题与解决方案
5.1 连接错误排查流程
5.2 多人场景骨架交叉处理
当多人姿态重叠时,AlphaPose通过以下策略避免连接错误:
- NMS后处理:在
alphapose/utils/pPose_nms.py中实现 - 距离约束:关节点间欧式距离过滤异常连接
- 层级连接:先躯干后四肢的连接顺序
# 距离约束示例代码
def filter_invalid_connections(keypoints, skeleton):
valid_edges = []
for u, v in skeleton:
if u >= len(keypoints) or v >= len(keypoints):
continue
# 计算两点距离
distance = np.sqrt(np.sum((keypoints[u][:2]-keypoints[v][:2])**2))
# 根据人体比例过滤(肩肘距离通常在50-150像素)
if 50 < distance < 150:
valid_edges.append([u, v])
return valid_edges
6. 应用场景与最佳实践
6.1 选择建议
| 应用场景 | 推荐标准 | 优势 |
|---|---|---|
| 实时多人跟踪 | COCO 17点 | 速度快,计算量小 |
| 精细动作分析 | Halpe 136点 | 包含面部表情和手指动作 |
| 移动端部署 | COCO 17点 | 模型体积小,耗电低 |
| 医疗姿态评估 | Halpe 136点 | 关节细节丰富,便于病理分析 |
6.2 性能优化参数
在配置文件中调整以下参数优化骨架连接效果:
# configs/coco/resnet/256x192_res50_lr1e-3_1x.yaml
POSE_REFINEMENT: True # 启用姿态优化
NMS_THRESHOLD: 0.6 # 非极大值抑制阈值
MIN_KEYPOINTS: 5 # 最小关键点数量阈值
7. 总结与展望
AlphaPose通过灵活的骨架定义系统支持从基础到精细的姿态估计需求。COCO 17点作为行业标准,适合大多数实时场景;Halpe 136点则为行为分析、人机交互等高级应用提供了丰富细节。在实际使用中,建议:
- 根据硬件性能选择合适的关键点数量
- 对低置信度关键点进行平滑处理
- 在自定义数据集上微调连接规则
随着3D姿态估计技术的发展,未来骨架定义可能会扩展到时空维度,AlphaPose的simple3dposeSMPLWithCam.py已开始探索结合SMPL模型的三维骨架构建,这将为虚拟数字人、运动康复等领域带来更多可能。
收藏本文,下次遇到骨架连接问题时即可快速查阅!关注AlphaPose项目获取更多技术解析。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



