YOLOv8-Pose训练自己的数据集

YOLOv8-Pose训练自己的数据集

版权声明:本文为转载文章,遵循 CC 4.0 BY-SA 版权协议,如由侵权请联系删除。
原文链接:https://blog.csdn.net/qq_54134410/article/details/134875161

0、引言

1、环境准备

2、数据集准备

2.1、创建数据集存放的文件夹

2.2 准备用于YOLOv8-Seg训练的txt

2.2.1 将COCO数据集json格式文件转换成YOLOv8-Pose格式的txt

2.2.2 将自己标注的数据转换成YOLOv8-Pose格式的txt

3、创建配置文件

3.1、设置myposedata.yaml

3.2、设置yolov8s-pose.yaml

4、进行训练

5、验证模型

6、总结


0、引言

本文是使用YOLOv8-Pose训练自己的数据集,数据集包含COCO数据集以及自己标注的人体姿态数据集。

1、环境准备

可以参考这篇博客:深度学习环境搭建-CSDN博客

本文环境:

  • Windows10
  • python:3.10
  • cuda:11.6
  • pytorch:1.12.0
  • torchvision:0.13.0

2、数据集准备

2.1、创建数据集存放的文件夹

 
 
  1. Posedata
  2. ____ __images
  3. __ ____ ____ __train
  4. __ ____ ____ ____ ___001.jpg
  5. ___ ____ ____ _val
  6. ____ ____ ____ _____002.jpg
  7. ____ __labels
  8. __ ____ ____ __train
  9. __ ____ ____ ____ ___001.txt
  10. ___ ____ ____ _val
  11. ____ ____ ____ _____002.txt

本人的数据都存放在Posedata文件夹中(自定义命名)

目录结构如下:images存放训练集和验证集图片,labels存放训练集和验证集txt

2.2 准备用于YOLOv8-Seg训练的txt
2.2.1 将COCO数据集json格式文件转换成YOLOv8-Pose格式的txt

从官网下载CoCo数据集的json文件

具体步骤参考我的这篇博客:将CoCo数据集Json格式转成训练Yolov8-Pose姿态的txt格式-CSDN博客

2.2.2 将自己标注的数据转换成YOLOv8-Pose格式的txt

具体步骤参考我的这篇博客:将labelme标注的人体姿态Json文件转成训练Yolov8-Pose的txt格式-CSDN博客

将COCO转化得到的数据和自己的数据集合并即可,这样就得到了可用于训练的数据,train中存放训练数据,val存放验证集。

3、创建配置文件

3.1、设置myposedata.yaml

根据自己的数据集位置进行修改和配置


 
 
  1. # Train /val / test sets as 1) dir: path / to /imgs, 2) file: path / to /imgs.txt, or 3) list: [path / to /imgs 1, path / to /imgs 2, ..]
  2. path: G:\Yolov 8\ultralytics-main\datasets\myposedata\Posedata # dataset root dir
  3. train: images /train # train images ( relative to 'path') 4 images
  4. val: images /val # val images ( relative to 'path') 4 images
  5. test: # test images ( optional)
  6. # Keypoints
  7. kpt_shape: [ 17, 3] # number of keypoints, number of dims ( 2 for x,y or 3 for x,y,visible)
  8. flip_idx: [ 0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]
  9. # Classes
  10. names:
  11. 0: person
3.2、设置yolov8s-pose.yaml

根据自己想使用的权重进行选择,我这里采用的是yolov8s-pose.pt进行训练。


 
 
  1. # Ultralytics YOLO 🚀, AGPL- 3.0 license
  2. # YOLOv 8-pose keypoints /pose estimation model. For Usage examples see https: / /docs.ultralytics.com /tasks /pose
  3. # Parameters
  4. nc: 1 # number of classes
  5. kpt_shape: [ 17, 3] # number of keypoints, number of dims ( 2 for x,y or 3 for x,y,visible)
  6. scales: # model compound scaling constants, i.e. 'model=yolov8n-pose.yaml' will call yolov 8-pose.yaml with scale 'n'
  7. # [depth, width, max_channels]
  8. s: [ 0.33, 0.50, 1024]
  9. # YOLOv 8.0n backbone
  10. backbone:
  11. # [ from, repeats, module, args]
  12. - [- 1, 1, Conv, [ 64, 3, 2]] # 0-P 1 / 2
  13. - [- 1, 1, Conv, [ 128, 3, 2]] # 1-P 2 / 4
  14. - [- 1, 3, C 2f, [ 128, True]]
  15. - [- 1, 1, Conv, [ 256, 3, 2]] # 3-P 3 / 8
  16. - [- 1, 6, C 2f, [ 256, True]]
  17. - [- 1, 1, Conv, [ 512, 3, 2]] # 5-P 4 / 16
  18. - [- 1, 6, C 2f, [ 512, True]]
  19. - [- 1, 1, Conv, [ 1024, 3, 2]] # 7-P 5 / 32
  20. - [- 1, 3, C 2f, [ 1024, True]]
  21. - [- 1, 1, SPPF, [ 1024, 5]] # 9
  22. # YOLOv 8.0n head
  23. head:
  24. - [- 1, 1, nn.Upsample, [None, 2, 'nearest']]
  25. - [[- 1, 6], 1, Concat, [ 1]] # cat backbone P 4
  26. - [- 1, 3, C 2f, [ 512]] # 12
  27. - [- 1, 1, nn.Upsample, [None, 2, 'nearest']]
  28. - [[- 1, 4], 1, Concat, [ 1]] # cat backbone P 3
  29. - [- 1, 3, C 2f, [ 256]] # 15 (P 3 / 8-small)
  30. - [- 1, 1, Conv, [ 256, 3, 2]]
  31. - [[- 1, 12], 1, Concat, [ 1]] # cat head P 4
  32. - [- 1, 3, C 2f, [ 512]] # 18 (P 4 / 16-medium)
  33. - [- 1, 1, Conv, [ 512, 3, 2]]
  34. - [[- 1, 9], 1, Concat, [ 1]] # cat head P 5
  35. - [- 1, 3, C 2f, [ 1024]] # 21 (P 5 / 32-large)
  36. - [[ 15, 18, 21], 1, Pose, [nc, kpt_shape]] # Pose(P 3, P 4, P 5)

4、进行训练

上述步骤完成后,即可开始训练。设置训练的轮数epochs,我这里设置为100。


 
 
  1. from ultralytics import YOLO
  2. if __name__ = = '__main__':
  3. model = YOLO( 'yolov8s-pose.yaml') # load a pretrained model (recommended for training)
  4. # Train the model
  5. model.train( data = 'myposedata.yaml')

也可以不使用yaml文件,直接读取.pt文件


 
 
  1. from ultralytics import YOLO
  2. if __name__ == '__main__':
  3. modelpath = r'G:\Yolov8\yolov8-pose-pt\yolov8s-pose.pt'
  4. model = YOLO(modelpath) # load a pretrained model (recommended for training)
  5. # Train the model
  6. yamlpath = r'G:\Yolov8\ultralytics-main\yolov8-pose\myposedata.yaml'
  7. model.train(epochs= 100,data=yamlpath)

训练过程,我这里为了测试能否训练起来,训练数据较少,设置的训练epochs=10:

训练过程中会保存以下内容,最后得到两个模型分别是:best.pt、last.pt

5、验证模型

训练进程完毕以后可使用一些验证数据进行模型验证,查看模型的分割效果。


 
 
  1. from ultralytics import YOLO
  2. import glob
  3. import os
  4. # Load a model
  5. model = YOLO( r'G:\Yolov8\yolov8-pose-pt\best.pt') # load an official model
  6. # Predict with the model
  7. imgpath = r'G:\Yolov8\ultralytics-main\yolov8-pose\testimgs'
  8. imgs = glob.glob(os.path.join(imgpath, '*.jpg'))
  9. for img in imgs:
  10. model.predict(img, save= True)

6、总结

至此,整个YOLOv8-Pose模型训练预测阶段完成。此过程同样可以在linux系统上进行,在数据准备过程中需要仔细,保证最后得到的数据准确,最好是用显卡进行训练。

有问题评论区见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值