先了解一下数据集,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得到了,就可以用他进行训练数据集中自定义的目标进行预测了。
终于可以开启专属目标识别路程啦~~~~~