💡💡💡本文摘要:基于YOLO11的雾天行人车辆检测,阐述了整个数据制作和训练可视化过程
随着计算机视觉算法的快速发展,目标检测作为视觉感知的基础任务,在诸多场景中得到了广泛应用。常见的公开数据集和方法大多针对能见度良好条件下的目标检测任务而建立。然而现实应用场景却面临诸如低能见度环境等更为复杂的环境,导致拍摄图像质量下降。在雾、霾等恶劣天气条件下,城市安防、自动驾驶等应用的视觉感知和场景理解变得极为困难。这些大气现象通常会导致图像出现非线性噪声、模糊、对比度下降和亮度变暗等问题,这对目标检测任务构成了挑战。该项目旨在提高目标检测算法对雾天环境拍摄图像的鲁棒性。以我们选用的 RTTS 数据集为例,该项目的挑战在于:
-
目标复杂
- 环境复杂,要适应各种能见度条件下的白天、阴天、雾天、霾天等气候环境;
- 场景复杂,城市道路、乡村、高速公路等场景差异性较大;
-
样本不均衡
- 类别多,包含:行人、骑车人、汽车、巴士、摩托车、自行车;
- 每张图像中包含多类目标,以及各种程度的遮挡与截断;
博主简介
AI小怪兽,YOLO骨灰级玩家,1)YOLOv5、v7、v8、v9、v10、11优化创新,轻松涨点和模型轻量化;2)目标检测、语义分割、OCR、分类等技术孵化,赋能智能制造,工业项目落地经验丰富;
1.YOLO11介绍
Ultralytics YOLO11是一款尖端的、最先进的模型,它在之前YOLO版本成功的基础上进行了构建,并引入了新功能和改进,以进一步提升性能和灵活性。YOLO11设计快速、准确且易于使用,使其成为各种物体检测和跟踪、实例分割、图像分类以及姿态估计任务的绝佳选择。
结构图如下:
1.1 C3k2
C3k2,结构图如下
C3k2,继承自类C2f,其中通过c3k设置False或者Ture来决定选择使用C3k还是
Bottleneck
实现代码ultralytics/nn/modules/block.py
1.2 C2PSA介绍
借鉴V10 PSA结构,实现了C2PSA和C2fPSA,最终选择了基于C2的C2PSA(可能涨点更好?)
实现代码ultralytics/nn/modules/block.py
1.3 11 Detect介绍
分类检测头引入了DWConv(更加轻量级,为后续二次创新提供了改进点),结构图如下(和V8的区别):
实现代码ultralytics/nn/modules/head.py
2.雾天行人车辆检测系统
2.1雾天行人车辆检测数据集介绍
数据集大小:训练集4323,验证集100
类别5类:
# Classes
nc: 5 # number of classes
names: ["person", "car", "bus", "bicycle", "motorbike"] # class names
细节图:
标签可视化分析
2.2 配置RTTS.yaml
ps:建议填写绝对路径
path: F:/DL/Pytorch/job/ultralytics-RTTS/data/RTTS # dataset root dir
train: images/train # train images (relative to 'path') 128 images
val: images/val # val images (relative to 'path') 128 images
# Classes
nc: 5 # number of classes
names: ["person", "car", "bus", "bicycle", "motorbike"] # class names
2.3 如何训练
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
model = YOLO('ultralytics/cfg/models/11/yolo11.yaml')
model.train(data='data/RTTS.yaml',
cache=False,
imgsz=640,
epochs=200,
batch=8,
close_mosaic=10,
device='0',
optimizer='SGD', # using SGD
project='runs/train',
name='exp',
)
2.4 训练结果可视化结果
预测结果:
3. 雾天行人车辆检测系统设计
3.1 PySide6介绍
受益于人工智能的崛起,Python语言几乎以压倒性优势在众多编程语言中异军突起,成为AI时代的首选语言。在很多情况下,我们想要以图形化方式将我们的人工智能算法打包提供给用户使用,这时候选择以python为主的GUI框架就非常合适了。
PySide是Qt公司的产品,PyQt是第三方公司的产品,二者用法基本相同,不过在使用协议上却有很大差别。PySide可以在LGPL协议下使用,PyQt则在GPL协议下使用。
PySide目前常见的有两个版本:PySide2和PySide6。PySide2由C++版的Qt5开发而来.,而PySide6对应的则是C++版的Qt6。从PySide6开始,PySide的命名也会与Qt的大版本号保持一致,不会再出现类似PySide2对应Qt5这种容易混淆的情况。
3.2 安装PySide6
pip install --upgrade pip
pip install pyside6 -i https://mirror.baidu.com/pypi/simple
基于PySide6开发GUI程序包含下面三个基本步骤:
- 设计GUI,图形化拖拽或手撸;
- 响应UI的操作(如点击按钮、输入数据、服务器更新),使用信号与Slot连接界面和业务;
- 打包发布;