如何利用YOLOv8训练自己的数据集 && 3种加载模型场景讲解
本文主要介绍一下如何利用YOLOv8训练自己的数据集,并详细说明3种加载模型方式和使用场景。如果需要从头开始训练一个模型,可以选择从YAML文件构建新模型。如果想要直接使用预训练模型进行预测或微调,可以选择从预训练权重构建模型。如果需要修改模型结构并利用预训练权重,可以选择从YAML文件构建新模型,并将预训练权重转移到新模型。
文章目录
前言
本文主要介绍一下如何利用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、目标检测系列文章
- YOLOv5s网络模型讲解(一看就会)
- 生活垃圾数据集(YOLO版)
- YOLOv5如何训练自己的数据集
- 双向控制舵机(树莓派版)
- 树莓派部署YOLOv5目标检测(详细篇)
- YOLO_Tracking 实践 (环境搭建 & 案例测试)
- 目标检测:数据集划分 & XML数据集转YOLO标签
- DeepSort行人车辆识别系统(实现目标检测+跟踪+统计)
- YOLOv5参数大全(parse_opt篇)
- YOLOv5改进(一)-- 轻量化YOLOv5s模型
- YOLOv5改进(二)-- 目标检测优化点(添加小目标头检测)
- YOLOv5改进(三)-- 引进Focaler-IoU损失函数
- YOLOv5改进(四)–轻量化模型ShuffleNetv2
- YOLOv5改进(五)-- 轻量化模型MobileNetv3
- YOLOv5改进(六)–引入YOLOv8中C2F模块
- YOLOv5改进(七)–改进损失函数EIoU、Alpha-IoU、SIoU、Focal-EIOU
- YOLOv5改进(八)–引入Soft-NMS非极大值抑制
- YOLOv5改进(九)–引入BiFPN模块
- 基于YOLOv10的车辆统计跟踪与车速计算应用
- 初探 YOLOv8(训练参数解析)
- YOLOv8不同模型对比和onnx部署详解
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)