当前位置: 首页 > news >正文

改进YOLO系列:1.添加SE注意力机制

添加SE注意力机制

  • 1. SE注意力机制论文
  • 2. SE注意力机制原理
  • 3. SE注意力机制的配置
    • 3.1common.py配置
    • 3.2yolo.py配置
    • 3.3yaml文件配置

1. SE注意力机制论文

论文题目:Squeeze-and-Excitation Networks
论文链接:Squeeze-and-Excitation Networks

2. SE注意力机制原理

在这里插入图片描述

3. SE注意力机制的配置

3.1common.py配置

./models/common.py文件增加以下模块
在这里插入图片描述
在最后添加如下代码块:


import numpy as np
import torch
from torch import nn
from torch.nn import initclass SEAttention(nn.Module):def __init__(self, channel=512,reduction=16):super().__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.fc = nn.Sequential(nn.Linear(channel, channel // reduction, bias=False),nn.ReLU(inplace=True),nn.Linear(channel // reduction, channel, bias=False),nn.Sigmoid())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, _, _ = x.size()# # AIEAGNYy = self.avg_pool(x).view(b, c)y = self.fc(y).view(b, c, 1, 1)return x * y.expand_as(x)

3.2yolo.py配置

在 models/yolo.py文件夹下加入SEAttention

首先定位到parse_model函数中
for i, (f, n, m, args) in enumerate(d[‘backbone’] + d[‘head’])模块:
在这里插入图片描述
插入如下代码:

elif m is SEAttention:c1, c2 = ch[f], args[0]if c2 != no:c2 = make_divisible(c2 * gw, 8)

如图为:
在这里插入图片描述

3.3yaml文件配置

这里以YOLOv5的6.0版本为例:
可以在骨架网络当中添加:

# YOLOv5 v6.0 backbone
backbone:[[-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, SEAttention,[1024]], #add  SEAttention[-1, 1, SPPF, [1024, 5]],  # 9]

可以在head当中添加:

# 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, SEAttention, [1024]],[[17, 20, 24], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)]

添加的位置可以任意,就像搭积木一样,但是要注意通道数是否正确。

持续更新🔥🔥🔥

http://www.lryc.cn/news/128092.html

相关文章:

  • RP2040开发板自制树莓派逻辑分析仪
  • git clone -b与git pull origin <branch_name>的区别
  • 中期国际:MT4数据挖掘与分析方法:以数据为导向,制定有效的交易策略
  • Linux命令(70)之bzip2
  • ubuntu下gif动态图片的制作
  • 56.linux 进程管理命令和用户管理命令
  • Mac os 上的apt-get install 就是brew install
  • vue watch监听对象 新旧值一样
  • 学习Vue:测试与调试
  • pg使用sql将文本字符串转换成时间格式
  • WordPress中实现层级文章的访问权限继承
  • CSS常见单位汇总
  • LLM - 大模型评估指标之 BLEU
  • http学习笔记3
  • 【Redis】Redis 的主从同步
  • 文本图片怎么转Excel?分享一些好用的方法
  • 大数据-玩转数据-Flink 自定义Sink(Mysql)
  • linux17 线程安全 线程同步
  • lvs集群与nat模式
  • 【开源分享】在线客服系统搭建-基于php和swoole客服系统CRMchat(附源码完整搭建教程)...
  • Webpact学习笔记记录
  • Python代码实现解析MULTIPOLYGON几何对象类型数据为嵌套列表
  • SSH连接工具汇总
  • Java的AQS框架是如何支撑起整个并发库的
  • 一.net core 自动化发布到docker (Jenkins安装)
  • 二刷LeetCode--148. 排序链表(C++版本),必会题,思维题
  • css flex 上下结构布局
  • win下qwidget全屏弹窗后其他窗口鼠标样式无法更新的问题
  • Java【数据结构】二分查找
  • 数据库技术--数据库引擎,数据访问接口及其关系详解(附加形象的比喻)