机器视觉之YOLO12研究记录(自定义数据集训练)

先了解一下数据集,yolo12默认目标标签包括80个类别‌。这些类别涵盖了常见的物体和动物,例如人、自行车、汽车、鸟、猫、狗等,识别这些目标,使用yolo12模型即可。这些之外的就要自行训练,比如医学领域的病灶识别、肿瘤识别等,其他领域的无人机检测、路面检测、车牌检查、零件缺陷检测、无人驾驶、安防检测等等,只要能成为图片或视频的目标,都可以区别识别‌。

YOLOv12的目标标签包括以下类别:

  • person、bicycle、car、motorcycle、airplane、bus、train、truck、boat、traffic light、fire hydrant、stop sign、parking meter、bench、bird、cat、dog、horse、sheep、cow、elephant、bear、zebra、giraffe、backpack、umbrella、handbag、tie、suitcase、frisbee、skis、snowboard、sports ball、kite、baseball bat、basketball、bottle、wine glass、cup、fork、knife、spoon、bowl、banana、apple、sandwich、orange、broccoli、carrot、hot dog、pizza、donut、cake、chair、couch、potted plant、bed、dining table、toilet、tvmonitor、laptop、mouse、remote control、keyboard、cell phone、microwave oven


一、数据集的类别

数据集分为训练集(train)、验证集(val)、测试集(test)

划分训练集、验证集和测试集的比例没有一个固定的标准,取决于数据集的大小和可用样本数量,不过要确保数据的随机性,避免数据的偏斜或重复。通常情况下,常见的比例是将数据集划分为训练集、验证集和测试集三部分。

1训练集是用来训练模型的主要数据集。模型通过训练集学习数据的模式和特征,并调整参数来最小化预测误差。训练集应具有代表性,以涵盖数据的各种变化和情况。

2验证集用于调整模型的超参数和进行模型选择。超参数是在模型训练之前设置的参数,如学习率、正则化强度等。通过使用验证集,在不同超参数设置下评估模型性能,可以选择最佳的超参数组合,以提高模型的泛化能力。

3测试集用于评估最终模型的性能。模型在训练和验证期间没有接触到测试集数据,因此测试集提供了一个独立的评估指标,反映了模型在真实场景中的表现。测试集应该是隐藏的,模型在训练过程中不能使用测试集进行调整。

常用比例:

训练集占总数据的60-80%左右,用于模型的训练和参数调整

验证集占总数据的10-20%左右,用于超参数的调整和模型选择。

测试集占总数据的10-20%左右,用于最终模型性能的评估。

准备YOLO12格式数据集

data目录下创建:images,labels两个目录,分别存放数据集图片,和数据集标签文件。

编写data.yaml文件,用于训练脚本调用

内容如下:

train: 
  - E:/yoloTrain/nodule_1186/DATA
val:
  - E:/yoloTrain/nodule_1186/DATA
nc: 1
names: 
  0: nodule

train:指向训练集目录,val:指向验证集目录,他们下面的目录结构是一样的。包含images,labels两个目录。(我这里为了测试方便,指向同一目录也可以),很多文档说目录指向images,其实是错误的,试了好久才发现要指向上级目录,可能是yolo版本不一样,我用的yolo12。这个问题被坑了几天,用AI查报错信息,提示要升级各种python依赖,升来升去也没用,最后试了一下指向上级目录才成功。坑。

升级Albumentations库并修复,使用--force-reinstall确保覆盖旧版本。
pip  install --upgrade --force-reinstall albumentations==2.0.5
pip3 install --upgrade --force-reinstall albumentations==2.0.5 -i https://mirrors.aliyun.com/pypi/simple/
-----------------------------------
#安装数据集制作工具
#pip install pyqt5 # 安装pyqt5
#pip install pillow # 安装PIL库
pip install labelme  
国内镜像
pip install labelme -i https://mirrors.aliyun.com/pypi/simple
pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple
------------------------------
模型转换安装必要的库
pip3 install onnx-tf  -i https://mirrors.aliyun.com/pypi/simple/
pip3 install torch torchvision onnx tensorflow tensorflow-addons -i https://mirrors.aliyun.com/pypi/simple/
pip3 install tensorflow_probability  -i https://mirrors.aliyun.com/pypi/simple/
pip3 install tensorflow==2.12.0 -i https://mirrors.aliyun.com/pypi/simple/
pip3 install tensorflow_probability==0.20.0 -i https://mirrors.aliyun.com/pypi/simple/

可能这些升级是不需要的,安装了下面这些玩意。

折腾完了总算是成功了,用简化训练命令,使用最小化参数排除干扰。

yolo train data=data1.yaml model=yolov12n.pt epochs=10 batch=4 workers=0

下一步:

编写训练脚本:python:__init__DATA.py

简单代码如下:

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
import os
import torch
import torchvision 

print(torch.cuda.is_available())  # 应为True,若输出False,重新安装匹配的CUDA版本(如CUDA 11.8 + PyTorch 2.3)‌

def train_yolo():

    # 加载YOLO模型
    model = YOLO("yolov12s.pt")
    
    # 配置训练参数
    training_args = {
        'data': 'data1.yaml',      # 使用YAML配置文件
        'epochs': 10,             # 训练轮数对于定制模型(如含小目标检测头),建议延长训练至50~100 epoch以确保收敛
        'batch': 4,               # 批次大小
        #batch批量大小,整数(如 batch=16),自动模式 (batch=-1 约 60% GPU 内存),或指定利用率 (batch=0.70)
        'imgsz': 640,             # 图片尺寸
        #'device': 0,             # 使用GPU设备
        'workers': 8,             # 数据加载的工作进程数
        'patience': 100,          # 设置早停(early stopping)的耐心值为50,即如果连续50个epoch模型性能没有提升,则停止训练。
        'project':'luna16-001',
        'name':'luna16',
        'optimizer':'SGD',
        'lr0':0.01,
        'momentum':0.937,
        'show_conf':True,         # 在显示的图像上显示置信度分数。
        'save': True,             # 保存训练结果
        'cache': False            # 是否缓存图片到内存
    }
    
    # 开始训练
    try:
        results = model.train(**training_args)
        print("训练完成!")
        print(f"最佳模型保存在: {results.best}")
    except Exception as e:
        print(f"训练过程中出现错误: {str(e)}")

if __name__ == "__main__":
    train_yolo()

死活不能训练出结果,运行一半就报错,又是一顿折腾。更具AI提示纠错方案调整各种训练参数,各种依赖版本升级降级,yolo12源码修改等等。

quality_lower这个参数报错,根本就不是依赖版本不匹配问题。无意间将batch参数设置为4,结果就成功了。最开始用batch=16这个默认值。估计跟当前电脑硬件有关系,回头用GPU服务器的时候再试试是否可以调大。

我用10张肺结节数据集测试,训练10轮、20轮、50轮成功了。

best.pt得到了,就可以用他进行训练数据集中自定义的目标进行预测了。

终于可以开启专属目标识别路程啦~~~~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值