【YOLOv5改进系列(9)】高效涨点----使用CAM(上下文增强模块)替换掉yolov5中的SPPF模块

在这里插入图片描述


文章目录

  • 🚀🚀🚀前言
  • 一、1️⃣ CAM模块详细介绍
  • 二、2️⃣CAM模块的三种融合模式
  • 三、3️⃣如何添加CAM模块
    • 3.1 🎓 添加CAM模块代码
    • 3.2 ✨添加yolov5s_CAM.yaml文件
    • 3.3 ⭐️修改yolo.py文相关文件
  • 四、4️⃣实验结果
    • 4.1 🎓 yolov5基准模型
    • 4.2 ✨使用CAM的weight连接方式
    • 4.3 ⭐️用CAM的adaptive连接方式
    • 4.4 🎯用CAM的concat连接方式
    • 4.5 🚀实验总结


在这里插入图片描述

👀🎉📜系列文章目录

【YOLOv5改进系列(1)】高效涨点----使用EIoU、Alpha-IoU、SIoU、Focal-EIOU替换CIou
【YOLOv5改进系列(2)】高效涨点----Wise-IoU详细解读及使用Wise-IoU(WIOU)替换CIOU
【YOLOv5改进系列(3)】高效涨点----Optimal Transport Assignment:OTA最优传输方法
【YOLOv5改进系列(4)】高效涨点----添加可变形卷积DCNv2
【YOLOv5改进系列(5)】高效涨点----添加密集小目标检测NWD方法
【YOLOv5改进系列(6)】高效涨点----使用DAMO-YOLO中的Efficient RepGFPN模块替换yolov5中的Neck部分
【YOLOv5改进系列(7)】高效涨点----使用yolov8中的C2F模块替换yolov5中的C3模块
【YOLOv5改进系列(8)】高效涨点----添加yolov7中Aux head 辅助训练头

🚀🚀🚀前言

CAM(上下文增强模块) 这个模块是出至于CONTEXT AUGMENTATION AND FEATURE REFINE- MENT NETWORK FOR TINY OBJECT DETECTION这篇论文,这是一个针对小目标检测的文本,提出了一种名为“上下文增强和特征细化网络”的方法。将多尺度展开卷积的特征从上到下融合注入到特征金字塔网络中,补充上下文信息。引入通道和空间特征细化机制,抑制多尺度特征融合中的冲突形成,防止微小目标淹没在冲突信息中。此外,提出了一种数据增强方法copy-reduce-paste,该方法可以增加训练过程中微小对象对损失的贡献,保证训练更加均衡。

博主也是使用该论文中的CAM模块去替换掉yolov5中的SPPF模块,在经过CAM三个不同的特征融合连接实验之后(分别是:weight, adaptive,concat),在我自己的疵点数据集上面效果非常好,尤其是使用adaptive连接方法,模型涨点非常高,map@0.5提升了7个百分点。

📜论文地址:基于上下文增强和特征细化网络的微小目标检测

🚀 由于该论文没有提供代码,没有办法像之前的改进一样,直接使用别人的代码修改参数,所以这边也是观看了很多博主的代码之后,自己总结复现了一下。


一、1️⃣ CAM模块详细介绍

微小目标检测需要上下文信息。所以提出使用不同空洞卷积速率的空洞卷积来获取不同感受野的上下文信息,以丰富FPN的上下文信息;下图就是CAM的结构图,在C5上以不同的空洞卷积速率进行空洞卷积,得到不同感受野的上下文信息,卷积核大小为3×3,空洞卷积速率为1、3和5。在这里插入图片描述
SPP模块:我第一次从论文中看到这个结构首先想到的就是和SPP模块比较类似,SPP的特征融合方式是:feature map首先经过一个卷积降维,然后分别进行kernel size为5, 9, 13的max polling层,最后将它们与降维之后的特征concat起来,然后再经过一个卷积将channel恢复成原来大小。
在这里插入图片描述

二、2️⃣CAM模块的三种融合模式

关于C5上面的三个特征融合方式有三种,(a)、(b)和(c)所示,
在这里插入图片描述
方法(a)和(c)分别为加权融合和拼接操作。即直接在空间维度通道维度上添加特征映射。方法(b)是一种自适应融合方法。具体来说,假设输入的大小可以表示为(bs, C, H, W),我们可以通过卷积、拼接和Softmax操作获得(bs, 3, H, W)的空间自适应权值。三个通道一对一地对应三个输入,通过计算加权和可以将上下文信息聚合到输出。(b)的方法需要进行更多的特征处理,通过实验发现,在我自己的中小型目标疵点数据集上该方法是优于另外两种方法。

在该论文中通过消融实验验证了每种融合方法的有效性,结果如下表所示。 AP ⁡ s \operatorname{AP}_{\mathrm{s}} APs AP ⁡ m \operatorname{AP}_{\mathrm{m}} APm AP ⁡ l \operatorname{AP}_{\mathrm{l}} APl分别定义为微小、中等和大型目标的精度。 AR ⁡ s \operatorname{AR}_{\mathrm{s}} ARs AR ⁡ m \operatorname{AR}_{\mathrm{m}} ARm AR ⁡ l \operatorname{AR}_{\mathrm{l}} ARl分别表示小、中、大目标的召回率。由表1可以看出,(c)对微小物体的优势最大。 AP ⁡ s \operatorname{AP}_{\mathrm{s}} APs AR ⁡ s \operatorname{AR}_{\mathrm{s}} ARs均增长1.8%。方法(b)对于大中型目标改善最大。方法(a)带来的改进基本上介于两者之间。

在这里插入图片描述

三、3️⃣如何添加CAM模块

3.1 🎓 添加CAM模块代码

首先找到models文件夹下面找到common.py文件,在该文件中的最后一行添加CAM模块代码,添加内容如下:

class CAM(nn.Module):
    def __init__(self, inc, fusion='weight'):
        super().__init__()

        assert fusion in ['weight', 'adaptive', 'concat'] #三种融合方式
        self.fusion = fusion

        self.conv1 = Conv(inc, inc, 3, 1, None, 1, 1)
        self.conv2 = Conv(inc, inc, 3, 1, None, 1, 3)
        self.conv3 = Conv(inc, inc, 3, 1, None, 1, 5)

        self.fusion_1 = Conv(inc, inc, 1)
        self.fusion_2 = Conv(inc, inc, 1)
        self.fusion_3 = Conv(inc, inc, 1)

        if self.fusion == 'adaptive':
            self.fusion_4 = Conv(inc * 3, 3, 1)

    def forward(self, x):
        x1 = self.conv1(x)
        x2 = self.conv2(x)
        x3 = self.conv3(x)

        if self.fusion == 'weight':
            return self.fusion_1(x1) + self.fusion_2(x2) + self.fusion_3(x3)
        elif self.fusion == 'adaptive':
            fusion = torch.softmax(
                self.fusion_4(torch.cat([self.fusion_1(x1), self.fusion_2(x2), self.fusion_3(x3)], dim=1)), dim=1)
            x1_weight, x2_weight, x3_weight = torch.split(fusion, [1, 1, 1], dim=1)
            return x1 * x1_weight + x2 * x2_weight + x3 * x3_weight
        else:
            return torch.cat([self.fusion_1(x1), self.fusion_2(x2), self.fusion_3(x3)], dim=1)

3.2 ✨添加yolov5s_CAM.yaml文件

这个文件你可以直接复制yolov5s.yaml文件,然后重命名为yolov5s_CAM.yaml,这里只需要修改一处地方,就是将backbone特征提取部分的最后一层SPPF模块替换成CAM模块,并且指定特征的连接方式(weight、adaptive、concat),修改内容如下:

在这里插入图片描述

3.3 ⭐️修改yolo.py文相关文件

📌在models文件夹下面找到yolo.py文件,在342行添加一个CAM模块判断代码,添加如下:

elif m is CAM:
    c1, c2 = ch[f], (ch[f] * 3 if args[0] == 'concat' else ch[f])
    args = [c1, args[0]]

在这里插入图片描述

四、4️⃣实验结果

4.1 🎓 yolov5基准模型

训练结果:F1置信度分数为0.71、map@0.5=0.779;
在这里插入图片描述

4.2 ✨使用CAM的weight连接方式

训练结果:F1置信度分数为0.73、map@0.5=0.796;
在这里插入图片描述

4.3 ⭐️用CAM的adaptive连接方式

训练结果F1置信度分数为0.73、map@0.5=0.851
在这里插入图片描述

4.4 🎯用CAM的concat连接方式

训练结果:F1置信度分数为0.73、map@0.5=0.821;
在这里插入图片描述

4.5 🚀实验总结

我的疵点数据集是有大目标和小目标的,使用自适应的连接方式训练效果最好,map@0.5提升了将近7个百分点,其次就是concat连接方式提升效果排第二,因为我的疵点数据集小目标其实是多余大目标的,所以效果是要优于weight连接方式。


在这里插入图片描述

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

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

相关文章

RegionCLIP网络结构解析 Region-based Language-Image Pretraining

1、简单介绍 主要是关注目标检测方面的工作,现在纯CV已经前景黯淡,即使前段时间的YOLOv9发布也是关注一般。 现在大模型已成热点,而大模型要求的数据量和算力和算法复杂度,显然让很多人却步。但是具有大模型特点的多模态算法也算…

前端订阅后端推送WebSocket定时任务

0.需求 后端定时向前端看板推送数据,每10秒或者30秒推送一次。 1.前言知识 HTTP协议是一个应用层协议,它的特点是无状态、无连接和单向的。在HTTP协议中,客户端发起请求,服务器则对请求进行响应。这种请求-响应的模式意味着服务器…

江大白 | 万字长文,近3年Transformer在小目标检测领域,进展与突破系统梳理!

本文来源公众号“江大白”,仅用于学术分享,侵权删,干货满满。 原文链接:万字长文,近3年Transformer在小目标检测领域,进展与突破系统梳理! 以下文章来源于微信公众号:AI视界引擎 …

基于wordcloud、matplotlib等对某东评论数据情感分析-Python数据分析项目

基于wordcloud、matplotlib等对某东评论数据情感分析 文章目录 基于wordcloud、matplotlib等对某东评论数据情感分析1 数据导入及预处理1.1 数据导入1.2 数据描述1.3 数据预处理 2 情感分析2.1 情感分析2.2 情感分直方图2.3 词云图2.4 关键词提取 3 积极评论与消极评论3.1 积极…

【协议】RPC

文章目录 概述与web service/web api/wcf区别简介区别和联系 grpc.Net Core示例 参考 概述 与web service/web api/wcf区别 简介 RPC(Remote Procedure Call Protocol)即远程过程调用协议,是分布式系统间通信的一种协议。通过网络从远程计…

三星加强Bixby智能:迈向生成式AI,抗衡谷歌Gemini

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

文件操作(详解)

该片博客有点长大家可以通过目录选择性阅读 这是个人主页 敲上瘾-CSDN博客 目录 1. 为什么使⽤⽂件? 2. 什么是⽂件? 2.1 程序⽂件 2.2 数据⽂件 2.3 ⽂件名 3. ⼆进制⽂件和⽂本⽂件? 4. ⽂件的打开和关闭 4.1 流和标准流 4.1.1 流…

29-控制流(下):iam-apiserver服务核心功能实现讲解

我们再来看下 iam-apiserver 中的核心功能实现。 这些关键代码设计分为 3 类,分别是应用框架相关的特性、编程规范相关的特性和其他特性。 应用框架相关的特性 应用框架相关的特性包括三个,分别是优雅关停、健康检查和插件化加载中间件。 优雅关停 …

二维码:技术、商业与未来

title: 二维码:技术、商业与未来 date: 2024/4/3 19:12:28 updated: 2024/4/3 19:12:28 tags: 二维码技术商业应用移动支付物联网AR/VR融合智能家居数字化社会 第一章:引言 1. 二维码在数字化时代的重要性和普及程度 在数字化时代,二维码作…

程序员的升级打怪之路

#程序人生 写在前面 转眼间,我已经进入程序员的大门已经近4个春秋了(算上实习的话,那就是快5年了…🐶.🐶.🐶不能再展开了,再不就暴露年龄了😅)。 这段时间&#xff0c…

element-ui card 组件源码分享

今日简单分享 card 组件源码,主要从以下两个方面: 一、card 组件页面结构 二、card 组件属性 2.1 header 属性,设置 header,也可以通过 slot#header 传入 DOM,类型 string,无默认值。 组件使用部分&#…

[做cpu] 第二次仿真实验

实现ori指令后,还得解决流水中数据相关的事,MIPS中只需要解决RAW(在写操作后读),利用数据前推解决 相隔两条指令, 通过标志位判断直接把回写的内容作为读入译码的数据。 仿真出错原因:在顶层模…

spring总结-基于XML管理bean超详细

spring ioc总结-基于XML管理bean 前言实验一 [重要]创建bean1、目标和思路①目标②思路 2、创建Maven Module3、创建组件类4、创建spring配置文件7、无参构造器8、用IOC容器创建对象和自己建区别 实验二 [重要]获取bean1、方式一:根据id获取2、方式二:根…

20.安全性测试与评估

每年都会涉及;可能会考大题;多记!!! 典型考点:sql注入、xss; 从2个方面记: 1、测试对象的功能、性能; 2、相关设备的工作原理; 如防火墙,要了解防…

redis---主从复制

主从复制是指将一台redis服务器的数据复制到其他redis服务器,也叫主节点和从节点。 一个主节点可以有多个从节点。而每个从节点只能有一个主节点。数据的复制是单向的,只能由主节点到从节点。一般来说,主节点负责写操作,从节点负…

公众号搜索被降权后多久能恢复?

公众号搜索被降权后的恢复时间是一个复杂的问题,它涉及到多种因素的综合考量。首先,违规的严重程度是一个重要的因素。如果违规行为较为轻微,可能只需要较短的时间就能恢复搜索权重;而如果违规行为较为严重,可能需要更长的时间&am…

vue实现导出列表为xlsx文件

1.安装依赖 npm install --save xlsx file-saver 2.引入依赖 import FileSaver from file-saver; import * as XLSX from xlsx; 3.代码实现 <el-button type"primary" click"exportData">导出数据</el-button><el-tableid"table_ex…

与 ChatGPT 对话

原文&#xff1a;Conversing With ChatGPT 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 ChatGPT 人工智能 尽管人工智能带来了许多好处和进步&#xff0c;但仍有一些话题引发担忧并引发道德、社会和存在问题。以下是与人工智能相关的一些最可怕的话题&#xff1a…

数据结构算法题(力扣)——链表

以下题目建议大家先自己动手练习&#xff0c;再看题解代码。这里只提供一种做法&#xff0c;可能不是最优解。 1. 移除链表元素&#xff08;OJ链接&#xff09; 题目描述&#xff1a;给一个链表的头节点 head 和一个整数 val &#xff0c;删除链表中所有满足值等于 val 的节点…

954: 单链表的链接

学习版 【c语言】 【C艹】 #include<iostream>class LinkedList { public:struct LinkedNode {char val;LinkedNode* next;LinkedNode(char val) :val(val), next(NULL) {};};LinkedList(){dummyHead new LinkedNode(0);tail dummyHead;}~LinkedList() {while (dummy…
最新文章