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

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可以在保证轻量化的同时获得更加丰富的梯度流信息。
http://www.lryc.cn/news/21523.html

相关文章:

  • 动态规划实例——换零钱的方法数(C++详解版)
  • linux c
  • 第十三章 系统错误消息 - 一般系统错误消息 S - Z
  • 移动web基础
  • MyBatis和MyBatis_Plus有什么区别【面试常考题】
  • 华为OD机试用Python实现 -【统一限载货物数最小值】(2023-Q1 新题)
  • Vue入门小练习
  • Oracle-09-集合运算符篇
  • 获取浏览器(服务端)请求中特定的Cookie
  • c++11 标准模板(STL)(std::unordered_set)(九)
  • python实战应用讲解-【实战应用篇】文件操作(附python示例代码)
  • OpenCV-Python系列(二)—— 图像处理(灰度图、二值化、边缘检测、高斯模糊、轮廓检测)
  • ccc-台大林轩田机器学习基石-hw1
  • hadoop03-MapReduce【尚硅谷】
  • 测牛学堂:软件测试python学习之异常处理
  • 图神经网络--图神经网络
  • React useCallback如何使其性能最大化?
  • 长尾关键词使用方法,通过什么方式挖掘长尾关键词?
  • 【网络编程套接字(一)】
  • shell脚本入门
  • 【经典蓝牙】 蓝牙HFP层协议分析
  • 互联网摸鱼日报(2023-02-26)
  • 关于程序员中年危机的一个真实案例
  • 【fly-iot飞凡物联】(2):如何从0打造自己的物联网平台,使用开源的技术栈搭建一个高性能的物联网平台,目前在设计阶段。
  • Hadoop MapReduce
  • 时间复杂度和空间复杂度详解
  • 【C++】面向对象---封装
  • Docker简介
  • 量化学习(一)数据获取
  • java并发编程讨论:锁的选择