全新YOLOv11美化版检测界面 涵盖超多功能 支持百种模型改进训练


前言

最近觉得自己以往作品的界面有点简陋,打算认真设计一下,顺便借一下 YOLOv11 的热度~~ 这次的界面美化了pyqt5 ui,且涵盖了许多功能,如推理图像、视频处理、摄像头接入、目标统计(总数和单数)、帧状态回溯等等,且不仅支持v11模型、v8、v10都可以使用,具体效果可以观看我在下方放的视频。
项目中包含我整理的一些主流改进方案,以及 500+ 主干网替换的优化。目前界面和改进在持续更新中,欢迎大家关注!


视频效果

YOLOv11美化版检测界面 涵盖超多功能 支持上百种改进模型 持续更新中~~


必要环境

  1. 配置yolov11环境 可参考往期博客
    地址:搭建YOLOv11环境 训练+推理+模型评估+简单的小界面

一、界面功能概述

在这里插入图片描述

1. 运行方法

python 1_yolo_pyqt.py --weights yolo11n.pt
  • –weights 选择模型,支持该项目下训练出来的所有模型,同时除v11外,同样支持yolov8、yolov10

2. 图像

选择图像:

  • 选择一个图像文件,软件会自动推理该图像,并将结果展现在界面中

表格信息:

  • 图像名称
  • 目标序号
  • 目标类别
  • 目标置信度
  • 推理用时
  • 目标坐标
  • 保存路径

统计信息:

  • 目标总数
  • 每个小类别的数量(显示在右下角)

IOU和NMS调节:

  • 可调节 IOU 阈值和 NMS 阈值来调整目标框数量

目标框显示:

  • 点击表格中任意位置(对应不同目标序号),可单独显示该序号的目标框及标号
  • 点击表头可显示所有目标及标号
  • 可在下拉列表中选择单独目标序号进行显示

3. 文件夹

选择文件夹:

  • 选择一个文件夹,软件会自动推理该文件夹中的所有图片

进度显示:

  • 推理的过程中会出现一个小进度条来显示处理进度

推理结果:

  • 点击表格中的信息可以显示不同图片的推理结果,其余功能与检测图像相同

4. 视频、摄像头

进度显示:

  • 推理的过程中会出现一个小进度条来显示处理进度

实时检测:

  • 在视频运行过程中,点击保存按钮或使用 Ctrl+S 实时获取对应帧的检测结果
  • 可以实时调节 IOU 阈值和 NMS 阈值

帧状态回溯:

  • 关闭视频后,可以通过列表中的信息回溯到对应帧的状态

  • 若需保存某一帧的推理图像,通过列表跳转到该位置,然后点击保存按钮或使用 Ctrl+S 来保存

  • 推理摄像头: 推理摄像头的功能与推理视频一致,此处不再过多介绍

5. 替换界面中的模型

  • yolov11_qt.py代码中 --weights 参数替换成你的模型路径
  • 例如:parser.add_argument('--weights', default=r"yolov8n.pt", type=str, help='weights path')
  • 支持YOLOv8、YOLOv10以及全部在项目目录中训练出来的模型

5. 鼠标悬浮

  • 鼠标悬浮在按钮处可查看输入路径,悬浮在右上角处可在运行的过程中查看使用方法

二、训练改进模型

运行方法

假设我们要训练yolov11+mobilenetv4主干网

python 2_train.py --weights refinedModel/backbone/yolov11_mobilenetv4_conv_aa_large.yaml --epoch 200 --batch 16 --workers 0

假设我们要训练yolov11+mobilenetv4主干网+mpdiouloss

python 2_train.py --weights refinedModel/backbone/yolov11_mobilenetv4_conv_aa_large.yaml --epoch 200 --batch 16 --workers 0 --mpdiou True

效果

运行成功后会打印log信息
在这里插入图片描述


三、 关键参数解析

# 解析命令行参数
parser = argparse.ArgumentParser(description='Train or validate YOLO model.')
#想用哪个loss直接把对应的变量改为True即可,全部填写False这里默认使用ciouloss进行训练
parser.add_argument('--mpdiou', type=str, default=False, help='Whether to use mpdiou or not (True/False)')
parser.add_argument('--diou', type=str, default=False, help='Whether to use diou or not (True/False)')
parser.add_argument('--giou', type=str, default=False, help='Whether to use giou or not (True/False)')
parser.add_argument('--siou', type=str, default=False, help='Whether to use siou or not (True/False)')
parser.add_argument('--eiou', type=str, default=False, help='Whether to use eiou or not (True/False)')
parser.add_argument('--shapeiou', type=str, default=False, help='Whether to use shapeiou or not (True/False)')
# 是否使用nwdloss
parser.add_argument('--usenwd', type=str, default=False, help='Whether to use NWDLoss or not (True/False)')
# iou使用比例
parser.add_argument('--iou_ratio', type=float, default=0.5,
                    help='Intersection over Union (IoU) threshold for NWDLoss')

# train用于训练原始模型  val 用于得到精度指标
parser.add_argument('--mode', type=str, default='train', help='Mode of operation.')

# 训练时此处填写yaml文件路径 推理时此处填写网络结构.yaml文件路径
parser.add_argument('--weights', type=str, default=r'refinedModel/yolo11-ImprovedSimAM.yaml', help='Path to model file.')
# 数据集存放路径
parser.add_argument('--data', type=str, default='data/data.yaml', help='Path to data file.')

parser.add_argument('--epoch', type=int, default=100, help='Number of epochs.')
parser.add_argument('--batch', type=int, default=8, help='Batch size.')
parser.add_argument('--workers', type=int, default=0, help='Number of workers.')
parser.add_argument('--device', type=str, default='0', help='Device to use.')
parser.add_argument('--name', type=str, default='', help='Name data file.')
args = parser.parse_args()

关键参数详解:

  • –mpdiou: 指定是否使用 MPD IoU 损失。填写 TrueFalse,默认为 False

  • –diou: 指定是否使用 DIoU 损失。填写 TrueFalse,默认为 False

  • –giou: 指定是否使用 GIoU 损失。填写 TrueFalse,默认为 False

  • –siou: 指定是否使用 SIoU 损失。填写 TrueFalse,默认为 False

  • –eiou: 指定是否使用 EIou 损失。填写 TrueFalse,默认为 False

  • –shapeiou: 指定是否使用 Shape IoU 损失。填写 TrueFalse,默认为 False

  • –usenwd: 指定是否使用 NWD 损失。填写 TrueFalse,默认为 False。NWD 损失可以改善小目标的检测性能

  • –iou_ratio: 设置 IoU 阈值,用于 NWD 损失的计算。默认为 0.5 该参数影响损失函数的敏感度

  • –mode: 指定操作模式。填写 train 用于训练模型,填写 val 用于验证模型的精度 默认为 train

  • –weights: 填写预训练模型的路径。如果不使用预训练模型,则此处可以为空 默认为 refinedModel/yolo11-ImprovedSimAM.yaml

  • –data: 数据集存放路径。填写数据集配置文件的路径,默认为 data/data.yaml

  • –epoch: 设置训练的轮数。默认为 100 增加轮数可以提高模型的性能,但也可能导致过拟合

  • –batch: 设置批处理大小。默认为 8 批处理大小影响训练速度和内存占用

  • –workers: 设置加载数据的工作线程数。默认为 0

  • –device: 指定使用的设备。默认为 0,表示使用第一个 GPU。如果为 cpu,则在 CPU 上运行

  • –name: 指定数据文件的名称。默认为空字符串,可以用于标识实验或结果


总结

yolo是真卷呐,版本号一会儿一变的 看不过来了…

本期博客就到这里啦 如有问题,欢迎评论区交流~~

学习交流群:995760755

### 修改 YOLOv8-CLS 的损失函数以支持 MPDIoU 在目标检测领域,YOLO系列算法因其高效性和准确性而备受关注。对于 YOLOv8-CLS 而言,默认情况下其分类任务可能并未直接涉及边界框回归问题,因此默认不会使用 IoU 类型的损失函数。然而,在某些特定场景下(例如多标签分类或带有空间分布约束的任务),可以尝试引入 MPDIoU 来增强模型的空间感知能力。 以下是实现方法的具体描述: #### 1. 定义 MPDIoU 损失函数 MPDIoU 是一种改进版的距离交并比损失函数,能够更好地衡量预测值与真实值之间的几何关系[^1]。为了将其集成到 YOLOv8-CLS 中,需先定义该损失函数。以下是一个基于 PyTorch 的 MPDIoU 实现示例: ```python import torch import torch.nn as nn class MPDIoULoss(nn.Module): def __init__(self, eps=1e-7): super(MPDIoULoss, self).__init__() self.eps = eps def forward(self, pred, target): # 计算交集和并集 intersection = (pred * target).sum(dim=-1) union = pred.sum(dim=-1) + target.sum(dim=-1) - intersection iou = (intersection + self.eps) / (union + self.eps) mpdiou_loss = 1 - iou.mean() return mpdiou_loss ``` 上述代码实现了基本的 MPDIoU 损失计算逻辑[^2]。需要注意的是,`pred` 和 `target` 应当表示为具有相同形状的概率分布向量。 --- #### 2. 替换默认损失函数 YOLOv8 提供了高度模块化的架构设计,允许开发者轻松替换或扩展损失函数。具体操作如下: ##### (1)定位损失函数位置 通常,YOLOv8 的核心组件位于 Ultralytics 开源库中。可以通过继承 `BaseTrainer` 或者修改配置文件来调整损失函数设置。 ##### (2)注册自定义损失函数 假设我们已经完成了 MPDIoU 损失函数的定义,则可以在训练脚本中通过以下方式应用它: ```python from ultralytics import YOLO # 加载预训练模型 model = YOLO('yolov8_cls.pt') # 注册自定义损失函数 def custom_loss(preds, targets): loss_fn = MPDIoULoss() # 初始化 MPDIoU 损失 cls_loss = model.loss_box(cls_preds=preds['cls'], cls_targets=targets['cls']) spatial_loss = loss_fn(preds['spatial'], targets['spatial']) # 假设存在空间特征 total_loss = cls_loss + spatial_loss return total_loss # 更新模型的损失函数 model.overrides['loss'] = custom_loss ``` 此处的关键在于将自定义的 MPDIoU 损失与其他标准损失项相结合,形成最终的目标优化函数[^3]。 --- #### 3. 验证与调优 完成以上步骤后,建议运行少量迭代验证新损失函数的效果,并观察收敛曲线的变化趋势。如果发现异常情况(如梯度爆炸或数值不稳定),可适当调整参数(如学习率、正则化系数等)或者重新审视数据预处理流程。 --- ### 注意事项 尽管 MPDIoU 在目标检测任务中有显著优势,但在纯分类场景下的适用性仍需进一步探讨。实际部署前应充分测试其对当前任务的影响程度。 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猫发财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值