YOLO发展到YOLOv8,已经非常方便了,不管是训练,还是预测,还是图像的预测,不论是性能还是精确度,都有了很大的提升。
话不多说,直接开始yolov8的训练,
一、
1、首先需要配置yaml文件,这个yaml文件是你要训练的数据集的参数,类似django的setting,说白了,就是一个配置文件,这里是部分配置文件的代码
# 数据集配置
path: ../datasets/coco # 数据集的路径
train: images/train # 训练集的图像路径
val: images/val # 验证集的图像路径
# 类别配置
nc: 80 # 类别数量
names: # 类别名称
0: person
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
# ...其余类别
# 模型配置
model: yolov8n.yaml # 使用的YOLOv8模型配置文件(可以是yolov8n.yaml, yolov8s.yaml, yolov8m.yaml, yolov8l.yaml, yolov8x.yaml)
# 训练配置
epochs: 300 # 训练轮数
batch: 16 # 每批次的样本数量
imgsz: 640 # 输入图像的大小
device: 0 # 使用的设备,0表示使用第一个GPU,-1表示使用CPU
workers: 8 # 数据加载的并行工作数
# 优化器配置
optimizer: Adam # 使用的优化器(可以是Adam, SGD等)
lr0: 0.01 # 初始学习率
lrf: 0.01 # 最终学习率
momentum: 0.937 # 优化器的动量参数
weight_decay: 0.0005 # 权重衰减
# 数据增强配置
augment: True # 是否使用数据增强
hsv_h: 0.015 # HSV色调变化范围
hsv_s: 0.7 # HSV饱和度变化范围
hsv_v: 0.4 # HSV明度变化范围
degrees: 0.0 # 旋转角度变化范围
translate: 0.1 # 平移变化范围
scale: 0.5 # 缩放变化范围
shear: 0.0 # 剪切变化范围
perspective: 0.0 # 透视变化范围
flipud: 0.0 # 上下翻转概率
fliplr: 0.5 # 左右翻转概率
mosaic: 1.0 # 拼接增强概率
mixup: 0.0 # 混合增强概率
# 可视化配置
save_period: -1 # 保存权重的周期,-1表示每轮保存一次
cache: False # 是否缓存数据
project: runs/train # 训练结果的保存路径
name: exp # 实验名称
exist_ok: False # 是否允许存在同名文件夹
2、如果快速开始,只需要配置这几个即可,其他默认就可以了
# 数据集配置
path: ../datasets/coco # 数据集的路径
train: images/train # 训练集的图像路径
val: images/val # 验证集的图像路径
test: images/test # 测试集的图像路径
# 类别配置
names:
0: prohibitory
1: danger
2: mandatory
3: other
3、这里配置好之后,自己的数据集文件夹的格式需要满足这种
E:/path/
└── images/
├── train/
│ ├── img1.jpg
│ └── img2.jpg
├── valid/
│ ├── img1.jpg
│ └── img2.jpg
└── test/
├── img1.jpg
└── img2.jpg
4、这里没有配置label的路径,如果label的路径在image同级,而且目录结构和上面这个图一样,就不用配置,如果不一样需要再yaml里面配置一下。
label需要是txt格式,满足这种格式
class_id center_x center_y width height
# 即下面这种
2 0.6977941176470588 0.6675 0.0838235294117647 0.145
具体格式说明如下:
- class_id:类别的整数ID,从0开始。例如,如果你有3个类别(猫、狗、人),它们的ID可能是0, 1, 2。
- center_x:目标边界框的中心点x坐标,归一化到[0, 1]之间。即,图像宽度为1。
- center_y:目标边界框的中心点y坐标,归一化到[0, 1]之间。即,图像高度为1。
- width:目标边界框的宽度,归一化到[0, 1]之间。
- height:目标边界框的高度,归一化到[0, 1]之间。
二、
1、所有准备工作准备好指挥,就可以开始训练了,需要pip安装好torch和torchvision,以及ultralytics,注意,这里的data_config.yaml就是上面第一步配置好的yaml文件,其他默认,根据任务不同选择不同的model,即pt文件
if __name__ == '__main__':
from ultralytics import YOLO
# model = YOLO("yolov8s.yaml")
model = YOLO("yolov8s.pt")
model.train(data="data_config.yaml", epochs=30)
2、训练完毕之后,YOLOv8默认会将训练的各种图像,pr,rc这些图保存到runs文件夹中,默认保存最好的模型和最后一次训练的模型到runs文件夹中,加载最好的模型进行预测,这里先进行视频的预测
from ultralytics import YOLO
if __name__ == '__main__':
# 加载训练好的模型
model = YOLO('runs/detect/train8/weights/best.pt')
# 设置视频路径
video_path = r'E:\Work\\data\traffic-sign-to-test.mp4'
# 开始检测并保存结果
results = model.predict(source=video_path, save=True, show=True)
3、图像的预测(注意替换路径),这里视频和图像都会在预测之后的结果保存到图像的同级目录下面
from ultralytics import YOLO
if __name__ == '__main__':
# 加载训练好的模型
model = YOLO('runs/detect/train8/weights/best.pt')
# 设置图像路径
image_path = r'E:\Work\data\traffic-sign-to-test.jpg'
# 开始检测并保存结果
results = model.predict(source=image_path, save=True, show=True)