YOLOv5添加注意力机制

news2024/11/26 13:26:31

添加SE注意力机制

  • 第一步 添加代码-SE类-models/common.py
  • 第二步 添加注意力关键词-models/yolo.py
  • 第三步 创建配置文件-models/yolov5s_SE.yaml
  • 第四步 修改读取配置-train.py

第一步 添加代码-SE类-models/common.py

进入models/common.py文件,这个文件里面包含了各个模块,包含了C3,SPP等,yolov5的训练代码也将会在这个文件里面读取模块的类来构建网络,因此我们选择在这里添加注意力机制的类。
将如下的代码,添加在common.py的最下面:

# SE
class SE(nn.Module):                                   #SE注意力模块(通道注意力机制)
    def __init__(self, c1, c2, ratio=16):
        super(SE, self).__init__()
        #c*1*1
        self.avgpool = nn.AdaptiveAvgPool2d(1)
        self.l1 = nn.Linear(c1, c1 // ratio, bias=False)
        self.relu = nn.ReLU(inplace=True)
        self.l2 = nn.Linear(c1 // ratio, c1, bias=False)
        self.sig = nn.Sigmoid()
    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avgpool(x).view(b, c)
        y = self.l1(y)
        y = self.relu(y)
        y = self.l2(y)
        y = self.sig(y)
        y = y.view(b, c, 1, 1)
        return x * y.expand_as(x)

第二步 添加注意力关键词-models/yolo.py

在这里插入图片描述
在这个位置添加注意力机制的关键词,这个函数的作用是读取yaml文件中的backbone与head关键词中的模块,因为要想我们一会添加在配置文件中的注意力模块能够顺利的加载到模型Model类的实例化对象中,我们需要加入SE关键词(可以自定义想要的名字,这个随意,不一定要是SE,但是要和后面我们加入的类名称一致)。

这里我们也可以用另外一种方式添加,如下所示:
在这里插入图片描述
两者方式二选一,存在一种即可。

第三步 创建配置文件-models/yolov5s_SE.yaml

在models下面创建一个新的配置文件,我这里以yolov5s为例,在里面加入注意力机制,并且我加入的是SE注意力机制,因此我命名为yolov5s_SE.yaml。复制一下路径下的yolov5s的配置文件进去,贴出我加入注意力机制之后的配置文件:

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)
   [-1, 1, SE, [1024]],

   [[17, 20, 24], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

可以在backbone中添加注意力机制,也可以在head中添加,这里我将注意力机制加到了第三个检测头的最后一层(我在backbone中添加之后的训练效果并不好):
在这里插入图片描述
这里需要注意的一个细节是,添加了这一层之后,后面的层在调用时需要进行加1的操作,不然就彻底混乱了,因此我们需要将最后的detect中的第三个检测头的层数改一下:
在这里插入图片描述

第四步 修改读取配置-train.py

将这里改成我们刚才创建的模型配置文件的路径:
在这里插入图片描述
然后点击训练即可,在输出日志中可以查看网络的结构,如果看到我们刚才添加的模块,说明添加成功了。
在这里插入图片描述

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

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

相关文章

直线导轨的替换方法

目前,直线导轨的使用率持续上升,已广泛应用在各种各样的行业中,可替换性高是其广泛使用的重要原因之一!直线导轨的替换指的就是导轨和滑块可以单出,不用整套替换。 市面上使用率最高的直线导轨品牌应该就是台湾*银了&a…

利用python进行视频下载并界面播放快速下载素材

工具:python designer(python自带):UI界面设计工具 VLC:视频播放工具 需要的库如下: import os,platform os.environ[PYTHON_VLC_MODULE_PATH] "./vlc-3.0.14" import vlc from 脚本 import Player from …

Effective Java(中文版第3版)第2条:遇到多个构造器参数时要考虑使用构建器

Effective Java(中文版第3版)第2条:遇到多个构造器参数时要考虑使用构建器

Unity(三) Shader着色器初探

学习3D开发技术的时候无可避免的要接触到Shader,那么Shader是个什么概念呢?其实对于开发同事来说还是比较难理解的,一般来说Shader是服务于图形渲染的一类技术,开发人员可以通过其shader语言来自定义显卡渲染页面的算法&#xff0…

MyBatis-快速入门

MyBatis是一款优秀的持久层框架,用于简化JDBC的开发 MyBatis是Apache的一个开源项目iBatis,2010年这个项目由apache迁移到了Google code,并且改名为MyBatis,2013年11月迁移到Github 使用MyBatis查询所有用户信息: 1.准备工作&a…

项目管理工具:实现项目科学管理的利器

什么是项目管理工具 项目管理工具是指用于协助规划、组织、执行和监控项目活动的软件或应用程序。它们提供了一系列功能和工具,帮助项目管理人员和团队有效地管理项目进度、资源分配、任务协作以及沟通等方面的工作。项目管理工具的目标是提高团队的工作效率、优化…

Git 基本原理和常用操作

Git Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。由 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开源的版本控制软件。 Git 常用操作 git 提交流程:工作区 -> git add 到暂存区 -> gi…

RunnerGo——更高效、更易用的性能测试利器

随着互联网技术的迅速发展,性能测试已成为保障应用程序顺畅运行的关键环节。在众多性能测试工具中,RunnerGo以其独特的优势,逐渐成为了开发者和测试人员的首选。本文将详细介绍RunnerGo的特点,并对比其与JMeter的优势,…

mac开机启动项怎么设置,MAC系统启动项怎么更改

一些软件在安装的时候可能会自动添加开机启动项,如果觉得影响开机速度或者不再需要了该怎么删除开机启动项呢?如何添加删除MacBook的开机启动项。下面小编教大家如何设置开机启动项。 第一步:点击左上角苹果标识下拉菜单进入系统偏好设置 第…

优雅编码!Java与MongoDB的创新数据库架构

随着现代应用程序对数据存储和处理需求的不断增加,开发人员需要寻找更具创新性和灵活性的数据库架构来满足这些需求。在这样的背景下,Java与MongoDB的结合为开发人员提供了一种创新的数据库架构,为应用程序带来了无限可能。下面将探讨Java与M…

万宾毫米波水位监测仪:实时监测河湖水位

河湖是人类生存和发展的重要自然资源,保障其安全运行是维护社会稳定和生态平衡的重要任务。随着经济的发展和人口的增加,对水资源的需求日益增长,但同时也面临着洪水和干旱等自然灾害的威胁。因此,对河湖进行监测成为了至关重要的…

个人博客项目测试报告

目录 一. 项目背景 二. 概述 三. 功能测试用例 四. 自动化测试用例 一. 项目背景 项目链接: http://81.70.189.104:8080/login.html 个人博客系统提供了 登录、注册、写博客&发布博客、删除博客、修改博客功能。前端的页面有 登录页、注册页、个人博客列表页、博客详情…

使用docker容器内的anaconda虚拟环境启动python web项目

1、环境安装 1.1 基础镜像 这里以ubuntu18.04 cuda 11.8为基础镜像(主机支持nvidia-gpu) (1)拉取ubuntu18.4 cuda11.8镜像 docker pull nvidia/cuda:11.8.0-devel-ubuntu18.04 1.2 docker下anaconda安装 (1&am…

10|山水诗词:给自己一座精神的“辋川”

好诗相伴,千金不换。你好,我是天博。 前面三讲中,我们在“见古今”的主题里,讨论了诗词中流传下来的三种精神,侠义精神、文人风骨和家国情怀。从这一讲开始,我们进入了“见天地”的主题,一起来…

Vue项目案例-头条新闻

目录 1.项目介绍 1.1项目功能 1.2数据接口 1.3设计思路 2.创建项目并安装依赖 2.1创建步骤 2.2工程目录结构 2.3配置文件代码 3.App主组件开发 3.1设计思路 3.2对应代码 4.共通组件开发 4.1设计思路 4.2对应代码 5.头条新闻组件开发 5.1设计思路 5.2对应代码 …

Android -BLE 蓝牙模块开发

Android-Ble蓝牙开发Demo示例–扫描,连接,发送和接收数据,分包解包(附源码) - 简书前言 万物互联的物联网时代的已经来临,ble蓝牙开发在其中扮演着举重若轻的角色。最近刚好闲一点,抽时间梳理下这块的知识点。 涉及ble蓝牙通讯的客户端(开启、扫描、连接…

【OLED驱动】:stm32F103的四线模拟IIC驱动的0.96寸OLED屏幕显示数字,字母,汉字,图片的例程

文章目录 前言 一、四线OLED是什么? 二、IIC原理 1.四线0.96寸OLED是IIC驱动来实现显示 2.IIC协议的OLED屏幕 3.STM32驱动代码 4.IIC使用代码 总结 前言 最近在做一个开源方案 — 平衡车,即将开源硬件和软件,会在CSDN上开源&#xff0…

Vue2+Vue3基础入门到实战项目(五)——课程学习笔记

大家好, Capybara 继续与大家一起学习Vue框架。书读百遍其义自见。 day06 路由进阶 路由模块封装 router/index.js 所抽离内容包括:导入组件、(额外需要)导入Vue、导入VueRouter插件、 创建路由对象、导出路由对象 需要注意路径…

上线检查工具(待完善)

根据V11《CEBPM系统上线CheckList》整理而得,适用于V11,DHERP,Oracle和MSSQL数据库,检查内容还不完善。 上图: 1)数据库连接 2)双击[连接别名],可选择历史连接 3)主界面…

若依 MyBatis改为MyBatis-Plus

主要内容:升级成mybatis-plus,代码生成也是mybatis-plus版本 跟着我一步一步来,就可完成升级! 检查:启动程序,先保证若依能启动 第一步:添加依赖 这里需要在两个地方添加,一个是最…