2. 2D姿态估计基础:关键点定义、COCO与MPII数据集、评价指标

好,咱们正式开始聊2D姿态估计。这一章是整个课程的基石,说白了就是先把“游戏规则”定清楚。你想想看,如果连关键点是什么、用什么数据训练、怎么算分都不清楚,后面再花哨的模型也是空中楼阁。

我个人习惯,在接触一个新任务时,先搞清楚三件事:我要预测什么?我用什么数据学?我学得好不好怎么衡量? 这一章,我们就围绕这三个问题展开。

2.1 关键点定义:给人体“贴标签”

2D姿态估计,核心任务就是定位人体上的“关键点”(Keypoints)。这些点通常是关节、五官或者身体轮廓上的显著位置。

不同的数据集,对关键点的定义不太一样。我刚开始做这个方向时,就吃过这个亏。在一个数据集上训好的模型,换到另一个数据集上,发现关键点编号对不上,输出维度也不对,代码直接崩了。所以,第一件事就是对齐定义

常见的定义方式有两种:

  • 基于关节:比如肩膀、手肘、手腕、膝盖、脚踝。这是最主流的做法。
  • 基于轮廓:比如头顶、下巴、眼睛、耳朵。通常用于人脸或身体轮廓的精细估计。

这里我列一个最常见的17个关键点定义(COCO标准),你感受一下:

编号 关键点名称 编号 关键点名称
0 鼻子 9 左手腕
1 左眼 10 右手腕
2 右眼 11 左髋
3 左耳 12 右髋
4 右耳 13 左膝
5 左肩 14 右膝
6 右肩 15 左脚踝
7 左肘 16 右脚踝
8 右肘
我的小技巧: 在项目里,我习惯把关键点定义写成一个配置文件,用字典或者JSON存起来。这样换数据集时,只需要改配置文件,不用动核心代码。省心不少。

2.2 COCO与MPII数据集:两大“练兵场”

聊完定义,咱们看看数据。目前最主流的两个2D姿态估计数据集,就是COCOMPII

2.2.1 COCO数据集

COCO全称是Common Objects in Context。它不只有姿态估计,还有目标检测、实例分割等任务。但它的姿态估计子集非常强大。

  • 规模:训练集有超过11万张图片,标注了超过15万个实例(人)。
  • 关键点:17个关键点(就是上面表格里那些)。
  • 特点:场景复杂,人物尺度变化大,遮挡严重。说白了,就是“野路子”数据,非常贴近真实世界。

我记得有一次,我用COCO训练出来的模型,在实验室的测试集上效果很好。但一放到公司楼下的监控视频里,就各种漏检、错检。后来分析发现,COCO里的人物姿势虽然多样,但俯视角度和极端遮挡的样本还是不够。所以,不要迷信公开数据集,一定要结合自己的场景做数据增强。

2.2.2 MPII数据集

MPII是Max Planck Institute for Informatics发布的。它更侧重于单人姿态估计日常活动

  • 规模:训练集约2.2万张图片,4万个实例。
  • 关键点:16个关键点(比COCO少了眼睛和耳朵,但多了胸部和骨盆中心)。
  • 特点:图片质量高,姿势标注更精细,但场景相对单一。

我个人觉得,MPII更适合做算法验证和消融实验。因为它的数据干净,干扰少,能更快地看出模型改进的效果。而COCO更适合做最终性能评估,因为它更接近真实世界的挑战。

核心区别总结:
  • COCO:多实例、复杂场景、尺度变化大。适合做“实战”评估。
  • MPII:单实例为主、姿势精细、场景干净。适合做“学术”验证。

2.3 评价指标:怎么才算“好”?

模型训好了,怎么量化它的好坏?这就轮到评价指标登场了。2D姿态估计里,最常用的三个指标是:PCKOKSAP

2.3.1 PCK (Percentage of Correct Keypoints)

PCK是最早使用的指标之一。它的逻辑很简单:

对于一个预测的关键点,如果它和真实关键点之间的距离,小于某个阈值,就认为这个点是“正确”的。

这个阈值怎么定?通常是根据人体尺度来归一化的。比如PCKh,就是用头部长度(head length)作为归一化因子。

公式长这样:

PCK = (预测点与真实点的距离) < (阈值 * 归一化因子)

嗯,这里要注意:PCK对阈值非常敏感。阈值设得松,分数就高;设得严,分数就低。所以,不同论文里报告的PCK值,如果阈值不一样,是不能直接比较的。

我曾经踩过的坑: 有一次复现论文,发现自己的PCK比论文低了10个点。查了两天,最后发现是归一化因子的计算方式不一样。论文用的是“头部对角线长度”,我用的是“头部高度”。所以,复现时一定要仔细核对指标的计算细节

2.3.2 OKS (Object Keypoint Similarity)

OKS是COCO数据集采用的指标。它比PCK更精细,因为它考虑了不同关键点的权重

为什么需要权重?因为有些关键点天生就难预测。比如,手腕和脚踝的移动范围大,标注误差也大;而鼻子和眼睛相对固定,标注更准确。OKS给每个关键点分配了一个标准差σ,σ越大,说明这个点越“难”,对误差的容忍度也越高。

OKS的计算公式:

OKS = Σ [ exp( -d_i² / (2 * s² * σ_i²) ) * δ(v_i > 0) ] / Σ [ δ(v_i > 0) ]

其中:

  • d_i:第i个关键点的欧氏距离。
  • s:目标尺度(通常是目标框面积的平方根)。
  • σ_i:第i个关键点的归一化标准差。
  • v_i:可见性标志(0=未标注,1=可见,2=遮挡但可见)。

说白了,OKS就是一个从0到1的相似度分数。1表示完美预测,0表示完全不对。

2.3.3 AP (Average Precision)

AP是COCO Challenge的官方指标。它是在不同OKS阈值下计算的平均精度。

具体做法是:

  1. 设定一个OKS阈值(比如0.5, 0.55, 0.6, ..., 0.95)。
  2. 对于每个阈值,计算所有样本的精度(Precision)和召回率(Recall)。
  3. 绘制PR曲线,计算曲线下的面积,得到该阈值下的AP。
  4. 最后,对所有阈值的AP取平均,得到最终的AP@[0.5:0.95]

这个指标非常严格。它要求模型不仅要在宽松条件下(OKS=0.5)表现好,还要在严格条件下(OKS=0.95)也能准确定位。我个人觉得,AP是衡量模型“上限”的好指标

一句话总结三个指标:
  • PCK:简单粗暴,适合快速验证。
  • OKS:精细公平,考虑了关键点难度。
  • AP:全面严格,是业界公认的“金标准”。

2.4 知识体系总览

为了让你更直观地理解这一章的内容,我画了一张图。它把关键点定义、数据集和评价指标串在了一起。你可以把它当作一个“知识地图”。

2D姿态估计基础:知识体系 关键点定义 数据集 评价指标 关节 / 轮廓 / 17点标准 COCO MPII PCK OKS AP 核心逻辑 定义关键点 → 选择数据集 → 训练模型 → 用指标评估 三者环环相扣,缺一不可

这张图把这一章的核心逻辑串起来了。你想想看,从定义关键点开始,到选择合适的数据集,再到用科学的指标评估模型,每一步都决定了最终效果的上限。

好了,这一章的内容就到这里。记住,基础不牢,地动山摇。把关键点定义、数据集特性和评价指标搞明白,后面学各种网络结构时,你才能一眼看穿它们的优劣。


专注资料整理