前言

本文主要介绍一下如何利用YOLOv8训练自己的数据集,并详细说明3种加载模型方式和使用场景。

1、环境搭建

(1)创建新环境yolov8

conda create -n yolov8 python=3.8

(2)激活新的环境

conda activate yolov8

(3)安装 pytorch

pip install torch==2.0.0+cu118 torchvision==0.15.1+cu118 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118

(4)先将环境位置定位到requirements所在的位置,然后输入以下命令

pip install -r requirements.txt -i https://mirrors.bfsu.edu.cn/pypi/web/simple/

(5)安装ultralytics

# ultralytics集成了yolo的各种包以及模型等。
pip install ultralytics

(6)手动下载权重,粘贴到 yolov8\ultralytics\yolo\v8\detect 文件下

(7)检验是否可用

来到 ultralytics 目录下用官方给的图片预测一下,命令如下

yolo task=detect mode=predict model=yolov8n.pt source=assets/  device=cpu save=True

在这里插入图片描述

2、YOLOv8训练

(1) 准备好数据集

在这里插入图片描述

(2) 编写数据yaml配置文件

如编写 VisDrone.yaml

# parent
# ├── ultralytics
# └── datasets
#     └── VisDrone  ← downloads here (2.3 GB)
 
# 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: ../datasets/VisDrone  # dataset root dir
train: VisDrone2019-DET-train/images  # train images (relative to 'path')  6471 images
val: VisDrone2019-DET-val/images  # val images (relative to 'path')  548 images
test: VisDrone2019-DET-test-dev/images  # test images (optional)  1610 images
 
# Classes
names:
  0: pedestrian
  1: people
  2: bicycle
  3: car
  4: van
  5: truck
  6: tricycle
  7: awning-tricycle
  8: bus
  9: motor

(3) 训练

在yolov8目录下创建train.py文件

# 如果你是在ultralytics目录下创建train.py文件的话,
# 则 from ultralytics import YOLO 变成 import YOLO 
# 因为你已经进入了ultralytics目录了
from ultralytics import YOLO

if __name__ == '__main__':
	# Load a model
	model = YOLO("ultralytics/models/v8/yolov8s.yaml")  # build a new model from scratch
	model.load("yolov8s.pt")  # load a pretrained model (recommended for training)

	# Train the model
	model.train(data = "dataSet/VisDrone/VisDrone.yaml", epochs = 200, imgsz = 640,
				device =[0,1], resume = "detect/train/last.pt", lr0 = 0.01, batch = 16, workers=16)

运行命令

nohup python train.py > myout.file 2>&1 &

**注意:**在运行train.py 如果在本地项目找不到ultralytics文件,则会跑去虚拟环境下寻找ultralytics 库

3、官网训练文档

3.1、官网示例

训练100轮图像大小为640的COCO8数据集的YOLOv8n模型。可以使用设备参数指定训练设备。如果没有传递参数,并且GPU可以使用,则将使用GPU即device=0,否则将使用cpu训练。有关训练参数的完整列表,请参阅下面的参数部分。

命令行

# Build a new model from YAML and start training from scratch
yolo detect train data=coco8.yaml model=yolov8n.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco8.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

代码形式,即创建train.py

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.yaml")  # build a new model from YAML
model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolov8n.yaml").load("yolov8n.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

通过在多个GPU上分配训练负载,多GPU训练可以更有效地利用可用硬件资源。此功能可通过Python API和命令行界面使用。要启用多GPU训练,请指定要使用的GPU设备ID。

命令行

# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=0,1

代码形式,即创建train.py

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])

3.2、三种加载模型场景

3.2.1、从YAML文件构建新模型

model = YOLO("yolov8n.yaml")

这种方式根据给定的yolov8n.yaml配置文件创建一个新的YOLOv8模型实例。

  • 配置文件包含了模型架构的所有细节,比如网络层的类型、参数等。
  • 创建的新模型默认情况下不会带有任何预训练权重,除非后续通过其他方式加载权重。
  • 使用这种方式可以在不依赖预训练权重的情况下定义模型结构,适用于需要从头开始训练的情况或者需要定制模型结构的场景。

3.2.2、从预训练权重构建模型

model = YOLO("yolov8n.pt")

这种方式直接加载一个预先训练好的模型,通常是.pt格式的PyTorch模型文件。

  • 加载的模型不仅包含了模型架构信息,还包括了预训练得到的权重参数。
  • 这是最常用的加载方式之一,特别是当您希望利用预训练模型进行预测或者进一步微调的时候
使用预训练权重文件的主要作用是通过微调预训练权重,达到加快自己模型的训练速度的目的。

3.2.3、从YAML文件构建新模型,并将预训练权重转移到新模型

model = YOLO("yolov8n.yaml").load("yolov8n.pt")

这种方式首先根据yolov8n.yaml文件构建模型结构,然后使用load方法加载预训练权重。

  • 这种方式结合了前两种方式的优点,即可以根据配置文件定义模型结构,并加载预训练权重。
  • 如果模型结构在.yaml文件中有改动,但是仍然希望使用预训练权重初始化模型,则可以采用这种方式。
  • 通常这种方式用于需要修改模型结构但仍想利用预训练权重的场景

4、总结

总结来说,选择哪种方式取决于您的具体需求:

  • 如果需要从头开始训练一个模型,可以选择从YAML文件构建新模型
  • 如果想要直接使用预训练模型进行预测或微调,可以选择从预训练权重构建模型
  • 如果需要修改模型结构并利用预训练权重,可以选择从YAML文件构建新模型,并将预训练权重转移到新模型

5、目标检测系列文章

  1. YOLOv5s网络模型讲解(一看就会)
  2. 生活垃圾数据集(YOLO版)
  3. YOLOv5如何训练自己的数据集
  4. 双向控制舵机(树莓派版)
  5. 树莓派部署YOLOv5目标检测(详细篇)
  6. YOLO_Tracking 实践 (环境搭建 & 案例测试)
  7. 目标检测:数据集划分 & XML数据集转YOLO标签
  8. DeepSort行人车辆识别系统(实现目标检测+跟踪+统计)
  9. YOLOv5参数大全(parse_opt篇)
  10. YOLOv5改进(一)-- 轻量化YOLOv5s模型
  11. YOLOv5改进(二)-- 目标检测优化点(添加小目标头检测)
  12. YOLOv5改进(三)-- 引进Focaler-IoU损失函数
  13. YOLOv5改进(四)–轻量化模型ShuffleNetv2
  14. YOLOv5改进(五)-- 轻量化模型MobileNetv3
  15. YOLOv5改进(六)–引入YOLOv8中C2F模块
  16. YOLOv5改进(七)–改进损失函数EIoU、Alpha-IoU、SIoU、Focal-EIOU
  17. YOLOv5改进(八)–引入Soft-NMS非极大值抑制
  18. YOLOv5改进(九)–引入BiFPN模块
  19. 基于YOLOv10的车辆统计跟踪与车速计算应用
  20. 初探 YOLOv8(训练参数解析)
  21. YOLOv8不同模型对比和onnx部署详解
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐