3、关键点检测基础:人体姿态估计、关键点坐标定义、常见数据集(如COCO、MPII)及标注格式

在TinyML关键点检测模型的部署流程中,理解任务本身的数学定义与数据规范是第一步。人体姿态估计(Human Pose Estimation)旨在从图像或视频中定位人体关键部位(如关节、五官)的像素坐标,而关键点检测模型则是这一任务的轻量化实现。本章将系统梳理姿态估计的核心原理、关键点坐标的数学定义、主流数据集(COCO与MPII)的标注规范,并针对TinyML部署场景给出数据适配建议。这些内容将直接决定后续模型训练时的损失函数设计、数据预处理流程以及最终在Ethos-U上的量化精度表现。

关键点检测数据链路与坐标定义 输入图像 RGB / 灰度 尺寸归一化 关键点标注 (x, y, visibility) COCO: 17点 / MPII: 16点 坐标系统 像素坐标系 (u, v) 归一化坐标 [0,1] 数据集 COCO / MPII JSON / MAT TinyML 部署链路 数据预处理 裁剪/缩放/归一化 模型训练 MSE / OKS 损失 量化 INT8 / 校准 Ethos-U 部署 CMSIS-NN / Vela 关键点坐标精度直接影响量化误差与最终推理精度

3.1 人体姿态估计的核心原理与任务定义

人体姿态估计本质上是一个回归问题,其目标是从输入图像中预测一组关键点的位置。根据输出形式的不同,可分为两大类:坐标回归方法(直接输出关键点的 (x, y) 像素坐标)和热力图方法(为每个关键点生成一张概率分布图,取峰值位置作为坐标)。在TinyML场景下,由于内存和算力限制,坐标回归方法因其输出维度小、后处理简单而更受青睐,但热力图方法在精度上通常更优。

从数学角度看,设输入图像为 \( I \in \mathbb{R}^{H \times W \times 3} \),需要预测 \( K \) 个关键点,则模型输出为 \( \hat{Y} = \{(\hat{x}_k, \hat{y}_k, \hat{v}_k)\}_{k=1}^{K} \),其中 \( \hat{v}_k \) 表示可见性(0为不可见,1为可见,2为被遮挡但可推断)。训练时,常用均方误差(MSE)或 Smooth L1 损失来度量预测坐标与真实标注之间的差异。

关键点检测 vs 目标检测:目标检测输出的是边界框(x, y, w, h),而关键点检测输出的是更细粒度的语义点。在模型结构上,关键点检测通常需要在特征图上保留更高的空间分辨率,这对TinyML的量化部署提出了额外挑战——低比特量化容易丢失空间细节。

3.2 关键点坐标定义与归一化策略

在COCO数据集中,17个关键点的顺序和定义是固定的:从0(鼻子)到16(右脚踝)。每个关键点的坐标以图像左上角为原点,单位为像素。然而,在模型训练和部署时,直接使用原始像素坐标会导致两个问题:一是不同图像尺寸下坐标尺度不一致,二是数值范围过大不利于神经网络收敛。因此,归一化是必须的预处理步骤。

常用的归一化方式有两种:

  • 图像尺寸归一化:将坐标除以图像的宽和高,使坐标范围落在 [0, 1] 区间。例如,关键点 (x, y) 在 224×224 图像中,归一化后为 (x/224, y/224)。
  • 中心化与缩放:以人体 bounding box 中心为原点,将坐标缩放到固定尺度(如 [-1, 1])。这种方式对人物位置变化更鲁棒。

在Ethos-U部署时,推荐使用第一种方式,因为其计算简单,且量化误差更容易控制。若使用第二种方式,需要在预处理阶段额外计算 bounding box 中心,增加MCU侧的计算负担。

关键点索引 COCO 名称 MPII 名称 典型应用场景
0鼻子 (nose)头顶 (top of head)跌倒检测、头部姿态
1左眼 (left_eye)颈部 (neck)疲劳驾驶监测
2右眼 (right_eye)左肩 (left shoulder)人机交互
3左耳 (left_ear)右肩 (right shoulder)运动分析
4右耳 (right_ear)左肘 (left elbow)康复训练
5左肩 (left_shoulder)右肘 (right elbow)动作识别
6右肩 (right_shoulder)左手腕 (left wrist)手势控制
7左肘 (left_elbow)右手腕 (right wrist)体育辅助裁判
8右肘 (right_elbow)左髋 (left hip)步态分析
9左手腕 (left_wrist)右髋 (right hip)安防监控
10右手腕 (right_wrist)左膝 (left knee)智能健身
11左髋 (left_hip)右膝 (right knee)虚拟现实
12右髋 (right_hip)左脚踝 (left ankle)老人看护
13左膝 (left_knee)右脚踝 (right ankle)动作质量评估
14右膝 (right_knee)骨盆 (pelvis)人机协作
15左脚踝 (left_ankle)胸部 (thorax)行为预测
16右脚踝 (right_ankle)——

3.3 主流数据集与标注格式详解

COCO(Common Objects in Context)和 MPII(Max Planck Institute for Informatics)是姿态估计领域最常用的两个数据集,但它们的标注格式和设计哲学有显著差异。

COCO 数据集采用 JSON 格式存储标注信息。每个标注对象包含 keypoints 数组(长度为 17×3,按 x, y, visibility 顺序排列)、bbox 数组(x, y, w, h)以及 num_keypoints 字段。其 visibility 取值为 0(未标注)、1(被遮挡但位置可推断)、2(可见)。COCO 的挑战在于图像场景复杂、人物尺度变化大,适合评估模型的泛化能力。

MPII 数据集则使用 MAT 文件格式存储,包含 16 个关键点(比 COCO 少了左右眼和左右耳,但增加了头顶、颈部和骨盆)。MPII 的标注更侧重于全身姿态,且图像多来自日常活动场景。其关键点坐标同样以像素为单位,但 visibility 仅用 0/1 表示。

// COCO 标注示例(JSON 格式)
{
  "image_id": 289343,
  "category_id": 1,
  "keypoints": [368, 61, 2, 369, 52, 2, 380, 52, 2, ...],
  "bbox": [300, 40, 120, 200],
  "num_keypoints": 14
}
// 说明:keypoints 数组每三个一组,依次为 x, y, visibility
部署陷阱提醒:在将 COCO 或 MPII 数据用于 TinyML 训练时,务必检查关键点坐标是否超出图像边界。部分标注在图像边缘处会出现负坐标或大于宽高的值,若不进行裁剪或填充处理,会导致归一化后坐标超出 [0,1] 区间,进而影响量化校准的准确性。

3.4 数据预处理流程与TinyML适配

针对 Ethos-U 这类 MCU 级 AI 加速器,数据预处理必须做到“极简且确定”。完整的预处理流程如下:

  1. 图像裁剪与缩放:根据标注的 bbox 裁剪出人物区域,并缩放到模型输入尺寸(如 96×96 或 128×128)。这一步在 PC 端完成,MCU 端只负责推理。
  2. 坐标同步变换:裁剪和缩放时,关键点坐标必须同步变换。设原始坐标为 (x, y),裁剪起点为 (x0, y0),缩放因子为 s,则新坐标为 ((x-x0)*s, (y-y0)*s)。
  3. 归一化:将坐标除以输入尺寸,得到 [0,1] 范围内的浮点数。
  4. 量化准备:在训练时记录坐标的数值分布,用于确定量化 scale 和 zero_point。对于坐标回归任务,建议使用对称量化,因为坐标值理论上关于 0.5 对称。

在模型部署到 Ethos-U 后,MCU 端接收到的输入是经过量化的图像数据,输出是量化后的坐标值。因此,需要在后处理中乘以 scale 并加上 zero_point 才能还原为归一化坐标,再乘以图像尺寸得到像素坐标。

3.5 案例拆解:从COCO标注到Ethos-U部署的坐标流转

假设我们要部署一个跌倒检测模型,输入图像尺寸为 96×96,输出 5 个关键点(头部、躯干中心、左髋、右髋、左膝)。以下是完整的坐标流转过程:

背景与约束:设备为 Cortex-M55 + Ethos-U55 的 MCU,内存仅 512KB,Flash 2MB。模型需在 30ms 内完成单帧推理。

初始现象:在 PC 端使用 COCO 预训练模型微调后,准确率达到 85%(PCK@0.2),但部署到 Ethos-U 后准确率骤降至 62%。

分析过程:检查量化日志发现,坐标输出的量化 scale 为 0.003,而输入图像的 scale 为 0.007。由于坐标值范围远小于图像像素值范围,导致坐标量化误差相对较大。进一步检查发现,训练时未对坐标进行归一化,直接使用了原始像素坐标(0~224),而量化校准集未能覆盖坐标的极端值。

解决方案:

  • 将坐标归一化到 [0,1] 区间,并重新训练模型。
  • 使用 1000 张覆盖不同姿态的校准图像,确保量化校准集包含坐标的边界情况。
  • 在 MCU 端后处理中,将输出坐标乘以 96 得到像素坐标,再乘以 2.33(原图与输入图的缩放比)还原到原图坐标系。

结果对比:优化后准确率回升至 81%,推理时间 28ms,内存占用 480KB。虽然仍略低于 PC 端,但已满足跌倒检测的实用要求。

复盘经验:关键点坐标的数值范围对量化精度影响极大。在 TinyML 中,务必在训练阶段就采用与部署一致的归一化策略,并针对坐标输出单独设计量化校准方案。

3.6 常见误区与总结

在关键点检测的 TinyML 部署中,以下误区需要特别警惕:

  • 误区一:忽略 visibility 信息。在训练时,不可见关键点的 loss 应被屏蔽(乘以 0),否则模型会学习到错误的坐标映射。
  • 误区二:直接使用浮点模型评估结果。量化后的模型在坐标回归任务上通常有 5%~10% 的精度损失,必须在部署前进行充分的量化感知训练(QAT)。
  • 误区三:后处理过于复杂。MCU 上不宜使用基于热力图的 Argmax 操作,应优先选择直接回归坐标的模型结构,减少计算开销。
  • 误区四:忽视坐标的物理意义。不同数据集的关键点定义不同,迁移学习时需仔细对齐关键点索引,否则会导致模型输出完全错误。
最佳实践:在项目启动时,先定义清晰的坐标规范文档,包括关键点索引顺序、归一化方式、可见性处理规则。这份文档应同时供数据标注团队、算法工程师和嵌入式工程师使用,避免因理解不一致导致的返工。

总结而言,关键点检测的基础在于对坐标定义的深刻理解和对数据集规范的严格遵守。在 TinyML 场景下,还需要额外关注数值范围、量化误差和内存占用。掌握本章内容后,读者应能独立完成从数据集解析到模型输入准备的全流程工作,为后续在 Ethos-U 上的模型转换与部署打下坚实基础。