[yolov11改进系列]基于yolov11引入迭代注意力特征融合iAFF的python源码+训练源码

article/2025/8/4 7:49:50

【iAFF介绍】

1. IAFF(迭代注意力特征融合)
iAFF通过引入多尺度通道注意力模块和迭代融合,更好的整合不同尺度和语义不一致的特征,有效解决特征融合问题,提高目标检测的精度。

特征融合,即不同层或分支的特征组合,是现代网络架构中普遍存在的一部分,通常通过简单的操作实现,例如加和串联,但这可能不是最佳选择。本文提出了一种统一且通用的方案,即注意力特征融合,适用于大多数常见场景,包括由短跳和长跳连接以及Inception层内部引起的特征融合。为了更好的融合具有不一致语义和尺度的特征,本文提出了一个多尺度通道注意力模块,解决了不同尺度特征融合时出现的问题。本文展示了特征图初始整合可能成为瓶颈,这个问题可以通过增加另一层注意力来缓解,称之为迭代注意力特征融合。使用较少的层或参数,获得更好的结果。

2. iAFF创新点
iAFF主要思想在于通过更精细的注意力机制来改善特征融合,从而增强CNN。它不仅处理了由于尺度和语义不一致而引起的特征融合问题,还引入了多尺度通道注意力模块,提供了一种统一且通用的特征融合方案。此外,iAFF通过迭代注意力特征融合来解决特征图初始整合可能成为的瓶颈。这种方法使得模型即使在层数或参数较少的情况下,也能区的较好的效果。

iAFF的创新点主要包括:

注意力特征融合:提出了一种新的特征融合方式,利用注意力机制来改善传统的简单特征融合方法(加和或串联)
多尺度通道注意力模块:解决了在不同尺度上融合特征时出现的问题,特别时语义和尺度不一致的特征融合问题。
迭代注意力特征融合(iAFF):通过迭代的应用注意力机制来改善特征图的初步整合,克服了初步整合可能成为性能瓶颈的问题

这张图片是关于所提出的AFF(注意力特征融合)和IAFF(迭代注意力特征融合)的示意图。

(a)AFF:一个通过多尺度通道注意力模块(MS-CAM)来融合不同特征的基本框架。特征图X和Y通过MS-CAM和其他操作融合,产生输出Z

(b)iAFF:与AFF类似,但添加了迭代结构,输出Z回馈到输入,与X和Y一起再次经过MS-CAM和融合操作,以进一步细化特征融合过程

 【yolov11框架介绍】

2024 年 9 月 30 日,Ultralytics 在其活动 YOLOVision 中正式发布了 YOLOv11。YOLOv11 是 YOLO 的最新版本,由美国和西班牙的 Ultralytics 团队开发。YOLO 是一种用于基于图像的人工智能的计算机模

Ultralytics YOLO11 概述

YOLO11 是Ultralytics YOLO 系列实时物体检测器的最新版本,以尖端的精度、速度和效率重新定义了可能性。基于先前 YOLO 版本的令人印象深刻的进步,YOLO11 在架构和训练方法方面引入了重大改进,使其成为各种计算机视觉任务的多功能选择。

Key Features 主要特点

  • 增强的特征提取:YOLO11采用改进的主干和颈部架构,增强了特征提取能力,以实现更精确的目标检测和复杂任务性能。
  • 针对效率和速度进行优化:YOLO11 引入了精致的架构设计和优化的训练管道,提供更快的处理速度并保持准确性和性能之间的最佳平衡。
  • 使用更少的参数获得更高的精度:随着模型设计的进步,YOLO11m 在 COCO 数据集上实现了更高的平均精度(mAP),同时使用的参数比 YOLOv8m 少 22%,从而在不影响精度的情况下提高计算效率。
  • 跨环境适应性:YOLO11可以无缝部署在各种环境中,包括边缘设备、云平台以及支持NVIDIA GPU的系统,确保最大的灵活性。
  • 支持的任务范围广泛:无论是对象检测、实例分割、图像分类、姿态估计还是定向对象检测 (OBB),YOLO11 旨在应对各种计算机视觉挑战。

​​

与之前的版本相比,Ultralytics YOLO11 有哪些关键改进?

Ultralytics YOLO11 与其前身相比引入了多项重大进步。主要改进包括:

  • 增强的特征提取:YOLO11采用改进的主干和颈部架构,增强了特征提取能力,以实现更精确的目标检测。
  • 优化的效率和速度:精细的架构设计和优化的训练管道可提供更快的处理速度,同时保持准确性和性能之间的平衡。
  • 使用更少的参数获得更高的精度:YOLO11m 在 COCO 数据集上实现了更高的平均精度(mAP),参数比 YOLOv8m 少 22%,从而在不影响精度的情况下提高计算效率。
  • 跨环境适应性:YOLO11可以跨各种环境部署,包括边缘设备、云平台和支持NVIDIA GPU的系统。
  • 支持的任务范围广泛:YOLO11 支持多种计算机视觉任务,例如对象检测、实例分割、图像分类、姿态估计和定向对象检测 (OBB)

【测试环境】

windows10 x64

ultralytics==8.3.0

torch==2.3.1

【改进流程】

1. 新增iAFF.py实现模块(代码太多,核心模块源码请参考改进步骤.docx)然后在同级目录下面创建一个__init___.py文件写代码

from .iAFF import *

2. 文件修改步骤

修改tasks.py文件

创建模型配置文件

yolo11-C3k2-iAFFyaml内容如下:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLO11 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'# [depth, width, max_channels]n: [0.50, 0.25, 1024] # summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPss: [0.50, 0.50, 1024] # summary: 319 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPsm: [0.50, 1.00, 512] # summary: 409 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPsl: [1.00, 1.00, 512] # summary: 631 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPsx: [1.00, 1.50, 512] # summary: 631 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs# YOLO11n 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, 2, C3k2_iAFF, [256, False, 0.25]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 2, C3k2_iAFF, [512, False, 0.25]]- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16- [-1, 2, C3k2_iAFF, [512, True]]- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32- [-1, 2, C3k2_iAFF, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 2, C2PSA, [1024]] # 10# YOLO11n head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 2, C3k2_iAFF, [512, False]] # 13- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 2, C3k2_iAFF, [256, False]] # 16 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P4- [-1, 2, C3k2_iAFF, [512, False]] # 19 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 10], 1, Concat, [1]] # cat head P5- [-1, 2, C3k2_iAFF, [1024, True]] # 22 (P5/32-large)- [[16, 19, 22], 1, Detect, [nc]] # Detect(P3, P4, P5)
3. 验证集成

git搜futureflsl/yolo-improve获取源码,然后使用新建的yaml配置文件启动训练任务:

from ultralytics import YOLOif __name__ == '__main__':model = YOLO('yolo11-C3k2-iAFF.yaml')  # build from YAML and transfer weights# Train the modelresults = model.train(data='coco128.yaml',epochs=100, imgsz=640, batch=8, device=0, workers=1, save=True,resume=False)

成功集成后,训练日志中将显示iAFF模块的初始化信息,表明已正确加载到模型中。

【训练说明】

第一步:首先安装好yolov11必要模块,可以参考yolov11框架安装流程,然后卸载官方版本pip uninstall ultralytics,最后安装改进的源码pip install .
第二步:将自己数据集按照dataset文件夹摆放,要求文件夹名字都不要改变
第三步:分别打开train.py,coco128.yaml和模型参数yaml文件修改必要的参数,最后执行python train.py即可训练

【提供文件】

├── [官方源码]ultralytics-8.3.0.zip
├── train/
│   ├── coco128.yaml
│   ├── dataset/
│   │   ├── train/
│   │   │   ├── images/
│   │   │   │   ├── firc_pic_1.jpg
│   │   │   │   ├── firc_pic_10.jpg
│   │   │   │   ├── firc_pic_11.jpg
│   │   │   │   ├── firc_pic_12.jpg
│   │   │   │   ├── firc_pic_13.jpg
│   │   │   ├── labels/
│   │   │   │   ├── classes.txt
│   │   │   │   ├── firc_pic_1.txt
│   │   │   │   ├── firc_pic_10.txt
│   │   │   │   ├── firc_pic_11.txt
│   │   │   │   ├── firc_pic_12.txt
│   │   │   │   ├── firc_pic_13.txt
│   │   └── val/
│   │       ├── images/
│   │       │   ├── firc_pic_100.jpg
│   │       │   ├── firc_pic_81.jpg
│   │       │   ├── firc_pic_82.jpg
│   │       │   ├── firc_pic_83.jpg
│   │       │   ├── firc_pic_84.jpg
│   │       ├── labels/
│   │       │   ├── firc_pic_100.txt
│   │       │   ├── firc_pic_81.txt
│   │       │   ├── firc_pic_82.txt
│   │       │   ├── firc_pic_83.txt
│   │       │   ├── firc_pic_84.txt
│   ├── train.py
│   ├── yolo11-C3k2-iAFF.yaml
│   └── 训练说明.txt
├── [改进源码]ultralytics-8.3.0.zip
├── 改进原理.docx
└── 改进流程.docx

 【常见问题汇总】
问:为什么我训练的模型epoch显示的map都是0或者map精度很低?
回答:由于源码改进过,因此不能直接从官方模型微调,而是从头训练,这样学习特征能力会很弱,需要训练很多epoch才能出现效果。此外由于改进的源码框架并不一定能够保证会超过官方精度,而且也有可能会存在远远不如官方效果,甚至精度会很低。这说明改进的框架并不能取得很好效果。所以说对于框架改进只是提供一种可行方案,至于改进后能不能取得很好map还需要结合实际训练情况确认,当然也不排除数据集存在问题,比如数据集比较单一,样本分布不均衡,泛化场景少,标注框不太贴合标注质量差,检测目标很小等等原因
【重要说明】
我们只提供改进框架一种方案,并不保证能够取得很好训练精度,甚至超过官方模型精度。因为改进框架,实际是一种比较复杂流程,包括框架原理可行性,训练数据集是否合适,训练需要反正验证以及同类框架训练结果参数比较,这个是十分复杂且漫长的过程。


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

相关文章

springboot-响应接收与ioc容器控制反转、Di依赖注入

1.想将服务器中的数据返回给客户端,需要在controller类上加注解:ResponseBody; 这个注解其实在前面已经使用过,RestController其实就包含两个注解: Controller ResponseBody 返回值如果是实体对象/集合,将会转换为j…

idea中springboot2.7(由于步入另一个线程,已跳过 xxx 处的断点)

idea springboot2.7 debug 问题 springboot 2.7 debug 模式时引入 spring-boot-devtools 卡在代码中不往下执行&#xff0c;提示&#xff1a;由于步入另一个线程&#xff0c;已跳过 xxx 处的断点。 原因 springboot 2.7 引入 spring-boot-devtools <!-- debug时不推荐开…

ROS应用之如何配置RTOS满足机器人系统中的实时要求

如何配置RTOS以满足机器人系统中的实时要求 前言 实时操作系统&#xff08;RTOS&#xff09;在机器人系统中的应用至关重要&#xff0c;尤其在需要对环境变化做出快速反应的高精度控制系统中。ROS2作为开源机器人操作系统&#xff0c;为机器人提供了强大的框架和工具链&#x…

03 APP 自动化-定位元素工具元素定位

文章目录 一、Appium常用元素定位工具1、U IAutomator View Android SDK 自带的定位工具2、Appium Desktop Inspector3、Weditor安装&#xff1a;Weditor工具的使用 4、uiautodev通过定位工具获取app页面元素有哪些属性 二、app 元素定位方法 一、Appium常用元素定位工具 1、U…

数学分析——一致性(均匀性)和收敛

目录 1. 连续函数 1.1 连续函数的定义 1.2 连续函数的性质 1.2.1 性质一 1.2.2 性质二 1.2.3 性质三 1.2.4 性质四 2. 一致连续函数 2.1 一致连续函数的定义 2.2 一致连续性定理(小间距定理)(一致连续函数的另一种定义) 2.3 一致连续性判定法 2.4 连…

并发执行问题 (上)

S3和S4 没法区别 i存在 父进程数据区 子进程存在数据区 所以返回值不一样 通过返回值运行不一样的代码 原来的进程镜像作废,运行的执行新的elf文件

一周学会Pandas2之Python数据处理与分析-数据重塑与透视-pivot_table() - 透视表 (长 -> 宽,支持聚合)

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili pivot_table() 是 pandas 中最强大的数据透视工具&#xff0c;它不仅能重塑数据&#xff0c;还能进行复杂的数据聚合…

郑钦文抢七险胜萨姆索诺娃 首次闯进法网八强

6月1日,在2025年法国网球公开赛女单第四轮比赛中,赛会8号种子、中国选手郑钦文以2:1战胜俄罗斯选手萨姆索诺娃,首次闯进法网女单八强。这场比赛耗时2小时47分钟,双方在场上展开了激烈的争夺。首盘比赛双方陷入苦战,郑钦文通过更深的落点限制对手进攻,并且在多拍回合中展现…

robot_lab学习笔记【MDP综述】

文章目录 整体介绍第一部分第二部分第三部分总结 整体介绍 在robot_lab中的mdp文件夹下面包含6个文件&#xff1a;[init.py , commands.py , curiculums.py, events.py , observations.py , rewards.py ] 对每个部分的详细讲解在总结中会指向子链接 init.py文件的代码如下 …

Leetcode 2093. 前往目标城市的最小费用

1.题目基本信息 1.1.题目描述 一组公路连接 n 个城市&#xff0c;城市编号为从 0 到 n - 1 。 输入包含一个二维数组 highways &#xff0c;其中 highways[i] [city1i, city2i, tolli] 表示有一条连接城市 city1i 和 city2i 的双向公路&#xff0c;允许汽车缴纳值为 tolli 的…

【C++】模板与特化技术全面教程(claude sonnet 4)

第一章&#xff1a;模板的基础概念 (Template Fundamentals) 1.1 什么是模板&#xff1f; 模板 (Template) 是C中的一种泛型编程 (Generic Programming) 机制&#xff0c;它允许我们编写与类型无关的代码。想象一下&#xff0c;如果我们要为不同的数据类型编写相同逻辑的函数&a…

VBA数据库解决方案二十:Select表达式From区域Where条件Order by

《VBA数据库解决方案》教程&#xff08;版权10090845&#xff09;是我推出的第二套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器&#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…

【2025最新】Java图书借阅管理系统:从课程作业到实战应用的完整解决方案

【2025最新】Java图书借阅管理系统&#xff1a;从课程作业到实战应用的完整解决方案 目录 【2025最新】Java图书借阅管理系统&#xff1a;从课程作业到实战应用的完整解决方案**系统概述** **核心功能模块详解****1. 系统登录与权限控制****2. 借阅管理模块****3. 用户角色管理…

结合源码分析Redis的内存回收和内存淘汰机制,LRU和LFU是如何进行计算的?

Redis 内存回收 1. 过期 key 处理 Redis 之所以性能强&#xff0c;最主要的原因就是基于内存存储。然而单节点的 Redis 其内存大小不宜过大&#xff0c;会影响持久化或主从同步性能。我们可以通过修改配置文件来设置Redis的最大内存&#xff1a; 当内存使用达到上限时&#…

NLP学习路线图(十五):TF-IDF(词频-逆文档频率)

在自然语言处理&#xff08;NLP&#xff09;的浩瀚宇宙中&#xff0c;TF-IDF&#xff08;词频-逆文档频率&#xff09; 犹如一颗恒星&#xff0c;虽古老却依然璀璨。当ChatGPT、BERT等大模型光芒四射时&#xff0c;TF-IDF作为传统方法的代表&#xff0c;其简洁性、高效性与可解…

C++11(上)

历史&#xff1a; 在C98版本后&#xff0c;C11是一次大版本的更新。在C11中新增了许多有用的东西。接下来将由小编来带领大家介绍C11中新增的内容。 列表初始化: 在C中&#xff0c;列表初始化&#xff08;也称为统一初始化或花括号初始化&#xff09;是一种使用花括号 {} 来初…

从TCO角度分析IBM Cognos Analytics

一、总拥有成本&#xff08;TCO&#xff09;分析 像 Cognos Analytics 这样成熟的企业级 BI 平台&#xff0c;在与新兴的敏捷 BI 工具竞争中&#xff0c;依然能够保持其独特价值和竞争力的关键所在&#xff0c;尤其从企业和组织的长远发展、团队协作以及总拥有成本&#xff08…

使用西门子博图V16时遇到了搜索功能报错的问题,提示缺少SIMATIC Visualization Architect组件怎么办,全网首发

先上解决方案&#xff0c;这个太简单了&#xff0c;直接上官网下载&#xff0c;这个安装包40M&#xff0c;很快就下载完了&#xff0c;然后直接安装就可以了。 官网链接SIMATIC Visualization Architect V16 TRIAL Download - ID: 109772966 - Industry Support Siemens 今天我…

STM32G4 电机外设篇(三) TIM1 发波 和 ADC COMP DAC级联

目录 一、STM32G4 电机外设篇&#xff08;三&#xff09; TIM1 发波 和 ADC COMP DAC级联1 TIM1 高级定时器发波1.1 stm32cubemx配置 2 TIM1 ADC COMP DAC级联2.1 stm32cubemx配置 附学习参考网址欢迎大家有问题评论交流 (* ^ ω ^) 一、STM32G4 电机外设篇&#xff08;三&…

12 Java GUI

Java 在图形开发中的占比并不是特别突出&#xff0c;尤其在传统的客户端图形界面开发方面。不是现代 UI 设计的首选 C#的WinForms&#xff08;传统&#xff09;、WPF&#xff08;现代&#xff09;是Windows 桌面开发的王者 跨平台&#xff08;Windows/macOS/Linux&#xff09;&…