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 | 右肘 |
2.2 COCO与MPII数据集:两大“练兵场”
聊完定义,咱们看看数据。目前最主流的两个2D姿态估计数据集,就是COCO和MPII。
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姿态估计里,最常用的三个指标是:PCK、OKS和AP。
2.3.1 PCK (Percentage of Correct Keypoints)
PCK是最早使用的指标之一。它的逻辑很简单:
对于一个预测的关键点,如果它和真实关键点之间的距离,小于某个阈值,就认为这个点是“正确”的。
这个阈值怎么定?通常是根据人体尺度来归一化的。比如PCKh,就是用头部长度(head length)作为归一化因子。
公式长这样:
PCK = (预测点与真实点的距离) < (阈值 * 归一化因子)
嗯,这里要注意:PCK对阈值非常敏感。阈值设得松,分数就高;设得严,分数就低。所以,不同论文里报告的PCK值,如果阈值不一样,是不能直接比较的。
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阈值下计算的平均精度。
具体做法是:
- 设定一个OKS阈值(比如0.5, 0.55, 0.6, ..., 0.95)。
- 对于每个阈值,计算所有样本的精度(Precision)和召回率(Recall)。
- 绘制PR曲线,计算曲线下的面积,得到该阈值下的AP。
- 最后,对所有阈值的AP取平均,得到最终的AP@[0.5:0.95]。
这个指标非常严格。它要求模型不仅要在宽松条件下(OKS=0.5)表现好,还要在严格条件下(OKS=0.95)也能准确定位。我个人觉得,AP是衡量模型“上限”的好指标。
- PCK:简单粗暴,适合快速验证。
- OKS:精细公平,考虑了关键点难度。
- AP:全面严格,是业界公认的“金标准”。
2.4 知识体系总览
为了让你更直观地理解这一章的内容,我画了一张图。它把关键点定义、数据集和评价指标串在了一起。你可以把它当作一个“知识地图”。
这张图把这一章的核心逻辑串起来了。你想想看,从定义关键点开始,到选择合适的数据集,再到用科学的指标评估模型,每一步都决定了最终效果的上限。
好了,这一章的内容就到这里。记住,基础不牢,地动山摇。把关键点定义、数据集特性和评价指标搞明白,后面学各种网络结构时,你才能一眼看穿它们的优劣。