YOLOv5:修改backbone为GCNET

张开发
2026/4/4 10:06:50 15 分钟阅读
YOLOv5:修改backbone为GCNET
YOLOv5修改backbone为GCNET前言前提条件相关介绍GCNETYOLOv5修改backbone为GCNET修改common.py修改yolo.py修改yolov5.yaml配置参考前言记录在YOLOv5修改backbone操作方便自己查阅。由于本人水平有限难免出现错漏敬请批评改正。更多精彩内容可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏、人工智能混合编程实践专栏或我的个人主页查看YOLOs-CPP一个免费开源的YOLO全系列C推理库以YOLO26为例PaddleOCRWin10上安装使用PPOCRLabel标注工具目标检测使用自己的数据集微调DEIMv2进行物体检测图像分割PyTorch从零开始实现SegFormer语义分割图像超分使用自己的数据集微调Real-ESRGAN-x4plus进行超分重建图像生成PyTorch从零开始实现一个简单的扩散模型Stable Diffusion使用自己的数据集微调 Stable Diffusion 3.5 LoRA 文生图模型图像超分使用自己的数据集微调Real-ESRGAN-x2plus进行超分重建Anomalib使用Anomalib 2.1.0训练自己的数据集进行异常检测Anomalib在Linux服务器上安装使用Anomalib 2.1.0人工智能混合编程实践C调用封装好的DLL进行异常检测推理人工智能混合编程实践C调用封装好的DLL进行FP16图像超分重建v3.0隔离系统Python源码编译3.11.8到自定义目录含PGO性能优化在线机的Python环境迁移到离线机上Nuitka 将 Python 脚本封装为 .pyd 或 .so 文件Ultralytics使用 YOLO11 进行速度估计Ultralytics使用 YOLO11 进行物体追踪Ultralytics使用 YOLO11 进行物体计数Ultralytics使用 YOLO11 进行目标打码人工智能混合编程实践C调用Python ONNX进行YOLOv8推理人工智能混合编程实践C调用封装好的DLL进行YOLOv8实例分割人工智能混合编程实践C调用Python ONNX进行图像超分重建人工智能混合编程实践C调用Python AgentOCR进行文本识别通过计算实例简单地理解PatchCore异常检测Python将YOLO格式实例分割数据集转换为COCO格式实例分割数据集YOLOv8 Ultralytics使用Ultralytics框架训练RT-DETR实时目标检测模型基于DETR的人脸伪装检测YOLOv7训练自己的数据集口罩检测YOLOv8训练自己的数据集足球检测YOLOv5TensorRT加速YOLOv5模型推理YOLOv5IoU、GIoU、DIoU、CIoU、EIoU玩转Jetson Nano五TensorRT加速YOLOv5目标检测YOLOv5添加SE、CBAM、CoordAtt、ECA注意力机制YOLOv5yolov5s.yaml配置文件解读、增加小目标检测层Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集YOLOv5使用7.0版本训练自己的实例分割模型车辆、行人、路标、车道线等实例分割使用Kaggle GPU资源免费体验Stable Diffusion开源项目Stable Diffusion在服务器上部署使用Stable Diffusion WebUI进行AI绘图v2.0Stable Diffusion使用自己的数据集微调训练LoRA模型v2.0前提条件熟悉Python相关介绍Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell)随着版本的不断更新和语言新功能的添加越多被用于独立的、大型项目的开发。PyTorch 是一个深度学习框架封装好了很多网络和深度学习相关的工具方便我们调用而不用我们一个个去单独写了。它分为 CPU 和 GPU 版本其他框架还有 TensorFlow、Caffe 等。PyTorch 是由 Facebook 人工智能研究院FAIR基于 Torch 推出的它是一个基于 Python 的可续计算包提供两个高级功能1、具有强大的 GPU 加速的张量计算如 NumPy2、构建深度神经网络时的自动微分机制。YOLOv5是一种单阶段目标检测算法该算法在YOLOv4的基础上添加了一些新的改进思路使其速度与精度都得到了极大的性能提升。它是一个在COCO数据集上预训练的物体检测架构和模型系列代表了Ultralytics对未来视觉AI方法的开源研究其中包含了经过数千小时的研究和开发而形成的经验教训和最佳实践。GCNETGCNET论文地址https://arxiv.org/abs/2201.03545官方源代码地址https://github.com/facebookresearch/ConvNeXt.git有兴趣可查阅论文和官方源代码地址。YOLOv5修改backbone为GCNET修改common.py将以下代码添加进common.py。############## CB2D ##############defconstant_init(module,val,bias0):ifhasattr(module,weight)andmodule.weightisnotNone:nn.init.constant_(module.weight,val)ifhasattr(module,bias)andmodule.biasisnotNone:nn.init.constant_(module.bias,bias)defkaiming_init(module,a0,modefan_out,nonlinearityrelu,bias0,distributionnormal):assertdistributionin[uniform,normal]ifhasattr(module,weight)andmodule.weightisnotNone:ifdistributionuniform:nn.init.kaiming_uniform_(module.weight,aa,modemode,nonlinearitynonlinearity)else:nn.init.kaiming_normal_(module.weight,aa,modemode,nonlinearitynonlinearity)ifhasattr(module,bias)andmodule.biasisnotNone:nn.init.constant_(module.bias,bias)deflast_zero_init(m):ifisinstance(m,nn.Sequential):constant_init(m[-1],val0)m[-1].initedTrueelse:constant_init(m,val0)m.initedTrueclassCB2d(nn.Module):def__init__(self,inplanes,poolatt,fusions[channel_add,channel_mul]):super(CB2d,self).__init__()assertpoolin[avg,att]assertall([fin[channel_add,channel_mul]forfinfusions])assertlen(fusions)0,at least one fusion should be usedself.inplanesinplanes self.planesinplanes//4self.poolpool self.fusionsfusionsifattinpool:self.conv_masknn.Conv2d(inplanes,1,kernel_size1)self.softmaxnn.Softmax(dim2)else:self.avg_poolnn.AdaptiveAvgPool2d(1)ifchannel_addinfusions:self.channel_add_convnn.Sequential(nn.Conv2d(self.inplanes,self.planes,kernel_size1),nn.LayerNorm([self.planes,1,1]),nn.ReLU(inplaceTrue),nn.Conv2d(self.planes,self.inplanes,kernel_size1))else:self.channel_add_convNoneifchannel_mulinfusions:self.channel_mul_convnn.Sequential(nn.Conv2d(self.inplanes,self.planes,kernel_size1),nn.LayerNorm([self.planes,1,1]),nn.ReLU(inplaceTrue),nn.Conv2d(self.planes,self.inplanes,kernel_size1))else:self.channel_mul_convNoneself.reset_parameters()defreset_parameters(self):ifself.poolatt:kaiming_init(self.conv_mask,modefan_in)self.conv_mask.initedTrueifself.channel_add_convisnotNone:last_zero_init(self.channel_add_conv)ifself.channel_mul_convisnotNone:last_zero_init(self.channel_mul_conv)defspatial_pool(self,x):batch,channel,height,widthx.size()ifself.poolatt:# iscyyinput_xx input_xinput_x.view(batch,channel,height*width)input_xinput_x.unsqueeze(1)context_maskself.conv_mask(x)context_maskcontext_mask.view(batch,1,height*width)context_maskself.softmax(context_mask)context_maskcontext_mask.unsqueeze(3)contexttorch.matmul(input_x,context_mask)contextcontext.view(batch,channel,1,1)else:contextself.avg_pool(x)returncontextdefforward(self,x):contextself.spatial_pool(x)ifself.channel_mul_convisnotNone:channel_mul_termtorch.sigmoid(self.channel_mul_conv(context))outx*channel_mul_termelse:outxifself.channel_add_convisnotNone:channel_add_termself.channel_add_conv(context)outoutchannel_add_termreturnoutclassCB2D(nn.Module):def__init__(self,c1,c2,n1,shortcutTrue,g1,e0.5):# ch_in, ch_out, number, shortcut, groups, expansion #iscyysuper(CB2D,self).__init__()c_int(c2*e)# hidden channelsself.gcCB2d(c1)self.cv1Conv(c1,c_,1,1)self.cv2Conv(c1,c_,1,1)self.cv3Conv(2*c_,c2,1)# actFReLU(c2)self.mnn.Sequential(*[CB2d(c_)for_inrange(n)])#self.m nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e1.0) for _ in range(n)])defforward(self,x):outtorch.cat((self.m(self.cv1(x)),self.cv2(self.gc(x))),dim1)outself.cv3(out)returnout############## CB2D ##############修改yolo.pyelifmin[CB2D]:c1,c2ch[f],args[0]ifc2!no:# if not outputc2make_divisible(c2*gw,8)args[c1,c2,*args[1:]]ifmin[CB2D]:args.insert(2,n)# number of repeatsn1修改yolov5.yaml配置# YOLOv5 by Ultralytics, GPL-3.0 license# Parametersnc:80# number of classesdepth_multiple:0.33# model depth multiplewidth_multiple:0.50# layer channel multipleanchors:-[10,13,16,30,33,23]# P3/8-[30,61,62,45,59,119]# P4/16-[116,90,156,198,373,326]# P5/32# YOLOv5 v6.0 backbonebackbone:# [from, number, module, args][[-1,1,Conv,[64,6,2,2]],# 0-P1/2[-1,1,Conv,[128,3,2]],# 1-P2/4[-1,3,CB2D,[128]],[-1,1,Conv,[256,3,2]],# 3-P3/8[-1,6,CB2D,[256]],[-1,1,Conv,[512,3,2]],# 5-P4/16[-1,9,CB2D,[512]],[-1,1,Conv,[1024,3,2]],# 7-P5/32[-1,3,CB2D,[1024]],[-1,1,SPPF,[1024,5]],# 9]# YOLOv5 v6.0 headhead:[[-1,1,Conv,[512,1,1]],[-1,1,nn.Upsample,[None,2,nearest]],[[-1,6],1,Concat,[1]],# cat backbone P4[-1,3,C3,[512,False]],# 13[-1,1,Conv,[256,1,1]],[-1,1,nn.Upsample,[None,2,nearest]],[[-1,4],1,Concat,[1]],# cat backbone P3[-1,3,C3,[256,False]],# 17 (P3/8-small)[-1,1,Conv,[256,3,2]],[[-1,14],1,Concat,[1]],# cat head P4[-1,3,C3,[512,False]],# 20 (P4/16-medium)[-1,1,Conv,[512,3,2]],[[-1,10],1,Concat,[1]],# cat head P5[-1,3,C3,[1024,False]],# 23 (P5/32-large)[[17,20,23],1,Detect,[nc,anchors]],# Detect(P3, P4, P5)]参考[1] Zhuang Liu, Hanzi Mao, Chao-Yuan Wu, Christoph Feichtenhofer, Trevor Darrell, Saining Xie. A ConvNet for the 2020s. 2022[2] https://github.com/facebookresearch/ConvNeXt.git[3] https://github.com/ultralytics/yolov5.git[4] https://zhuanlan.zhihu.com/p/594051612由于本人水平有限难免出现错漏敬请批评改正。更多精彩内容可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏、人工智能混合编程实践专栏或我的个人主页查看YOLOs-CPP一个免费开源的YOLO全系列C推理库以YOLO26为例PaddleOCRWin10上安装使用PPOCRLabel标注工具目标检测使用自己的数据集微调DEIMv2进行物体检测图像分割PyTorch从零开始实现SegFormer语义分割图像超分使用自己的数据集微调Real-ESRGAN-x4plus进行超分重建图像生成PyTorch从零开始实现一个简单的扩散模型Stable Diffusion使用自己的数据集微调 Stable Diffusion 3.5 LoRA 文生图模型图像超分使用自己的数据集微调Real-ESRGAN-x2plus进行超分重建Anomalib使用Anomalib 2.1.0训练自己的数据集进行异常检测Anomalib在Linux服务器上安装使用Anomalib 2.1.0人工智能混合编程实践C调用封装好的DLL进行异常检测推理人工智能混合编程实践C调用封装好的DLL进行FP16图像超分重建v3.0隔离系统Python源码编译3.11.8到自定义目录含PGO性能优化在线机的Python环境迁移到离线机上Nuitka 将 Python 脚本封装为 .pyd 或 .so 文件Ultralytics使用 YOLO11 进行速度估计Ultralytics使用 YOLO11 进行物体追踪Ultralytics使用 YOLO11 进行物体计数Ultralytics使用 YOLO11 进行目标打码人工智能混合编程实践C调用Python ONNX进行YOLOv8推理人工智能混合编程实践C调用封装好的DLL进行YOLOv8实例分割人工智能混合编程实践C调用Python ONNX进行图像超分重建人工智能混合编程实践C调用Python AgentOCR进行文本识别通过计算实例简单地理解PatchCore异常检测Python将YOLO格式实例分割数据集转换为COCO格式实例分割数据集YOLOv8 Ultralytics使用Ultralytics框架训练RT-DETR实时目标检测模型基于DETR的人脸伪装检测YOLOv7训练自己的数据集口罩检测YOLOv8训练自己的数据集足球检测YOLOv5TensorRT加速YOLOv5模型推理YOLOv5IoU、GIoU、DIoU、CIoU、EIoU玩转Jetson Nano五TensorRT加速YOLOv5目标检测YOLOv5添加SE、CBAM、CoordAtt、ECA注意力机制YOLOv5yolov5s.yaml配置文件解读、增加小目标检测层Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集YOLOv5使用7.0版本训练自己的实例分割模型车辆、行人、路标、车道线等实例分割使用Kaggle GPU资源免费体验Stable Diffusion开源项目Stable Diffusion在服务器上部署使用Stable Diffusion WebUI进行AI绘图v2.0Stable Diffusion使用自己的数据集微调训练LoRA模型v2.0

更多文章