2026/2/27 9:04:16
网站建设
项目流程
公司做网站怎么构思,宣传信息网网站规划书,购物帮做特惠的导购网站,鹤山网站建设易搜互联前言
本文介绍了一种用于构建轻量级深度神经网络的双卷积核#xff08;DualConv#xff09;方法及其在YOLO26中的结合。DualConv结合333 \times 333和111 \times 111卷积核同时处理输入特征图通道#xff0c;利用组卷积技术排列卷积滤波器。333 \times 333卷积核提取细粒度…前言本文介绍了一种用于构建轻量级深度神经网络的双卷积核DualConv方法及其在YOLO26中的结合。DualConv结合3 × 3 3 \times 33×3和1 × 1 1 \times 11×1卷积核同时处理输入特征图通道利用组卷积技术排列卷积滤波器。3 × 3 3 \times 33×3卷积核提取细粒度特征1 × 1 1 \times 11×1卷积核压缩参数组卷积减少计算量。该方法可应用于多种CNN模型。我们将DualConv集成进YOLO26实验表明它显著减少了计算成本和参数数量提升了YOLO-V3检测速度和准确性在部分数据集上还提高了分类准确率。文章目录 YOLO26改进大全卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总专栏链接: YOLO26改进专栏文章目录前言介绍摘要文章链接基本原理双重卷积核结构 组卷积技术 核心代码YOLO26引入代码tasks注册步骤1:步骤2配置yolo26-DualConv.yaml实验脚本结果介绍摘要CNN架构通常对内存和计算资源的要求较高这使得它们在硬件资源有限的嵌入式系统中难以实现。我们提出了一种用于构建轻量级深度神经网络的双卷积核DualConv方法。DualConv结合了3 × 3 3 \times 33×3和1 × 1 1 \times 11×1的卷积核同时处理相同的输入特征图通道并利用组卷积技术高效地排列卷积滤波器。DualConv可以应用于任何CNN模型例如用于图像分类的VGG-16和ResNet-50用于目标检测的YOLO和R-CNN或用于语义分割的FCN。在本文中我们广泛测试了DualConv在分类任务中的表现因为这些网络架构构成了许多其他任务的骨干。我们还测试了DualConv在YOLO-V3上的图像检测性能。实验结果表明结合我们的结构创新DualConv显著减少了深度神经网络的计算成本和参数数量同时在某些情况下令人惊讶地实现了比原始模型稍高的准确性。我们使用DualConv进一步减少了轻量级MobileNetV2的参数数量54%在CIFAR-100数据集上仅下降了0.68%的准确性。当参数数量不是问题时DualConv在相同数据集上将MobileNetV1的准确性提高了4.11%。此外DualConv显著提升了YOLO-V3的目标检测速度并在PASCAL VOC数据集上将其准确性提高了4.4%。文章链接论文地址论文地址代码地址代码地址基本原理DualConv是一种创新的深度神经网络技术旨在构建轻量级的深度神经网络。双重卷积核结构 DualConv结合了3x3和1x1卷积核同时处理相同的输入特征图通道。通过这种结合DualConv能够在保持准确性的同时降低网络的计算成本和参数数量。3x3卷积核的作用3x3卷积核通常用于捕获局部特征和空间信息有助于提取输入特征图的细粒度特征。在双重卷积核结构中3x3卷积核负责处理输入特征图的通道维度从而实现对特征的深度提取和表征。1x1卷积核的作用1x1卷积核通常用于减少特征图的通道数量降低计算成本和参数数量同时有助于特征的融合和压缩。在双重卷积核结构中1x1卷积核与3x3卷积核结合使用可以在保持准确性的同时实现参数的有效压缩和计算的高效性。同时处理的优势双重卷积核结构使得3x3和1x1卷积核能够同时处理相同的输入特征图通道从而加快计算速度提高网络的效率和性能。同时处理不同类型的卷积核有助于网络在不同尺度上捕获特征信息并有效地融合这些信息提高网络的表征能力和泛化能力。参数减少与性能提升双重卷积核结构通过结合3x3和1x1卷积核实现了在轻量级深度神经网络中提高准确性、降低计算成本和参数数量的目标。这种结构的设计使得网络在保持高准确性的同时具有更高的计算效率和更少的参数量适合在资源受限的环境中部署和应用。总的来说双重卷积核结构的技术原理在于充分利用3x3和1x1卷积核的优势同时处理输入特征图通道实现了在深度神经网络中提高效率、准确性和泛化能力的目标。组卷积技术 DualConv利用组卷积技术有效地排列卷积滤波器进一步提高了网络的效率。组卷积将输入特征图分成多个组并对每个组应用卷积操作从而减少了计算量。组卷积技术是一种卷积神经网络中常用的技术分组卷积的概念在传统的卷积操作中所有的输入通道都会与所有的输出通道进行卷积操作。而在组卷积中将输入通道和输出通道分成多个组每个组内的通道之间进行卷积操作最后将各组的输出进行拼接。通过分组卷积可以减少参数数量和计算量提高计算效率尤其适用于深度神经网络中参数较多的情况。技术原理在组卷积中首先将输入特征图分成多个组每个组包含一定数量的通道。对每个组内的通道进行卷积操作得到各自的输出特征图。最后将各组的输出特征图进行拼接得到最终的输出特征图。通过这种方式实现了对输入特征图的分组处理减少了参数数量和计算量同时保持了网络的表征能力。优势减少参数数量组卷积可以将参数分组每个组内共享参数从而减少整体的参数数量。提高计算效率由于参数数量减少计算量也相应减少可以加快网络的训练和推理速度。改善特征表征组卷积可以帮助网络更好地学习特征表示提高网络的泛化能力和性能。应用组卷积技术广泛应用于各种深度神经网络结构中如ShuffleNet等轻量级网络结构中以提高网络的效率和性能。在一些需要减少参数数量和计算量的场景下组卷积技术也可以发挥重要作用如移动端和嵌入式设备上的模型部署等。核心代码importtorch.nnasnnclassDualConv(nn.Module):def__init__(self,in_channels,out_channels,stride,g2): 初始化 DualConv 类。 :param in_channels: 输入通道数 :param out_channels: 输出通道数 :param stride: 卷积步幅 :param g: 用于 DualConv 的分组卷积组数 super(DualConv,self).__init__()# 分组卷积self.gcnn.Conv2d(in_channels,out_channels,kernel_size3,stridestride,padding1,groupsg,biasFalse)# 逐点卷积self.pwcnn.Conv2d(in_channels,out_channels,kernel_size1,stridestride,biasFalse)defforward(self,input_data): 定义 DualConv 如何处理输入图像或输入特征图。 :param input_data: 输入图像或输入特征图 :return: 返回输出特征图 # 同时进行分组卷积和逐点卷积然后将结果相加returnself.gc(input_data)self.pwc(input_data)YOLO26引入代码在根目录下的ultralytics/nn/目录新建一个conv目录然后新建一个以DualConv为文件名的py文件 把代码拷贝进去。importtorch.nnasnnclassDualConv(nn.Module):def__init__(self,in_channels,out_channels,stride,g2): Initialize the DualConv class. :param input_channels: the number of input channels :param output_channels: the number of output channels :param stride: convolution stride :param g: the value of G used in DualConv super(DualConv,self).__init__()# Group Convolutionself.gcnn.Conv2d(in_channels,out_channels,kernel_size3,stridestride,padding1,groupsg,biasFalse)# Pointwise Convolutionself.pwcnn.Conv2d(in_channels,out_channels,kernel_size1,stridestride,biasFalse)defforward(self,input_data): Define how DualConv processes the input images or input feature maps. :param input_data: input images or input feature maps :return: return output feature maps returnself.gc(input_data)self.pwc(input_data)tasks注册在ultralytics/nn/tasks.py中进行如下操作步骤1:fromultralytics.nn.conv.DualConvimportDualConv步骤2修改def parse_model(d, ch, verboseTrue):DualConv配置yolo26-DualConv.yamlultralytics/cfg/models/26/yolo26-DualConv.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,DualConv,[128,2]]# 1-P2/4-[-1,2,C3k2,[256,False,0.25]]-[-1,1,DualConv,[256,2]]# 3-P3/8-[-1,2,C3k2,[512,False,0.25]]-[-1,1,DualConv,[512,2]]# 5-P4/16-[-1,2,C3k2,[512,True]]-[-1,1,DualConv,[1024,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)实验脚本importwarnings warnings.filterwarnings(ignore)fromultralyticsimportYOLOif__name____main__:# 修改为自己的配置文件地址modelYOLO(./ultralytics/cfg/models/26/yolo26-DualConv.yaml)# 修改为自己的数据集地址model.train(data./ultralytics/cfg/datasets/coco8.yaml,cacheFalse,imgsz640,epochs10,single_clsFalse,# 是否是单类别检测batch8,close_mosaic10,workers0,optimizerMuSGD,# optimizerSGD,ampFalse,projectruns/train,nameyolo26-DualConv,)结果