Keypoints
关键点是带名称的点,例如人体关节,以坐标和可见性标志的形式存储。内容涵盖关键点的定义、标注、预测和用途。
关键点是物体上特定且有名称的点,例如人的左手腕、车轮中心或盒子的角点,以图像坐标的形式存储。姿态估计模型会为检测到的每个物体预测一组固定关键点,每个关键点都带有置信度分数;连接这些关键点的边构成骨架,用于描述姿势和形状。关键点标记物体的组成部分,比环绕整个物体的边界框或描绘其轮廓的分割掩码提供更细致的描述。“Landmarks”是它的同义词,主要用于人脸。
定义和标注关键点#
每个数据集都会固定其关键点集合及其顺序。COCO为人体定义了 17 个关键点:鼻子、眼睛、耳朵、肩膀、肘部、手腕、臀部、膝盖和脚踝。每个标签都存储 x 和 y 坐标以及一个可见性标记:0 表示未标注,1 表示已标注但被遮挡,2 表示已标注且可见。其他关键点集合则适用于其他对象,例如手部关键点数据集中的 21 个点、300-W的 68 点人脸方案、Dog-Pose中每只狗的 24 个点,或制造零件的角点。由于顺序具有语义,对图像进行水平翻转的数据增强也必须将每个左侧关键点与对应的右侧关键点互换,否则翻转后的左手腕仍会保留另一只手臂的标签。
模型如何预测关键点#
深度学习模型会通过热力图或直接回归图像特征中的坐标来预测关键点:热力图为每个关键点生成一张图,其峰值标记该点的位置。每个预测结果都带有置信度;如果关键点被另一个人遮挡、被画面边缘截断或因运动而模糊,置信度就会降低,因此应用可以忽略低置信度点,而不是盲目相信猜测。预测结果使用目标关键点相似度(OKS)进行评分;对于髋部等人们标注一致性较低的关键点,该指标允许更大的误差,而对眼睛等精确关键点则要求更高。
from ultralytics import YOLO
# Load a YOLO26 pose model that predicts the 17 COCO body keypoints per person
model = YOLO("yolo26n-pose.pt")
results = model("https://ultralytics.com/images/bus.jpg")
keypoints = results[0].keypoints
# COCO order: index 0 is the nose, 9 and 10 are the left and right wrists
for index, name in [(0, "nose"), (9, "left wrist"), (10, "right wrist")]:
x, y = keypoints.xy[0, index].tolist()
print(f"{name}: ({x:.0f}, {y:.0f}), confidence {keypoints.conf[0, index]:.2f}")每行给出第一个检测到的人的一个关键点,包含像素位置和置信度;keypoints.xyn则保存了归一化到图像尺寸后的相同位置。
语义关键点与兴趣点#
姿态关键点具有语义:模型会学习左手腕的外观。兴趣点则由检测器发现,而非预先定义。SIFT(1999)会寻找在尺度和旋转变化下仍保持稳定的斑点,ORB(2011)能快速检测角点,满足实时地图构建的需求,而 SuperPoint(2018)则学习寻找可重复检测的点。围绕每个点计算的描述符可让 LightGlue 等匹配器在不同图像中关联同一个点,用于图像配准、三维重建和视觉 SLAM;点跟踪则会在视频中持续跟踪这些点。
使用关键点进行测量#
关键点能将图像转化为几何信息:两个关键点可以计算距离,三个关键点可以计算关节角度,而连续帧中的关键点序列可以计算速度。Ultralytics 的锻炼监测解决方案会用这种方式统计重复动作次数:默认情况下,对于每个被跟踪的人,它使用 YOLO26姿态模型的关键点 6、8 和 10(右肩、右肘和右手腕)测量右肘角度:










