2026/6/20 4:49:56
网站建设
项目流程
在喵窝网站怎么做图,从哪些方面建设网站,引流推广多少钱一个,通过wordpress建站前言
本文介绍了ParNet注意力机制及其在YOLO26中的应用。ParNet注意力通过并行子网络结构#xff0c;将网络层组织成多个子网络并行处理输入特征#xff0c;降低了传统注意力机制在处理长序列时的计算复杂度。该机制采用VGG风格的块和特征融合策略#xff0c;具有低深度高性…前言本文介绍了ParNet注意力机制及其在YOLO26中的应用。ParNet注意力通过并行子网络结构将网络层组织成多个子网络并行处理输入特征降低了传统注意力机制在处理长序列时的计算复杂度。该机制采用VGG风格的块和特征融合策略具有低深度高性能、参数效率高、可扩展性强和并行化能力好等创新点。我们将ParNet注意力引入YOLO26在检测头部分应用该机制。通过实验训练改进后的模型有望提升YOLO26在目标检测任务中的性能。文章目录 YOLO26改进大全卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总专栏链接: YOLO26改进专栏文章目录前言介绍摘要文章链接基本原理技术原理创新点参考代码YOLO26引入代码tasks.py 注册步骤1:步骤2配置yolo26-ParNetAttention.yaml实验脚本结果介绍摘要深度是深度神经网络的核心特征然而网络深度的增加往往伴随着顺序计算量的上升和延迟时间的增长。这引发了一个关键性问题是否能够构建出具有高性能的非深度神经网络本文证实了这一可能性。为实现此目标我们采用了并行子网络架构而非传统的层级堆叠方式从而在维持高性能的同时显著降低了网络深度。通过充分利用并行子结构我们首次展示了深度仅为12的网络能够在ImageNet数据集上实现超过80%的Top-1准确率在CIFAR10上达到96%的准确率在CIFAR100上达到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)YOLO26引入代码在根目录下的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)returnytasks.py 注册在ultralytics/nn/tasks.py中进行如下操作步骤1:fromultralytics.nn.attention.ParNetAttentionimportParNetAttention步骤2修改def parse_model(d, ch, verboseTrue):elif m is ParNetAttention: args [ch[f], *args]配置yolo26-ParNetAttention.yamlultralytics/cfg/models/26/yolo26-ParNetAttention.yaml# Ultralytics AGPL-3.0 License - https://ultralytics.com/license# Ultralytics YOLO26 object detection model with P3/8 - P5/32 outputs# Model docs: https://docs.ultralytics.com/models/yolo26# Task docs: https://docs.ultralytics.com/tasks/detect# Parametersnc:80# number of classesend2end:True# whether to use end-to-end modereg_max:1# DFL binsscales:# model compound scaling constants, i.e. modelyolo26n.yaml will call yolo26.yaml with scale n# [depth, width, max_channels]n:[0.50,0.25,1024]# summary: 260 layers, 2,572,280 parameters, 2,572,280 gradients, 6.1 GFLOPss:[0.50,0.50,1024]# summary: 260 layers, 10,009,784 parameters, 10,009,784 gradients, 22.8 GFLOPsm:[0.50,1.00,512]# summary: 280 layers, 21,896,248 parameters, 21,896,248 gradients, 75.4 GFLOPsl:[1.00,1.00,512]# summary: 392 layers, 26,299,704 parameters, 26,299,704 gradients, 93.8 GFLOPsx:[1.00,1.50,512]# summary: 392 layers, 58,993,368 parameters, 58,993,368 gradients, 209.5 GFLOPs# YOLO26n backbonebackbone:# [from, repeats, module, args]-[-1,1,Conv,[64,3,2]]# 0-P1/2-[-1,1,Conv,[128,3,2]]# 1-P2/4-[-1,2,C3k2,[256,False,0.25]]-[-1,1,Conv,[256,3,2]]# 3-P3/8-[-1,2,C3k2,[512,False,0.25]]-[-1,1,Conv,[512,3,2]]# 5-P4/16-[-1,2,C3k2,[512,True]]-[-1,1,Conv,[1024,3,2]]# 7-P5/32-[-1,2,C3k2,[1024,True]]-[-1,1,SPPF,[1024,5,3,True]]# 9-[-1,2,C2PSA,[1024]]# 10# YOLO26n headhead:-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,6],1,Concat,[1]]# cat backbone P4-[-1,2,C3k2,[512,True]]# 13-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,4],1,Concat,[1]]# cat backbone P3-[-1,2,C3k2,[256,True]]# 16 (P3/8-small)-[-1,1,Conv,[256,3,2]]-[[-1,13],1,Concat,[1]]# cat head P4-[-1,2,C3k2,[512,True]]# 19 (P4/16-medium)-[-1,1,Conv,[512,3,2]]-[[-1,10],1,Concat,[1]]# cat head P5-[-1,1,C3k2,[1024,True,0.5,True]]# 22 (P5/32-large)-[[16,19,22],1,Detect,[nc]]# Detect(P3, P4, P5)# Ultralytics AGPL-3.0 License - https://ultralytics.com/license# Ultralytics YOLO26 object detection model with P3/8 - P5/32 outputs# Model docs: https://docs.ultralytics.com/models/yolo26# Task docs: https://docs.ultralytics.com/tasks/detect# Parametersnc:80# number of classesend2end:True# whether to use end-to-end modereg_max:1# DFL binsscales:# model compound scaling constants, i.e. modelyolo26n.yaml will call yolo26.yaml with scale n# [depth, width, max_channels]n:[0.50,0.25,1024]# summary: 260 layers, 2,572,280 parameters, 2,572,280 gradients, 6.1 GFLOPss:[0.50,0.50,1024]# summary: 260 layers, 10,009,784 parameters, 10,009,784 gradients, 22.8 GFLOPsm:[0.50,1.00,512]# summary: 280 layers, 21,896,248 parameters, 21,896,248 gradients, 75.4 GFLOPsl:[1.00,1.00,512]# summary: 392 layers, 26,299,704 parameters, 26,299,704 gradients, 93.8 GFLOPsx:[1.00,1.50,512]# summary: 392 layers, 58,993,368 parameters, 58,993,368 gradients, 209.5 GFLOPs# YOLO26n backbonebackbone:# [from, repeats, module, args]-[-1,1,Conv,[64,3,2]]# 0-P1/2-[-1,1,Conv,[128,3,2]]# 1-P2/4-[-1,2,C3k2,[256,False,0.25]]-[-1,1,Conv,[256,3,2]]# 3-P3/8-[-1,2,C3k2,[512,False,0.25]]-[-1,1,Conv,[512,3,2]]# 5-P4/16-[-1,2,C3k2,[512,True]]-[-1,1,Conv,[1024,3,2]]# 7-P5/32-[-1,2,C3k2,[1024,True]]-[-1,1,SPPF,[1024,5,3,True]]# 9-[-1,2,C2PSA,[1024]]# 10# YOLO26n headhead:-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,6],1,Concat,[1]]# cat backbone P4-[-1,2,C3k2,[512,True]]# 13-[-1,1,nn.Upsample,[None,2,nearest]]-[[-1,4],1,Concat,[1]]# cat backbone P3-[-1,2,C3k2,[256,True]]# 16 (P3/8-small)-[-1,1,ParNetAttention,[]]#17-[-1,1,Conv,[256,3,2]]-[[-1,13],1,Concat,[1]]# cat head P4-[-1,2,C3k2,[512,True]]# 19 (P4/16-medium)-[-1,1,ParNetAttention,[]]# 21-[-1,1,Conv,[512,3,2]]-[[-1,10],1,Concat,[1]]# cat head P5-[-1,1,C3k2,[1024,True,0.5,True]]# 22 (P5/32-large)-[-1,1,ParNetAttention,[]]# 25-[[17,21,25],1,Detect,[nc]]# Detect(P3, P4, P5)# Ultralytics AGPL-3.0 License - https://ultralytics.com/license # Ultralytics YOLO26 object detection model with P3/8 - P5/32 outputs # Model docs: https://docs.ultralytics.com/models/yolo26 # Task docs: https://docs.ultralytics.com/tasks/detect # Parameters nc: 80 # number of classes end2end: True # whether to use end-to-end mode reg_max: 1 # DFL bins scales: # model compound scaling constants, i.e. modelyolo26n.yaml will call yolo26.yaml with scale n # [depth, width, max_channels] n: [0.50, 0.25, 1024] # summary: 260 layers, 2,572,280 parameters, 2,572,280 gradients, 6.1 GFLOPs s: [0.50, 0.50, 1024] # summary: 260 layers, 10,009,784 parameters, 10,009,784 gradients, 22.8 GFLOPs m: [0.50, 1.00, 512] # summary: 280 layers, 21,896,248 parameters, 21,896,248 gradients, 75.4 GFLOPs l: [1.00, 1.00, 512] # summary: 392 layers, 26,299,704 parameters, 26,299,704 gradients, 93.8 GFLOPs x: [1.00, 1.50, 512] # summary: 392 layers, 58,993,368 parameters, 58,993,368 gradients, 209.5 GFLOPs # YOLO26n backbone backbone: # [from, repeats, module, args] - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2 - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4 - [-1, 2, C3k2, [256, False, 0.25]] - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8 - [-1, 2, C3k2, [512, False, 0.25]] - [-1, 1, Conv, [512, 3, 2]] # 5-P4/16 - [-1, 2, C3k2, [512, True]] - [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32 - [-1, 2, C3k2, [1024, True]] - [-1, 1, ParNetAttention, []] - [-1, 1, SPPF, [1024, 5, 3, True]] # 9 - [-1, 2, C2PSA, [1024]] # 10 # YOLO26n head head: - [-1, 1, nn.Upsample, [None, 2, nearest]] - [[-1, 6], 1, Concat, [1]] # cat backbone P4 - [-1, 2, C3k2, [512, True]] # 13 - [-1, 1, nn.Upsample, [None, 2, nearest]] - [[-1, 4], 1, Concat, [1]] # cat backbone P3 - [-1, 2, C3k2, [256, True]] # 16 (P3/8-small) - [-1, 1, Conv, [256, 3, 2]] - [[-1, 13], 1, Concat, [1]] # cat head P4 - [-1, 2, C3k2, [512, True]] # 19 (P4/16-medium) - [-1, 1, Conv, [512, 3, 2]] - [[-1, 10], 1, Concat, [1]] # cat head P5 - [-1, 1, C3k2, [1024, True, 0.5, True]] # 22 (P5/32-large) - [[17, 20, 23], 1, Detect, [nc]] # Detect(P3, P4, P5)实验脚本importwarnings warnings.filterwarnings(ignore)fromultralyticsimportYOLOif__name____main__:# 修改为自己的配置文件地址modelYOLO(./ultralytics/cfg/models/26/yolo26-ParNetAttention.yaml)# 修改为自己的数据集地址model.train(data./ultralytics/cfg/datasets/coco8.yaml,cacheFalse,imgsz640,epochs10,single_clsFalse,# 是否是单类别检测batch8,close_mosaic10,workers0,optimizerMuSGD,# optimizerSGD,ampFalse,projectruns/train,nameyolo26-ParNetAttention,)结果