YOLOv10目前还不支持项目上的硬件板使用,等待后续。
requirements.txt中已更新(torch版本更新了,提高了些精度)(我新加入了其他库)
torch==2.0.1
torchvision==0.15.2
onnx==1.14.0
onnxruntime==1.15.1
pycocotools==2.0.7
PyYAML==6.0.1
scipy==1.13.0
onnxsim==0.4.36
onnxruntime-gpu==1.18.0
opencv-python
psutil
tqdm
pandas
seaborn
YOLOv10的虚拟环境下安装:(关闭魔法)
pip install -r requirements.txt --index-url https://pypi.tuna.tsinghua.edu.cn/simple
新建train.py 代码如下设置(个人CSDN已公布):
import warnings
"""需要新导入v10"""
from ultralytics.models.yolov10.model import YOLOv10
warnings.filterwarnings('ignore')
from ultralytics import YOLO
"""研究生群里我发过这个报错文档,为了处理OpenMP 运行时 libiomp5md.dll 被多次初始化。这可能是因为不同的库尝试加载同一个 OpenMP 运行时库,或者是因为程序中链接了多个不兼容的科学计算库,例如 NumPy、SciPy 或者其他依赖于 OpenMP 的库。"""
import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
if __name__ == '__main__':
model = YOLOv10(r'D:\Pycharm-Projects\yolov10-main\ultralytics\cfg\models\v10\yolov10s.yaml')
model.load(r'D:\Pycharm-Projects\yolov10-main\yolov10s.pt') # 是否加载预训练权重,科研不建议大家加载否则很难提升精度
model.train(
data=r'D:\Pycharm-Projects\yolov10-main\ultralytics\cfg\datasets\xxx.yaml', # 将data后面替换你自己的数据集地址
cache=True,#如果设置为True,在训练前将整个数据集加载到内存中,可以加速训练过程,但需要较多内存
imgsz=640,#训练时输入图像的大小,这里设置为640x640像素。图像尺寸对模型性能和速度有重要影响
epochs=300,#训练的总轮数,这里设置为100轮。一个epoch表示整个数据集被模型看过一次
single_cls=False, # 是否是单类别检测,如果设置为True,表示模型仅需要识别一种类别。
batch=16,#批大小,每次迭代训练所用的样本数量。这里设置为1,通常较小的批大小会使训练过程更稳定,但可能会增加训练时间
close_mosaic=10,#是一个特定于YOLOv8的参数,用于控制何时停止使用mosaic数据增强(一种图像数据增强方法)
workers=0,#用于加载数据的工作线程数。设置为0表示数据加载将在主线程中进行。
device='0',#指定训练使用的设备,'0'通常表示使用第一个GPU
optimizer='SGD', # using SGD,选择优化器,这里使用SGD(随机梯度下降)
amp=False, # 自动混合精度训练,可以提高训练速度和效率,同时减少内存使用。如果训练中出现损失为NaN,可以关闭此功能
project='runs/train',
name='exp',#训练实验的名称,输出文件将保存在project/name目录下。
)
汉化版本default.yaml超参数中(个人CSDN已公布) ,将val_period参数设置为-1。
patience设置为10000。
# Ultralytics YOLO , AGPL-3.0 许可证
# COCO 训练的中等增强默认训练设置和超参数
task: detect # (str) YOLO 任务,例如 detect(检测)、segment(分割)、classify(分类)、pose(姿态)
mode: train # (str) YOLO 模式,例如 train(训练)、val(验证)、predict(预测)、export(导出)、track(跟踪)、benchmark(基准)
# 训练设置 --------------------------------------------------------------------------------------------------------------
model: # (str, 可选) 模型文件路径,例如 yolov8n.pt, yolov8n.yaml
data: # (str, 可选) 数据文件路径,例如 coco128.yaml
epochs: 100 # (int) 训练的轮数
time: # (float, 可选) 训练时间(小时),如果提供,将覆盖 epochs
patience: 10000 # (int) 早停等待轮数,即训练过程中无改善时等待的轮数
batch: 16 # (int) 每批图像的数量 (-1 为自动批处理)
imgsz: 640 # (int | list) 训练和验证模式下的输入图像大小,或预测和导出模式下的图像尺寸列表[w,h]
save: True # (bool) 是否保存训练检查点和预测结果
save_period: -1 # (int) 每 x 轮保存一次检查点(如果 < 1 则禁用)
val_period: -1 # (int) 每 x 轮进行一次验证
cache: False # (bool) True/ram, disk or False。数据加载时是否使用缓存
device: # (int | str | list, 可选) 运行设备,例如 cuda device=0 或 device=0,1,2,3 或 device=cpu
workers: 8 # (int) 数据加载的工作线程数(如果使用DDP,则每个RANK)
project: # (str, 可选) 项目名称
name: # (str, 可选) 实验名称,结果保存在 'project/name' 目录
exist_ok: False # (bool) 是否覆盖已存在的实验
pretrained: True # (bool | str) 是否使用预训练模型(布尔值)或从中加载权重的模型(字符串)
optimizer: auto # (str) 使用的优化器,可选项包括 [SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp, auto]
verbose: True # (bool) 是否打印详细输出
seed: 0 # (int) 随机种子,用于可复现性
deterministic: True # (bool) 是否启用确定性模式
single_cls: False # (bool) 将多类数据训练为单类
rect: False # (bool) 如果 mode='train' 则进行矩形训练,如果 mode='val' 则进行矩形验证
cos_lr: False # (bool) 使用余弦学习率调度器
close_mosaic: 10 # (int) 在最后几轮禁用马赛克增强(0 表示不禁用)
resume: False # (bool) 从最后一个检查点恢复训练
amp: True # (bool) 自动混合精度(AMP)训练,选项包括 [True, False],True 表示进行 AMP 检查
fraction: 1.0 # (float) 训练数据集的使用比例(默认为 1.0,即使用全部训练集图像)
profile: False # (bool) 在训练期间为日志记录分析 ONNX 和 TensorRT 的速度
freeze: None # (int | list, 可选) 在训练期间冻结前 n 层或冻结层索引列表
multi_scale: False # (bool) 训练期间是否使用多尺度
# 分割
overlap_mask: True # (bool) 训练期间掩码应重叠(仅限分割训练)
mask_ratio: 4 # (int) 掩码下采样比例(仅限分割训练)
# 分类
dropout: 0.0 # (float) 使用 dropout 正则化(仅限分类训练)
# 验证/测试设置 --------------------------------------------------------------------------------------------------------
val: True # (bool) 在训练期间进行验证/测试
split: val # (str) 用于验证的数据集分割,例如 'val', 'test' 或 'train'
save_json: False # (bool) 将结果保存为 JSON 文件
save_hybrid: False # (bool) 保存混合标签版本(标签 + 额外预测)
conf: # (float, 可选) 检测的对象置信度阈值(默认 0.25 预测,0.001 验证)
iou: 0.7 # (float) 非极大抑制(NMS)的交并比(IoU)阈值
max_det: 300 # (int) 每张图像的最大检测数量
half: False # (bool) 使用半精度 (FP16)
dnn: False # (bool) 使用 OpenCV DNN 进行 ONNX 推理
plots: True # (bool) 在训练/验证期间保存图表和图像
# 预测设置 -------------------------------------------------------------------------------------------------------------
source: # (str, 可选) 图像或视频的源目录
vid_stride: 1 # (int) 视频帧率步长
stream_buffer: False # (bool) 缓冲所有流媒体帧(True)或返回最近的帧(False)
visualize: False # (bool) 可视化模型特征
augment: False # (bool) 对预测源应用图像增强
agnostic_nms: False # (bool) 类别无关的 NMS
classes: # (int | list[int], 可选) 通过类别过滤结果,例如 classes=0, 或 classes=[0,2,3]
retina_masks: False # (bool) 使用高分辨率分割掩码
embed: # (list[int], 可选) 从给定层返回特征向量/嵌入
# 可视化设置 -----------------------------------------------------------------------------------------------------------
show: False # (bool) 如果环境允许,显示预测的图像和视频
save_frames: False # (bool) 保存预测的单个视频帧
save_txt: False # (bool) 将结果保存为 .txt 文件
save_conf: False # (bool) 保存带有置信度得分的结果
save_crop: False # (bool) 保存带有结果的裁剪图像
show_labels: True # (bool) 显示预测标签,例如 'person'
show_conf: True # (bool) 显示预测置信度,例如 '0.99'
show_boxes: True # (bool) 显示预测框
line_width: # (int, 可选) 边界框的线宽。如果没有指定,则根据图像大小调整
# 导出设置 -------------------------------------------------------------------------------------------------------------
format: torchscript # (str) 导出格式,可在 https://docs.ultralytics.com/modes/export/#export-formats 查看可选项
keras: False # (bool) 使用 Keras
optimize: False # (bool) TorchScript:优化移动端
int8: False # (bool) CoreML/TF INT8 量化
dynamic: False # (bool) ONNX/TF/TensorRT:动态轴
simplify: False # (bool) ONNX:简化模型
opset: # (int, 可选) ONNX:opset 版本
workspace: 4 # (int) TensorRT:工作空间大小 (GB)
nms: False # (bool) CoreML:添加 NMS
# 超参数 --------------------------------------------------------------------------------------------------------------
lr0: 0.01 # (float) 初始学习率(例如 SGD=1E-2, Adam=1E-3)
lrf: 0.01 # (float) 最终学习率 (lr0 * lrf)
momentum: 0.937 # (float) SGD 动量/Adam beta1
weight_decay: 0.0005 # (float) 优化器权重衰减 5e-4
warmup_epochs: 3.0 # (float) 热身轮数(可以是小数)
warmup_momentum: 0.8 # (float) 热身初始动量
warmup_bias_lr: 0.1 # (float) 热身初始偏置 lr
box: 7.5 # (float) 框损失增益
cls: 0.5 # (float) 类别损失增益(按像素缩放)
dfl: 1.5 # (float) dfl 损失增益
pose: 12.0 # (float) 姿态损失增益
kobj: 1.0 # (float) 关键点对象损失增益
label_smoothing: 0.0 # (float) 标签平滑(比例)
nbs: 64 # (int) 标称批量大小
hsv_h: 0.015 # (float) 图像 HSV-Hue 增强(比例)
hsv_s: 0.7 # (float) 图像 HSV-饱和度增强(比例)
hsv_v: 0.4 # (float) 图像 HSV-值增强(比例)
degrees: 0.0 # (float) 图像旋转(+/- deg)
translate: 0.1 # (float) 图像平移(+/- 比例)
scale: 0.5 # (float) 图像缩放(+/- 增益)
shear: 0.0 # (float) 图像剪切(+/- deg)
perspective: 0.0 # (float) 图像透视(+/- 比例),范围 0-0.001
flipud: 0.0 # (float) 图像上下翻转(概率)
fliplr: 0 # (float) 图像左右翻转(概率)
bgr: 0.0 # (float) 图像通道 BGR(概率)
mosaic: 1.0 # (float) 图像马赛克(概率)
mixup: 0.0 # (float) 图像混合(概率)
copy_paste: 0.0 # (float) 分割复制粘贴(概率)
auto_augment: randaugment # (str) 分类自动增强策略(randaugment, autoaugment, augmix)
erasing: 0.4 # (float) 分类训练中随机擦除的概率(0-1)
crop_fraction: 1.0 # (float) 分类评估/推理的图像裁剪比例(0-1)
# 自定义 config.yaml ---------------------------------------------------------------------------------------------------
cfg: # (str, 可选) 用于覆盖 defaults.yaml 的设置
# 跟踪器设置 ----------------------------------------------------------------------------------------------------------
tracker: botsort.yaml # (str) 跟踪器类型,可选项 [botsort.yaml, bytetrack.yaml]
直接训练train.py后会出现这个报错:无法从charset_normalizer.constant模块中导入COMMON_SAFE_ASCII_CHARACTERS:使用pip install -U charset_normalizer
虚拟环境下安装:pip install -U charset_normalizer
好了,现在直接训练就没有问题了。