YOLO26N 姿态估计模型训练全流程
1. 环境准备
pipinstallultralytics==8.3.0
2. 数据集配置
# data_pose.yamlpath:./datasettrain:train/imagesval:valid/imagestest:test/imagesnames:0:personnc:1task:posekpt_shape:[17,3]
3. 模型训练
#!/usr/bin/env python3"""train_pose.py - YOLO26N 姿态估计训练"""fromultralyticsimportYOLO# 加载预训练姿态模型model=YOLO("yolo26n-pose.pt")# 训练results=model.train(data="data_pose.yaml",epochs=100,imgsz=640,batch=16,device="0",workers=8,patience=20,save=True,save_period=10,project="runs/pose",name="yolo26n_pose_custom",exist_ok=True,pretrained=True,optimizer="auto",lr0=0.01,lrf=0.01,momentum=0.937,weight_decay=0.0005,warmup_epochs=3,# 姿态专用参数pose=12.0,# 关键点损失权重kobj=1.0,# 关键点目标性损失box=7.5,# 边界框损失cls=0.5,# 分类损失dfl=1.5,# DFL 损失# 数据增强mosaic=1.0,mixup=0.0,# 姿态任务不推荐 MixUpcopy_paste=0.0,flipud=0.0,# 不上下翻转fliplr=0.5,# 左右翻转degrees=10.0,scale=0.3,plots=True,)print(f"最佳 mAP50:{results.best_map50:.4f}")print(f"最佳 mAP50-95:{results.best_map50_95:.4f}")
4. 从检测模型迁移训练
# 如果没有预训练姿态模型,从检测模型迁移fromultralyticsimportYOLO# 加载检测模型model=YOLO("yolo26n.pt")# 微调为姿态模型results=model.train(data="data_pose.yaml",epochs=100,imgsz=640,batch=16,task="pose",freeze=10,# 冻结 backbone)
5. 训练监控
# 查看训练曲线fromultralyticsimportYOLO# 加载训练结果results=YOLO("runs/pose/yolo26n_pose_custom/weights/best.pt")# 查看指标print(f"mAP50:{results.metrics.box.map50}")print(f"mAP50-95:{results.metrics.box.map}")print(f"关键点 mAP:{results.metrics.pose.map}")
6. 超参数调优
# 关键超参数pose:12.0# 关键点损失权重(增大提升关键点精度)kobj:1.0# 关键点目标性损失box:7.5# 边界框损失cls:0.5# 分类损失dfl:1.5# DFL 损失# 调优建议:# 关键点不准 → 增大 pose 权重(15-20)# 漏检多 → 增大 box 权重(10-15)# 误检多 → 增大 cls 权重(1.0-2.0)
7. 多尺度训练
# 多尺度训练(提升小目标关键点)model.train(data="data_pose.yaml",epochs=100,imgsz=640,multi_scale=True,# 启用多尺度scale=0.5,# 缩放范围)
8. 训练结果分析
训练结果示例: ┌──────────────────┬──────────┐ │ 指标 │ 数值 │ ├──────────────────┼──────────┤ │ mAP50 (bbox) │ 92.5 │ │ mAP50-95 (bbox) │ 78.3 │ │ mAP50 (pose) │ 88.2 │ │ mAP50-95 (pose) │ 68.5 │ │ Precision │ 89.1 │ │ Recall │ 85.6 │ └──────────────────┴──────────┘
总结
| 配置 | 推荐值 | 说明 |
|---|
| 模型 | yolo26n-pose.pt | 预训练权重 |
| epochs | 100-200 | 足够收敛 |
| batch | 16-32 | 根据显存 |
| imgsz | 640 | 标准尺寸 |
| pose loss | 12.0 | 关键点权重 |
| flipud | 0.0 | 不翻转 |
| fliplr | 0.5 | 左右翻转 |