2026/5/21 18:11:32
网站建设
项目流程
昌平电子网站建设,海报制作软件免费版,专业的企业网站制作,电商网站源代码前言
本文提出ParNet注意力机制#xff0c;并将其集成到YOLOv8中。传统深度神经网络计算复杂度高、延迟大#xff0c;而ParNet通过并行子网络设计解决了这些问题。其核心是将网络层并行组织成多个子网络#xff0c;采用VGG风格块进行特征提取#xff0c;后期融合各子网络特…前言本文提出ParNet注意力机制并将其集成到YOLOv8中。传统深度神经网络计算复杂度高、延迟大而ParNet通过并行子网络设计解决了这些问题。其核心是将网络层并行组织成多个子网络采用VGG风格块进行特征提取后期融合各子网络特征。该机制将序列分割成子序列独立计算注意力降低了长序列计算复杂度。我们将ParNetAttention代码集成到YOLOv8中。实验表明改进后的YOLOv8在多个数据集上表现良好验证了非深度网络在保持高性能的同时可减少延迟。文章目录 YOLOv8改进大全卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总专栏链接: YOLOv8改进专栏文章目录前言介绍摘要文章链接基本原理技术原理创新点核心代码引入代码注册步骤1:步骤2配置 yolov8-ParNetAttention.yaml实验脚本结果介绍摘要深度作为深度神经网络的核心特征通常伴随着顺序计算量的增加和推理延迟的上升。本研究探讨了一个关键问题是否能够构建具有高性能的非深度神经网络架构。我们通过理论证明与实践验证确认了这一设想的可行性。具体而言我们采用并行子网络架构替代传统的层级堆叠方式在维持优异性能的同时显著降低了网络深度。基于并行子结构的设计理念我们首次实现了深度仅为12的网络在ImageNet数据集上达到80%以上的Top-1准确率在CIFAR10和CIFAR100数据集上分别获得96%和81%的准确率。此外深度为12的骨干网络在MS-COCO目标检测任务中实现了48%的平均精度AP。我们系统分析了该架构的扩展规律并展示了在不增加网络深度条件下提升性能的有效策略。最后我们提供了概念验证实例证明非深度网络在构建低延迟识别系统中的实际应用价值。相关代码已在https://github.com/imankgoyal/NonDeepNetworks平台开源发布。文章链接论文地址论文地址代码地址代码地址基本原理ParNet注意力是一种用于自然语言处理任务的注意力机制它是由谷歌在2019年提出的。ParNet注意力旨在解决传统注意力机制在处理长序列时的效率问题。传统的注意力机制在计算注意力权重时需要对所有输入序列的位置进行逐一计算这导致了在长序列上的计算复杂度较高。而ParNet注意力通过将序列分割成多个子序列并对每个子序列进行独立的注意力计算从而降低了计算复杂度。技术原理并行子网络结构ParNet的核心设计是将网络层以并行的方式组织成多个子网络或称为流。每个子网络可以独立处理输入特征并在后期阶段将这些特征融合。这种设计使得网络能够同时处理不同分辨率和特征的输入从而提高了计算效率和性能。VGG风格的块ParNet采用了VGG风格的网络块这种结构在特征提取方面表现良好。与ResNet风格的块相比VGG块在训练时更容易收敛尽管其训练难度相对较高。特征融合在网络的后期阶段来自不同子网络的特征会被融合以便进行最终的分类或检测任务。这种特征融合策略使得网络能够综合不同流的信息从而提高了模型的表现。创新点低深度高性能ParNet展示了在仅有12层深度的情况下仍然能够在多个基准测试中实现高于80%的准确率。这一发现挑战了传统深度学习的观念表明深度并不是唯一的性能决定因素。参数效率ParNet在参数数量上与当前最先进的深度网络相当但其深度显著减少。这使得ParNet在计算资源有限的情况下仍能实现良好的性能。可扩展性ParNet的设计允许通过增加宽度、分辨率和分支数量来有效扩展性能而不需要增加网络的深度。这种特性使得ParNet在处理大规模数据集时具有更好的灵活性。并行化能力由于其并行结构ParNet能够在多个处理器上高效并行化尽管存在通信延迟的问题。这为未来的高效识别系统提供了可能性。核心代码https://blog.csdn.net/DM_zx/article/details/132381800importnumpyasnpimporttorchfromtorchimportnnfromtorch.nnimportinitclassParNetAttention(nn.Module):def__init__(self,channel512):super().__init__()self.ssenn.Sequential(nn.AdaptiveAvgPool2d(1),nn.Conv2d(channel,channel,kernel_size1),nn.Sigmoid())self.conv1x1nn.Sequential(nn.Conv2d(channel,channel,kernel_size1),nn.BatchNorm2d(channel))self.conv3x3nn.Sequential(nn.Conv2d(channel,channel,kernel_size3,padding1),nn.BatchNorm2d(channel))self.silunn.SiLU()defforward(self,x):b,c,_,_x.size()x1self.conv1x1(x)x2self.conv3x3(x)x3self.sse(x)*x yself.silu(x1x2x3)returnyif__name____main__:inputtorch.randn(50,512,7,7)pnaParNetAttention(channel512)outputpna(input)print(output.shape)引入代码在根目录下的ultralytics/nn/目录新建一个attention目录然后新建一个以ParNetAttention为文件名的py文件 把代码拷贝进去。importtorchfromtorchimportnnfromtorch.nnimportinitclassParNetAttention(nn.Module):def__init__(self,channel512):super().__init__()self.ssenn.Sequential(nn.AdaptiveAvgPool2d(1),nn.Conv2d(channel,channel,kernel_size1),nn.Sigmoid())self.conv1x1nn.Sequential(nn.Conv2d(channel,channel,kernel_size1),nn.BatchNorm2d(channel))self.conv3x3nn.Sequential(nn.Conv2d(channel,channel,kernel_size3,padding1),nn.BatchNorm2d(channel))self.silunn.SiLU()defforward(self,x):b,c,_,_x.size()x1self.conv1x1(x)x2self.conv3x3(x)x3self.sse(x)*x yself.silu(x1x2x3)returny注册在ultralytics/nn/tasks.py中进行如下操作步骤1:fromultralytics.nn.attention.ParNetAttentionimportParNetAttention步骤2修改def parse_model(d, ch, verboseTrue):elifmin{ParNetAttention}:args[ch[f],*args]配置 yolov8-ParNetAttention.yaml# Ultralytics YOLO , AGPL-3.0 license# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parametersnc:80# number of classesscales:# model compound scaling constants, i.e. modelyolov8n.yaml will call yolov8.yaml with scale n# [depth, width, max_channels]n:[0.33,0.25,1024]# YOLOv8n summary: 225 layers, 3157200 parameters, 3157184 gradients, 8.9 GFLOPss:[0.33,0.50,1024]# YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8 GFLOPsm:[0.67,0.75,768]# YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients, 79.3 GFLOPsl:[1.00,1.00,512]# YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx:[1.00,1.25,512]# YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbonebackbone:# [from, repeats, module, args]-[-1,1,Conv,[64,3,2]]# 0-P1/2-[-1,1,Conv,[128,3,2]]# 1-P2/4-[-1,3,C2f,[128,True]]-[-1,1,Conv,[256,3,2]]# 3-P3/8-[-1,6,C2f,[256,True]]-[-1,1,Conv,[512,3,2]]# 5-P4/16-[-1,6,C2f,[512,True]]-[-1,1,Conv,[1024,3,2]]# 7-P5/32-[-1,3,C2f,[1024,True]]-[-1,1,SPPF,[1024,5]]# 9# YOLOv8.0n headhead:-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,6],1,Concat,[1]]# cat backbone P4-[-1,3,C2f,[512]]# 12-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,4],1,Concat,[1]]# cat backbone P3-[-1,3,C2f,[256]]# 15 (P3/8-small)-[-1,1,ParNetAttention,[]]#17-[-1,1,Conv,[256,3,2]]-[[-1,12],1,Concat,[1]]# cat head P4-[-1,3,C2f,[512]]# 18 (P4/16-medium)-[-1,1,ParNetAttention,[]]# 21-[-1,1,Conv,[512,3,2]]-[[-1,9],1,Concat,[1]]# cat head P5-[-1,3,C2f,[1024]]# 21 (P5/32-large)-[-1,1,ParNetAttention,[]]# 25-[[16,19,22],1,Detect,[nc]]# Detect(P3, P4, P5)实验脚本importosfromultralyticsimportYOLO yamlultralytics/cfg/models/v8/yolov8-ParNetAttention.yamlmodelYOLO(yaml)model.info()if__name____main__:resultsmodel.train(datacoco128.yaml,nameParNetAttention,epochs10,ampFalse,workers8,batch1,devicecpu)结果