YOLO改进系列之注意力机制(GlobalContext模型介绍)

news/2024/7/10 23:23:20 标签: YOLO, 目标检测, pytorch, 注意力机制, YOLOv5

模型结构

通过捕获long-range dependency提取全局信息,对各种视觉任务都是很有帮助的,典型的方法是Non-local Network自注意力机制。对于每个查询位置(query position),Non-local network首先计算该位置和所有位置之间一个两两成对的关系,得到一个attention map。然后对attention map所有位置的权重加权求和得到汇总特征,每一个查询位置都得到一个汇总特征,将汇总特征与原始特征相加得到最终输出。对于某个query position,nNon-local network计算的另一个位置与该位置的关系即一个权重值表示这个位置对query位置的重要程度。但现有研究发现不同的query位置其对应的attention map几乎一样,如下图所示。
在这里插入图片描述

GlobalContext作者观察发现non-local block针对每个query position计算的attention map最终结果是独立于查询位置的,那么就没有必要针对每个查询位置计算了,因此提出计算一个通用的attention map并应用于输入feature map上的所有位置,大大减少了计算量的同时又没有导致性能的降低。此外,结合SE block,设计得到GlobalContext,既轻量又可以有效地建模全局上下文。GC Block结合了Non-local block和SE block的优点,多个任务上均超过了NLNet和SENet。GlobalContext的整体结构并不复杂,如下图所示。
在这里插入图片描述

论文地址:https://arxiv.org/pdf/1904.11492.pdf
代码仓库:https://github.com/xvjiarui/GCNet

实现代码

GlobalContext的实现代码如下所示:
在这里插入图片描述

YOLOv5_13">YOLOv5模型改进

本文在YOLOv5目标检测算法的Backbone和Head部分分别加入GlobalContext来增强目标提取能力,以下分别是在Backbone以及Head中改进的模型结构和参数(以YOLOv5s为例)。
在Backbone部分
在这里插入图片描述
在这里插入图片描述

在Head部分
在这里插入图片描述
在这里插入图片描述

总结

GlobalContext计算一个通用的attention map并应用于输入feature map上的所有位置,大大减少了计算量的同时又没有导致性能的降低,既轻量又可以有效地建模全局上下文。此外,GlobalContext可进一步应用于YOLOv7、YOLOv8等模型中,欢迎大家关注本博主的微信公众号 BestSongC,后续更多的资源如模型改进、可视化界面等都会在此发布。另外,本博主最近也在MS COCO数据集上跑了一些YOLOv5的改进模型,实验表明改进后的模型能在MS COCO 2017验证集上分别涨点1-3%,感兴趣的朋友关注后回复YOLOv5改进。


http://www.niftyadmin.cn/n/5219922.html

相关文章

什么是数据增强,为什么会让模型更健壮?

在做一些图像分类训练任务时,我们经常会遇到一个很尴尬的情况,那就是: 明明训练数据集中有很多可爱猫咪的照片,但是当我们给训练好的模型输入一张戴着头盔的猫咪进行测试时,模型就不认识了,或者说识别精度…

TestNG数据驱动DataProvider(4种方式)

TestNG数据驱动DataProvider(4种方式) 1、DataProvider用法(从二维数组中读取) 1、定义方法,加上@DataProvider注解 定义一个方法,方法名随意取,使用@DataProvider注解,注解中给这个provider起名字,该方法返回一个二维数组。例如:@DataProvider(name="testData&quo…

数据结构 | 堆排序

数据结构 | 堆排序 文章目录 数据结构 | 堆排序建立大堆排序结果以及全部代码 如果没有看过堆的实现的话可以先看前面的一章堆的实现,然后再来看这个堆排序,都是比较简单的~~ 这里堆排序首先建堆,建堆是要建小堆还是大堆呢? 在堆排…

231127 刷题日报

这周值班。。多少写道题吧,保持每天的手感。老婆给买了lubuladong纸质书,加油卷。 1. 131. 分割回文串 写个这个吧,钉在耻辱柱上的题。 为啥没写出来: 1. 递归树没画对 把树枝只看做是1个字母,而且不清楚树枝和节点…

Python---可变和非可变数据类型

在Python中一共有7种数据类型: 数值(int整型、float浮点类型)、bool类型(True和False)、字符串类型(str)、元组(tuple 1,2,3)、列表(list [1, 2, 3]&#xf…

每日一题:LeetCode-202.快乐数(一点都不快乐)

每日一题系列(day 06) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x1f50e…

LeetCode Hot100 33.搜索旋转排序数组

题目&#xff1a; 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], ..., nums[n-1], nu…

女公务员脱机玩转Python,怎么做到的?

更多高级的Python技术文章请关注微信公众号&#xff1a;愤怒的it男 一、写在前面的故事 今天我发现了一件很神奇的事情&#xff1a;一位很漂亮的美女公务员&#xff0c;坐在一台没有外网的电脑面前&#xff0c;优雅地敲着Python代码&#xff0c;而这台电脑装的还是32位win7这种…