物体检测-系列教程22:YOLOV5 源码解析12 (BottleneckCSP层、Conv模块、Bottleneck模块)

😎😎😎物体检测-系列教程 总目录

有任何问题欢迎在下面留言
本篇文章的代码运行界面均在Pycharm中进行
本篇文章配套的代码资源已经上传
点我下载源码

16、BottleneckCSP层

16.1 BottleneckCSP类

位置:yolov5/models/common.py/BottleneckCSP类
CSP Bottleneck 项目地址

CSP (Cross Stage Partial) 网络结构中的BottleneckCSP模块,CSPNet是一种有效的卷积神经网络架构,它通过部分连接不同阶段的特征来减少计算成本,同时保持或提高模型的性能,该架构在目标检测等计算机视觉任务中表现优异

class BottleneckCSP(nn.Module):def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):  # ch_in, ch_out, number, shortcut, groups, expansionsuper(BottleneckCSP, self).__init__()c_ = int(c2 * e)  # hidden channelsself.cv1 = Conv(c1, c_, 1, 1)self.cv2 = nn.Conv2d(c1, c_, 1, 1, bias=False)self.cv3 = nn.Conv2d(c_, c_, 1, 1, bias=False)self.cv4 = Conv(2 * c_, c2, 1, 1)self.bn = nn.BatchNorm2d(2 * c_)  # applied to cat(cv2, cv3)self.act = nn.LeakyReLU(0.1, inplace=True)self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)])def forward(self, x):y1 = self.cv3(self.m(self.cv1(x)))y2 = self.cv2(x)return self.cv4(self.act(self.bn(torch.cat((y1, y2), dim=1))))
  1. 继承nn.module
  2. 构造函数,传入6个参数:输入通道c1、输出通道c2、当前模块重复次数n、shortcut残差连接、分组卷积的组数g、扩展比例e(用于计算隐藏层通道数)
  3. 初始化
  4. 计算隐藏层的通道数c_,通过输出通道数c2乘以扩展比例e得到
  5. cv1 ,定义第1个卷积模块,包含二维卷积、批归一化、激活函数,将输入通道数从c1降维到c_,使用1x1卷积核,步长为1
  6. cv2 ,定义第2个卷积模块,和cv1一样,但是没有偏执
  7. cv3,定义第3个卷积模块,和cv2一样
  8. cv4,定义第4个卷积模块,用于将合并后的特征图从2 * c_降维到最终的输出通道数c2,使用1x1卷积核,步长为1
  9. bn,定义批归一化层
  10. act,激活函数为LeakyReLU,斜率为0.1,并使用就地操作以节省内存
  11. m,通过循环构建一个序列模块m,包含n个Bottleneck模块,每个模块的输入和输出通道数相同,都为c_,可以选择使用残差连接,分组数为g,扩展系数固定为1.0
  12. 前向传播,输入图像
  13. y1,经过cv1卷积模块后再经过n个Bottleneck模块,再经过cv3卷积模块
  14. y2,经过cv2卷积模块
  15. 将y1和y2的输出在第二个维度拼接后经过一个批归一化,在经过Leakyrelu激活函数,在经过cv4卷积模块,返回输出

卷积模块中使用的激活函数是LeakyReLU,在Focus模块中使用的是Hardswish
在这里插入图片描述
如图所示,从input然后到concat一共有两条线,左边的就是一个比较短的线,在上面的代码中就是y2,y1就是有多个Bottleneck模块的堆叠再结合一些卷积的线,这实际上就是一个shortcut。

这个BottleneckCSP类通过组合不同的卷积、激活和归一化层,以及巧妙的分割与合并特征图的策略,构建了一个BottleneckCSP模块,这种结构旨在提高模型的计算效率和表现力,常用于深度学习中的图像识别和处理任务中

16.2 Conv类

位置:yolov5/models/common.py/Conv类
这是一个标准的CNN,卷积、批归一化、激活函数,即卷积模块

class Conv(nn.Module):def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True):  # ch_in, ch_out, kernel, stride, padding, groupssuper(Conv, self).__init__()self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, bias=False)self.bn = nn.BatchNorm2d(c2)self.act = nn.LeakyReLU(0.1, inplace=True) if act else nn.Identity()def forward(self, x):return self.act(self.bn(self.conv(x)))def fuseforward(self, x):return self.act(self.conv(x))
  1. 继承自nn.Module
  2. 构造函数,接收7个参数:c1输入通道、c2输出通道、k卷积核大小、s卷积步长、p卷积填充、g分组卷积的组数、act是否激活函数
  3. 定义一个二维卷积层,使用指定的输入输出通道数、卷积核大小、步长、填充和分组。调用autopad函数,根据卷积核大小和提供的填充参数计算自动填充的值
  4. 定义一个批归一化层
  5. 根据act值决定是否使用激活函数。如果act为True,则使用LeakyReLU激活函数,负斜率设置为0.1,并使用inplace=True以减少内存占用
  6. 前向传播
  7. 输入x通过卷积层、批量归一化层、激活函数,并返回结果
  8. 定义一个额外的前向传播函数fuseforward,其他都一样,不经过批量归一化层

16.3 Bottleneck类

位置:yolov5/models/common.py/Bottleneck类
这是一个Standard bottleneck,这种bottleneck结构在深度神经网络中广泛使用,特别是在卷积神经网络中,它可以有效减少参数数量,降低运算复杂度,同时尽可能保持网络性能

class Bottleneck(nn.Module):# def __init__(self, c1, c2, shortcut=True, g=1, e=0.5):  # ch_in, ch_out, shortcut, groups, expansionsuper(Bottleneck, self).__init__()c_ = int(c2 * e)  # hidden channelsself.cv1 = Conv(c1, c_, 1, 1)self.cv2 = Conv(c_, c2, 3, 1, g=g)self.add = shortcut and c1 == c2def forward(self, x):return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x))
  1. 继承nn.module
  2. 构造函数,传入输入通道c1、输出通道c2、是否进行残差连接shortcut、卷积层的分组数g、扩展因子e
  3. 初始化
  4. c_,计算中间层的通道数,这样做可以在不大幅增加计算量的前提下增加网络的宽度
  5. cv1,定义第1个卷积模块,卷积核为1*1,步长为1
  6. cv2,定义第2个卷积模块,将通道数返回至c2,使用3*3卷积核,步长为1,并根据g参数进行分组卷积操作。这样的设计有助于增强网络的表达能力,同时通过分组卷积减少计算量
  7. add,判断是否执行残差连接,根据shortcut的值和c1和c2通道数是否相等来决定是否进行残差连接
  8. 前向传播
  9. 如果add值为true:输入数据经过cv1后再经过cv2后直接进行残差连接,返回输出;如果为False:则不进行残差连接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/518257.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:顺序表的奥秘

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生🐻‍❄个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE🐼本文由GOTXX原创,首发CSDN&a…

Golang搭建grpc环境

简介 OS : Windows 11 Golang 版本: go1.22.0 grpc : 1.2 protobuffer: 1.28代理 没有代理国内环境下载不了库七牛CDN (试过可用) go env -w GOPROXYhttps://goproxy.cn,direct阿里云代理(运行grpc时下载包出现报错 ): go env -w GOPROXYhttps://mirr…

el-table 表格多选, 批量删除功能

一、基础的多选el-table ElementUI 提供了多选行table&#xff0c;同时若依框架也提供了成熟的多选表格。 1.table基础结构 需要绑定selection-change方法 <el-tablev-loading"loading"stripe:data"productList"selection-change"handleSelect…

Vue+Vue CLI学习

1、Vue基础 1.1、Vue简介 &#xff08;1&#xff09;Javascript框架 &#xff08;2&#xff09;简化Dom操作 &#xff08;3&#xff09;响应式数据驱动 vue基础&#xff1b;vue-cli;vue-router;vuex;element-ui;vue3 vue文件包括html、css、js 1.2、第一个Vue程序 Vue …

如何进行渗透测试以提高软件安全性

对于各种规模的企业和组织来说&#xff0c;软件安全是一个至关重要的问题。随着网络攻击越来越复杂&#xff0c;软件中的漏洞越来越多&#xff0c;确保你的软件安全比以往任何时候都更重要。提高软件安全性的一个有效方法是渗透测试&#xff08;penetration testing&#xff09…

【python基础学习10课_面向对象、封装、继承、多态】

一、类与对象 1、类的定义 在类的里面&#xff0c;称之为方法。 在类的外面&#xff0c;称之为函数。类&#xff1a;人类&#xff0c;一个族群&#xff0c;是一个群体类的语法规则&#xff1a;class 自定义的类名():属性 -- 变量方法 -- 函数类&#xff0c;首字母大写&#x…

如何在有/没有备份的情况下恢复华为上已删除的视频?6 个推荐选项

“我不小心删除了华为手机上的一堆视频。我怎样才能把它们找回来&#xff1f;我在谷歌上也找不到它们”。——来自知乎 在我们日常生活的喧嚣中&#xff0c;意外时有发生。无论是由于华为手机上的无意删除、恢复出厂设置、病毒感染、数据损坏还是系统故障&#xff0c;这些视频…

基于单片机的机动车智能远光灯系统设计

目 录 摘 要 I Abstract II 引 言 1 1 主要研究内容及总体设计方案 3 1.1 主要研究内容 3 1.2 系统总体方案选择 3 1.3 系统功能的确定 4 2 硬件电路的设计 5 2.1 单片机控制模块设计 5 2.2 液晶显示模块电路设计 7 2.3 远近灯光电路设计 9 2.4 按键电路设计 9 2.5 超声波电路…

【QA-SYSTEMS】CANTATA-解决Jenkins中build Cantata报错

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 解决Jenkins中build Cantata测试项目报找不到license server的错误。 2、 问题场景 在Jenkins中build Cantata测试项目&#xff0c;报错“Failed to figure out the license server correctly”。 3、软硬件环…

vue+Nodejs+Koa搭建前后端系统(九)-- 上传图片

web2.0的到来使网页世界正式进入了寒武纪&#xff0c;各式各样的多媒体资源屡见不鲜&#xff0c;上传资源变得刻不容缓&#xff01; 前言 本文是在该系列的基础上&#xff0c;针对前后端代码的修改。 准备 HTTP上传图片时Content-Type值常见的有2种&#xff1a;application…

java集合(泛型数据结构)

1.泛型 1.1泛型概述 泛型的介绍 泛型是JDK5中引入的特性&#xff0c;它提供了编译时类型安全检测机制 泛型的好处 把运行时期的问题提前到了编译期间 避免了强制类型转换 泛型的定义格式 <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如: …

Vue+SpringBoot打造桃花峪滑雪场租赁系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设计3.1 教练表3.2 教练聘请表3.3 押金规则表3.4 器材表3.5 滑雪场表3.7 售票表3.8 器材损坏表 四、系统展示五、核心代码5.1 查询教练5.2 教练聘请5.3 查询滑雪场5.4 滑雪场预定5.5 新…