【Week Y9】yolo-v8网络结构的主要模块学习

news2024/12/24 7:15:01

文章目录

  • 一、`...\ultralytics-main\ultralytics\nn\modules\conv.py`:
    • (1)`__all__`说明:
    • (2)`autopad()`说明:
    • (3)`conv()`说明:
    • (4)`Focus()`说明:
  • 二、`...\ultralytics-main\ultralytics\nn\modules\block.py`:
    • (1)`C2f()`说明:

  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊 | 接辅导、项目定制

文件路径:...\ultralytics-main\ultralytics\nn\modules\***.py
在这里插入图片描述

一、...\ultralytics-main\ultralytics\nn\modules\conv.py

(1)__all__说明:

在这里插入图片描述

(2)autopad()说明:

在这里插入图片描述
这段代码定义了一个名为 autopad 的函数

  • 功能:

    • 在卷积操作中实现 ‘same’ 填充,使输入和输出具有相同的空间维度
  • 参数说明:

    • k:卷积核的大小。可以是单个整数,也可以是整数列表(对于不同维度的卷积核)。
    • p:填充大小。如果未提供,函数将自动计算。
    • d:膨胀率(dilation rate),默认为1。膨胀卷积是一种可以增大卷积核感受野的卷积方式,不影响参数数量。

autopad 函数在实现卷积神经网络时非常有用,特别是在需要保持特征图尺寸不变的情况下。通过自动计算填充大小,它简化了卷积层的实现过程。

(3)conv()说明:

在这里插入图片描述
这段代码定义了一个名为 conv的函数,继承自nn.Module,通过参数(ch_in, ch_out, kernel, stride, padding, groups, dilation, activation)来定义卷积层的行为。

通过将卷积(nn.Conv2d)、批量归一化(nn.BatchNorm2d)和激活函数(default_act,默认是nn.SiLU())组合在一起,简化了模型构建过程,并提高了代码的可读性和可维护性。

  • 类属性default_act:定义了默认的激活函数,这里使用的是 SiLU 激活函数。

  • 构造函数 __init__:初始化卷积层,接受多个参数:

    • c1:输入通道数。
    • c2:输出通道数。
    • k:卷积核大小,默认为1。
    • s:步长,默认为1。
    • p:填充大小。如果没有提供,将使用 autopad 函数自动计算。
    • g:groups参数,用于控制分组卷积,默认为1。
    • d:膨胀率,默认为1。
    • act:激活函数。如果为True,则使用默认的SiLU激活函数;如果是一个 nn.Module 实例,则使用该实例;否则不使用激活函数。
      在构造函数中,创建了 nn.Conv2d、nn.BatchNorm2d 和激活函数实例。
  • 前向传播函数 forward:定义了数据通过层的传播方式。它首先应用卷积,然后是批量归一化,最后是激活函数。

  • 前向融合函数 forward_fuse:与 forward 类似,但没有使用批量归一化,用于执行卷积转置操作。它直接在卷积操作后应用激活函数。这个函数可能在某些特定情况下使用,例如当模型需要融合某些层以优化性能时。

(4)Focus()说明:

在这里插入图片描述
Focus模块结构如下所示:
在这里插入图片描述
Focus类实现了一个特殊的操作,将宽度和高度信息“聚焦”到通道空间中,这通常用于减少图像的分辨率同时增加其深度。下面是对这个类的详细解释:

  • 构造函数 init
    • 初始化 Focus 层。它接受多个参数,与 Conv 类似,包括输入和输出通道数、卷积核大小、步长、填充、分组等。
    • 在构造函数中,创建了一个 Conv 实例,其输入通道数是原始通道数的4倍。这是因为 Focus 层会将输入图像分割成四个部分并沿通道维度拼接。
  • 前向传播函数 forward:
    • 定义了数据通过层的传播方式。首先将输入图像 x 沿宽度和高度维度切分成四个部分,然后将这四个部分沿通道维度拼接。拼接后的张量随后被送入卷积层进行处理。
      输出张量的形状是 (b, 4c, w/2, h/2),其中 b 是批量大小,c 是原始通道数,w 和 h 是宽度和高度的一半。

Focus 类是 YOLOv8 中的一个关键组件,它通过将图像分割成四个部分并沿通道维度拼接,有效地减少了图像的分辨率,同时增加了通道数。这种方法有助于网络关注更细粒度的特征,同时保持计算效率。

二、...\ultralytics-main\ultralytics\nn\modules\block.py

(1)C2f()说明:

在这里插入图片描述
C2f层:快速实现带有2个卷积的CSP Bottleneck

  • 初始化函数:def init(self, c1, c2, n=1, shortcut=False, g=1, e=0.5)

    • c1:输入通道
    • c2:输出通道
    • n:Bottleneck的重复次数
    • shortcut:是否使用捷径连接
    • g:分组数
    • e:膨胀系数,用于计算隐藏层通道数
    • 创建了两个卷积层 cv1 cv2,以及一个 nn.ModuleList(nn.ModuleList包含 nBottleneck 模块)
  • 前向传播函数 forward:定义了数据通过层的传播方式。

    • 首先,输入 x 通过 cv1 卷积层,然后其输出被分割成两部分。分割后的两部分以及通过 Bottleneck 模块的输出被连接起来,然后通过 cv2 卷积层。
    • 使用chunk()方法来分割张良
  • 前向分割函数 forward_split:使用 split()方法 来分割张量
    在这里插入图片描述

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

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

相关文章

ue引擎游戏开发笔记(40)——行为树的建立:丰富ai行动

1.需求分析: 敌人的ai行为随着开发的不断更新,会不断增加,如果每次都进入c中编写会很不方便,也无法凸显ue引擎中行为树的优势作用,因此有必要将敌人的ai行为,全部转到行为树中实现。 2.操作实现&#xff1…

R实验 基础(二)

实验目的: 掌握向量的几种类型:数值向量、逻辑向量、字符向量、复数向量;掌握生成向量几个的函数使用和向量的下标运算;掌握因子的定义和相关函数的使用。 实验内容: R语言中,数值向量用得非常多。生成数…

深入解析Wireshark1:从捕获到分析,一网打尽数据包之旅

目录 1 认识 Wireshark 1.1 选择网卡界面 1.2 捕获数据包界面 1.3 常用按钮功能介绍 1.4 数据包列表信息 1.5 数据包详细信息 2 数据包案例分析 Frame: 物理层的数据帧概况 Ethernet II: 数据链路层以太网帧头部信息 Internet Protocol Version 4 (IPv4): 互联网层IP…

【Python】图形用户界面设计

1、设计并编写一个窗口程序,该窗口只有一个按钮,当用户单击时可在后台输出hello world. import tkinter as tk def on_button_click():print("hello world") # 创建主窗口 root tk.Tk() root.title("Hello World Button") # 设置窗口大小 root.geometry…

2005-2022年全国及各省绿色信贷水平测算数据(含原始数据+计算过程+计算结果)

2005-2022年全国及各省绿色信贷水平测算数据(含原始数据计算过程计算结果) 1、时间:2005-2022年 2、来源:工业统计年鉴、统计年鉴、其中2017年采用插值法填补 3、范围:31省 4、方法说明:选取各省六大高…

每日一题13:Pandas:方法链

一、每日一题 ;:: 解答: import pandas as pddef findHeavyAnimals(animals: pd.DataFrame) -> pd.DataFrame:heavy_animals animals[animals[weight] > 100].sort_values(byweight, ascendingFalse)result heavy_anim…

代码随想录--链表--反转链表

题目 题意:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 思路 如果再定义一个新的链表,实现链表元素的反转,其实这是对内存空间的浪费。 其实只需要改变链表的next指针的…

Java项目:基于ssm框架实现的家政服务网站管理系统分前后台(B/S架构+源码+数据库+毕业论文+答辩PPT)

一、项目简介 本项目是一套基于ssm框架实现的家政服务网站管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 二、技术实现 jdk版本:1.…

Qt+C++串口调试工具

程序示例精选 QtC串口调试工具 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《QtC串口调试工具》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。 …

JWT生成token工具类实现

JWT简介 JWT定义 JWT全称为Json web token,也就是 Json 格式的 web token JWT数据结构 1.JWT由三段字符串组成,中间用.分隔 Project_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwiZXhwIjoxNzE2MzcwMTM0LCJpYXQiOjE3MTU3NjUzMzQsImp0aSI6IjllO…

关于DOCKER启动后如何添加新的端口映射

前段时间在用docker部署服务的时候发现,容器已经启动,但是需要新的端口映射(即容器在启动的时候只进行了部分的端口映射),经过查询资料后发现现在网上有2种方法,一中是修改json文件。另一种是将已经运行的容…

QT:QML中读取文件(QDesktopServices和QFile)

目录 一.介绍 二.QDesktopServices: 1.添加头文件 2.声明函数 3.操作 4.注册 5.qml调用 三.QFile: 1.添加头文件 2.声明函数 3.读取指定文件名的文件内容 4.注册 5.qml中调用 四.效果展示: 1.QDesktopServices:上方按钮点击打开…

纯血鸿蒙APP实战开发——Web获取相机拍照图片案例

介绍 本示例介绍如何在HTML页面中拉起原生相机进行拍照,并获取返回的图片。 效果预览图 使用说明 点击HTML页面中的选择文件按钮,拉起原生相机进行拍照。完成拍照后,将图片在HTML的img标签中显示。 实现思路 添加Web组件,设置…

一看就会的AOP事务

文章目录 AOPAOP简介AOP简介和作用AOP的应用场景为什么要学习AOP AOP入门案例思路分析代码实现AOP中的核心概念 AOP工作流程AOP工作流程AOP核心概念在测试类中验证代理对象 AOP切入点表达式语法格式通配符书写技巧 AOP通知类型AOP通知分类AOP通知详解 AOP案例案例-测量业务层接…

太极图形学——高级数据结构——稠密

太极是一个面向数据的编程语言 在并行计算的框架下,在计算上花费的时间反而是少数,大量的时间都花在了数据获取(也就是访问内存)上面,这一点在之前的games103课程上也有简单的提及 cpu的计算能力非常强大&#xff0c…

Qwen学习笔记3:Qwen模型调用外部API实现模型增强(openai的形式)

前言 本文记录了使用本地部署的Qwen模型,调用外部API实现模型的功能增强,非常的易用,大家用于开发自己的应用,只需要作简单的修改就可以进行使用了。 本文的代码来源视频教程: Qwen大模型变强了,通过API…

【SQL】SQL常见面试题总结(2)

目录 1、增删改操作1.1、插入记录(一)1.2、插入记录(二)1.3、插入记录(三)1.4、更新记录(一)1.5、更新记录(二)1.6、删除记录(一)1.7、…

【文末附gpt升级方案】腾讯混元文生图大模型开源:中文原生Sora同款DiT架构引领新潮流

在人工智能与计算机视觉技术迅猛发展的今天,腾讯再次引领行业潮流,宣布其旗下的混元文生图大模型全面升级并对外开源。这次开源的模型不仅具备强大的文生图能力,更采用了业内首个中文原生的Sora同款DiT架构,为中文世界的视觉生成领…

NodeJS V8引擎内存和垃圾回收器

关于max_old_space_size max_old_space_size参数用于指定V8引擎的老生代内存的最大大小。通过增加max_old_space_size参数的值,我们可以提供更多的内存给V8引擎,从而提高应用程序的性能和稳定性。 既然提到了老生代,就不得不提下什么是垃圾&…

IDEA 每次启动都显示选择项目页面

IDEA版本:2021.3.3 打开 Settings > Appearance & Behavior > System Settings 取消勾选 Reopen projects on startup 然后下次启动 IDEA 会显示选择项目页面