YOLOv10改进|爆改模型|涨点|C2F引入空间和通道注意力模块暴力涨点(附代码+修改教程)

article/2025/6/21 18:40:59

 一、文本介绍

本文修改的模型是YOLOv10,YOLOv10无需非极大值抑制(NMS)进行后处理,其推理速度以及参数量上都优于现有的模型。C2f (Cross-Stage Partial-Connection with 2 convolutions) 模块是YOLOv6中引入的一种结构,其主要目的是在保持高效性的同时,增强特征融合能力。它通过将输入特征图拆分为两部分,一部分直接通过,另一部分经过一系列卷积操作后再与前者拼接,从而实现跨阶段的特征融合。尽管C2f在YOLOv6中表现出色,但多尺度目标检测仍然是一个核心挑战。在实际场景中,目标的大小差异巨大,从几十个像素的小目标到上千个像素的大目标都可能存在。这给模型带来了以下挑战:

  • 小目标信息丢失: 经过多层卷积和下采样后,小目标的特征信息容易丢失,导致检测困难。
  • 大目标特征冗余: 大目标包含的像素信息较多,如果模型不加区分地处理,可能会引入冗余,降低计算效率。
  • 感受野与尺度不匹配: 不同尺度的目标需要不同大小的感受野才能有效提取特征。单一的感受野设计难以同时适应所有尺度。

因此本文提出一种在C2F后面引入 CBAM(Convolutional Block Attention Module)空间和通道注意力模块,处理多尺度问题时,提升模型的性能和鲁棒性。(本文以YOLOv10为例,C2F在YOLOv6后的版本几乎都存在,可以在v6、v8等等yolo系列算法上修改)

YOLOv10论文地址:https://arxiv.org/pdf/2405.14458

C2F模块出处:https://arxiv.org/pdf/2209.02976

CBAM注意力模块论文:https://arxiv.org/pdf/1807.06521

二、模型图

模型架构

C2F模块:

CBAM模块:

三、核心代码 

在block.py中追加CBAM模块的具体代码如下:

class ChannelAttention(nn.Module):def __init__(self, in_planes, ratio=16):super(ChannelAttention, self).__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.max_pool = nn.AdaptiveMaxPool2d(1)self.fc = nn.Sequential(nn.Conv2d(in_planes, in_planes // ratio, 1, bias=False),nn.ReLU(),nn.Conv2d(in_planes // ratio, in_planes, 1, bias=False))self.sigmoid = nn.Sigmoid()def forward(self, x):avg_out = self.fc(self.avg_pool(x))max_out = self.fc(self.max_pool(x))out = avg_out + max_outreturn self.sigmoid(out)class SpatialAttention(nn.Module):def __init__(self, kernel_size=7):super(SpatialAttention, self).__init__()assert kernel_size in (3, 7), 'kernel size must be 3 or 7'padding = 3 if kernel_size == 7 else 1self.conv1 = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False)self.sigmoid = nn.Sigmoid()def forward(self, x):avg_out = torch.mean(x, dim=1, keepdim=True)max_out = torch.max(x, dim=1, keepdim=True)[0]x_cat = torch.cat([avg_out, max_out], dim=1)out = self.conv1(x_cat)return self.sigmoid(out)class CBAM(nn.Module):def __init__(self, in_planes, ratio=16, kernel_size=7):super(CBAM, self).__init__()self.ca = ChannelAttention(in_planes, ratio)self.sa = SpatialAttention(kernel_size)def forward(self, x):x = x * self.ca(x)x = x * self.sa(x)return x

其次在C2F模块中加入CBAM注意力代码如下:

class C2f(nn.Module):"""Faster Implementation of CSP Bottleneck with 2 convolutions, with integrated CBAM."""def __init__(self, c1: int, c2: int, n: int = 1, shortcut: bool = False, g: int = 1, e: float = 0.5):"""Initialize a CSP bottleneck with 2 convolutions and an optional CBAM module.Args:c1 (int): Input channels.c2 (int): Output channels.n (int): Number of Bottleneck blocks.shortcut (bool): Whether to use shortcut connections.g (int): Groups for convolutions.e (float): Expansion ratio."""super().__init__()self.c = int(c2 * e)self.cv1 = Conv(c1, 2 * self.c, 1, 1)# 移除了原有的 self.cv2 初始化,现在它只在下方被初始化一次self.m = nn.ModuleList(Bottleneck(self.c, self.c, shortcut, g, k=((3, 3), (3, 3)), e=1.0) for _ in range(n))# 在 Bottleneck 模块输出后和最终卷积前添加 CBAMself.cbam = CBAM((2 + n) * self.c) # CBAM作用于拼接后的特征self.cv2 = Conv((2 + n) * self.c, c2, 1) # 确保 cv2 只在这里初始化一次def forward(self, x: torch.Tensor) -> torch.Tensor:"""Forward pass through C2f layer with CBAM."""y_chunks = list(self.cv1(x).chunk(2, 1))bottleneck_outputs = []current_feature = y_chunks[-1]for m_block in self.m:current_feature = m_block(current_feature)bottleneck_outputs.append(current_feature)y_chunks.extend(bottleneck_outputs)concatenated_features = torch.cat(y_chunks, 1)# 应用 CBAM 到拼接后的特征attended_features = self.cbam(concatenated_features)return self.cv2(attended_features)def forward_split(self, x: torch.Tensor) -> torch.Tensor:"""Forward pass using split() instead of chunk(), with CBAM."""y = self.cv1(x).split((self.c, self.c), 1)y_chunks = [y[0], y[1]]bottleneck_outputs = []current_feature = y_chunks[-1]for m_block in self.m:current_feature = m_block(current_feature)bottleneck_outputs.append(current_feature)y_chunks.extend(bottleneck_outputs)concatenated_features = torch.cat(y_chunks, 1)attended_features = self.cbam(concatenated_features)return self.cv2(attended_features)

不需要在其他部分进行修改非常暴力,这也是为一个很好的水论文创新点方法,修改简单。当然可以尝试其他注意力或卷积模块(有需要可以私聊)。

其他部分不需要做任何修改。

# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024] # YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, SCDown, [512, 3, 2]] # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 1, PSA, [1024]] # 10# YOLOv8.0n head
head:- [[4, 6, 10, 4], 1, SDI, [64]]- [[4, 6, 10, 6], 1, SDI, [128]]- [[4, 6, 10, 10], 1, SDI, [256]]- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 12], 1, Concat, [1]] # cat backbone P4- [-1, 3, C2f, [512]] # 13- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 11], 1, Concat, [1]] # cat backbone P3- [-1, 3, C2f, [256]] # 16 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 16], 1, Concat, [1]] # cat head P4- [-1, 3, C2f, [512]] # 19 (P4/16-medium)- [-1, 1, SCDown, [512, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P5- [-1, 3, C2fCIB, [1024, True, True]] # 22 (P5/32-large)- [[19, 22, 25], 1, v10Detect, [nc]] # Detect(P3, P4, P5)


http://www.hkcw.cn/article/dBTOBkExBV.shtml

相关文章

38岁男子酒后拖拽6岁女童进巷被拘 警方迅速行动控制嫌疑人

警情通报2025年5月20日下午,嫌疑人刘某某(男,38岁)酒后行至娄底市娄星区涟滨中街附近,拖拽一名6岁女童进入居民区巷子,被居民及时制止并报警。接警后,民警迅速赶到现场将刘某某控制。经侦查,刘某某涉嫌寻衅滋事已被拘留,并将依法追究其刑事责任。公安机关坚决依法打击…

隔离防护产品防晒有效果吗 选购需谨慎

夏日来临,防晒化妆品迎来销售高峰。不少商家打出“防护+修复”的宣传口号,声称产品既能防晒,又能美白修复。然而,消费者购买使用后却发现,这些所谓“多效合一”的产品,其实很多都只是普通的化妆品。在北京多家日化用品销售店,防晒霜、防晒喷雾等产品被摆在最显眼的位置。…

俄将向乌移交6000具阵亡士兵遗体 谈判达成一致

俄罗斯与乌克兰两国代表团于6月2日在土耳其伊斯坦布尔进行了第二轮直接谈判。双方就交换阵亡士兵遗体及新一轮换俘达成一致。谈判持续了约1小时,俄罗斯总统助理、俄方谈判代表团团长梅金斯基表示,俄方将在下周单方面向乌方移交6000具阵亡士兵遗体。梅金斯基还提到,俄乌将成立…

计算机视觉---深度学习框架(Backbone、Neck、Head)

一、主干(Backbone):视觉特征的“根基” 1. 核心定位与功能 定义: 作为网络的底层基础,主干负责从输入图像中提取多层次、多尺度的视觉特征,其输出的特征图(Feature Map)需兼顾空间…

使用Cursor自动创建Dify工作流

一、背景 AI时代,使用自然语言进行编程,让开发变成聊天一样容易。提升我们的效率,复杂的、重复性的工作交给AI 工具来做,本次尝试使用cursor自动创建dify工作流。 二、准备工作: 本地安装Cursor开发工具&#xff08…

泡泡玛特续创新高 市值突破3100亿港元

泡泡玛特(9992.HK)股价继续走强,盘中一度上涨2.43%,达到235.6港元,创下历史新高,市值突破3100亿港元。今年以来,该股累计涨幅超过160%。摩根大通发布报告表示,对中国IP产业的乐观前景更加有信心,将泡泡玛特列为首选之一,并给予“增持”评级。尽管大多数企业尚未见到显…

7人停车场殴打未成年 警方:全部抓获 因误会引发冲突

四川古蔺县警方通报了一起涉及未成年人的暴力事件。6月2日,两名未成年人骑车时发出笑声,被15岁的陈某甲误以为是在嘲笑自己。随后,陈某甲和其他六人在地下停车场对这两名未成年人进行了殴打。目前,七名涉事人员均已被警方抓获,其中两人已被刑事拘留。责任编辑:zhangxiaoh…

Python-matplotlib库画不规则图

matplotlib库之画不规则图 subplot2grid()实现灵活的网格布局GridSpec基本参数 简单的不规则 在 Matplotlib 中绘制不规则排列的图形(如大小不同、跨行跨列的子图) subplot2grid()实现灵活的网格布局 🏵️ 通过指定子图跨越的行数和列数实现…

abandon便签:一个免费好用审美在线的桌面便签应用

abandon便签:一个免费好用审美在线的桌面便签应用 项目gitee地址:abandon便签: 一个免费好用审美在线的桌面便签应用 下载链接:点我下载软件压缩包 注:下载压缩包后,解压即可。 项目初衷: 前段时间辞职&…

CppCon 2014 学习:(Costless)Software Abstractions for Parallel Architectures

硬件和科学计算的演变关系: 几十年来的硬件进步:计算机硬件不断快速发展,从提升单核速度,到多核并行。科学计算的驱动力:科学计算需求推动硬件创新,比如需要更多计算能力、更高性能。当前的解决方案是并行…

【MySQL】使用C语言连接数据库

目录 一、准备工作 二、数据表操作 (一)初始化数据库 (二)连接数据库 (三)设置字符集 (四)操作数据表 1、插入数据 2、删除数据 3、更新数据 4、查询数据 一、准备工作 在之…

高效会议记录工具使用指南

软件介绍 本文介绍一款名为"吗喽会议"的安卓平台会议记录软件,经过测试体验非常出色,特向大家推荐。 软件定位与核心功能 这是一款专为职场人士设计的会议记录应用程序,其核心优势在于强大的语音识别能力,能够实时将…

基于vue3-elemenyui的页面加载及新建浏览页案例

1.参考链接: 基于创建vue3链接:Vue3前端项目创建_vscode创建vue3项目-CSDN博客 基于创建elementui链接:Vue3引入ElementPlus_vue引入element-plus-CSDN博客 2.案例内容 该案例实现了基本的app.vue的路由跳转、新建浏览页参数传入以及浏览…

详解|证券、基金、期货:银证转账系统

Hi,围炉喝茶聊产品的新老朋友好!在话题未开始之前,先看组见证历史数据:2024年国庆节前,沪深两市成交额连续多日突破万亿。今日开盘后仅20分钟,沪深两市成交额突破1万亿元,刷新此前9月30日创下的历史最快万亿纪录。大量资金需要从银行存管账户转入证券存管账户。银行端和…

香港警方回应恒生银行抢劫案 嫌疑人暂未落网

香港一家恒生银行日前发生持刀抢劫案,持续引发关注。6月2日17时许,一名男子独自进入香港恒生银行沙田第一城分行,坐下约15分钟后突然拿出一把刀,威胁一名女性银行职员,并劫走约30余万港元及少量外币后逃离现场。案件导致一名银行职员颈部受轻伤,送往医院治疗后已出院,其…

政策朝令夕改 美国正在失去方向 关税政策摇摆不定

5月30日,美国总统特朗普宣布将进口钢铝关税上调至50%。短短几天内,美国关税政策再度急转弯,三项法院裁决让白宫主导的关税博弈更加复杂。美国国际贸易法院叫停大多数关税措施后,联邦巡回上诉法院暂时搁置“叫停令”。随后,一家联邦法院裁定总统无权利用“紧急权力”加征关…

雷军发文疑似回应余承东 诋毁即仰望

雷军发文疑似回应余承东 诋毁即仰望。6月1日,小米集团董事长雷军在其社交账号上发文称,公司正全力准备小米yu7的大规模量产,预计7月份开始。他还引用了莫言的一句名言:“诋毁,本身就是一种仰望。”5月31日下午,华为常务董事、终端BG董事长余承东在未来汽车先行者大会上表…

【Linux系列】Gunicorn 进程架构解析:主进程与工作进程

博客目录 引言一、Gunicorn 的基本架构概述二、主进程(Master Process)的职责分析三、工作进程(Worker Process)的功能剖析四、主进程与工作进程的交互机制五、多进程架构的优势与挑战六、实际运维中的常见场景分析七、进阶主题&a…

全国范围入户调查已开始 国家统计局发布跟访计划

国家统计局日前发布《致人口固定样本跟访调查对象的一封信》,决定于2025年在全国范围内开展两次人口固定样本跟访调查。这两次调查的标准时点分别是6月1日零时和11月1日零时。调查员将在6月1日至6月25日以及11月16日至12月5日期间入户开展调查工作。责任编辑:zhangxiaohua

女子连吃四天粽子视力骤降 糖尿病患者需谨慎饮食

女子连吃四天粽子视力骤降 糖尿病患者需谨慎饮食!赵女士今年60岁,在端午节期间,她从常去的两家棋牌室和社区活动中领到了不少粽子、咸鸭蛋和绿豆糕。为了防止食物变质,她决定尽快吃完这些食品。然而,在连续吃了四天粽子后,赵女士突然发现自己的左眼变得模糊不清,这让她非…