yolov8中的C2f层

news2024/9/25 3:21:52

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

找来CSP的图
请添加图片描述
大致是把一个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)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

P-One一站式性能测试平台如何安装在国产化操作系统上运行

PerformanceOne(简称:P-One)是泽众软件自主研发的一套一站式性能测试平台软件产品。 该产品采用 B/S 架构开发,实现了集管理、设计、压测、监控以及分析于一体的全方位性能测试解决方案。可有效提升性能测试技术能力,…

【unity】基础入门 编译错误排查与调试方法

基础入门 编译错误排查与调试方法 一、常见编译错误原因1、环境问题2、代码命名问题二、代码调试方法1、基础调试方法2、高级玩法3、unity调试工具插件一、常见编译错误原因 1、环境问题 1、Win11系统不兼容部分unity版本 考虑换系统吧! 2、可能是系统权限问题,访问不到部分…

经济学人特稿:你应该送孩子去私立学校吗? | 经济学人20230610版社论双语精翻

“升学季”特稿:2023年6月10日《经济学人》周报封面文章《送孩子去私立学校——值吗?》(Are private schools worth it?) International | Studying for success 为了成功而学习 Should you send your children to private school? 你应该…

跨境电商对于撸卡、撸货、采退都需要哪些技术要求

在当前跨境电商环境下,从事撸卡、撸货或者采退等业务的人员日益增多。然而,由于大部分人使用的环境系统相对简单,例如云手机、一键新机工具IP、指纹浏览器IP、虚拟机等,缺乏足够复杂的防护机制,因此,经常会…

马拉松资讯获取及报名渠道分享

1、马拉松赛事 1.1 马拉松赛事组别 马拉松赛事分为全程马拉松(42.195公里)、半程马拉松(21.0975公里)、短程跑(健康跑、亲子跑、家庭跑之类的)这几个类别,大型田协认证赛事三种类型都有&#…

Spark大数据处理学习笔记(3.2.1)掌握RDD算子

该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/FArNP】 文章目录 一、准备工作1.1 准备文件1. 准备本地系统文件2. 把文件上传到 1.2 启动Spark Shell1. 启动HDFS服务2. 启动Spark服务3. 启动Spark Shell 二、掌握转换算子2.1 映射算子 - map()…

C#编写VBScript的Com组件

背景 前段时间学习了一下vbsript,做了马踏棋盘的广度搜索算法题,线性回归的深度学习算法题,虽然是做出来了,但是总感觉不太方便,很多细节都需要自己去实现,这样很不方便,不容易让大家更简单上手…

海外新闻稿发布平台TOP10,媒介易为你盘点热门选择!

海外新闻稿发布是企业在海外市场推广的重要手段之一,通过选择合适的发布媒体,可以提升品牌知名度、扩大影响力,并吸引更多目标受众的关注。然而,由于海外市场的多样性和媒体渠道的繁多,选择适合的海外新闻稿发布媒体成…

windows 服务程序和桌面程序集成(七)效果演示及源程序下载

系列文章目录链接 windows 服务程序和桌面程序集成(一)概念介绍windows 服务程序和桌面程序集成(二)服务程序windows 服务程序和桌面程序集成(三)UDP监控工具windows 服务程序和桌面程序集成(四…

Spring集成Kafka

前言 我负责的其中一个项目,接口的交互量在千万级/d,所以要存储大量的日志,为了防止日志的存储影响到系统的性能,所以在技术选型就决定了使用Kafka中间件和一个日志存储系统来负责日志的存储。 使用Kafka 的优点: 1.…

【HTMLCSS】设置导航栏

🎊专栏【 前端易错合集】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔效果 🌹代码: &…

AntDB 企业增强特性介绍——异构数据库兼容评估

在异构数据库迁移实施过程中,如何实现应用从 Oracle 等商业数据库透明平滑地迁移到 AntDB 中?其中最重要的一个环节就是实现对现有运行的生产数据库进行全面的数据采集、评估、分析、迁移和结果的校验。让一个烦琐的数据库替换过程可以全部自动完成。特别…

MapBox实现框选查询,多边形范围查询

还是老规矩先来看效果: mapbox官方没有为我们提供框选查询的案例,所以这个功能需要我们自己写。在openlayers框架中是有一个矩形范围查询的例子,但是在maobox没有。 那么我们就来说一下如何来做这个效果吧,首先这个效果可以分为两…

【数据分享】2000-2021年全国1km分辨率的逐月PM2.5栅格数据(免费获取)

PM2.5作为最主要的空气质量指标,在我们日常研究中非常常用!之前我们分享了2000-2021年全国范围1km分辨率的逐日的PM2.5栅格数据(可查看之前的文章获悉详情),数据来自于Zendo平台! 我们发现在Zendo平台上还…

RFID系统:解析无线识别技术的未来

RFID(Radio Frequency Identification)系统是一种基于无线识别技术的自动识别和数据采集系统。尽管对于新手来说,RFID可能是一个陌生的术语,但它正在快速地渗透和影响着我们的日常生活。 在RFID系统中,一个标签&…

与react的初定情素

前要: 其实吧!之前的博客基本没有写过相关react的笔记,因为我根本没有写过react的相关项目,作为一个小水前端,没有写过react的项目会让别人笑大大牙的,所以趁着划水时间好好学习,天天向上&#…

Java程序员面试1000问,让你开挂的面试宝典,花点耐心看完offer拿到手软

前言: 本文收集整理了各大厂常见面试题N道,你想要的这里都有内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈,希望大家都能找到适…

[nlp] OPT与GPT-2的差异

Meta AI 开源1750亿参数大模型- OPT,FlagAI一键调用! - 知乎简介Meta AI 开源 OPT系列模型,其中最大模型1750 亿参数(需申请访问权限)媲美 GPT-3。OPT系列模型包括了多组不同参数规模的模型权重,如图: OPT开源了一系列大模型,但是实际调用这些模型有很高的技术门槛。为…

如何变成领域里大牛级的人物?

今天看到一段话,挺有道理的,于是摘录下来: 对一个领域不太了解,而该领域又重要,你可以这样做: 1.读领域中经典教材和入门书 2.实践,观察、反思,找到核心的几个关键问题 3.对关键问题深入探索&am…

Rust in Action笔记 第四章生命周期、所有权、借用

第四章用了一个行星通信的例子来阐述整个主题,主要角色有地面站(Ground station)、人造卫星(CubeSat),两者有不同的状态并且能互相发消息通信; Rust有类型安全(type safety&#xf…