YOLOv13-pose关键点检测:训练实战手把手教程篇| 自己数据集从labelme标注到生成yolo格式的关键点数据以及训练教程

简介: 本专栏详解YOLOv13-pose关键点检测:含自研HyperACE超图增强、FullPAD全链路协同及轻量DSC3k2模块,Pose mAP50达0.893;手把手教学数据标注(LabelMe)、格式转换与训练实战,适配红外、小目标、医疗等多场景,附创新代码与论文写作支持。

  💡💡💡本文解决什么问题:教会你如何用自己的数据集转换成对应格式的数据集以及如何训练YOLOv13-pose关键点检测

Pose mAP50 为0.893,相较于YOLO11的Pose mAP50 为  0.871  ,大幅提升

《YOLOv13魔术师专栏》将从以下各个方向进行创新:



1.YOLOv13介绍

image.gif

论文:[2506.17733] YOLOv13: Real-Time Object Detection with Hypergraph-Enhanced Adaptive Visual Perception

摘要—YOLO 系列模型因其卓越的准确性和计算效率在实时目标检测领域占据主导地位。然而,无论是 YOLO11 及更早版本的卷积架构,还是 YOLOv12 引入的基于区域的自注意力机制,都仅限于局部信息聚合和成对相关性建模,缺乏捕捉全局多对多高阶相关性的能力,这限制了在复杂场景下的检测性能。本文提出了一种准确且轻量化的 YOLOv13 目标检测器。为应对上述挑战,我们提出了一种基于超图的自适应相关性增强(HyperACE)机制,通过超图计算自适应地利用潜在的高阶相关性,克服了以往方法仅基于成对相关性建模的限制,实现了高效的全局跨位置和跨尺度特征融合与增强。随后,我们基于 HyperACE 提出了全链路聚合与分配(FullPAD)范式,通过将相关性增强特征分配到整个网络,有效实现了全网的细粒度信息流和表征协同。最后,我们提出用深度可分离卷积代替常规的大核卷积,并设计了一系列块结构,在不牺牲性能的前提下显著降低了参数量和计算复杂度。我们在广泛使用的 MS COCO 基准测试上进行了大量实验,结果表明,我们的方法在参数更少、浮点运算量更少的情况下达到了最先进性能。具体而言,我们的 YOLOv13-N 相比 YOLO11-N 提升了 3.0% 的 mAP,相比 YOLOv12-N 提升了 1.5% 的 mAP。

image.gif

以往的 YOLO 系列遵循 “骨干网络 → 颈部网络 → 检测头” 的计算范式,这本质上限定了信息流的充分传输。相比之下,我们的模型通过超图自适应关联增强(HyperACE)机制,实现全链路特征聚合与分配(FullPAD),从而增强传统的 YOLO 架构。因此,我们提出的方法在整个网络中实现了细粒度的信息流和表征协同,能够改善梯度传播并显著提升检测性能。具体而言,如图 2 所示,我们的 YOLOv13 模型首先使用类似以往工作的骨干网络提取多尺度特征图 B1、B2、B3、B4、B5,但其中的大核卷积被我们提出的轻量化 DS-C3k2 模块取代。然后,与传统 YOLO 方法直接将 B3、B4 和 B5 输入颈部网络不同,我们的方法将这些特征收集并传递到提出的 HyperACE 模块中,实现跨尺度跨位置特征的高阶关联自适应建模和特征增强。随后,我们的 FullPAD 范式利用三个独立通道,将关联增强后的特征分别分配到骨干网络与颈部网络的连接处、颈部网络的内部层以及颈部网络与检测头的连接处,以优化信息流。最后,颈部网络的输出特征图被传递到检测头中,实现多尺度目标检测。

image.gif

ultralytics/cfg/models/v13/yolov13.yaml

nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov13n.yaml' will call yolov13.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.50, 0.25, 1024]   # Nano
  s: [0.50, 0.50, 1024]   # Small
  l: [1.00, 1.00, 512]    # Large
  x: [1.00, 1.50, 512]    # Extra Large
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv,  [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv,  [128, 3, 2, 1, 2]] # 1-P2/4
  - [-1, 2, DSC3k2,  [256, False, 0.25]]
  - [-1, 1, Conv,  [256, 3, 2, 1, 4]] # 3-P3/8
  - [-1, 2, DSC3k2,  [512, False, 0.25]]
  - [-1, 1, DSConv,  [512, 3, 2]] # 5-P4/16
  - [-1, 4, A2C2f, [512, True, 4]]
  - [-1, 1, DSConv,  [1024, 3, 2]] # 7-P5/32
  - [-1, 4, A2C2f, [1024, True, 1]] # 8
head:
  - [[4, 6, 8], 2, HyperACE, [512, 8, True, True, 0.5, 1, "both"]]
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [ 9, 1, DownsampleConv, []]
  - [[6, 9], 1, FullPAD_Tunnel, []]  #12     
  - [[4, 10], 1, FullPAD_Tunnel, []]  #13    
  - [[8, 11], 1, FullPAD_Tunnel, []] #14 
  
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 12], 1, Concat, [1]] # cat backbone P4
  - [-1, 2, DSC3k2, [512, True]] # 17
  - [[-1, 9], 1, FullPAD_Tunnel, []]  #18
  - [17, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 13], 1, Concat, [1]] # cat backbone P3
  - [-1, 2, DSC3k2, [256, True]] # 21
  - [10, 1, Conv, [256, 1, 1]]
  - [[21, 22], 1, FullPAD_Tunnel, []]  #23
  
  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 18], 1, Concat, [1]] # cat head P4
  - [-1, 2, DSC3k2, [512, True]] # 26
  - [[-1, 9], 1, FullPAD_Tunnel, []]  
  - [26, 1, Conv, [512, 3, 2]]
  - [[-1, 14], 1, Concat, [1]] # cat head P5
  - [-1, 2, DSC3k2, [1024,True]] # 30 (P5/32-large)
  - [[-1, 11], 1, FullPAD_Tunnel, []]  
  
  - [[23, 27, 31], 1, Detect, [nc]] # Detect(P3, P4, P5)

image.gif

1.1  HyperACE

超图自适应相关性增强机制 HyperACE

  • 超图理论借鉴与创新 :借鉴超图理论,将多尺度特征图的像素视为超图顶点,不同的是,传统超图方法依赖手工设定参数构建超边,而 HyperACE 设计了可学习的超边生成模块,能自适应地学习并构建超边,动态探索不同特征顶点间的潜在关联。
  • 超图卷积操作 :在生成自适应超边后,通过超图卷积操作进行特征聚合与增强。每条超边先从其连接的所有顶点处聚合信息形成高阶特征,再将这些高阶特征传播回各个顶点,更新与增强顶点特征,从而实现高效地跨位置和跨尺度的特征融合与增强,强化不同尺度特征间的语义关联,对小目标和密集目标检测效果显著。

image.gif

代码位置ultralytics/nn/modules/block.py

1.2  FullPAD_Tunnel

全流程聚合 - 分发范式 FullPAD

  • 多通道特征传递 :打破传统的 “骨干→颈部→头部” 单向计算范式,通过三条独立通路传递特征,即主干 - 颈部连接层、颈部内部层、颈部 - 头部连接层,将 HyperACE 聚合后的多尺度特征,通过这些 “隧道” 分发回网络的不同位置,实现细粒度信息流与全流程表征协同。
  • 改善梯度传播 :该范式有效解决了梯度消失或爆炸问题,显着改善了梯度传播效率,从而提升模型整体的检测性能,使模型在复杂场景下能够更好地捕捉目标特征,提高检测的准确性和稳定性。

image.gif

代码位置ultralytics/nn/modules/block.py

1.3 DSC3k2

基于深度可分离卷积的轻量化模块

  • 模块创新与替代 :采用深度可分离卷积构建了 DSConv、DS-Bottleneck、DS-C3k 等模块,替代传统的大核卷积。例如使用 DS-C3k2 模块作为轻量化的骨干网络提取多尺度特征,在保持感受野的同时,大幅降低了参数量与计算量,提高了模型的计算效率。
  • 性能与效率平衡 :在几乎不牺牲性能的前提下,显著减少了模型的参数量和计算复杂度,使得 YOLOv13 能够在保持较高检测精度的同时,具备更快的推理速度,适合实时目标检测应用场景,降低了模型的部署难度和资源消耗。

image.gif

代码位置ultralytics/nn/modules/block.py

2.如何标注自己的关键点数据集

2.1 labelme下载

# 安装labelme
pip install labelme

image.gif

2.2使用labelme下

直接在python环境下运行

labelme

image.gif

2.3 labelme介绍

关键点标记主要使用

1)Create Rectangle生成矩形框;

2)Create Point生成关键点;

image.gif

2.4 数据集标注

image.gif

3.数据集格式转换

3.1标记后的数据格式如下

一张图片对应一个json文件

image.gif

json部分内容如下:

{
  "version": "5.1.1",
  "flags": {},
  "shapes": [
    {
      "label": "Ulna",
      "points": [
        [
          474.71929824561397,
          1443.4035087719294
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "Radius",
      "points": [
        [
          639.6315789473683,
          1445.1578947368416
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "FMCP",
      "points": [
        [
          832.6140350877192,
          1222.3508771929824
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "FPIP",
      "points": [
        [
          1023.8421052631577,
          1089.0175438596489
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "FDIP",
      "points": [
        [
          1157.1754385964912,
          987.2631578947367
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "MCP5",
      "points": [
        [
          430.85964912280696,
          946.9122807017543
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "MCP4",
      "points": [
        [
          543.1403508771929,
          910.0701754385964
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "MCP3",
      "points": [
        [
          657.1754385964912,
          881.9999999999998
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "MCP2",
      "points": [
        [
          797.5263157894736,
          896.035087719298
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "PIP5",
      "points": [
        [
          401.0350877192982,
          864.4561403508769
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "PIP4",
      "points": [
        [
          529.1052631578947,
          801.2982456140348
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "PIP3",
      "points": [
        [
          678.2280701754386,
          773.2280701754385
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "PIP2",
      "points": [
        [
          843.1403508771929,
          810.0701754385964
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "MIP5",
      "points": [
        [
          329.1052631578947,
          696.035087719298
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "MIP4",
      "points": [
        [
          513.3157894736842,
          562.7017543859647
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "MIP3",
      "points": [
        [
          713.3157894736842,
          515.3333333333333
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "MIP2",
      "points": [
        [
          944.8947368421052,
          608.3157894736839
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "DIP5",
      "points": [
        [
          313.31578947368416,
          601.2982456140348
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "DIP4",
      "points": [
        [
          509.8070175438596,
          411.8245614035086
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "DIP3",
      "points": [
        [
          727.3508771929824,
          345.15789473684185
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "DIP2",
      "points": [
        [
          994.017543859649,
          492.52631578947353
        ]
      ],
      "group_id": null,
      "shape_type": "point",
      "flags": {}
    },
    {
      "label": "hand",
      "points": [
        [
          204.82608695652186,
          183.95652173913044
        ],
        [
          1265.695652173913,
          1775.2608695652175
        ]
      ],
      "group_id": null,
      "shape_type": "rectangle",
      "flags": {}
    }
  ],
  "imagePath": "1525.png",

image.gif

3.2 生成适合yolo格式的关键点数据集

labelme2yolo-keypoint

详见CSDN

https://cv2023.blog.csdn.net/article/details/149509625

生成的txt内容如下:

0 0.48481 0.47896 0.70079 0.77886 0.31308 0.70597 2 0.42206 0.70695 2 0.54954 0.59785 2 0.67569 0.53278 2 0.76420 0.48288 2 0.28402 0.46282 2 0.35865 0.44521 2 0.43395 0.43102 2 0.52642 0.43836 2 0.26486 0.42270 2 0.34941 0.39188 2 0.44782 0.37818 2 0.55680 0.39628 2 0.21731 0.34051 2 0.33884 0.27495 2 0.47094 0.25196 2 0.62351 0.29746 2 0.20674 0.29403 2 0.33620 0.20108 2 0.48018 0.16879 2 0.65654 0.24070 2

image.gif

讲解:

第一个0代表:框的类别,因为只有hand一类,所以为0

0.48481 0.47896 0.70079 0.77886 代表:归一化后的 框的中心点横纵坐标、宽、高

0.31308 0.70597 2代表:归一化后的 第一个关键点的横纵坐标、关键点可见性

关键点可见性理解:0代表不可见、1代表遮挡、2代表可见

3.3生成的yolo数据集如下

hand_keypoint:
-images:
 --train: png图片
 --val:png图片
-labels:
 --train: txt文件
 --val:txt文件

image.gif

4.手部关键点训练

4.1 新建data/hand_keypoint.yaml

参考coco8-pose.yaml即可

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO8-pose dataset (first 8 images from COCO train2017) by Ultralytics
# Example usage: yolo train data=coco8-pose.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco8-pose  ← downloads here (1 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ./ultralytics-7.31/data/hand_keypoint  # dataset root dir
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
test:  # test images (optional)
# Keypoints
kpt_shape: [21, 3]  # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15,17,18,19,20]
# Classes
names:
  0: hand
# Download script/URL (optional)
#download: https://ultralytics.com/assets/coco8-pose.zip

image.gif

4.2修改ultralytics/cfg/models/v13/yolov13-pose.yaml

修改为21个关键点和一个类别nc:1

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLO11-pose keypoints/pose estimation model. For Usage examples see https://docs.ultralytics.com/tasks/pose
# Parameters
nc: 1 # number of classes
kpt_shape: [21, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
scales: # model compound scaling constants, i.e. 'model=yolov13n.yaml' will call yolov13.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.50, 0.25, 1024]   # Nano
  s: [0.50, 0.50, 1024]   # Small
  l: [1.00, 1.00, 512]    # Large
  x: [1.00, 1.50, 512]    # Extra Large

image.gif

4.3默认参数开启训练

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
    model = YOLO('ultralytics/cfg/models/v13/yolov13-pose.yaml')
    #model.load('yolov13n.pt') # loading pretrain weights
    model.train(data='data/hand_keypoint.yaml',
                cache=False,
                imgsz=640,
                epochs=200,
                batch=16,
                #close_mosaic=10,
                device='2',
                optimizer='SGD', # using SGD
                project='runs/train',
                name='exp',
                )

image.gif

4.4 训练结果分析

200个epoch以后,训练结果可视化如下:

image.gif

Pose mAP50 为0.893,相较于YOLO11的Pose mAP50 为  0.871  ,大幅提升


YOLOv13-pose summary: 554 layers, 2,821,743 parameters, 0 gradients, 7.7 GFLOPs
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)     Pose(P          R      mAP50  mAP50-95): 100%|██████████| 2/2 [00:04<00:00,  2.07s/it]
                   all         64         64      0.998          1      0.995      0.874      0.691      0.922      0.922      0.893      0.893       0.72

image.gif

PosePR_curve.png

image.gif

预测结果如下:

image.gif

目录
相关文章
|
23天前
|
机器学习/深度学习 人工智能 机器人
源码级解读:YOLO26的新架构与创新设计(原理介绍+代码详见+结构框图)
YOLO26是YOLO系列最新边缘智能模型,主打轻量高效:移除DFL简化架构、端到端无NMS推理、引入ProgLoss与STAL提升小目标检测、创新MuSGD优化器加速收敛,并支持检测/分割/姿态等多任务。CPU推理速度较前代最高提升43%,适配Jetson等资源受限设备。
132 0
|
2月前
|
JSON 物联网 计算机视觉
微调LocateAnything-3B 实现超高密度的目标检测
本文介绍如何微调NVIDIA LocateAnything-3B模型,应对300+密集重叠种子的精准定位难题。依托并行框解码(PBD)与半监督Pipeline(点标注→SAM2转框→YOLO伪标→定向微调),大幅降低人工成本,实现高精度、可落地的密集目标检测方案。
623 0
微调LocateAnything-3B 实现超高密度的目标检测
|
机器学习/深度学习 算法 PyTorch
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
人工智能 测试技术 API
548 0
|
20天前
|
设计模式 Web App开发 人工智能
【AI】Agent 全栈进阶|系统化学习路线专题
描述 Agent 的概念、核心构成,规划出一套循序渐进的 Agent 开发学习路径,从大模型调用、工具调用、RAG、运行模式、记忆机制再到工程化调试,同时附上多款适合入门钻研的开源参考项目
947 6
|
4月前
|
机器学习/深度学习 人工智能 算法
普通摄像头秒变“透视仪”:黎曼分形透镜如何让微弱瑕疵无处遁形(军工项目之外研究)
一种基于黎曼分形动力学的非线性图像增强技术——“分形透镜”。无需AI模型,仅用纯C++实现,通过递归映射与黄金分割比调控,实时放大微弱灰度差异(如水渍、指纹、低温差目标),在普通USB摄像头上实现“透视级”细节增强,计算耗时 0.5ms,已开源并验证于工业检测与国防场景。
400 10
|
5月前
|
人工智能 Linux API
OpenClaw 8大核心命令:解决90%日常使用问题+全平台部署与大模型API配置指南
在日常使用OpenClaw(Clawdbot)的过程中,大部分用户都会频繁遇到各类问题:上下文溢出导致对话中断、历史会话堆积造成系统卡顿、网关无故崩溃、配置出错无法定位、命令运行报错等。这些问题看似琐碎,却会直接影响使用体验,甚至导致任务中断、数据无法正常加载。实际上,只要掌握8条最核心的系统命令,就能解决日常90%以上的使用难题,快速恢复系统稳定运行。本文基于2026年最新版本,完整讲解OpenClaw 8条高频救命命令的使用场景与执行方法,同时补充阿里云云端部署、MacOS/Linux/Windows11本地部署全流程,以及阿里云千问大模型API、免费Coding Plan API的详细配
2507 2
|
11月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
708 0
|
7月前
|
缓存 网络安全 语音技术
docker安装部署FunASR
本指南详解FunASR在线语音识别服务的外网部署与内网迁移全流程:先在外网拉取Docker镜像、自动下载模型并启动服务(端口10095),验证成功后,将镜像和缓存模型打包导出;再于内网服务器导入镜像、解压模型、挂载运行,全程禁用SSL,支持热词与标点恢复,开箱即用。
4492 3
|
9月前
|
机器学习/深度学习 搜索推荐 JavaScript
基于python深度学习的经典名著推荐系统
本系统基于Python深度学习技术,结合Django与Vue.js框架,构建智能化经典名著推荐平台。通过分析用户行为与文本特征,实现个性化精准推荐,提升阅读体验,助力经典文化传承与数字阅读升级。