目标检测实战:使用YOLOv11训练自己的数据集


前言

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
    • mycoco.yaml

在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有帮助,希望本文能够帮助到大家。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值