(超详细)5-YOLOV5改进-添加A2Attention注意力机制

1、在yolov5/models下面新建一个A2Attention.py文件,在里面放入下面的代码
在这里插入图片描述
代码如下:

import numpy as np
import torch
from torch import nn
from torch.nn import init
from torch.nn import functional as F



class DoubleAttention(nn.Module):

    def __init__(self, in_channels,c_m=128,c_n=128,reconstruct = True):
        super().__init__()
        self.in_channels=in_channels
        self.reconstruct = reconstruct
        self.c_m=c_m
        self.c_n=c_n
        self.convA=nn.Conv2d(in_channels,c_m,1)
        self.convB=nn.Conv2d(in_channels,c_n,1)
        self.convV=nn.Conv2d(in_channels,c_n,1)
        if self.reconstruct:
            self.conv_reconstruct = nn.Conv2d(c_m, in_channels, kernel_size = 1)
        self.init_weights()


    def init_weights(self):
        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                init.kaiming_normal_(m.weight, mode='fan_out')
                if m.bias is not None:
                    init.constant_(m.bias, 0)
            elif isinstance(m, nn.BatchNorm2d):
                init.constant_(m.weight, 1)
                init.constant_(m.bias, 0)
            elif isinstance(m, nn.Linear):
                init.normal_(m.weight, std=0.001)
                if m.bias is not None:
                    init.constant_(m.bias, 0)

    def forward(self, x):
        b, c, h,w=x.shape
        assert c==self.in_channels
        A=self.convA(x) #b,c_m,h,w
        B=self.convB(x) #b,c_n,h,w
        V=self.convV(x) #b,c_n,h,w
        tmpA=A.view(b,self.c_m,-1)
        attention_maps=F.softmax(B.view(b,self.c_n,-1))
        attention_vectors=F.softmax(V.view(b,self.c_n,-1))
        # step 1: feature gating
        global_descriptors=torch.bmm(tmpA,attention_maps.permute(0,2,1)) #b.c_m,c_n
        # step 2: feature distribution
        tmpZ = global_descriptors.matmul(attention_vectors) #b,c_m,h*w
        tmpZ=tmpZ.view(b,self.c_m,h,w) #b,c_m,h,w
        if self.reconstruct:
            tmpZ=self.conv_reconstruct(tmpZ)

        return tmpZ 

2、找到yolo.py文件,进行更改内容
在29行加一个from models.A2Attention. import DoubleAttention, 保存即可
在这里插入图片描述
3、找到自己想要更改的yaml文件,我选择的yolov5s.yaml文件(你可以根据自己需求进行选择),将刚刚写好的模块DoubleAttention加入到yolov5s.yaml里面,并更改一些内容。更改如下
在这里插入图片描述
4、在yolo.py里面加入两行代码(335-337)
保存即可!
在这里插入图片描述
运行一下
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

自研OS,手机厂商的「私心」与软件厂商的「灾难」

作者 | 辰纹 来源 | 洞见新研社 在卷完了配置参数,影像跑分,屏幕快充、存储影像、续航折叠……手机还能怎么卷? 过去的2023年,手机厂商们不约而同的将目标瞄准了自研系统。 站在民族情感层面,中国手机“去安卓化”…

PHP在线考试平台管理系统源码带文字搭建教程和操作手册

PHP在线考试平台管理系统源码带文字搭建教程和操作手册 技术架构 PHP7.2 Thinkphp6 React UmiJs nginx mysql5.7 cnetos7以上 宝塔面板 系统功能特性与介绍 采用PHP7强类型(严格模式)。 题库管理 支持多种试题类型和录题方式。 考生管理 快速导入考…

Paddle模型转ONNX

深度学习模型在硬件加速器上的部署常常要用到ONNX(Open Neural Network Exchange,开放神经网络交换)格式,也可以通过ONNX实现不同AI框架(如Pytorch、TensorFlow、Caffe2、PaddlePaddle等)之间的模型转换。 …

python:for循环 实现FizzBuzz

python:for循环 实现FizzBuzz 要求:输入一个数字,程序遍历从1到输入的数字之间的所有数字,如果该数能被3整除,打印Fizz;如果该数能被5整除,打印Buzz;如果能同时被3和5整除&#xff…

Docker安装Redis 配置文件映射以及密码设置

安装直接docker pull redis即可,默认redis最新版 设置两个配置文件路径 mkdir -p /root/docker/redis/data mkdir -p /root/docker/redis/conf touch redis.conf // 容器挂载用conf配置文件 bind 0.0.0.0 protected-mode yes port 6379 tcp-backlog 511 timeout…

蓝桥杯单片机组备赛——LED指示灯的基本控制

🎈教程介绍:博客依据b站小蜜蜂老师的教程进行编写,文中会对老师传授的知识进行总结并加入自己的一些理解。教程链接 文章目录 一、点灯介绍二、相关数字芯片介绍2.1 74HC138介绍2.2 74HC573介绍2.3 74HC02介绍 三、代码设计思路四、代码编写…

【C#】当重复使用一段代码倒计时时,使用普通类和静态方法,实现简单的封装性、可扩展性、可维护性

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…

代码随想录刷题第四十八天| 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

代码随想录刷题第四十八天 今天是打家劫舍三部曲,最后一题树形dp有点难,其他还好 打家劫舍 (LC 198) 题目思路: 代码实现: class Solution:def rob(self, nums: List[int]) -> int:dp [0 for _ in range(len(nums)1)]dp[1…

Go并发快速入门:Goroutine

Go并发:Goroutine 1.并发基础概念:进程、线程、协程 (1) 进程 可以比作食材加工的一系列动作 进程就是程序在操作系统中的一次执行过程,是由系统进行资源分配和调度的基本单位,进程是一个动态概念,是程序在执行过程…

【生产者消费者模型的 Java 实现】

文章目录 前言传统派维新派 前言 题目:一个初始值为零的变量,多个线程对其交替操作,分别加1减1 实现步骤: 线程操作资源类判断,干活,通知防止虚假唤醒机制,即:多线程的判断需要用…

车规MCU开发之E2E协议

啥是E2E? E2E的原理: 1. 发送端:发送数据包添加E2E保护头 2. 接收端:接收数据包校验E2E保护头 E2E例子 - profile 11为例 E2E_P11ConfigType wk_stP11Cfg { .CounterOffset 8, .CRCOffset 0, .DataID …

2024年免费服务器活动整理汇总

随着科技的发展,服务器在各行各业的应用越来越广泛,而免费服务器活动也成为了许多企业和个人关注的焦点。目前有许多免费服务器活动可供选择,本文将为大家整理汇总免费服务器活动,帮助大家更好地了解和参与。 一、腾讯云免费服务器…

C语言指针相关知识(初阶)

目录 指针是什么 指针变量的大小 指针和指针类型 指针类型的意义 野指针 指针运算 指针-整数 指针-指针 指针的关系运算 指针和数组 二级指针 二级指针定义 指针数组 指针数组的定义 指针是什么 如下图所示(右侧编号为内存地址)&#xff1…

修改Echarts图表的标题和副标题的内容

直接上代码 var graphicConfig [ { type: "text", left: "center", top: "center", style: { text: "包日", // 初始化为空字符串 textAlign: "center", fill: "#000", fontSize: 14, fontWeight: "bold&qu…

Casper Labs 与 IBM Consulting 合作,AI透明度、审计能力的新方案

​ “全新解决方案,旨在帮助企业更有效地管理训练数据,这些数据由不同的组织通过生成式人工智能系统产生” 企业区块链软件和服务提供商 Casper Labs 与 IBM Consulting 共同宣布,它们将联手推出新的解决方案,以帮助客户在其人工…

day-07 统计出现过一次的公共字符串

思路 用哈希表统计words1和words2中各个字符串的出现次数&#xff0c;次数皆为1的字符串符合题意 解题方法 //用于存储words1中各个字符串的出现次数 HashMap<String,Integer> hashMap1new HashMap<>(); //用于存储words2中各个字符串的出现次数 HashMap<Stri…

活动 | Mint Blockchain 将于 2024 年 1 月 17 号启动 MintID 限量发行活动

MintID 是 Mint Blockchain 生态的超级权益卡&#xff0c;用于探索 NFT PASS 在未来各种应用场景下的可能性。MintID 将通过限时限量有价发售的方式对外释放&#xff0c;持有人将成为 Mint Blockchain 的核心权益用户。 MintID 总量&#xff1a;10,000 枚 铸造价格&#xff1a…

方波 离散傅里叶级数 MATLAB

%方波 离散时间傅里叶变换 L 5; N 10; k [-N/2:1:N/2]; %占空比 基本周期 离散时间的参数 xn [ones(1,L),zeros(1,N-L)]; %生成方波序列 XK dfs(xn,N); magXK abs([XK(N/21:N),XK(1:N/21)]); subplot(2,2,3); stem(k,magXK); axis([-N/2,N/2,-0.5,5.5]); xlabel(k); y…

【Linux】 nohup命令使用

nohup命令 nohup是Linux和Unix系统中的一个命令&#xff0c;其作用是在终端退出时&#xff0c;让进程在后台继续运行。它的全称为“no hang up”&#xff0c;意为“不挂起”。nohup命令可以让你在退出终端或关闭SSH连接后继续运行命令。 nohup 命令&#xff0c;在默认情况下&…
最新文章