Pose Estimation
学习姿态估计如何利用关键点来跟踪运动。探索真实世界中的应用,并开始使用 Ultralytics YOLO26 以获得快速、准确的结果。
姿态估计是一种专业的计算机视觉技术,它不仅能检测物体的存在,还能理解物体的几何结构和物理方向。标准object detection会在主体周围绘制简单的矩形框,而姿态估计则能识别特定的语义点(称为keypoints),例如人体上的关节(手肘、膝盖、肩膀)或车辆上的结构转角。通过映射这些关键地标,machine learning模型可以重建主体的骨骼表示,使系统能够解释2D或3D空间中的肢体语言、运动动态和精确定位。
核心机制:自上而下与自下而上#
现代姿态估计高度依赖复杂的deep learning架构,通常利用Convolutional Neural Networks (CNNs)来处理视觉数据。这些算法通常遵循以下两种主要策略之一来识别关键点:
- 自顶向下方法:此方法首先采用目标检测模型来定位bounding boxes内的各个实例。一旦从较大的图像中裁剪出人或物体,姿态估计器就会预测该特定区域内的关键点。这种方法通常具有极高的准确性,但随着画面中主体数量的增加,可能会遭遇更高的inference latency。
- 自底向上方法:相反,此策略会同时检测整张图像中的所有潜在关键点(例如,找到人群中的每一个“左膝”),然后使用关联算法将它们组合成各自的骨骼。由于无论场内有多少人,计算成本都保持相对恒定,因此该方法通常是拥挤场景中real-time inference的首选。
像YOLO26这样的最先进模型采用了先进的端到端架构,平衡了这些需求,能够提供适用于在edge AI设备和移动平台上部署的高速姿态估计。
区分相关的计算机视觉术语#
将姿态估计与其他视觉识别任务区分开来,有助于理解其在computer vision工作流中的独特价值:
- Object Detection:专注于识别物体是 什么 以及 在哪里,并输出一个矩形框。它将主体视为刚体,而不理解其内部的关节连接。
- Instance Segmentation:生成勾勒出物体精确形状的像素级完美掩码。虽然分割提供了边界,但它并未明确识别kinematic analysis所需的关节或骨骼连接。
- Pose Estimation:专门针对内部结构,映射预定地标之间的连接(例如,从臀部到膝盖),以分析姿势和动作。
实际应用#
数字化人类和物体运动的能力已经在各个行业带来了变革性的应用,通常使用诸如Ultralytics Platform之类的工具进行训练,以管理带有注释的大型关键点数据集。
医疗保健与康复#
在医疗领域,AI in healthcare利用姿态估计来远程监控患者康复情况。通过追踪关节角度和运动范围,自动化系统可以确保患者在家中正确进行physical therapy exercises。这降低了再次受伤的风险,并允许临床医生在无需昂贵实验室设备的情况下量化康复进展。
体育分析#
教练和运动员利用sports analytics来优化表现。姿态估计模型可以分析高尔夫球手的挥杆平面、跑步者的步幅或投手的生物力学,而无需使用传统motion capture中所需的侵入式标记服。这提供了即时的、基于数据的反馈,以改善技术并防止过度使用损伤。
零售与行为分析#
在商业环境中,AI in retail系统使用姿态检测来了解客户行为,例如伸手去拿高货架上的产品或在特定过道逗留。通过将身体动作与购买决策相关联,这些数据有助于优化商店布局并改善inventory management。
代码示例:使用 Ultralytics YOLO26 进行姿态估计#
使用现代Python框架实现姿态估计非常简单。以下示例演示了如何使用 ultralytics 包加载预训练的YOLO26模型(YOLO11的后继者)并在图像中检测人体关键点。
from ultralytics import YOLO
# Load the YOLO26 pose model (nano version for speed)
model = YOLO("yolo26n-pose.pt")
# Perform inference on an image source
# The model identifies bounding boxes and specific keypoints (joints)
results = model("https://ultralytics.com/images/bus.jpg")
# Print the xy coordinates of detected keypoints
print(results[0].keypoints.xy)
# Visualize the skeletal results directly
results[0].show()





