当前位置: 首页 > news >正文

YOLOv5:修改backbone为SPPCSPC

YOLOv5:修改backbone为SPPCSPC

  • 前言
  • 前提条件
  • 相关介绍
  • SPPCSPC
    • YOLOv5修改backbone为SPPCSPC
      • 修改common.py
      • 修改yolo.py
      • 修改yolov5.yaml配置
  • 参考

在这里插入图片描述

前言

  • 记录在YOLOv5修改backbone操作,方便自己查阅。
  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入YOLO系列专栏、自然语言处理
    专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

前提条件

  • 熟悉Python

相关介绍

  • Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
  • PyTorch 是一个深度学习框架,封装好了很多网络和深度学习相关的工具方便我们调用,而不用我们一个个去单独写了。它分为 CPU 和 GPU 版本,其他框架还有 TensorFlow、Caffe 等。PyTorch 是由 Facebook 人工智能研究院(FAIR)基于 Torch 推出的,它是一个基于 Python 的可续计算包,提供两个高级功能:1、具有强大的 GPU 加速的张量计算(如 NumPy);2、构建深度神经网络时的自动微分机制。
  • YOLOv5是一种单阶段目标检测算法,该算法在YOLOv4的基础上添加了一些新的改进思路,使其速度与精度都得到了极大的性能提升。它是一个在COCO数据集上预训练的物体检测架构和模型系列,代表了Ultralytics对未来视觉AI方法的开源研究,其中包含了经过数千小时的研究和开发而形成的经验教训和最佳实践。

SPPCSPC

  • SPP(Spatial Pyramid Pooling)模块是何凯大神在2015年的论文《Spatial Pyramid Pooling in Deep Convolution Networks for Visual Recognition》中提出来的.

  • SPP全称为空间金字塔池化结构,主要是为了解决两个问题:

    • 有效避免了对图像区域的裁剪、缩放操作导致的图像失真等问题。
    • 解决了卷积神经网络对图相关重复特征提取的问题,大大提高了产生候选框的速度,且节省了计算成本。

    在这里插入图片描述

  • SPPCSPC是一种卷积神经网络模块,用于提取图像特征。SPPCSPC模块在一串卷积中加入并行的多次MaxPool操作,避免了由于图像处理操作所造成的图像失真等问题,同时解决了卷积神经网络提取到图片重复特征的难题。

  • SPPCSPC模块是YOLOv7中使用的SPP结构,表现优于SPPF,但参数量和计算量提升了很多。
    在这里插入图片描述

YOLOv5修改backbone为SPPCSPC

修改common.py

将以下代码,添加进common.py。

############## SPPCSPC ##############
class SPPCSPC(nn.Module):# CSP https://github.com/WongKinYiu/CrossStagePartialNetworksdef __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5, k=(5, 9, 13)):super(SPPCSPC, self).__init__()c_ = int(2 * c2 * e)  # hidden channelsself.cv1 = Conv(c1, c_, 1, 1)self.cv2 = Conv(c1, c_, 1, 1)self.cv3 = Conv(c_, c_, 3, 1)self.cv4 = Conv(c_, c_, 1, 1)self.m = nn.ModuleList([nn.MaxPool2d(kernel_size=x, stride=1, padding=x // 2) for x in k])self.cv5 = Conv(4 * c_, c_, 1, 1)self.cv6 = Conv(c_, c_, 3, 1)self.cv7 = Conv(2 * c_, c2, 1, 1)def forward(self, x):x1 = self.cv4(self.cv3(self.cv1(x)))y1 = self.cv6(self.cv5(torch.cat([x1] + [m(x1) for m in self.m], 1)))y2 = self.cv2(x)return self.cv7(torch.cat((y1, y2), dim=1))
############## SPPCSPC ##############

修改yolo.py

        if m in [Conv, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF, DWConv, MixConv2d, Focus, CrossConv,BottleneckCSP, C3, C3TR, C3SPP, C3Ghost, SPPCSPC]:c1, c2 = ch[f], args[0]if c2 != no:  # if not outputc2 = make_divisible(c2 * gw, 8)

在这里插入图片描述

修改yolov5.yaml配置

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license# Parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors:- [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 backbone
backbone:# [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, C3, [128]],[-1, 1, Conv, [256, 3, 2]],  # 3-P3/8[-1, 6, C3, [256]],[-1, 1, Conv, [512, 3, 2]],  # 5-P4/16[-1, 9, C3, [512]],[-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32[-1, 3, C3, [1024]],[-1, 1, SPPCSPC, [1024, 5]],  # 9]# YOLOv5 v6.0 head
head:[[-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] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun. Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition. 2015
[2] https://github.com/WongKinYiu/CrossStagePartialNetworks
[3] https://github.com/ultralytics/yolov5.git
[4] https://blog.csdn.net/weixin_38346042/article/details/131796263

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入YOLO系列专栏、自然语言处理
    专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

相关文章:

  • Cross-Entropy Loss(多分类损失函数)
  • Linux-bluetooth蓝牙
  • JAVA安全入门之反射
  • mfc140u.dll丢失怎么修复,mfc140u.dll文件有什么作用
  • Android开发知识学习——Kotlin进阶
  • 科学化决策数据分析,先从量化开始
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • 【Linux】第六站:Centos系统如何安装软件?
  • GCC 编译器 详细总结
  • 刷题笔记day08-字符串01
  • 编译支持GPU的opencv,并供python的import cv2调用
  • 程序员想要网上接单却看花了眼?那这几个平台你可得收藏好了!
  • C++之初始化列表详细剖析
  • 【Algorithm】最容易理解的蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)算法
  • 华纳云:centos系统中怎么查看cpu信息?
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 2017 前端面试准备 - 收藏集 - 掘金
  • conda常用的命令
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • emacs初体验
  • HTML-表单
  • JavaScript新鲜事·第5期
  • nodejs:开发并发布一个nodejs包
  • Node项目之评分系统(二)- 数据库设计
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 回顾 Swift 多平台移植进度 #2
  • 判断客户端类型,Android,iOS,PC
  • 漂亮刷新控件-iOS
  • 算法---两个栈实现一个队列
  • 微信小程序:实现悬浮返回和分享按钮
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • mysql面试题分组并合并列
  • NLPIR智能语义技术让大数据挖掘更简单
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 阿里云重庆大学大数据训练营落地分享
  • 积累各种好的链接
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (2)(2.10) LTM telemetry
  • (3)llvm ir转换过程
  • (day6) 319. 灯泡开关
  • (MATLAB)第五章-矩阵运算
  • (ZT)薛涌:谈贫说富
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net Signalr 使用笔记
  • ::什么意思
  • ??javascript里的变量问题
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @Transactional类内部访问失效原因详解