yolov8中的C2f层

这篇具有很好参考价值的文章主要介绍了yolov8中的C2f层。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在代码注释中看到C2f其实是
CSP Bottleneck with 2 convolutions

找来CSP的图
yolov8中的C2f层
大致是把一个output按channel拆成2部分,其中一部分不动,
另一部分过conv,再拼回去,
因为是with 2 convolutions, 会有2个conv.

下面根据代码来走一遍流程:
ultralytics/nn/modules/block.py

class C2f(nn.Module):
    """CSP Bottleneck with 2 convolutions."""

    def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5):  # ch_in, ch_out, number, shortcut, groups, expansion
        super().__init__()
        self.c = int(c2 * e)  # hidden channels
        self.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, k=((3, 3), (3, 3)), e=1.0) for _ in range(n))

    def forward(self, x):
        """Forward pass through C2f layer."""
        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))

假设输入x 为(1,32,104,160)
C2f:
cv1: conv2d(32,32, 1x1, s=1), SiLU
cv2: conv2d(48,32, 1x1, s=1), SiLU
x 过cv1, (1,32, 104, 160), 按channel分成2个16,得到y为list, 0:(1,16,104,160),1:(1,16,104,160)

y[-1]要过一个bottleneck:

class Bottleneck(nn.Module):
    """Standard bottleneck."""

    def __init__(self, c1, c2, shortcut=True, g=1, k=(3, 3), e=0.5):  # ch_in, ch_out, shortcut, groups, kernels, expand
        super().__init__()
        c_ = int(c2 * e)  # hidden channels
        self.cv1 = Conv(c1, c_, k[0], 1)
        self.cv2 = Conv(c_, c2, k[1], 1, g=g)
        self.add = shortcut and c1 == c2

    def forward(self, x):
        """'forward()' applies the YOLOv5 FPN to input data."""
        return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x))

bottlenect的cv1: conv2d:(16,16, (3x3).s=1,p=1), SiLU, size不变
bottlenect的cv2: conv2d:(16,16, (3x3).s=1,p=1), SiLU, size不变,
加上y[-1]本身,还是(1,16,104,160), 加到y list的末尾,
最后cat channel, (1,48,104,160),
过C2f的cv2, 得到(1,32,104,160)文章来源地址https://www.toymoban.com/news/detail-481627.html

到了这里,关于yolov8中的C2f层的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOv8改进 | 如何在网络结构中添加注意力机制、C2f、卷积、Neck、检测头

    本篇文章的内容是在大家得到一个 改进版本的 C2f一个新的注意力机制、或者一个新的卷积模块、或者是检测头的时候如何 替换我们YOLOv8模型中的原有的模块 ,从而用你的模块去进行训练模型或者检测。因为最近开了一个专栏里面涉及到挺多改进的地方,不能每篇文章都去讲

    2024年02月05日
    浏览(66)
  • YOLOv8改进:在C2f模块中引入EMA注意力机制,提升计算机视觉性能

    计算机视觉领域一直在不断演进,为了改进目标检测算法的性能,研究人员一直在寻找新的方法和技术。在这篇文章中,我们介绍了一种改进的目标检测算法,即YOLOv8,通过在C2f模块中引入EMA(Exponential Moving Average)注意力机制,有效提升了算法的性能。 目标检测是计算机视

    2024年02月03日
    浏览(175)
  • 改进YOLOv8 | 即插即用篇 | C2F模块增加注意力机制 | 附详细结构图 计算机视觉

    摘要: 本文针对目标检测算法YOLOv8进行改进,通过在C2F模块中引入注意力机制,提高目标的定位和分类性能。文章首先介绍了YOLOv8的基本原理和结构,然后详细阐述了注意力机制的原理和作用,并对修改后的C2F模块结构进行了说明。最后,给出了实验结果和源代码。 引言 目

    2024年02月04日
    浏览(652)
  • 主干网络篇 | YOLOv8改进之用RCS-OSA替换C2f(来源于RCS-YOLO)

    前言: Hello大家好,我是小哥谈。 RCS-YOLO是一种目标检测算法,它是基于YOLOv3算法的改进版本。通过查看RCS-YOLO的整体架构可知,其中包括RCS-OSA模块。RCS-OSA模块在模型中用于堆叠RCS模块,以确保特征的复用并加强不同层之间的信息流动。本文就给大家详细介绍如何将RCS-YOLO算

    2024年04月10日
    浏览(71)
  • 改进YOLOv8 | C2F模块中引入注意力机制的即插即用方法 | 详细结构图与计算机视觉实现

    概述: 在计算机视觉领域,YOLOv8是一种常用的目标检测算法,而C2F模块是YOLOv8的核心组成部分之一。为了进一步提升YOLOv8的检测性能,本文将介绍如何通过添加注意力机制来改进C2F模块。我们将详细讨论这一改进方法,并提供相应的源代码,以便读者可以直接使用。 引言:

    2024年04月15日
    浏览(357)
  • YoloV8改进策略:Agent Attention|Softmax与线性注意力的融合研究|有效涨点|代码注释与改进|全网首发(唯一)

    涨点效果:在我自己的数据集上,mAP50 由0.986涨到了0.991,mAP50-95由0.737涨到0.753,涨点明显! 本文提出了一种新型的注意力机制——Agent Attention,旨在平衡计算效率和表示能力。该机制在传统的注意力模块中引入了额外的agent tokens A,这些agent tokens首先为query tokens Q聚合信息,

    2024年01月18日
    浏览(54)
  • 【YOLOv8改进】MCA:用于图像识别的深度卷积神经网络中的多维协作注意力 (论文笔记+引入代码)

    先前的大量研究表明,注意力机制在提高深度卷积神经网络(CNN)的性能方面具有巨大潜力。然而,大多数现有方法要么忽略通道和空间维度的建模注意力,要么引入更高的模型复杂性和更重的计算负担。为了缓解这种困境,在本文中,我们提出了一种轻量级且高效的多维协

    2024年03月18日
    浏览(84)
  • [yolov5/yolov8修改]替换yolov5/yolov8中的主干网络为EfficientNetv2

    yolo系列的网络作为单阶段目标检测网络中的佼佼者,在目标检测方面发挥着很大的作用,而yolov5是其中较好的一代网络,yolov8是其中最新的一代网络。但是作为我们学习和使用来说,原始的yolov5或者yolov8网络并不一定就是最合适的,基于此,在yolov5的基础上,针对主干网络进

    2024年02月06日
    浏览(84)
  • YOLOV8代码本地编译

    下载pycharm 在 Linux 操作系统中安装 Pycharm 社区版_linux中安装pycharm社区版-CSDN博客 Pycharm中配置 Conda 虚拟环境 百度安全验证 https://baijiahao.baidu.com/s?id=1771914506705481878wfr=spiderfor=pc 源码编译 果您对参与开发感兴趣或希望尝试最新源代码,请克隆 ultralytics 仓库。克隆后,导航到目录

    2024年01月20日
    浏览(39)
  • 我试用一下YOLOv8中的跟踪算法

    关注公众号,发现CV技术之美 YOLOv8已经加入了两个跟踪算法,方便对目标检测和分割的结果进行跟踪,可以直接在命令行使用,当然也可以用Python代码调用,非常方便。 以下是相关特性: 这两个跟踪算法是 BoT-SORT(https://github.com/NirAharon/BoT-SORT,目前在MOT17数据集上排名第二)

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包