当前位置: 首页 > news >正文

YOLO26 改进 - 注意力机制 空间增强注意力SEAM(Spatially Enhanced Attention Module)提升遮挡场景检测鲁棒性

前言

本文介绍了分离与增强注意力模块(SEAM)在YOLO26中的结合应用。SEAM模块旨在增强面部特征学习能力,特别是处理面部遮挡问题。它采用多头注意力机制强调面部区域、抑制背景区域,第一部分使用深度可分离卷积减少参数并学习通道重要性,通过1x1卷积增强通道联系,利用两层全连接网络融合通道信息,经指数归一化后作为注意力权重与原始特征相乘。我们将SEAM集成到YOLO26的检测头中,并进行相关注册和配置。实验表明,该方法有助于提升模型检测性能。

文章目录: YOLO26改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

专栏链接: YOLO26改进专栏

@

介绍

摘要

近年来,基于深度学习的人脸检测算法取得了重大进展,这些算法通常可划分为两类,即如Faster R - CNN的二阶段检测器和如YOLO的单阶段检测器。鉴于在精度与速度之间实现了更优平衡,单阶段检测器已在众多应用中得到广泛应用。在本文中,我们提出了一种基于单阶段检测器YOLOv5的实时人脸检测器,命名为YOLO - FaceV2。我们设计了一个名为RFE的感受野增强模块,用以增强小脸部的感受野,并采用NWD Loss来弥补交并比(IoU)对微小物体位置偏差的敏感性。针对面部遮挡问题,我们提出了一个名为SEAM的注意力模块,并引入排斥损失来加以解决。此外,我们运用一个名为Slide的权重函数来解决简单样本与困难样本之间的不平衡问题,并利用有效感受野的信息来设计锚点。在WiderFace数据集上的实验结果表明,我们的面部检测器性能超越了YOLO及其变体,在简单、中等和困难所有子集中均有体现。源代码可在https://github.com/Krasjet - Yu/YOLO - FaceV2获取。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

SEAM(Separated and Enhanced Attention Module)是YOLO-FaceV2中引入的一个模块,旨在增强面部特征的学习能力,特别是在面部遮挡的情况下。

  1. 多头注意力机制:SEAM模块采用了多头注意力机制,旨在强调图像中的面部区域,同时抑制背景区域。这种机制使得模型能够更好地关注到重要的面部特征,从而提高检测的准确性。
  2. 深度可分离卷积:SEAM的第一部分使用深度可分离卷积,这种卷积方式是逐通道进行的,能够有效减少参数数量,同时学习不同通道的重要性。通过这种方式,模型能够提取出更具代表性的特征。
  3. 通道关系的学习:虽然深度可分离卷积在减少参数方面表现良好,但它可能忽略通道之间的信息关系。为了解决这个问题,SEAM在深度卷积的输出后,使用1x1卷积进行点对点的组合,以增强通道之间的联系。这一过程有助于模型在遮挡场景中更好地理解被遮挡面部与未遮挡面部之间的关系。
  4. 全连接网络的融合:在通道关系学习之后,SEAM使用一个两层的全连接网络来融合每个通道的信息。这一过程进一步加强了通道之间的连接,使得模型能够更有效地处理面部遮挡问题。
  5. 指数归一化:SEAM模块的输出经过指数函数处理,将值范围从[0, 1]扩展到[1, e]。这种指数归一化提供了一种单调映射关系,使得结果对位置误差更加宽容,从而提高了模型的鲁棒性。
  6. 注意力机制的应用:最后,SEAM模块的输出被用作注意力权重,与原始特征相乘。这一过程使得模型能够更有效地处理面部遮挡,提高了对被遮挡面部的响应能力。

核心代码

class SEAM(nn.Module): def __init__(self, c1, c2, n, reduction=16): super(SEAM, self).__init__() if c1 != c2: c2 = c1 self.DCovN = nn.Sequential( # nn.Conv2d(c1, c2, kernel_size=3, stride=1, padding=1, groups=c1), # nn.GELU(), # nn.BatchNorm2d(c2), *[nn.Sequential( Residual(nn.Sequential( nn.Conv2d(in_channels=c2, out_channels=c2, kernel_size=3, stride=1, padding=1, groups=c2), nn.GELU(), nn.BatchNorm2d(c2) )), nn.Conv2d(in_channels=c2, out_channels=c2, kernel_size=1, stride=1, padding=0, groups=1), nn.GELU(), nn.BatchNorm2d(c2) ) for i in range(n)] ) self.avg_pool = torch.nn.AdaptiveAvgPool2d(1) self.fc = nn.Sequential( nn.Linear(c2, c2 // reduction, bias=False), nn.ReLU(inplace=True), nn.Linear(c2 // reduction, c2, bias=False), nn.Sigmoid() ) self._initialize_weights() # self.initialize_layer(self.avg_pool) self.initialize_layer(self.fc) def forward(self, x): b, c, _, _ = x.size() y = self.DCovN(x) y = self.avg_pool(y).view(b, c) y = self.fc(y).view(b, c, 1, 1) y = torch.exp(y) return x * y.expand_as(x) def _initialize_weights(self): for m in self.modules(): if isinstance(m, nn.Conv2d): nn.init.xavier_uniform_(m.weight, gain=1) elif isinstance(m, nn.BatchNorm2d): nn.init.constant_(m.weight, 1) nn.init.constant_(m.bias, 0) def initialize_layer(self, layer): if isinstance(layer, (nn.Conv2d, nn.Linear)): torch.nn.init.normal_(layer.weight, mean=0., std=0.001) if layer.bias is not None: torch.nn.init.constant_(layer.bias, 0)

实验

脚本

import warnings warnings.filterwarnings('ignore') from ultralytics import YOLO if __name__ == '__main__': # 修改为自己的配置文件地址 model = YOLO('./ultralytics/cfg/models/26/yolo26-SEAM.yaml') # 修改为自己的数据集地址 model.train(data='./ultralytics/cfg/datasets/coco8.yaml', cache=False, imgsz=640, epochs=10, single_cls=False, # 是否是单类别检测 batch=8, close_mosaic=10, workers=0, optimizer='MuSGD', amp=True, project='runs/train', name='yolo26-SEAM', )

结果

http://www.jsqmd.com/news/1175335/

相关文章:

  • 3种主流资产盘点流程对比:RFID、二维码与移动端App方案解析
  • 2026年7月官方帝舵维修服务中心全网公告|官方声明 - 帝舵官方维修中心
  • ESPectre完整指南:10分钟将Wi-Fi信号变身为隐私友好的智能运动传感器
  • 告别邮件客户端卡顿!用Himalaya在终端高效管理邮件的终极指南
  • Simple Comic:3步解决Mac漫画阅读的5大痛点,打造极致阅读体验
  • 5分钟实现VMware虚拟机完全隐身:新手终极配置指南
  • 亲身到店探访重庆雷达官方售后服务中心|网点地址及官方热线(2026年7月最新) - 亨得利钟表维修中心
  • ATE 自动测试设备选型指南:5 大主流平台对比与 3 个关键性能指标
  • 高级技巧:优化NVIDIA Llama-Nemotron-Colembed-VL-3B-V2推理性能的7个策略
  • 鸿蒙新特性实战:@ohos.events.emitter — 进程内事件总线与隔离通道
  • 常德上门回收黄金别踩坑!三区 6 家 24 小时正规实体店真人实测,2026 年 7 月大盘价零折旧费零上门费 - 不晚生活号
  • 2026阜阳黄金回收门店实测对比与安全变现避雷指南 - 天天开心12
  • Kubernetes图标库终极实战指南:从零开始构建专业架构图的完整方案
  • 深入理解Agents-A1-bf16的视觉塔结构:从图像输入到特征提取的全流程
  • IOPaint:开源AI修图神器,轻松去除图片中的任何元素
  • 3分钟上手!Android投屏神器scrcpy:无线控制+高清录制的完全指南
  • 智能电表测试软件对比:DL645.exe 与 DL/T645 Master Simulator 的 5 项核心功能实测
  • GitHub功能大揭秘:涵盖AI创作、工作流等多领域,还有mindwalk可视化工具助力
  • 2026佩极定制眼镜哪家好 深圳可选服务商逐一盘点 - 起跑123
  • 合肥医药卫生学校2026年有哪些专业?三年制中专/3+2高职专业全汇总 - cc江江
  • Size Marks技术方案解析:Photoshop自动化尺寸标注的实现机制
  • SAP EWM /SCWM/POST 事务实战:3种库存状态变更场景与后台配置映射
  • RTX-Remix终极指南:如何为经典游戏注入光线追踪新生命
  • Unity动态虚线实现:Tiling与Offset原理、常见问题与性能优化
  • Qwopus3.6-35B-A3B-Coder-bf16 vs 传统编码模型:为什么26万上下文窗口是游戏规则改变者?[特殊字符]
  • PrimoToon与Unity内置渲染管线:完整集成与兼容性指南
  • Rufus完整指南:从USB启动盘制作到Windows 11安装优化的终极教程
  • 2026 帝舵授权服务中心查询全指南,区分真假维修点,附完整网点名录 - 帝舵官方维修中心
  • 终极Qwen聊天模板修复指南:解决5大常见问题,提升推理效率300%
  • 2026佩极定制眼镜哪家便宜 深圳依加依眼镜选购参考 - 起跑123