YoloV5/YoloV7改进---注意力机制:SRM,卷积神经网络再校准模块,性能优于SE、GE

news2024/10/7 10:23:18

目录

 1.SRM介绍  ​编辑     

 2.SRM引入到yolov5

2.1 加入common.py中:

2.2 加入yolo.py中:

2.3 yolov5s_SRM.yaml

2.4 yolov5s_SRM1.yaml

3.YOLOv5/YOLOv7魔术师专栏介绍



 1.SRM介绍       

论文:https://openaccess.thecvf.com/content_ICCV_2019/papers/Lee_SRM_A_Style-Based_Recalibration_Module_for_Convolutional_Neural_Networks_ICCV_2019_paper.pdf

SRM的总体结构如 Figure 1 所示。它由两个主要组件组成:Style Pooling 和 Style Integration。Style Pooling 运算符通过汇总跨空间维度的特征响应来从每个通道提取风格特征。紧随其后的是 Style Integration 运算符,该运算符通过基于通道的操作利用风格特征来生成特定于示例的风格权重。 

 

  SRM首先通过“style pooling”从特征图的每个通道中提取风格信息,然后通过与通道无关的风格集成来估计每个通道的重新校准权重。通过将单个风格的相对重要性纳入特征图,SRM有效地增强了CNN的表示能力。

 Figure 3 展示了带有 SRM 和其他特征重新校准方法的 ResNet-50 的训练和验证曲线。在整个训练过程中,无论是在训练还是在验证曲线上,SRM的准确性都比SE和GE高得多。这意味着,在SRM中使用风格,比在SE中建模通道相关性或在GE中收集全局上下文更有效,这两方面都有助于训练和提高泛化能力。

值得注意的是,SRM的性能优于SE和GE,其附加参数的数量较少。 

 2.SRM引入到yolov5

2.1 加入common.py中:

###################### SRM  attention  ####     START   by  AI&CV  ###############################

""" 
PyTorch implementation of Srm : A style-based recalibration module for 
convolutional neural networks 

As described in https://arxiv.org/pdf/1903.10829

SRM first extracts the style information from each channel of the feature maps by style pooling, 
then estimates per-channel recalibration weight via channel-independent style integration. 
By incorporating the relative importance of individual styles into feature maps, 
SRM effectively enhances the representational ability of a CNN.
"""

import torch
from torch import nn

class SRM(nn.Module):
    def __init__(self,feature, channel):
        super().__init__()
        self.cfc = nn.Conv1d(channel, channel, kernel_size=2, groups=channel,
                             bias=False)
        self.bn = nn.BatchNorm1d(channel)

    def forward(self, x):
        b, c, h, w = x.shape
        # style pooling
        mean = x.reshape(b, c, -1).mean(-1).unsqueeze(-1)
        std = x.reshape(b, c, -1).std(-1).unsqueeze(-1)
        u = torch.cat([mean, std], dim=-1)
        # style integration
        z = self.cfc(u)
        z = self.bn(z)
        g = torch.sigmoid(z)
        g = g.reshape(b, c, 1, 1)
        return x * g.expand_as(x)


###################### SRM  attention  ####     END   by  AI&CV  ###############################

2.2 加入yolo.py中:

def parse_model(d, ch): # model_dict, input_channels(3)

添加以下内容 

 if m in {Conv, GhostConv, Bottleneck, GhostBottleneck, SPP, SPPF,DWConv, MixConv2d, Focus, CrossConv,BottleneckCSP, C3, C3TR, C3SPP, C3Ghost, CNeB, nn.ConvTranspose2d, DWConvTranspose2d, C3x, C2f,SRM}:

2.3 yolov5s_SRM.yaml

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 1  # 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, SRM, [1024]],  # 24

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

2.4 yolov5s_SRM1.yaml

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 1  # 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, SRM, [256]],  # 18

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

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

   [[18, 22, 26], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

3.YOLOv5/YOLOv7魔术师专栏介绍
 

💡💡💡YOLOv5/YOLOv7魔术师,独家首发创新(原创),持续更新,最终完结篇数≥100+,适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文章提供每一步步骤和源码,轻松带你上手魔改网络
💡💡💡重点:通过本专栏的阅读,后续你也可以自己魔改网络,在网络不同位置(Backbone、head、detect、loss等)进行魔改,实现创新!!!
 专栏介绍:
✨✨✨原创魔改网络、复现前沿论文,组合优化创新
🚀🚀🚀小目标、遮挡物、难样本性能提升
🍉🍉🍉持续更新中,定期更新不同数据集涨点情况
本专栏提供每一步改进步骤和源码,开箱即用,在你的数据集下轻松涨点
通过注意力机制、小目标检测、Backbone&Head优化、 IOU&Loss优化、优化器改进、卷积变体改进、轻量级网络结合yolo等方面进行展开点
专栏链接如下:
https://blog.csdn.net/m0_63774211/category_12240482.html

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

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

相关文章

设计模式7:装饰者模式

目录 装饰者模式是要解决什么问题?装饰者模式在JDK中有哪些实际应用?装饰者模式在Android SDK中有哪些实际应用?装饰者模式和适配器模式的区别是什么?装饰者模式和代理模式的区别是什么? 装饰者模式是要解决什么问题&a…

基于matlab使用单类全卷积数据描述异常检测网络检测药丸图像上的缺陷(附源码)

一、前言 此示例演示如何使用单类全卷积数据描述 (FCDD) 异常检测网络检测药丸图像上的缺陷。 异常检测的一个关键目标是让人类观察者能够理解为什么经过训练的网络将图像分类为异常。FCDD支持e可解释的分类,它用证明神经网络如何达到其分类…

Python快速将多个文件夹内的文件移动至一个文件夹内

在日常办公中生活中,我们经常需要将多个文件夹内的文件如:(图片png,jpg,jpeg,word文档,Excel,PPT等等),需要将这个文件夹内的文件移动至同一个文件夹内,如果我们复制粘贴的话,将会非常的繁琐以及…

Impala3.4源码阅读笔记(七)解析ScanNode(上)

前言 本文为笔者个人阅读Apache Impala源码时的笔记,仅代表我个人对代码的理解,个人水平有限,文章可能存在理解错误、遗漏或者过时之处。如果有任何错误或者有更好的见解,欢迎指正。 正文 我们知道Impala执行一条SQL的主要流程…

在vscode中配置git bash终端

将以下配置添加到vscode中的settings.json中 "terminal.integrated.profiles.windows": {"PowerShell": {"source": "PowerShell","icon": "terminal-powershell"},"Command Prompt": {"path"…

【C++】类和对象(中篇)----->六大默认成员函数

目录 一、类的6个默认成员函数 二、构造函数 1、概念 2、特性 三、析构函数 1、概念 2、特性 四、拷贝构造函数 1、概念 2、特征 五、赋值运算符重载 1、运算符重载 2、值运算符重载 2.1 赋值运算符重载格式 2.2 赋值运算符只能重载成类的成员函数不能重载成全局函数 2.3…

使用postman发请求报错Error: connect ECONNREFUSED 127.0.0.1:33210

原因:代理服务器问题 解决: 两种方案任选其一 1.电脑网络设置,关闭代理服务器 2.postman 的设置proxy 取消勾选

Mac中VSCode配置vue项目环境

一、下载VSCode 进入VSCode官网,下载Mac版安装包 设置中文: vscode导航栏view -> Command Palette -> 输入Configure Display Language -> 选择简体中文 -> 重启 二、下载node.js 下载地址:node.js官网,建议下载长期维护版本…

交叉编译paho带SSL

1.新建文件夹 /home/yiweijiao/woke_lab/paho 2.解压paho.mqtt.c到/home/yiweijiao/woke_lab/paho/paho.mqtt.c 3.新建文件夹/home/yiweijiao/woke_lab/paho/openssl_lib 将已经交叉编译好的openssl复制到这里 4.cd /home/yiweijiao/woke_lab/paho/paho.mqtt.c 新建文件夹…

hive和datax數據採集數量對不上

hive和datax數據採集數量對不上 對數據的時候發現有些對不上,在hive中 staff_id DF67B3FC-02DD-4142-807A-DF4A75A4A22E’的數據只有1033 而在mysql中發現staff_id DF67B3FC-02DD-4142-807A-DF4A75A4A22E’的數據有4783條記錄(昨天的記錄是4781&#…

控制哈威比例多路阀放大板

控制各种不带电气位移反馈的HAWE哈威多路比例阀PSV系列、PSVF系列等比例电磁铁。 比例多路阀用于控制液压执行元件的运动方向的运动方向和运动速度(无级地,并且不取决于负载).为此,可使多个执行元件同时并相互独立地以不同的速度和压力工作,直到所有部分流量的总和达到泵的流量…

leetcode 404. 左叶子之和

2023.7.6 这道题关键就是要判断某个节点是否为左叶子节点,但是必须要靠他的父节点来判断,逻辑就是其父节点的左孩子不为空 并且 父节点的左孩子的左孩子和右孩子都为空,此时该节点就是左叶子了。 下面用两种迭代法求解: 队列&…

聚观早报|比亚迪在巴西建工厂;国产Model系列贡献约半数交付量

今日要闻:比亚迪在巴西建三座工厂;小米对华为锁屏专利发起无效宣告请求;国产Model系列贡献约半数交付量;杨澜公司回应数百万财产被冻结;雅虎公司计划重新上市 比亚迪在巴西建三座工厂 7 月 5 日消息,据比亚…

C语言学习(三十三)---动态内存(二)

在上一节的内容中,我们初步学习了有关动态内存的有关内容,但是在使用上实际上还有很多的细节问题,今天我们将继续对该部分的内容进行学习,好了,话不多说,开整!!! 动态内…

第一章 Android 基础--开发环境搭建

文章目录 1.Android 发展历程2.Android 开发机器配置要求3.Android Studio与SDK下载安装4.创建工程与创建模拟器5.观察App运行日志6.环境安装可能会遇到的问题7.练习题 本专栏主要在B站学习视频: B站Android视频链接 本视频范围:P1—P8 1.Android 发展历…

【机器学习核心总结】什么是KNN( K近邻算法)

什么是KNN( K近邻算法) 虽然名字中有NN,KNN并不是哪种神经网络,它全名K-Nearest-Neighbors:K近邻算法,是机器学习中常用的分类算法。 物以类聚,人以群分。KNN的基础思想很简单,要判断一个新数据的类别&…

AI最新开源:LMSYS Org开源LongChat、法律大语言模型ChatLaw、中文医疗对话模型扁鹊

一周SOTA:LMSYS Org开源LongChat、法律大语言模型ChatLaw、中文医疗对话模型扁鹊 文章目录 1. LMSYS Org发布LongChat,上下文碾压64K开源模型2. 北大团队发布法律大模型 ChatLaw3. 扁鹊:指令与多轮问询对话联合微调的医疗对话大模型 1. LMSY…

Linux 内核源代码情景分析(四)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核 Linux 设备驱动程序 Linux设备驱动开发详解 深入理解Linux虚拟内存管理 Linux 内核源代码情景分析(一) Linux 内核源代码情景分析(二) Linux 内核源代码情景分析&#xff…

开源项目推荐 【SkyEyeSystem】

大家好,今天向大家推荐一个开源项目——SkyEyeSystem。 这是一个基于Spring Boot的全网热点爬虫项目,旨在提供全面而准确的全网热搜数据。 关于项目 SkyEyeSystem通过定时任务间隔10min爬取全网热搜数据。目前包括的平台有: 微博热搜B站热…

Huawei Cloud EulerOS 安装 MySQL8.0

EulerOS 安装 MySQL8.0 安装MySQL配置文件 安装MySQL 当创建一个基于EulerOS的服务器时,MySQL是一个常见且强大的数据库管理系统选择。在此博客中,我将向您展示如何在EulerOS上安装MySQL 8.0。 步骤1:更新系统 在开始之前,让我…