本文采用YOLOv11作为焦点算法框架,联合PyQt5构建用户界面,利用Python3进行开发。YOLOv11以其高效的实时检测能力,在多个目标检测任务中展现出杰出性能。本研究针对TT100K交通标志数据集进行练习和优化,该数据集包罗丰富的TT100K交通标志图像样本,为模型的准确性和泛化能力提供了有力保障。通过深度学习技术,模型能够自动提取TT100K交通标志的特性并进行分类辨认。PyQt5界面设计简洁直观,便于用户操作和实时查看检测结果。本研究不仅提高了TT100K交通标志辨认的自动化水平,还为交通体系的构建提供了有力支持,具有重要的理论应用价值。
YOLOv11实战TT100k交通标志辨认
研究背景
1.媒介
1.1 YOLO 系列:目标检测领域的璀璨明星
在实时目标检测的算法星空中,YOLO 系列无疑是最为耀眼的星座之一。从 YOLOv5 到 YOLOv11,每一次的迭代都宛如一次华丽的蜕变,在性能、速度与准确度上实现了跨越式的提升。YOLOv11,作为这一系列的最新杰作,凭借其更为深邃复杂的网络架构以及精妙绝伦的练习本领,将检测的准确性与速度推向了新的高峰。尤其在应对动态视频流中的TT100K交通标志检测任务时,它宛如一位武艺精湛的舞者,展现出了令人赞叹的杰出性能。这些明显的改进,如同强盛的引力,使得 YOLO 系列在TT100K交通标志检测领域的应用版图不绝拓展,愈发完美地契合了实时性与准确性的双重严苛要求。
多元算法共筑TT100K交通标志标志检测的坚实堡垒
除了光芒四射的 YOLO 系列,其他深度学习算法,诸如 Faster R - CNN、SSD 以及基于 Transformer 的 DETR 等,也纷纷在TT100K交通标志佩戴检测的舞台上崭露头角。它们各具独特的优势,恰似一群才华横溢的艺术家,在差别的领域绽放光彩。Faster R - CNN 以其在检测精度上的非凡体现,如同一位精雕细琢的工匠,刻画着每一个细节;而 SSD 则在速度方面具备显着优势,恰似一阵疾风,迅速而敏捷。最新的研究恰似一场永不绝歇的探索之旅,不绝发掘这些算法的改进版本,力求在速度与准确性之间找到那最为完美的均衡点,如同在钢丝上寻找均衡的舞者,追求极致的调和。
1.2 Transformer与留意力机制:为目标检测注入新活力
Transformer 在视觉任务中的应用,如同一颗璀璨的新星划破夜空,吸引了广泛的关注,此中视觉 Transformer(ViT)更是备受瞩目。ViT 通过奇妙引入自留意力机制,仿佛为模型赋予了一双敏锐的眼睛,能够精准捕捉图像中的长间隔依赖关系,这在中国TT100K交通标志形态复杂多样且背景纷繁复杂的情况下,显得尤为关键。相较于传统的卷积神经网络(CNN),ViT 在处理图像全局信息时展现出了更为杰出的能力,如同一位宏观把控的大家,为中国TT100K交通标志检测开发了一片崭新的天地,提供了全新的办理思路。
留意力机制,作为 Transformer 的焦点瑰宝,已如同星星之火,在各种深度学习模型中形成燎原之势,在中国TT100K交通标志检测领域更是大放异彩。它赋予了模型对图像特定部分的 “专注” 能力,如同为模型戴上了一副神奇的眼镜,使其能够在复杂的背景或多变的中国TT100K交通标志形态中,依然清楚地定位并准确辨认目标,即便在干扰信息如潮水般涌来的环境中,也能固若金汤,保持较高的检测准确率。
1.3 TT100K交通标志检测技术:欢迎寻衅,砥砺前行
当前,中国TT100K交通标志检测技术正置身于充满寻衅的浪潮之中,亟待提高检测的实时性、准确性以及在多变环境下的适应性,如同在波涛汹涌的大海中飞行的船只,需要不绝调解航向,欢迎风浪的寻衅。为了跨越这些难关,研究人员们宛如勇敢的探险家,不绝探索新的算法和技术。比方,通过深度学习模型的轻量化设计,如同为船只减轻负重,提高算法的运行效率,使其在复杂的环境中更加机动敏捷;利用创新的数据增强技术和自适应学习方法,仿佛为船只加固船身,提升模型的泛化能力和鲁棒性,使其能够在各种未知的海域中稳健前行。
1.4 YOLOv11算法在TT100K交通标志检测体系中的精彩演绎
本博客致力于基于 YOLOv11 算法构建一个TT100K交通标志检测体系,并全方位展示其魅力。我们将出现体系精致的界面效果,如同揭开一幅美丽画卷,让您领略其独特风采;深入阐述其算法原理,恰似探秘一座神秘城堡,为您展现此中的奥秘;毫无保存地提供代码实现,仿佛为您递上一把开启知识宝库的钥匙;详细分享该体系的实现过程,如同伴随您走过一段精彩旅程,让您切身体验此中的艰辛与喜悦。希望本博客的倾心分享能如同一盏明灯,为读者照亮前行的道路,给予您深刻的启示,进而推动更多相关研究的发达发展。本文的焦点内容主要涵盖以下几个方面:
- YOLOv11 算法的杰出应用与性能对比
本文不仅详细介绍了基于 YOLOv11 算法的中国TT100K交通标志检测体系的构建进程,如同讲述一个精彩的创业故事,而且还深入细致地比力了 YOLOv7、YOLOv6、YOLOv5 等早期版本的性能差别,仿佛展开一场猛烈的武林高手对决。这一全面深入的比力研究,恰似一本权威的指南,为中国TT100K交通标志检测技术的选型提供了坚实有力的参考依据。特别是 YOLOv11 算法在效率和精准度方面所展现出的明显优势,如同一座豁亮的灯塔,为 TT100K交通标志检测指明了一条更为高效、更为准确的技术路径。
- PyQt5 打造的友好用户界面
通过 Python 的 PyQt5 库经心打造的TT100K交通标志检测体系,不仅具备高效杰出的检测能力,如同一位内功深厚的武林高手,更提供了直观便捷、令人赏心悦目的用户操作界面,仿佛为用户搭建了一座温馨的故里。这种知心的设计,使得TT100K交通标志检测变得更加亲切友好,如同一位热情好客的主人,有助于广泛推广 YOLOv11 算法的应用,同时也为TT100K交通标志检测技术的遍及和实用化注入了强盛的动力,如同东风化雨,滋润着这片技术的田野。
- YOLOv11 模型的深度研究与性能剖析
YOLOv11是YOLO系列的最新版本,旨在提高实时目标检测技术的准确性和效率,引入了C3k2块、SPPF和C2PSA组件,增强了特性提取能力。
主干网络:YOLOv11的主干网络采用了C3k2块,替代了之前版本中的C2f块,提升了计算效率。
颈部结构:在颈部引入了C2PSA模块,增强了空间留意力机制。
头部预测:头部利用了多个C3k2块和CBS层,进一步细化特性图,最终输出界限框和类别标签。支持的计算机视觉任务:
精度与效率:YOLOv11在COCO数据集上取得了更高的均匀精度(mAP),同时参数数量淘汰了22%。
多任务能力:YOLOv11在多种计算机视觉任务中体现出色,包括姿态估计、对象辨认、图像分类等。
架构优化:通过改进的架构设计和练习流程,YOLOv11实现了更快的处理速度和更高的计算效率。
2.TT100K交通标志数据集介绍
TT100K交通标志数据集包罗中国交通标志50个类别,在数据预处理阶段,采取了几项关键步调以确保数据集的质量。起首,全部图像都经过了自动方向校正。接着,全部图像都被统一调解至640x640像素,通过拉伸的方式来适配这一分辨率。
3.界面效果演示
3.1 图像测试
3.2 视频测试
3.3 摄像头测试
3.4 资源获取
4. YOLOv11 原理
YOLOv11是YOLO系列另一个SOTA模型,该模型是相对于YOLOV5进行更新的。其主要结构如下图所示:
从图中可以看出,网络照旧分为三个部分: 主干网络(backbone),特性增强网络(neck),检测头(head) 三个部分。
相比力于YOLOv8模型,其将CF2模块改成C3K2,同时在SPPF模块后面添加了一个C2PSA模块,且将YOLOv10的head思想引入到YOLO11的head中,利用深度可分离的方法,淘汰冗余计算,提高效率
主干网络:YOLOv11的主干网络采用了C3k2块,替代了之前版本中的C2f块,提升了计算效率。
- class C3k2(C2f):
- """Faster Implementation of CSP Bottleneck with 2 convolutions."""
-
- def __init__(self, c1, c2, n=1, c3k=False, e=0.5, g=1, shortcut=True):
- """Initializes the C3k2 module, a faster CSP Bottleneck with 2 convolutions and optional C3k blocks."""
- super().__init__(c1, c2, n, shortcut, g, e)
- self.m = nn.ModuleList(
- C3k(self.c, self.c, 2, shortcut, g) if c3k else Bottleneck(self.c, self.c, shortcut, g) for _ in range(n)
- )
复制代码 颈部结构:在颈部引入了C2PSA模块,增强了空间留意力机制。
C2PSA是对 C2f 模块的扩展,它联合了PSA(Pointwise Spatial Attention)块,用于增强特性提取和留意力机制。通过在标准 C2f 模块中引入 PSA 块,C2PSA实现了更强盛的留意力机制,从而提高了模型对重要特性的捕捉能力。
头部预测:头部利用了多个C3k2块和CBS层,进一步细化特性图,最终输出界限框和类别标签。
5 模型练习
模型练习主要分为如下几步:
5.1 Conda环境构建
新人安装Anaconda环境可以参考博主写的文章Anaconda3与PyCharm安装配置保姆教程
5.2 基础环境构建
新人安装PyTorch GPU版本可以参考博主写的文章基于conda的PyTorch深度学习框架GPU安装教程
5.3 安装YOLOv11环境
- conda create -n yolov11 python=3.8
- conda activate yolov11
- pip install ultralytics
复制代码 5.4 构建TT100K交通标志检测模型
TT100K交通标志检测体系,分别为
- names: ['head', 'helmet']
复制代码 TT100K交通标志数据集练习集一共15,887左右,验证集4,641张,标注格式采用yolo格式组织
- images
- train
- image1.jpg
- image2.jpg
- ...
- val
- image11.jpg
- image22.jpg
- ...
- labels
- train
- image1.txt
- image2.txt
- ...
- val
- image11.txt
- image22.txt
- ...
复制代码 我们开启练习之旅的第一步是导入一系列不可或缺的模块,此中涵盖了 os 模块,它如同一把万能钥匙,为我们处理各种文件路径相关的操作提供了便利;torch 模块恰似一台强盛的引擎,助力我们高效地实行各类数值计算任务;yaml 模块则如同一位精准的翻译官,能够帮助我们轻松剖析配置文件中的各种信息;还有专门的 YOLO 类,它是我们构建模型的关键基石,为实例化模型奠基了基础。
紧接着,我们着手确定练习过程所依托的计算设备。在这个环节中,我们秉持优先选择的策略,将眼光聚焦于 GPU(cuda:0),由于它具备强盛的并行计算能力,能够极大地加速练习过程。然而,若 GPU(cuda:0)不可用,我们也做好了充实的应对准备,即退而求其次,选择利用 CPU 来继续我们的练习任务。只管 CPU 的计算速度相对较慢,但它依然能够确保练习工作的顺利进行,为我们的研究提供持续的支持。
- import os
- import torch
- import yaml
- from ultralytics import YOLO # 导入YOLO模型
- device = "cuda:0" if torch.cuda.is_available() else "cpu"
复制代码 接下来,我们对一些基本的练习参数进行了设定,此中包括工作进程数以及批次巨细。随后,明确了数据集的名称与路径,并且借助 abs_path 函数获取到了配置文件的绝对路径。如许做能够包管在差别的运行环境下路径具有一致性,同时也提升了代码的可移植性。
- workers = 1
- batch = 8
- data_name = "FireSmoke"
- data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current') # 数据集的yaml的绝对路径
- unix_style_path = data_path.replace(os.sep, '/')
- # 获取目录路径
- directory_path = os.path.dirname(unix_style_path)')
复制代码 在加载数据配置文件之前,必须先读取并剖析 YAML 格式的配置文件。这一环节极为重要,原因在于该配置文件中涵盖了练习过程所需的关键信息,比方类别标签以及数据集路径等等。我们对配置文件中的“path”键值进行修改,以此确保模型能够准确无误地找到练习和验证数据。
- # 读取YAML文件,保持原有顺序
- with open(data_path, 'r') as file:
- data = yaml.load(file, Loader=yaml.FullLoader)
- # 修改path项
- if 'path' in data:
- data['path'] = directory_path
- # 将修改后的数据写回YAML文件
- with open(data_path, 'w') as file:
- yaml.safe_dump(data, file, sort_keys=False)
复制代码 接着,我们加载了预先练习好的 YOLOv11 模型,进而开启了练习进程。YOLO 类的 train 方法采取了众多参数,此中有数据路径、设备、工作进程数、输入图像的尺寸、练习周期以及批次巨细。在此处,name参数为练习任务赋予了标识,便于后续进行追踪与分析。
- model = YOLO(abs_path('./weights/yolo11s.pt'), task='detect') # 加载预训练的YOLOv11模型
- results = model.train( # 开始训练模型
- data=data_path, # 指定训练数据的配置文件路径
- workers=0,
- imgsz=640, # 指定输入图像的大小为640x640
- epochs=100, # 指定训练100个epoch
- batch=batch, # 指定每个批次的大小为8
- name='train_v11_' + data_name # 指定训练任务的名称
- )
复制代码 练习50个epoch输出如下
- epoch,time,train/box_loss,train/cls_loss,train/dfl_loss,metrics/precision(B),metrics/recall(B),metrics/mAP50(B),metrics/mAP50-95(B),val/box_loss,val/cls_loss,val/dfl_loss,lr/pg0,lr/pg1,lr/pg2
- 1,1105.97,0.96636,3.374,0.8266,0.45242,0.43787,0.39081,0.30055,0.81574,1.4622,0.81178,0.00333075,0.00333075,0.00333075
- 2,1842.92,0.94112,1.44354,0.82507,0.54054,0.45914,0.48214,0.37454,0.84149,1.2587,0.81749,0.00653213,0.00653213,0.00653213
- 3,2569.24,0.97353,1.37783,0.83009,0.51845,0.43031,0.46844,0.36286,0.8473,1.25705,0.82356,0.00960151,0.00960151,0.00960151
- 4,3296.49,0.93942,1.29991,0.82793,0.58354,0.46042,0.51575,0.40794,0.78508,1.12274,0.81422,0.009406,0.009406,0.009406
- 5,4023.14,0.85777,1.14666,0.81972,0.65803,0.47878,0.5661,0.45095,0.76693,1.01826,0.81316,0.009208,0.009208,0.009208
- 6,4749.98,0.82216,1.05016,0.81562,0.7197,0.51056,0.62253,0.50248,0.72205,0.90032,0.80872,0.00901,0.00901,0.00901
- 7,5475.4,0.78282,0.96418,0.81006,0.73597,0.53922,0.64982,0.5229,0.71234,0.83143,0.80627,0.008812,0.008812,0.008812
- 8,6202.88,0.76354,0.91216,0.80855,0.75719,0.52925,0.6476,0.52637,0.69367,0.82428,0.80342,0.008614,0.008614,0.008614
- 9,6928.68,0.74168,0.87648,0.80545,0.77543,0.55043,0.67621,0.55483,0.67615,0.75003,0.80096,0.008416,0.008416,0.008416
- 10,7656.31,0.72635,0.82746,0.80415,0.76877,0.57395,0.68815,0.56471,0.65886,0.73549,0.80019,0.008218,0.008218,0.008218
- 11,8382.07,0.71601,0.81061,0.80258,0.77291,0.58228,0.70109,0.57841,0.64687,0.70199,0.79836,0.00802,0.00802,0.00802
- 12,9108.41,0.70042,0.78025,0.80156,0.79729,0.59325,0.71488,0.5902,0.63947,0.66303,0.79767,0.007822,0.007822,0.007822
- 13,9835.89,0.69555,0.75983,0.80105,0.82061,0.59601,0.72275,0.59704,0.63033,0.64812,0.79575,0.007624,0.007624,0.007624
- 14,10563.2,0.67841,0.73473,0.7984,0.80502,0.62006,0.74063,0.61245,0.62027,0.61507,0.79434,0.007426,0.007426,0.007426
- 15,11288.9,0.67895,0.7204,0.7998,0.82447,0.62297,0.74636,0.62093,0.61545,0.60139,0.79461,0.007228,0.007228,0.007228
- 16,12016.1,0.6617,0.69987,0.79891,0.83437,0.62518,0.75236,0.62614,0.60732,0.5829,0.79348,0.00703,0.00703,0.00703
- 17,12741.5,0.65143,0.67888,0.79598,0.83861,0.6254,0.7563,0.63196,0.60136,0.56954,0.79327,0.006832,0.006832,0.006832
- 18,13467.8,0.6438,0.66682,0.79524,0.85093,0.63236,0.76205,0.63965,0.5897,0.55265,0.79184,0.006634,0.006634,0.006634
- 19,14193.2,0.64466,0.66028,0.79454,0.82786,0.64678,0.77097,0.64487,0.59156,0.53951,0.79178,0.006436,0.006436,0.006436
- 20,14920,0.62791,0.63896,0.79497,0.84953,0.64328,0.77247,0.64735,0.58273,0.53949,0.79043,0.006238,0.006238,0.006238
- 21,15645.1,0.62562,0.63451,0.79526,0.83201,0.66065,0.77998,0.65431,0.58087,0.51928,0.79146,0.00604,0.00604,0.00604
- 22,16372.3,0.62374,0.62403,0.79403,0.85395,0.65158,0.78232,0.65869,0.57572,0.51518,0.79023,0.005842,0.005842,0.005842
- 23,17098.8,0.61481,0.60672,0.79399,0.84873,0.66075,0.78992,0.66562,0.56882,0.49767,0.78943,0.005644,0.005644,0.005644
- 24,17825.6,0.6082,0.60517,0.79396,0.88426,0.64647,0.78935,0.66765,0.56198,0.49357,0.78894,0.005446,0.005446,0.005446
- 25,18551.8,0.60665,0.60045,0.79374,0.86518,0.66127,0.79389,0.67114,0.56128,0.48485,0.78821,0.005248,0.005248,0.005248
- 26,19278.8,0.60381,0.58669,0.7917,0.87167,0.67119,0.7995,0.67621,0.55888,0.47763,0.78821,0.00505,0.00505,0.00505
- 27,20003.5,0.58977,0.57278,0.79051,0.87264,0.67488,0.80125,0.67814,0.55415,0.47384,0.78781,0.004852,0.004852,0.004852
- 28,20729.9,0.58618,0.56812,0.79205,0.86712,0.67883,0.80432,0.6814,0.55041,0.46487,0.78717,0.004654,0.004654,0.004654
- 29,21455.9,0.58376,0.55899,0.79132,0.88068,0.67622,0.8098,0.68673,0.54703,0.45753,0.78691,0.004456,0.004456,0.004456
- 30,22183.1,0.57957,0.55436,0.79049,0.87443,0.68438,0.81239,0.68983,0.54269,0.45436,0.7864,0.004258,0.004258,0.004258
- 31,22909.1,0.57675,0.54834,0.78929,0.8803,0.68699,0.81474,0.69181,0.5418,0.45122,0.78587,0.00406,0.00406,0.00406
- 32,23635.5,0.57148,0.53142,0.7899,0.86671,0.70339,0.81976,0.69544,0.5394,0.44269,0.78579,0.003862,0.003862,0.003862
- 33,24360.7,0.57198,0.53104,0.79149,0.87372,0.7024,0.82151,0.69783,0.53676,0.43612,0.78558,0.003664,0.003664,0.003664
- 34,25088,0.55586,0.51479,0.78876,0.87829,0.69897,0.82292,0.70066,0.53534,0.4343,0.78542,0.003466,0.003466,0.003466
- 35,25814.1,0.55617,0.51124,0.78905,0.88803,0.69822,0.82475,0.70281,0.53175,0.43049,0.78485,0.003268,0.003268,0.003268
- 36,26541.3,0.55518,0.51121,0.78764,0.8856,0.70293,0.82597,0.70413,0.52997,0.42871,0.78457,0.00307,0.00307,0.00307
- 37,27266,0.54432,0.49764,0.78708,0.88277,0.704,0.82683,0.70414,0.52936,0.42676,0.78437,0.002872,0.002872,0.002872
- 38,27993.3,0.54602,0.49545,0.78672,0.88636,0.70499,0.82841,0.70575,0.5289,0.42499,0.78428,0.002674,0.002674,0.002674
- 39,28719.5,0.54025,0.4835,0.78776,0.89023,0.70573,0.8299,0.70766,0.52752,0.42067,0.7841,0.002476,0.002476,0.002476
- 40,29446.2,0.53532,0.47134,0.7856,0.87838,0.71412,0.83092,0.70857,0.52688,0.41822,0.78393,0.002278,0.002278,0.002278
- 41,30152,0.50968,0.42372,0.78361,0.88347,0.71392,0.8319,0.70898,0.52624,0.4179,0.78383,0.00208,0.00208,0.00208
- 42,30859,0.50587,0.41886,0.7852,0.89676,0.70501,0.83273,0.71025,0.52527,0.41657,0.78364,0.001882,0.001882,0.001882
- 43,31564.9,0.49989,0.40838,0.78395,0.89995,0.70415,0.83356,0.71117,0.52425,0.41579,0.7835,0.001684,0.001684,0.001684
- 44,32273.4,0.49559,0.40469,0.78208,0.89828,0.70562,0.83433,0.71229,0.52329,0.41452,0.7834,0.001486,0.001486,0.001486
- 45,32980,0.48761,0.39225,0.78104,0.8939,0.70891,0.83485,0.713,0.52299,0.41278,0.78338,0.001288,0.001288,0.001288
- 46,33688.3,0.48092,0.38426,0.78037,0.8995,0.70576,0.83571,0.7137,0.5221,0.41114,0.78326,0.00109,0.00109,0.00109
- 47,34394.5,0.47694,0.37549,0.78113,0.90104,0.70542,0.83612,0.71477,0.52166,0.41024,0.78314,0.000892,0.000892,0.000892
- 48,35101.7,0.47288,0.37223,0.7801,0.89404,0.71028,0.83664,0.71521,0.5213,0.40914,0.78306,0.000694,0.000694,0.000694
- 49,35807.8,0.46925,0.36406,0.78134,0.89688,0.70943,0.83714,0.71604,0.52114,0.40827,0.78293,0.000496,0.000496,0.000496
- 50,36515.7,0.4652,0.36128,0.77997,0.89777,0.7096,0.83747,0.71625,0.52069,0.40803,0.78288,0.000298,0.000298,0.000298
-
复制代码 在目标检测领域,对练习过程中的损失函数展开分析可谓至关重要。这是由于它不但能够反映出模型的学习状况,还能指示出模型性能或许存在的题目。
起首,从练习和验证的损失图当中能够看出,伴随练习进程的不绝推进,train/box_loss、train/cls_loss 以及 train/obj_loss 皆出现出下降的态势,这表明模型在学习的过程里逐渐对练习数据进行拟合,并且在界限框定位、类别分类以及目标检测方面的体现持续改进。相应地,验证损失 val/box_loss、val/cls_loss 和 val/obj_loss 只管颠簸较大,然而总体上也显现出下降的趋势,这意味着模型对未曾见过的数据的泛化能力正在增强。
具体而言,train/box_loss 从接近 0.8 降至约莫 0.3,这无疑是一个极为良好的信号,意味着模型在界限框的定位方面变得越发精准。与此类似,train/cls_loss 和 train/obj_loss 的下降表明分类毛病在淘汰,同时对目标的辨认准确度得到提高。我们盼望验证损失也能够出现出相似的下降趋势,只管中途存在一些颠簸,但整体的下降趋势表明模型的泛化能力在逐步提高,并未出现过拟合的状况。

在性能指标这一方面,metrics/precision、metrics/recall、metrics/mAP50 以及 metrics/mAP50 - 95 的图表展现出了模型性能的稳步上升。准确率(Precision)与召回率(Recall)随着练习周期的增加而不绝增长,这就意味着模型在辨认正样本方面变得更为准确,同时也能够回收更多的正样本。mAP(mean Average Precision)属于目标检测中极为重要的评估指标之一,metrics/mAP50 和 metrics/mAP50 - 95 的提升表明模型针对差别 IoU 阈值的检测性能均在提高。mAP50 是指在 IoU 为 0.5 时的均匀精度,而 mAP50 - 95 则体现在 IoU 从 0.5 到 0.95 差别阈值下的均匀精度,它能够更为全面地反映出模型在各种重叠度下的体现。观察到这些指标的稳步提升,便可以阐明模型在整个练习过程中的体现是在持续优化的。
在机器学习领域当中,F1 分数是一个极为关键的性能指标,它对模型的准确率和召回率进行了综合思量,为我们提供了有关模型分类性能的全面视角。这个指标尤其实用于正负样本分布不均衡的情况,能够助力我们明确模型在检测难以区分的类别时的具体体现。


6 体系实现
6.1架构设计
MainWindow 类的焦点目标是打造一个用户友好的交互式中国TT100K交通标志检测体系。为了告竣这一目标,采用了将界面、媒体处理与模型进行集成的设计理念。通过对象组合的本领,把差别的处理器和模型整合在一起,使得每个功能模块都可以独立运作。与此同时,还运用信号和槽机制来实现模块之间的交互以及数据的传递。
我们的体系设计理念以三层架构作为焦点,分别是处理层、界面层以及控制层。在体系设计过程中,我们将重点置于确保各个组件能够协同运作的同时,保持充实的模块独立性,以便于将来进行维护和升级。
处理层(Processing Layer):通过运用模块化的处理层,我们对 YOLOv11Detector 类所实现的深度学习模型予以封装。如此一来,图像处理与目标检测的复杂性对于其他体系组件而言是不可见的。这种封装不但提升了体系的可靠性,还使得将来替换或升级模型变得更为轻易。
界面层(UI Layer):在界面层方面,我们借助 PyQt5 库构建出一套完整的用户界面,提供了直观的操作按钮、状态标签以及实时的图像显示。该界面不但能够对用户的操作做出相应,还能实时反馈模型的检测结果,进而提高用户的操作便利性与体系的交互性。界面的设计目标在于低落用户的学习曲线,即便是没有技术背景的用户也能够轻松掌握。
控制层(Control Layer):控制层是毗连用户界面与后端处理模块的桥梁。在这一层中,MainWindow 类肩负着相应用户交互、控制视频流处理以及展示模型预测结果的重任。通过信号和槽机制,我们能够将用户的操作转化为体系的相应,比方启动和克制视频流、调解检测设置等。如许的设计不仅提高了体系反应的实时性,还增强了用户的控制感。
6.2 体系流程
当用户启动我们的应用步伐时,体系会起首对 MainWindow 类进行实例化。该类不但负责初始化用户界面,设定窗口巨细以及展示地区,还会准备好后续处理所需的各类参数。用户界面作为与体系交互的重要桥梁,为用户提供了选择视频输入源的机会。输入源的机动性可谓此体系的一大亮点,用户能够选择实时视频流、预录视频文件或者单张图片作为检测的媒介。
一旦输入源被用户选定,体系就会开始调用内置的媒体处理器来进行数据的读取与处理。这个过程涵盖了摄像头的实时捕获设置、视频文件的解码读取以及图像数据的加载至内存等环节。这些环节均是自动进行的,无需用户进行手动配置,充实彰显了智能化的设计理念。
接下来,体系将进入连续的处理循环,持续对实时获取的帧数据进行分析。在预处理阶段,体系会通过一系列的图像处理技术,比方缩放、色彩转换等,让每帧图像符合 YOLOv11 模型的输入标准。这一步调对于提升模型的辨认效率与准确度起着至关重要的作用。
紧接着,经过预处理的图像会被送入经过练习的 YOLOv11 模型进行实时检测。模型能够快速地在图像中定位中国TT100K交通标志,并对它们进行分类,其结果将用于后续的界面更新。我们的体系设计答应在用户界面上实时显示检测框,标注目标类别,并在界面上实时展示检测的统计数据。这种即时的反馈为用户提供了清楚的视觉指引,有助于他们相识当前环境的安全状况。
6.3 代码实现
在当代计算机视觉领域中,把深度学习模型应用于实时图像处理任务已然成为一项关键技术。在本博客里,我们会详细阐述如何运用 YOLOv11 算法,并联合 PyQt5 来创建一个实时目标检测体系。这个体系能够在视频流中辨认并标注特定对象,比如 TT100K交通标志检测。
(1)引入必要的库:
起首,体系的构建从导入必要的 Python 模块开始。sys 模块是 Python 内置的模块,它提供了诸多与 Python 表明器精密相关的功能。比方,sys.argv 可用于获取下令行参数,这在启动应用步伐时非常重要。time 模块答应我们获取当前时间,这对于性能评估以及监控推理时间起着至关重要的作用。OpenCV 库(cv2)是图像处理的焦点,它提供了一系列强盛的功能来捕捉和处理图像数据。
- import cv2
- import numpy as np
- from PyQt5.QtCore import QTimer, Qt, pyqtSignal, QThread
- from PyQt5.QtGui import QImage, QPixmap, QPalette
- from PyQt5.QtWidgets import QMainWindow, QFileDialog, QDesktopWidget
- from ui_mainwindow import Ui_MainWindow
- from utils import image_read_from_chinese_path
- from ultralytics import YOLO
复制代码 (2)设置主窗口:
构建用户界面(UI)是实现体系的关键一步。我们借助 PyQt5 库构建了图形用户界面。QMainWindow 作为我们窗口的基类,为展示处理后的图像提供了一个画布。
- class MyMainWindow(QMainWindow):
- def __init__(self, parent=None):
- # 调用父类构造函数,创建窗体
- super().__init__(parent)
- # 创建UI对象
- self.ui = Ui_MainWindow()
- # 构造UI界面
- self.ui.setupUi(self)
- self.set_centre()
- self.image_file_path = None
复制代码 (3)初始化模型
- self.model = YOLO('./weights/best.pt')
复制代码 (4)界面信号槽绑定
- self.ui.comboBox_source.currentIndexChanged.connect(self.comboBox_source_slot)
- self.ui.toolButton_fileOpen.clicked.connect(self.toolButton_fileOpen_slot)
- self.ui.pushButton_infer.clicked.connect(self.pushButton_infer_slot)
- self.ui.pushButton_infer_stop.clicked.connect(self.pushButton_infer_stop_slot)
- self.ui.doubleSpinBox_conf.valueChanged.connect(self.doubleSpinBox_conf_slot)
- self.ui.horizontalSlider_conf.valueChanged.connect(self.horizontalSlider_conf_slot)
- self.ui.doubleSpinBox_iou.valueChanged.connect(self.doubleSpinBox_iou_slot)
- self.ui.horizontalSlider_iou.valueChanged.connect(self.horizontalSlider_iou_slot)
复制代码 (5)图像显示
- @staticmethod
- def show_image(img_src, label):
- try:
- # img_src = cv2.resize(img_src, None, fx=0.5, fy=0.5)
- ih, iw, _ = img_src.shape
- w = label.geometry().width()
- h = label.geometry().height()
- # 保持纵横比
- # 找出长边
- if iw > ih:
- scal = w / iw
- nw = w
- nh = int(scal * ih)
- img_src_ = cv2.resize(img_src, (nw, nh))
- else:
- scal = h / ih
- nw = int(scal * iw)
- nh = h
- img_src_ = cv2.resize(img_src, (nw, nh))
- frame = cv2.cvtColor(img_src_, cv2.COLOR_BGR2RGB)
- img = QImage(frame.data, frame.shape[1], frame.shape[0], frame.shape[2] * frame.shape[1],
- QImage.Format_RGB888)
- label.setPixmap(QPixmap.fromImage(img))
- except Exception as e:
- print(repr(e))
复制代码 安装与资源阐明
离线安装配置文件阐明
总结与展望
在本博客当中,我们对一个基于 YOLOv11 模型的实时TT100K交通标志检测体系进行了详细的介绍。该体系采用模块化的设计方式,充实运用了合理的架构设计,从而具备良好的可维护性与可扩展性。它的用户界面十分友好,能够实时展示TT100K交通标志检测和辨认的结果。
此体系支持摄像头、视频、图像以及批量文件等多种输入源,能够满足用户在差别场景下的需求。后续可以添加更多的预练习模型,以增加检测和辨认的种类;对用户界面进行优化,增强个性化设置;并且积极倾听用户反馈,盼望不绝改进体系,从而更好地满足用户的需求。
竣事语
由于博主能力有限,博文中提及的方法即使经过试验,也难免会有疏漏之处。希望您能热心指出此中的错误,以便下次修改时能以一个更完美更严谨的样子,出现在大家面前。同时如果有更好的实现方法也请您不吝见教。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |