文章目录
前言
最近觉得自己以往作品的界面有点简陋,打算认真设计一下,顺便借一下 YOLOv11 的热度~~ 这次的界面美化了pyqt5 ui,且涵盖了许多功能,如推理图像、视频处理、摄像头接入、目标统计(总数和单数)、帧状态回溯等等,且不仅支持v11模型、v8、v10都可以使用,具体效果可以观看我在下方放的视频。
项目中包含我整理的一些主流改进方案,以及 500+ 主干网替换的优化。目前界面和改进在持续更新中,欢迎大家关注!
视频效果
YOLOv11美化版检测界面 涵盖超多功能 支持上百种改进模型 持续更新中~~
必要环境
- 配置yolov11环境 可参考往期博客
地址:搭建YOLOv11环境 训练+推理+模型评估+简单的小界面
一、界面功能概述
1. 运行方法
python
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
python 2_train.py --weights refinedModel/backbone/yolov11_mobilenetv4_conv_aa_large.yaml --epoch 200 --batch 16 --workers 0
假设我们要训练yolov11+mobilenetv4主干网+mpdiouloss
python
python 2_train.py --weights refinedModel/backbone/yolov11_mobilenetv4_conv_aa_large.yaml --epoch 200 --batch 16 --workers 0 --mpdiou True
效果
运行成功后会打印log信息
三、 关键参数解析
python
# 解析命令行参数
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 损失。填写
True
或False
,默认为False
-
--diou : 指定是否使用 DIoU 损失。填写
True
或False
,默认为False
-
--giou : 指定是否使用 GIoU 损失。填写
True
或False
,默认为False
-
--siou : 指定是否使用 SIoU 损失。填写
True
或False
,默认为False
-
--eiou : 指定是否使用 EIou 损失。填写
True
或False
,默认为False
-
--shapeiou : 指定是否使用 Shape IoU 损失。填写
True
或False
,默认为False
-
--usenwd : 指定是否使用 NWD 损失。填写
True
或False
,默认为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