1.模型训练测试(python)
打开 https://docs.ultralytics.com/zh/tasks/pose/#models,选择模型下载,这里选择 yolo26n-pose.pt,下载后放到你创建的项目的 model 文件夹。
前期 python 环境配置可参考相关文档。
在项目创建 cfg 文件夹,放入配置文件 lsp-pose.yaml。
# cfg/lsp-pose.yaml path: datasets/lsp-pose train: train.txt val: val.txt test: test.txt kpt_shape: [14, 3] flip_idx: [0,1,2,10,11,12,3,4,5,6,7,8,9,13] # 根据 LSP 对称关键点 names: 0: person kpt_names: 0: [left_ankle, left_knee, left_hip, right_hip, right_knee, right_ankle, pelvis, thorax, upper_neck, head_top, left_wrist, left_elbow, left_shoulder, right_shoulder, right_elbow, right_wrist]
预期目录结构如下:
yolo # 项目根,根据你的项目改动 ├── model # 放 *.pt 和*.onnx 的地方 ├── cfg # 专门放各种 yaml │ └── lsp-pose.yaml # 下面内容 ├── datasets # 专门放所有数据集 │ └── lsp-pose # 具体数据集 └── runs # 训练输出(自动生成)
通过终端在项目目录运行
yolo pose train \
data=cfg/lsp-pose.yaml \
model=model/yolo26n-pose.pt \
epochs=40 \
imgsz=640 \
batch=16 \
device=mps
epochs 是轮数,imgsz 是图片处理输入尺寸,batch 是每次输入图像的数量,device 是设备,没有 cuda 或 mps 的话用 cpu。
如果出现报错 AttributeError: Can't get attribute 'Pose26' on <module 'ultralytics.nn.modules.head' from '/Users/Zhuanz/Desktop/work/yolo/.venv/lib/python3.10/site-packages/ultralytics/nn/modules/head.py'>,可通过 uv pip install -U ultralytics 升级 ultralytics 到 ≥ 8.4.0。
训练结束。
查看训练情况,模型在训练过程学到了特征,逐渐收敛,也没有出现过拟合现象,仍有较小的提升空间,下次继续训练和提高数据增强的强度可能提升指标。
执行 yolo export model=runs/pose/train/weights/best.pt format=onnx imgsz=640 simplify=True nms=True 导出。
把 best.onnx 文件移到 model,并改名称为 yolo26n-pose_best.onnx。
编写代码 eval-yolo-pose.py,看看在测试集的表现。
""" Evaluate YOLO26 Pose ONNX model on test set - overall P / R / F1 - optional visualization """
from ultralytics import YOLO
from pathlib import Path
import argparse
def main(args):
model = YOLO(args.model)
metrics = model.val(
data=args.data,
imgsz=args.imgsz,
split=,
conf=args.conf,
iou=args.iou,
plots=args.vis,
save_json=,
verbose=
)
()
()
()
()
()
()
args.vis:
()
__name__ == :
parser = argparse.ArgumentParser()
parser.add_argument(, =, default=, =)
parser.add_argument(, =, default=)
parser.add_argument(, =, default=)
parser.add_argument(, =, default=)
parser.add_argument(, =, default=)
parser.add_argument(, action=, =)
args = parser.parse_args()
main(args)


