yolov8关键点检测全过程教学——自定义身份证关键点数据集制作与训练

一、标注工具——X-AnyLabeling

1、简介

        网上很多推荐的是labelme工具,本人更喜欢用X-AnyLabeling工具进行各种视觉任务的数据集标注。X-AnyLabeling是一个AI标注工具,提供了包括矩形框、多边形、点标注等在内的多种标注模式,适用于不同任务的需求。并且可以导入训练模型进行自动标注,对于数据集较大的项目非常适用。

2、下载

        我是通过这篇博客进行安装的:自动标注软件X-AnyLabeling的使用教程及一些问题的记录-CSDN博客

二、样本标注

1、yolov8数据集标签txt文件的两种格式(两种都可用于关键点训练)

(yolov8pose官方:Pose Estimation Datasets Overview - Ultralytics YOLO Docs

格式1:<类别ID> <边框中心点X坐标> <边框中心点Y坐标> <关键点X坐标> <关键点Y坐标>......

格式2:<类别ID> <边框中心点X坐标> <边框中心点Y坐标> <关键点X坐标> <关键点Y坐标> <可见性>.......

可见性说明:

        0表示不可见,无需标注;

        1表示遮挡,但能标注出大致位置;

        2表示可见。

2、标注步骤

S1:打开需要标注的图像文件夹

S2:先点击矩形框进行矩形框标注。框选整个目标,然后设置类别标签label。

S3:然后点击"Points"进行关键点标注。

        如果按照格式1,则不需要可见性。第3步可以省略;

        如果按照格式2,则需要进行可见性标注。本文是通过设置Group ID的值来表示可见性,也可设置deseription来表示可见性。

S3:逐点标注至结束,得到图片对应的 json 文件。

三、标注文件的格式转换——json格式转txt格式

另一篇博客给出了转换代码:yolov8关键点标注文件转换代码——json格式转txt格式-CSDN博客

四、训练自定义关键点数据集

1、数据集格式

我的自定义数据集名称为datapose3,包含images和labels两个字文件。这两个子文件分别存储了图片和txt文件。注意:txt文件名称和图片名称一定要对应

2、数据配置文件——data_IDcard.yaml文件

# Train/val/test设置为3种方式之一:1)dir: path/to/imgs, 2) file: path/to/imgs.txt,或者3)list: [path/to/imgs1, path/to/imgs2,…]
path: C:/Users/admin/Desktop/datapose3
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: [4, 3] # 4表示关键点数量,3表示 关键点坐标 和 可见性
#flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]  #对称点设置————用于数据增强

# Classes
names:
  0: IDcard

说明:

(1)kpt_shape: [4, 3]

        如果采用格式1训练(没有标注可见性),kpt_shape: [4, 3] 中的3改为2。

        参数4是关键点数量,根据自己标注的关键点进行设置。

(2)flip_idx:

        flip_idx用于设置对称点,可以增强模型。这个参数可以不设置。如果想要设置这个参数,使用示例如下:

标注关键点顺序:[0,1,2,3,4]。表示[左耳,右耳,鼻子,左眼,右眼]。

则flip_idx设置为:[1,0,2,4,3]。仅需要叫对称的关键点进行换位即可。

3.模型配置文件——yolov8n_pose.yaml文件

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8-pose keypoints/pose estimation model. For Usage examples see https://docs.ultralytics.com/tasks/pose

# Parameters
nc: 1 # number of classes
kpt_shape: [4, 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=yolov8n-pose.yaml' will call yolov8-pose.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]
  s: [0.33, 0.50, 1024]
  m: [0.67, 0.75, 768]
  l: [1.00, 1.00, 512]
  x: [1.00, 1.25, 512]

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]] # 9

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 3, C2f, [512]] # 12

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 3, C2f, [256]] # 15 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]] # cat head P4
  - [-1, 3, C2f, [512]] # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]] # cat head P5
  - [-1, 3, C2f, [1024]] # 21 (P5/32-large)

  - [[15, 18, 21], 1, Pose, [nc, kpt_shape]] # Pose(P3, P4, P5)

说明:kpt_shape: [4, 3]

        如果采用格式1训练(没有标注可见性),kpt_shape: [4, 3] 中的3改为2。

        参数4是关键点数量,根据自己标注的关键点进行设置。

4.训练

注意:训练时如果你的数据集较少,需要用更大的epochs值。避免出现关键点训练P、R、mAP值为0的情况。

from ultralytics import YOLO

# 模型训练的三种方式,任选其一
#(1)通过搭建的网络模型进行训练
model = YOLO("yolov8n-pose.yaml")  
#(2)通过预训练权重进行训练
model = YOLO("yolov8n-pose.pt")  
#(3)搭建网络模型训练并转移权重
model = YOLO("yolov8n-pose.yaml").load("yolov8n-pose.pt")  

#开始训练
results = model.train(data="data_IDcard.yaml", epochs=100, imgsz=640)

如果觉得对自己有帮助,可以赞收藏哦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值