当前位置:   article > 正文

YOLOV8训练自己的数据集教程

YOLOV8训练自己的数据集教程

YOLOV8是一种先进的目标检测算法,能够在图像和视频中快速准确地识别多个对象。随着计算机视觉和深度学习技术的不断发展,YOLOV8已成为许多领域中的重要工具,包括智能监控、自动驾驶、工业检测等。然而,由于不同应用场景的差异,通用的数据集往往无法满足特定需求,因此训练自己的数据集对于提高检测精度和适应特定场景至关重要。本教程将向各位介绍如何利用YOLOV8算法训练自己的数据集,以便更好地满足个性化的目标检测需求。


YOLOv8的基本原理介绍可以看我另一篇文章:YOLOv8原理详解,本文章包含了YOLOV8网络结构图的详解。

目录

环境配置

数据集准备

新建数据集yaml文件

训练


环境配置

在运行yolov8前需要配置相关环境,环境如下:

torch==1.10.0+cu102
torchvision==0.11.0+cu102

ultralytics==8.0.228

numpy==1.22.4


数据集准备

我这里的数据集是只有一个类,数据集名称叫target(根据自己的数据集自己命名),然后我把我的数据集放在了cfg/datasets文件下。目录形式如下:

其中Annotations存储的是xml形式的标签文件,images存储的所有的图像,labels存储的是将xml转为txt的标签文件(也是我们需要用的)。

  1. $ tree
  2. |-- Annotations
  3. |-- images
  4. |-- labels

然后我们需要将images和labels划分成训练集和验证集。如下图所示:

划分数据集脚本代码如下:

  1. import os
  2. import random
  3. import shutil
  4. from tqdm import tqdm
  5. def split_datasets(datasets_path, data_dir, dataset_img_list, desc=''):
  6. '''
  7. :param datasets_path: 数据集根目录
  8. :param data_dir: train or val 根目录,eg:datasets/target/train/ or datasets/target/val/
  9. :param dataset_img_list:train or val images files list
  10. :param desc:tqdm of str train or val
  11. '''
  12. for img_file in tqdm(dataset_img_list, desc=desc):
  13. # 检查是否为图像
  14. if img_file.endswith('.jpg') or img_file.endswith('.png'):
  15. source_img = os.path.join(images_path, img_file) # 源图像路径
  16. Dataset_path = os.path.join(data_dir, 'images', img_file) # 目标训练集路径
  17. # 复制文件到训练到train_dataset
  18. shutil.copy(source_img, Dataset_path)
  19. # 操作对应label
  20. # 获取label name
  21. label_file_name = img_file.split('.')[0] + '.txt'
  22. source_label_path = os.path.join(datasets_path, 'labels') # 获取label文件路径
  23. source_label_file_path = os.path.join(source_label_path, label_file_name) # 获取对应label.txt路径
  24. Label_path = os.path.join(data_dir, 'labels', label_file_name) # label目标文件路径
  25. # 复制Label文件到train_label
  26. shutil.copy(source_label_file_path, Label_path)
  27. datasets_path = 'cfg/datasets/target' # root path
  28. images_path = os.path.join(datasets_path, 'images')
  29. train_dir = os.path.join(datasets_path, 'train') # train_root
  30. val_dir = os.path.join(datasets_path, 'val') # val root
  31. os.makedirs(train_dir, exist_ok=True)
  32. os.makedirs(val_dir, exist_ok=True)
  33. os.makedirs(train_dir + '/images', exist_ok=True)
  34. os.makedirs(val_dir + '/images', exist_ok=True)
  35. os.makedirs(train_dir + '/labels',exist_ok=True)
  36. os.makedirs(val_dir + '/labels',exist_ok=True)
  37. images_file_list = os.listdir(images_path) # 获取所有的图像文件,xxx.jpg
  38. random.shuffle(images_file_list) # 打乱
  39. # 划分train和val两个数据集
  40. num_train = int(len(images_file_list) * 0.9)
  41. train_img_files_list = images_file_list[:num_train]
  42. val_img_files_list = images_file_list[num_train:]
  43. # 划分train
  44. split_datasets(datasets_path,train_dir,train_img_files_list,'train')
  45. # 划分val
  46. split_datasets(datasets_path, val_dir, val_img_files_list, 'val')

新建数据集yaml文件

我这里是在cfg/datasets/下新建了一个mydata.yaml文件,由于我这里只有一个类,而且类的name为"target",因此配置文件内容如下:(这里建议填写绝对路径,否则可能会出现问题)

  1. path: F:/YOLOV8/cfg/datasets/target
  2. train: F:/YOLOV8/cfg/datasets/target/train/images
  3. val: F:/YOLOV8/cfg/datasets/target/val/images
  4. test: #
  5. # number of classes
  6. nc: 1
  7. # class names
  8. names:
  9. 0: target

训练

完成上述过程就可以开启我们的训练了,我这里同样也是写了一个脚本开启的训练(虽然官方有说可以在终端采用yolo命令开启训练,但我不喜欢这种方式),以yolov8s模型为例,训练代码如下:

这里也是建议在填写data的时候是绝对路径,

  1. from ultralytics import YOLO
  2. if __name__ == '__main__':
  3. model = YOLO("yolov8n.pt")
  4. res = model.train(model='yolov8n.yaml', data='F:/YOLOV8/cfg/datasets/mydata.yaml', epochs=5, batch=2,
  5. device='cuda',
  6. cache=True,
  7. workers=4)

进行训练。。。。 

  1. Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size
  2. 1/5 0.321G 1.159 2.346 1.435 7 640: 100%|██████████| 54/54 [00:20<00:00, 2.65it/s]
  3. Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 3/3 [00:00<00:00, 6.44it/s]
  4. all 12 24 0.764 0.542 0.744 0.5
  5. Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size
  6. 2/5 0.321G 1.35 2.419 1.619 4 640: 100%|██████████| 54/54 [00:17<00:00, 3.02it/s]
  7. Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 3/3 [00:00<00:00, 11.94it/s]
  8. all 12 24 0.7 0.75 0.818 0.431

和yolov5一样,训练完成后会将训练结果保存在runs/detect/train/下面,在runs/也会plot label或者batch等信息,这一点和v5没有区别。其中一个train_batch效果如下:

tensorboard也可以直接用tensorboard --logdir命令进行查看

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/623885
推荐阅读
相关标签
  

闽ICP备14008679号