IT评测·应用市场-qidao123.com

标题: 深度学习实战TT100K中国交通标志辨认 [打印本页]

作者: 用多少眼泪才能让你相信    时间: 2024-12-31 05:03
标题: 深度学习实战TT100K中国交通标志辨认

  本文采用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在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块,提升了计算效率。
  1. class C3k2(C2f):
  2.     """Faster Implementation of CSP Bottleneck with 2 convolutions."""
  3.     def __init__(self, c1, c2, n=1, c3k=False, e=0.5, g=1, shortcut=True):
  4.         """Initializes the C3k2 module, a faster CSP Bottleneck with 2 convolutions and optional C3k blocks."""
  5.         super().__init__(c1, c2, n, shortcut, g, e)
  6.         self.m = nn.ModuleList(
  7.             C3k(self.c, self.c, 2, shortcut, g) if c3k else Bottleneck(self.c, self.c, shortcut, g) for _ in range(n)
  8.         )
复制代码
  颈部结构:在颈部引入了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环境

  1. conda create -n yolov11 python=3.8
  2. conda activate yolov11
  3. pip install ultralytics
复制代码
5.4 构建TT100K交通标志检测模型

  TT100K交通标志检测体系,分别为
  1. names: ['head', 'helmet']
复制代码
  TT100K交通标志数据集练习集一共15,887左右,验证集4,641张,标注格式采用yolo格式组织
  1.         images
  2.                 train
  3.                         image1.jpg
  4.                         image2.jpg
  5.                         ...
  6.                 val
  7.                         image11.jpg
  8.                         image22.jpg
  9.                         ...
  10.         labels
  11.                 train
  12.                         image1.txt
  13.                         image2.txt
  14.                         ...
  15.                 val
  16.                         image11.txt
  17.                         image22.txt
  18.                         ...
复制代码
  我们开启练习之旅的第一步是导入一系列不可或缺的模块,此中涵盖了 os 模块,它如同一把万能钥匙,为我们处理各种文件路径相关的操作提供了便利;torch 模块恰似一台强盛的引擎,助力我们高效地实行各类数值计算任务;yaml 模块则如同一位精准的翻译官,能够帮助我们轻松剖析配置文件中的各种信息;还有专门的 YOLO 类,它是我们构建模型的关键基石,为实例化模型奠基了基础。
  紧接着,我们着手确定练习过程所依托的计算设备。在这个环节中,我们秉持优先选择的策略,将眼光聚焦于 GPU(cuda:0),由于它具备强盛的并行计算能力,能够极大地加速练习过程。然而,若 GPU(cuda:0)不可用,我们也做好了充实的应对准备,即退而求其次,选择利用 CPU 来继续我们的练习任务。只管 CPU 的计算速度相对较慢,但它依然能够确保练习工作的顺利进行,为我们的研究提供持续的支持。
  1. import os
  2. import torch
  3. import yaml
  4. from ultralytics import YOLO  # 导入YOLO模型
  5. device = "cuda:0" if torch.cuda.is_available() else "cpu"
复制代码
  接下来,我们对一些基本的练习参数进行了设定,此中包括工作进程数以及批次巨细。随后,明确了数据集的名称与路径,并且借助 abs_path 函数获取到了配置文件的绝对路径。如许做能够包管在差别的运行环境下路径具有一致性,同时也提升了代码的可移植性。
  1. workers = 1
  2. batch = 8
  3. data_name = "FireSmoke"
  4. data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current')  # 数据集的yaml的绝对路径
  5. unix_style_path = data_path.replace(os.sep, '/')
  6. # 获取目录路径
  7. directory_path = os.path.dirname(unix_style_path)')
复制代码
  在加载数据配置文件之前,必须先读取并剖析 YAML 格式的配置文件。这一环节极为重要,原因在于该配置文件中涵盖了练习过程所需的关键信息,比方类别标签以及数据集路径等等。我们对配置文件中的“path”键值进行修改,以此确保模型能够准确无误地找到练习和验证数据。
  1. # 读取YAML文件,保持原有顺序
  2. with open(data_path, 'r') as file:
  3.     data = yaml.load(file, Loader=yaml.FullLoader)
  4. # 修改path项
  5. if 'path' in data:
  6.     data['path'] = directory_path
  7.     # 将修改后的数据写回YAML文件
  8.     with open(data_path, 'w') as file:
  9.         yaml.safe_dump(data, file, sort_keys=False)
复制代码
  接着,我们加载了预先练习好的 YOLOv11 模型,进而开启了练习进程。YOLO 类的 train 方法采取了众多参数,此中有数据路径、设备、工作进程数、输入图像的尺寸、练习周期以及批次巨细。在此处,name参数为练习任务赋予了标识,便于后续进行追踪与分析。
  1. model = YOLO(abs_path('./weights/yolo11s.pt'), task='detect')  # 加载预训练的YOLOv11模型
  2. results = model.train(  # 开始训练模型
  3.     data=data_path,  # 指定训练数据的配置文件路径
  4.     workers=0,  
  5.     imgsz=640,  # 指定输入图像的大小为640x640
  6.     epochs=100,  # 指定训练100个epoch
  7.     batch=batch,  # 指定每个批次的大小为8
  8.     name='train_v11_' + data_name  # 指定训练任务的名称
  9. )
复制代码
  练习50个epoch输出如下
  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52.    
复制代码
  在目标检测领域,对练习过程中的损失函数展开分析可谓至关重要。这是由于它不但能够反映出模型的学习状况,还能指示出模型性能或许存在的题目。
  起首,从练习和验证的损失图当中能够看出,伴随练习进程的不绝推进,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)是图像处理的焦点,它提供了一系列强盛的功能来捕捉和处理图像数据。
  1. import cv2
  2. import numpy as np
  3. from PyQt5.QtCore import QTimer, Qt, pyqtSignal, QThread
  4. from PyQt5.QtGui import QImage, QPixmap, QPalette
  5. from PyQt5.QtWidgets import QMainWindow, QFileDialog, QDesktopWidget
  6. from ui_mainwindow import Ui_MainWindow
  7. from utils import image_read_from_chinese_path
  8. from ultralytics import YOLO
复制代码
(2)设置主窗口:
  构建用户界面(UI)是实现体系的关键一步。我们借助 PyQt5 库构建了图形用户界面。QMainWindow 作为我们窗口的基类,为展示处理后的图像提供了一个画布。
  1. class MyMainWindow(QMainWindow):
  2.     def __init__(self, parent=None):
  3.         # 调用父类构造函数,创建窗体
  4.         super().__init__(parent)
  5.         # 创建UI对象
  6.         self.ui = Ui_MainWindow()
  7.         # 构造UI界面
  8.         self.ui.setupUi(self)
  9.         self.set_centre()
  10.         self.image_file_path = None
复制代码
(3)初始化模型
  1. self.model = YOLO('./weights/best.pt')     
复制代码
(4)界面信号槽绑定
  1. self.ui.comboBox_source.currentIndexChanged.connect(self.comboBox_source_slot)
  2. self.ui.toolButton_fileOpen.clicked.connect(self.toolButton_fileOpen_slot)
  3. self.ui.pushButton_infer.clicked.connect(self.pushButton_infer_slot)
  4. self.ui.pushButton_infer_stop.clicked.connect(self.pushButton_infer_stop_slot)
  5. self.ui.doubleSpinBox_conf.valueChanged.connect(self.doubleSpinBox_conf_slot)
  6. self.ui.horizontalSlider_conf.valueChanged.connect(self.horizontalSlider_conf_slot)
  7. self.ui.doubleSpinBox_iou.valueChanged.connect(self.doubleSpinBox_iou_slot)
  8. self.ui.horizontalSlider_iou.valueChanged.connect(self.horizontalSlider_iou_slot)
复制代码
(5)图像显示
  1. @staticmethod
  2. def show_image(img_src, label):
  3.     try:
  4.         # img_src = cv2.resize(img_src, None, fx=0.5, fy=0.5)
  5.         ih, iw, _ = img_src.shape
  6.         w = label.geometry().width()
  7.         h = label.geometry().height()
  8.         # 保持纵横比
  9.         # 找出长边
  10.         if iw > ih:
  11.             scal = w / iw
  12.             nw = w
  13.             nh = int(scal * ih)
  14.             img_src_ = cv2.resize(img_src, (nw, nh))
  15.         else:
  16.             scal = h / ih
  17.             nw = int(scal * iw)
  18.             nh = h
  19.             img_src_ = cv2.resize(img_src, (nw, nh))
  20.         frame = cv2.cvtColor(img_src_, cv2.COLOR_BGR2RGB)
  21.         img = QImage(frame.data, frame.shape[1], frame.shape[0], frame.shape[2] * frame.shape[1],
  22.                      QImage.Format_RGB888)
  23.         label.setPixmap(QPixmap.fromImage(img))
  24.     except Exception as e:
  25.         print(repr(e))
复制代码
安装与资源阐明

离线安装配置文件阐明

总结与展望

  在本博客当中,我们对一个基于 YOLOv11 模型的实时TT100K交通标志检测体系进行了详细的介绍。该体系采用模块化的设计方式,充实运用了合理的架构设计,从而具备良好的可维护性与可扩展性。它的用户界面十分友好,能够实时展示TT100K交通标志检测和辨认的结果。
  此体系支持摄像头、视频、图像以及批量文件等多种输入源,能够满足用户在差别场景下的需求。后续可以添加更多的预练习模型,以增加检测和辨认的种类;对用户界面进行优化,增强个性化设置;并且积极倾听用户反馈,盼望不绝改进体系,从而更好地满足用户的需求。
竣事语

   由于博主能力有限,博文中提及的方法即使经过试验,也难免会有疏漏之处。希望您能热心指出此中的错误,以便下次修改时能以一个更完美更严谨的样子,出现在大家面前。同时如果有更好的实现方法也请您不吝见教。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4