文章目录
前言
ultralytics发布了最新的作品YOLOv11,这一次YOLOv11的变化相对于ultralytics公司的上一代作品YOLOv8变化不是很大的(YOLOv9、YOLOv10均不是ultralytics公司作品)。本文记录使用YOLOv11训练自己的数据集的过程。
一、环境搭建
我的环境:
操作系统:Ubuntu 20.04 ,GPU:NVIDIA RTX™ A6000
cuda = 11.8 , cudnn = 8.7.0, Python = 3.8, PyTorch = 2.0.1, torchvision = 0.15.2, numpy = 1.23.5,ultralytics = 8.3.9
官方要求:Python>=3.8 PyTorch>=1.8
在ubuntu 16.04、python 3.8、PyTorch1.8的环境下代码也测试通过。
安装torch2.0.1+cu118
# 使用官网安装命令
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
注:安装时间较长,安装完成后检查是否安装成功。
注:如果想安装cpu版本,参考pytorch官网安装命令。
安装ultralytics
安装ultralytics时会检查是否安装依赖库,未安装的库会自动下载安装。
pip install ultralytics==8.3.9
二、训练过程
1. 引入库
YOLOv11(ultralytics)源码地址:
https://github.com/ultralytics/ultralytics/
直接下载即可。可以下载下图所示几个预训练权重文件,常规使用yolov11n.pt即可,根据自己需要下载。
2. 数据集准备
YOLOv11数据集格式与之前版本相同,格式如下:
<object-class-id> <x> <y> <width> <height>
object-class-id代表物体类别,标记框中心点的横纵坐标(x, y),标记框宽高的大小(width, heighth),且都是归一化后的值。
数据集划分按照 test:trainval=1:9,trainval再按照1:9划分为train集和val集。datasets文件夹下mycoco文件夹为划分好的数据集,其中images为划分后的图像文件,里面包含用于train、val、test的图像,已经划分完成;labels文件夹中包含划分后的标签文件,已经划分完成,里面包含用于train、val、test的标签。datasets下文件夹目录如下所示:
- datasets
- mycoco (自定义数据集名)
- image
- train
- val
- test
- labels
- train
- val
- test
- image
- mycoco.yaml
- mycoco (自定义数据集名)
在datasets文件夹下新建数据集配置文件mycoco.yaml,配置参数如下,为了不报错配置绝对路径:
train: /home/ubuntu/ultralytics/datasets/mycoco/images/train # train images
val: /home/ubuntu/ultralytics/datasets/mycoco/images/val # val images
test: /home/ubuntu/ultralytics/datasets/mycoco/images/test # test images (可选)
# number of classes
nc: 1
# Classes,填写类别名
names:
0: eye
3. 模型文件配置
在ultralytics/cfg/models/11文件夹下的yolo11.yaml是目标检测模型配置文件,检测的类别修改成自己的大小。
nc: 1 # number of classes
4. 模型训练
我们可以通过创建py文件来进行训练,这样的好处就是不用在终端上打命令,这也能省去一些工作量,我们在根目录下创建一个名字为train.py的文件,在其中输入代码:
# 模型配置文件
model_yaml_path = r"/ultralytics-main/ultralytics/cfg/models/11/yolo11n.yaml"
#数据集配置文件
data_yaml_path = r'/ultralytics-main/datasets/mycoco.yaml'
#预训练模型
pre_model_name = 'yolo11n.pt'
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO(model_yaml_path)
# 如何切换模型版本, 上面的ymal文件可以改为 yolo11s.yaml就是使用的11s,
# 类似某个改进的yaml文件名称为yolov11-XXX.yaml那么如果想使用其它版本就把上面的名称改为yolov11l-XXX.yaml即可(改的是上面YOLO中间的名字不是配置文件的)!
model.load('yolo11n.pt') # 是否加载预训练权重
model.train(data=data_yaml_path,
# 如果大家任务是其它的'ultralytics/cfg/default.yaml'找到这里修改task可以改成detect, segment, classify, pose
cache=False,
imgsz=640,
epochs=100,
single_cls=True, # 是否是单类别检测
batch=64,
close_mosaic=0,
workers=8,
device='0',
optimizer='SGD', # using SGD 优化器 默认为auto建议大家使用固定的.
# resume=, # 续训的话这里填写True, yaml文件的地方改为lats.pt的地址,需要注意的是如果你设置训练200轮次模型训练了200轮次是没有办法进行续训的.
amp=True, # 如果出现训练损失为Nan可以关闭amp
project='runs/train',
name='exp',
)
一些常用修改参数:
model_yaml_path
:使用的模型配置文件路径,“/ultralytics-main/ultralytics/cfg/models/11/yolo11s.yaml”
data_yaml_path
:数据集配置文件路径,‘/ultralytics-main/datasets/mycoco.yaml’
pre_model_name
:预训练权重的路径
imgsz
: 用于训练的图像尺寸,所有图像在输入模型前都会被调整到这一尺寸
epochs
:模型训练迭代次数
batch
:模型训练的批处理图像数量
workers
:线程数,线程数越大训练的速度越快,GPU性能低就调低数字。Windows系统一定要设置为0否则很可能会引起线程报错
optimizer
:模型优化器, # using SGD
project
:保存训练结果的项目目录名称’runs/train’,
name
:用于在项目文件夹内创建子目录,用于存储训练日志和输出结果
其他参数参考ultralytics官网说明文档。
5. 模型验证/测试
yolo val model=model/best.pt data=mycoco.yaml conf=0.25 split=test
常用的参数修改:
model
:配置模型文件路径
data
:指定数据集配置文件的路径,如mycoco.yaml的路径
split
:确定用于验证的数据集分割 (val, test或 train).可灵活选择数据段进行性能评估。默认val.
conf
:默认 0.001,设置检测的最小置信度阈值。置信度低于此阈值的检测将被丢弃。
iou
: 默认 0.6,设置非最大抑制 (NMS) 的交叉重叠 (IoU) 阈值。有助于减少重复检测。
其他参数参考ultralytics官网说明文档。
6. 模型预测
创建predict.py文件来进行预测:
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
imagepath = r'./image/'
# Run inference on 'bus.jpg' with arguments
model.predict(source=imagepath, save=True, imgsz=640, conf=0.5)
也可以命令行执行预测:
yolo task=detect mode=predict model=best.pt source=images
model
:模型的路径
source
:指定预测图像路径,可以是单张图像或者文件夹
save
: 填入True,预测结果保存。
imgsz
:定义推理的图像大小。
conf
:默认 0.25,设置检测的最小置信度阈值。
save_txt
:默认 False,将检测结果保存在文本文件中,格式如下 [class] [x_center] [y_center] [width] [height] [confidence].有助于与其他分析工具集成。
save_conf
:默认 False,在保存的文本文件中包含置信度分数。
save_crop
:默认 False,保存经过裁剪的检测图像。
其他参数参考ultralytics官网说明文档。
总结
以上就是今天要讲的内容,本文介绍了yolov11使用自己的数据集进行训练、预测,希望对大家使用yolov11有帮助,希望本文能够帮助到大家。