YOLOv8之C2f模块——与YOLOv5的C3模块对比
目录
- 一、源码对比
- 二、结构图对比
一、源码对比
YOLOv8完整工程代码下载:ultralytics/ultralytic
C2f模块源码在ultralytics/nn/modules.py下,源码如下:
class C2f(nn.Module):# CSP Bottleneck with 2 convolutionsdef __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansionsuper().__init__()self.c = int(c2 * e) # hidden channelsself.cv1 = Conv(c1, 2 * self.c, 1, 1)self.cv2 = Conv((2 + n) * self.c, c2, 1) # optional act=FReLU(c2)self.m = nn.ModuleList(Bottleneck(self.c, self.c, shortcut, g, e=1.0) for _ in range(n))def forward(self, x):y = list(self.cv1(x).chunk(2, 1))y.extend(m(y[-1]) for m in self.m)return self.cv2(torch.cat(y, 1))def forward_split(self, x):y = list(self.cv1(x).split((self.c, self.c), 1))y.extend(m(y[-1]) for m in self.m)return self.cv2(torch.cat(y, 1))
YOLOv5的完整工程代码下载:ultralytic/yolov5
C3模块源码在models/common.py下,源码如下:
class C3(nn.Module):# CSP Bottleneck with 3 convolutionsdef __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansionsuper().__init__()c_ = int(c2 * e) # hidden channelsself.cv1 = Conv(c1, c_, 1, 1)self.cv2 = Conv(c1, c_, 1, 1)self.cv3 = Conv(2 * c_, c2, 1) # optional act=FReLU(c2)self.m = nn.Sequential(*(Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)))def forward(self, x):return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1))
- C2f模块和C3模块的对外接口保持一致,都是(ch_in, ch_out, number, shortcut, groups, expansion),方便在yolov5中直接调用C2f模块。
- C2f模块默认不使用shortcut连接,C3模块默认使用shortcut连接,但二者在网络结构中shortcut的位置无差别,即都是在Backbone中使用shortcut连接,在Head中不使用shortcut连接,代码的调用格式有差别。
二、结构图对比
图2-1 C3模块结构图
图2-2 C2f模块结构图
- C2f模块参考了C3模块以及ELAN的思想进行的设计,让YOLOv8可以在保证轻量化的同时获得更加丰富的梯度流信息。
YOLOv8之C2f模块——与YOLOv5的C3模块对比相关推荐
- 用opencv的dnn模块做yolov5目标检测
最近在微信公众号里看到多篇讲解yolov5在openvino部署做目标检测文章,但是没看到过用opencv的dnn模块做yolov5目标检测的.于是,我就想着编写一套用opencv的dnn模块做yol ...
- javascript模块_JavaScript模块第2部分:模块捆绑
javascript模块 by Preethi Kasireddy 通过Preethi Kasireddy JavaScript模块第2部分:模块捆绑 (JavaScript Modules Part ...
- pythonos模块使用方法_Python OS模块常用方法总结
Python OS模块常用方法总结 Python OS模块方法: 操作 说明 os.getcwd() 得到当前工作目录,即当前Python脚本工作的目录路径 os.listdir() 返回指定目录下的 ...
- MVC4做网站后台:模块管理1、修改模块信息
网站可能会包含一些模块:像文章.产品.图片.留言等. 栏目模块主要实现功能,启用或禁用模块,模块权限设置,模块上传设置等. 权限设置和上传设置以后专门考虑,先来显示或禁用模块. 1.在顶部导航栏添加管 ...
- 处理程序“WebServiceHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
HTTP 错误 500.21 - Internal Server Error 处理程序"WebServiceHandlerFactory-Integrated"在其模块列表中有一个 ...
- python logging模块的作用_Python 日志模块logging分析及使用-2
本文作为Python日志模块的补充,主要介绍日志回滚RotatingFileHandler和TimedRotatingFileHandler的使用,以及其所带来的问题.Logger对象的日志等级是如何 ...
- 错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
开发web项目时需要安装IIS,在安装好IIS的Windows7本上发布asp.net网站时,web程序已经映射到了本地IIS上,但运行如下错误提示"处理程序"PageHandle ...
- python怎么导入包-python模块之导入包及模块发布
1.导入包(不常用的方法) 在使用python的包时,有时候想直接导入包名,然后通过包名来调用模块,例如: temp为我们创建的一个包,如果我们想通过下面的方式进行导入模块中的方法,将会出错 impo ...
- python 如何查看模块所有方法-Python查看模块函数,查看函数方法的详细信息
Python查看方法的详情 1.通用的帮助函数help() 使用help()函数来查看函数的帮助信息. 如: 1 importrequests2 3 help(requests) 会有类似如下输出: ...
- python常用模块大全总结-常用python模块
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. python常用模块什么是模块? 常见的场景:一个模块就是一个包含了py ...
最新文章
- JavaScript 中运算符的优先级
- Ubuntu Server对OpenStack的支持
- s3c6410 uboot代码分析《一》
- PHP面向对象之旅:抽象类继承抽象类(转)
- 惠普打印机怎么无线连接电脑_惠普打印机连不上无线?怎么解!
- 【Java】PMD规则学习(1) --字符串比较
- 什么是交互设计?交互设计是用来干什么的?
- 被罚 50 亿美元,Android 究竟招谁惹谁了?
- C++中使用MediaInfo库获取视频信息
- 机器学习(2)——K-近邻算法讲解
- c语言生成 pdf文件,使用PDFLib生成PDF文档(C语言版)--使用指导
- Java核心技术 卷1基础知识 原书第10版.pdf
- javascript常用正则
- 犹太人的智慧书《塔木德》(Talmud)
- IntelliJ IDEA中文汉化教程
- 校园二手交易平台毕设 校园二手商城毕业设计 毕设二手校园商品交易 二手商城系统 java二手交易市场 springboot商城 ssm二手交易平台下载 源代码+数据库+调试运行+讲解代码
- 基于 8051单片机的线跟随小车
- Photoshop脚本 锁定图层组所有图层
- dart异步编程_如何通过期货将一些异步编程引入Dart
- 昆明世博园装mysql_昆明世博园太美丽了