欢迎光临
我们一直在努力

YOLO26保姆级教程+YOLO26改进详解(个人踩坑无数,Win10运行)

YOLO26保姆级教程+YOLO26改进详解(个人踩坑无数,Win10运行)

  • 一、总述
      • End-to-End NMS-Free 推理设计
      • 去除Distribution Focal Loss (DFL)
      • 引入 ProgLoss 与 Small-Target-Aware Label Assignment (STAL)
      • MuSGD 优化器
      • 多任务统一与边缘设备优化
      • 边缘部署与导出格式支持
      • 博客作者个人思考
  • 二、YOLOv13代码下载
  • 三、环境配置
    • ① cd到YOLO26项目并创建虚拟环境
    • ② 在Anaconda中搭建的环境
  • 四、制作数据集
  • 五、开始训练

一、总述

这一篇则详细讲解如何配置YOLO26,在本地电脑或者服务器都可,然后利用自己的数据集进行训练、推理、检测等。 在这里插入图片描述


YOLO26——具有项目落地属性(端到端、边缘化部署、小目标检测)的实时检测器。YOLO26系列包含五个版本:n、s、m、l、x,其技术核心如下:

End-to-End NMS-Free 推理设计

  • YOLO26 完全移除传统目标检测中的 非极大抑制(NMS)后处理,实现端到端的预测输出。
  • 这样设计减少了推理时的后处理开销,使得推理更快且在边缘设备上部署更简单可靠。

去除Distribution Focal Loss (DFL)

  • 全面剔除 DFL 损失模块,简化了边界框回归的损失结构。
  • 这一步能够简化模型导出图(如 ONNX/TensorRT),提高不同硬件上的兼容性与效率。

引入 ProgLoss 与 Small-Target-Aware Label Assignment (STAL)

  • 使用 Progressive Loss Balance(ProgLoss) 优化模型训练过程中的损失权重调整,提高稳定性。
  • 引入 STAL 标签分配策略专注于小目标识别,提升了对小尺度目标检测的精度表现。

MuSGD 优化器

  • 提出了 MuSGD 优化器,融合了传统 SGD 和 Muon 风格的优化思想(受大规模语言模型训练启发),提升收敛稳定性与训练效率。
  • 结合现代优化策略帮助模型更快达到性能峰值。

多任务统一与边缘设备优化

  • YOLO26 不再仅限于目标检测,还支持实例分割、姿势估计、分类以及定向框检测等任务,成为一个统一的多任务架构。
  • 设计优化特别针对边缘与低算力设备(如 Jetson 系列、CPU 环境等)进行推理效率提升,包括更快的 CPU 推理速度。

边缘部署与导出格式支持

  • 提供灵活的导出选项,包括 ONNX、TensorRT、CoreML、TFLite、OpenVINO 等格式,便于在不同硬件与框架上集成使用。
  • 并对 INT8/FP16 量化推理 做了支持与分析,进一步提升低精度部署效率。

博客作者个人思考

目前随着Ultralytics为YOLO26的造势以及YOLO26的出世,我们其实可以从论文发表以及项目落地的两个维度进行探讨。

  • 论文发表:其实YOLO作为目标检测中的经典单阶段目标检测算法,它所解决的领域无外乎:普通的目标检测(如:车辆检测)、重叠目标检测(如:行人重识别)、小目标检测(遥感领域小目标检测、工业领域缺陷检测)、模糊样本检测(相机模糊、各种有雾等自然环境干扰的检测)。通用型目标检测,YOLOv5、YOLOv8已经做的很好了;行人重识别YOLOv11做的确实可以;模糊样本检测、小样本检测YOLOv12的图像超分也在解决这一块的问题;而这一次的YOLO26感觉已经没有对单任务或者多任务去进一步解决,而是将实验室算法进行项目落地,成为一种真正的工业使用手段。同时感觉CVPR也很久没有YOLO系列为基础的算法改进了。所以,现在以YOLO进行论文发表似乎不是一个很好的选择。
  • 项目落地:YOLO26最为显著的特点就是项目落地,其论文中明确提出“The release of YOLO26 in September 2025 represents the latest milestone in this evolutionary trajectory, introducing architectural simplifications, novel optimizers, and enhanced edge deployment capabilities designed for low-power devices.”翻译为:YOLO26于2025年9月发布,代表了这一演进轨迹中的最新里程碑,引入了架构简化、新颖优化器和专为低功耗设备设计的增强边缘部署能力。某种意义上,工业视觉的门槛被抹平了,学习成本与部署成本将再一次压缩。

二、YOLOv13代码下载

论文地址:YOLO26 GitHub地址:GitHub代码下载地址

代码下载: 此处直接点击【Code】→【Download ZIP】下载即可 在这里插入图片描述 在这里插入图片描述 权重下载: 此处直接选择权重文件【YOLO26n】下载即可 在这里插入图片描述 在全部下载完成后,将权重文件放到项目文件夹内 在这里插入图片描述


三、环境配置

在windows系统下打开Anaconda的终端,创造虚拟环境。

① cd到YOLO26项目并创建虚拟环境

如下:输入 conda create -n YOLO26(代表环境名称) python=3.10 (使用Python的版本),然后创建就可以了

conda create -n YOLO26 python=3.10

在这里插入图片描述 是否安装环境所需基础包,输入y安装: 在这里插入图片描述 安装完成如下图: 在这里插入图片描述 环境安装完成后,【conda activate YOLO26】激活刚才创建的环境 在这里插入图片描述 注1:进入环境后,前面会从base变为YOLO26 注2:此处我直接显示的是我环境路径,无关紧要,二者均可

② 在Anaconda中搭建的环境

【查看当前环境的CUDA版本】

nvidia-smiv

在这里插入图片描述 右上角可见我的CUDA版本为12.6

【安装pytorch】 打开pytorch官网 :pytorch官网 在这里插入图片描述 向下翻动找到适配于自己cuda版本的指令 :

例如说我的是CUDA 12.6版本,此时cuda指令≤12.6即可 在这里插入图片描述

//安装pytorch
pip install torch==2.9.0 torchvision==0.24.0 torchaudio==2.9.0 –index-url https://download.pytorch.org/whl/cu126

在这里插入图片描述 安装成功 在这里插入图片描述

【安装ultralytics库】

pip install ultralytics

在这里插入图片描述 安装成功 在这里插入图片描述

四、制作数据集

  • 文件夹格式设置 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述在这里插入图片描述 在这里插入图片描述
  • 划分数据集 采用如下代码划分为训练数据集、验证数据集和测试数据集
  • # 将图片和标注数据按比例切分为 训练集和测试集
    import shutil
    import random
    import os

    # 原始路径
    image_original_path = "E:/A/lycium_barbarum/datasets/mydata/images/"
    label_original_path = "E:/A/lycium_barbarum/datasets/mydata/labels/"

    cur_path = os.getcwd()

    # 训练集路径
    train_image_path = os.path.join(cur_path, "E:/A/lycium_barbarum/datasets/images/train/")
    train_label_path = os.path.join(cur_path, "E:/A/lycium_barbarum/datasets/labels/train/")

    # 验证集路径
    val_image_path = os.path.join(cur_path, "E:/A/lycium_barbarum/datasets/images/val/")
    val_label_path = os.path.join(cur_path, "E:/A/lycium_barbarum/datasets/labels/val/")

    # 测试集路径
    test_image_path = os.path.join(cur_path, "E:/A/lycium_barbarum/datasets/images/test/")
    test_label_path = os.path.join(cur_path, "E:/A/lycium_barbarum/datasets/labels/test/")

    # 训练集目录
    list_train = os.path.join(cur_path, "E:/A/lycium_barbarum/datasets/train.txt")
    list_val = os.path.join(cur_path, "E:/A/lycium_barbarum/datasets/val.txt")
    list_test = os.path.join(cur_path, "E:/A/lycium_barbarum/datasets/test.txt")

    train_percent = 0.8
    val_percent = 0.1
    test_percent = 0.1

    def del_file(path):
    for i in os.listdir(path):
    file_data = path + "\\\\" + i
    os.remove(file_data)

    def mkdir():
    if not os.path.exists(train_image_path):
    os.makedirs(train_image_path)
    else:
    del_file(train_image_path)
    if not os.path.exists(train_label_path):
    os.makedirs(train_label_path)
    else:
    del_file(train_label_path)

    if not os.path.exists(val_image_path):
    os.makedirs(val_image_path)
    else:
    del_file(val_image_path)
    if not os.path.exists(val_label_path):
    os.makedirs(val_label_path)
    else:
    del_file(val_label_path)

    if not os.path.exists(test_image_path):
    os.makedirs(test_image_path)
    else:
    del_file(test_image_path)
    if not os.path.exists(test_label_path):
    os.makedirs(test_label_path)
    else:
    del_file(test_label_path)

    def clearfile():
    if os.path.exists(list_train):
    os.remove(list_train)
    if os.path.exists(list_val):
    os.remove(list_val)
    if os.path.exists(list_test):
    os.remove(list_test)

    def main():
    mkdir()
    clearfile()

    file_train = open(list_train, 'w')
    file_val = open(list_val, 'w')
    file_test = open(list_test, 'w')

    total_txt = os.listdir(label_original_path)
    num_txt = len(total_txt)
    list_all_txt = range(num_txt)

    num_train = int(num_txt * train_percent)
    num_val = int(num_txt * val_percent)
    num_test = num_txt – num_train – num_val

    train = random.sample(list_all_txt, num_train)
    # train从list_all_txt取出num_train个元素
    # 所以list_all_txt列表只剩下了这些元素
    val_test = [i for i in list_all_txt if not i in train]
    # 再从val_test取出num_val个元素,val_test剩下的元素就是test
    val = random.sample(val_test, num_val)

    print("训练集数目:{}, 验证集数目:{}, 测试集数目:{}".format(len(train), len(val), len(val_test) – len(val)))
    for i in list_all_txt:
    name = total_txt[i][:-4]

    srcImage = image_original_path + name + '.jpg'
    srcLabel = label_original_path + name + ".txt"

    if i in train:
    dst_train_Image = train_image_path + name + '.jpg'
    dst_train_Label = train_label_path + name + '.txt'
    shutil.copyfile(srcImage, dst_train_Image)
    shutil.copyfile(srcLabel, dst_train_Label)
    file_train.write(dst_train_Image + '\\n')
    elif i in val:
    dst_val_Image = val_image_path + name + '.jpg'
    dst_val_Label = val_label_path + name + '.txt'
    shutil.copyfile(srcImage, dst_val_Image)
    shutil.copyfile(srcLabel, dst_val_Label)
    file_val.write(dst_val_Image + '\\n')
    else:
    dst_test_Image = test_image_path + name + '.jpg'
    dst_test_Label = test_label_path + name + '.txt'
    shutil.copyfile(srcImage, dst_test_Image)
    shutil.copyfile(srcLabel, dst_test_Label)
    file_test.write(dst_test_Image + '\\n')

    file_train.close()
    file_val.close()
    file_test.close()

    if __name__ == "__main__":
    main()

  • 制作data.yaml文件 新建yaml文件,其中yaml文件与YOLOV8类似
  • train: E:/A/lycium_barbarum/datasets/images/train # train images (relative to 'path') 128 images
    val: E:/A/lycium_barbarum/datasets/images/val # val images (relative to 'path') 128 images
    test: E:/A/lycium_barbarum/datasets/images/test # test images (optional)

    nc: 2

    # Classes
    names: ['immaturate', 'mature']

    五、开始训练

    下面展示 train.py代码片。

    import warnings, os
    # os.environ["CUDA_VISIBLE_DEVICES"]="-1" # 代表用cpu训练 不推荐!没意义! 而且有些模块不能在cpu上跑
    os.environ["CUDA_VISIBLE_DEVICES"]="1" # 代表用第一张卡进行训练 0:第一张卡 1:第二张卡
    warnings.filterwarnings('ignore')
    from ultralytics import YOLO

    if __name__ == '__main__':
    model = YOLO(r'E:\\ultralytics-main-YOLO26\\ultralytics\\cfg\\models\\26\\yolo26.yaml')
    # model.load('') # loading pretrain weights
    model.train(data=r'E:\\A\\A\\A\\A\\Driving_behavior\\data.yaml',
    cache=False,
    imgsz=640,
    epochs=100,
    batch=16,
    workers=16,
    device='1',
    # resume='', # last.pt path
    project=r'E:\\ultralytics-main-YOLO26\\runs',
    name='Driving_behavior-YOLO26',
    )

    【开始训练】(PS:本次训练时我自己论文中的数据集,而非刚才划分的数据集) 此时我们会发现一个BUG,正常来说,YOLO26在开始训练时加载YOLO26的预训练权重才对,目前的代码中还是加载的YOLO11n的预训练权重。

    python train.py

    或者直接在pycharm中以当前环境YOLO26运行(此时博主选择了这种方式) 在这里插入图片描述 训练正常 在这里插入图片描述 在这里插入图片描述

    结果正常 在这里插入图片描述

    如有问题,欢迎大家一起交流,不胜感激!!!

    赞(0)
    未经允许不得转载:171主机测评 » YOLO26保姆级教程+YOLO26改进详解(个人踩坑无数,Win10运行)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址