YOLO26改进 - 注意力机制 |融合HCF-Net维度感知选择性整合模块DASI 增强小目标显著性

简介: 本文介绍将HCF-Net中的维度感知选择性融合(DASI)模块集成至YOLO26检测头,通过通道分区与Sigmoid自适应加权,融合高/低维及当前层特征,显著提升红外小目标检测精度,在SIRST数据集上超越主流方法。(239字)

前言

本文介绍了维度感知选择性融合(DASI)模块在YOLO26中的结合应用。DASI模块是HCF - Net用于红外小目标检测的关键组件,可实现自适应的通道选择和融合。它通过对高维、低维和当前层特征进行对齐、分区,依据sigmoid激活值自适应选择细粒度或上下文特征进行融合。我们将DASI集成到YOLO26的检测头中,并进行相关注册和配置。实验表明,改进后的模型在SIRST红外单帧图像数据集上表现优异,超越了其他传统和深度学习模型。

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

专栏链接: YOLO26改进专栏

@[TOC]

介绍

image-20240701160512143

摘要

红外小目标检测作为计算机视觉领域的一项关键任务,旨在识别并定位红外图像中的微小目标,这些目标往往仅有几个像素大小。然而,由于目标体积微小且红外图像背景通常较为复杂,该任务面临着诸多挑战。本文提出了一种深度学习方法HCF - Net,借助多个实用模块显著提高了红外小目标检测的性能。具体来讲,该方法包含并行化的感知补丁注意力(PPA)模块、维度感知选择性融合(DASI)模块和多膨胀通道优化(MDCR)模块。PPA模块采用多分支特征提取策略来捕获不同尺度和层次的特征信息;DASI模块实现了自适应的通道选择与融合;MDCR模块通过多层深度可分离卷积捕捉不同感受野范围的空间特征。大量实验结果显示,在SIRST红外单帧图像数据集上,所提出的HCF - Net表现卓越,超越了其他传统模型和深度学习模型。代码可从https://github.com/zhengshuchen/HCFNet获取。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

HCF-Net(Hierarchical Context Fusion Network)是一种用于红外小目标检测的深度学习模型,旨在提高对红外图像中微小目标的识别和定位能力。

  1. 网络架构:HCF-Net采用了一种升级版的U-Net架构,主要由三个关键模块组成:Parallelized Patch-Aware Attention(PPA)模块、Dimension-Aware Selective Integration(DASI)模块和Multi-Dilated Channel Refiner(MDCR)模块。这些模块在不同层级上解决了红外小目标检测中的挑战 。

  2. PPA模块

    • Hierarchical Feature Fusion:PPA模块利用分层特征融合和注意力机制,以在多次下采样过程中保持和增强小目标的表示,确保关键信息在整个网络中得以保留[T1]。
    • Multi-Branch Feature Extraction:PPA采用多分支特征提取策略,以捕获不同尺度和级别的特征信息,从而提高小目标检测的准确性 。
  3. DASI模块

    • Adaptive Feature Fusion:DASI模块增强了U-Net中的跳跃连接,专注于高低维特征的自适应选择和精细融合,以增强小目标的显著性 。
  4. MDCR模块

    • Spatial Feature Refinement:MDCR模块通过多个深度可分离卷积层捕获不同感受野范围的空间特征,更细致地建模目标和背景之间的差异,提高了定位小目标的能力 。

image-20240701161043152

DASI

在红外小物体检测的多个降采样阶段中,高维特征可能会丢失小物体的信息,而低维特征可能无法提供足够的背景信息。为解决这一问题,提出了一种新颖的信道分区选择机制(如图 3 所示),使 DASI 能够根据物体的大小和特征自适应地选择合适的特征进行融合。

具体来说,DASI 首先通过卷积和插值等操作,将高维特征$( \mathbf{F}_{h} \in \mathbb{R}^{H_h \times W_h \times Ch} )$ 和低维特征 $( \mathbf{F}{l} \in \mathbb{R}^{H_l \times W_l \times Cl} )$,以及当前层的特征 $( \mathbf{F}{u} \in \mathbb{R}^{H \times W \times C} )$ 对齐。随后,它将这些特征在通道维度上分成四个相等的部分,从而得到 $( (\mathbf{h}i){i=1}^4 \in \mathbb{R}^{H \times W \times \frac{C}{4}}$, $(\mathbf{l}i){i=1}^4 \in \mathbb{R}^{H \times W \times \frac{C}{4}}$, $(\mathbf{u}i){i=1}^4 \in \mathbb{R}^{H \times W \times \frac{C}{4}} )$,其中 $( \mathbf{h}_i, \mathbf{l}_i, \mathbf{u}_i )$ 分别表示高维、低维和当前层特征的第 $( i)$ 个分区特征。

这些分区的计算公式如下:
$$ \alpha = \mathrm{sigmoid}(\mathbf{u}_i), $$
$$\mathbf{u}_i' = \alpha \mathbf{l}_i + (1 - \alpha) \mathbf{h}_i,$$
$$\mathbf{F}_{u}' = [\mathbf{u}_1', \mathbf{u}_2', \mathbf{u}_3', \mathbf{u}_4'], $$
$$ \mathbf{F}_{u}^{\hat{}} = \delta \left( \mathcal{B} \left( \mathrm{Conv}(\mathbf{F}_{u}') \right) \right),$$

其中,$( \alpha \in \mathbb{R}^{H \times W \times \frac{C}{4}} ) 表示应用于 ( \mathbf{u}_i )$ 的 sigmoid 激活函数后得到的值,$( \mathbf{u}_i' \in \mathbb{R}^{H \times W \times \frac{C}{4}} )$ 表示每个分区的选择性汇总结果。在通道维度上合并 $( (\mathbf{u}i'){i=1}^4 )$ 后,得到 $( \mathbf{F}{u}' \in \mathbb{R}^{H \times W \times C} )$。操作 $( \mathrm{Conv}() )$、 $( \mathcal{B}(\cdot) )$ 和 $( \delta(\cdot) )$ 分别表示卷积、批量归一化(BN)和整流线性单元(ReLU),最终得到输出 $( \hat{\mathbf{F}}{u} \in \mathbb{R}^{H \times W \times C} )$。

如果 $( \alpha > 0.5 )$,则模型优先考虑细粒度特征;如果 $( \alpha < 0.5 )$,则强调上下文特征。

image-20240702091658102

核心代码


class DASI(nn.Module):
    def __init__(self, in_features, out_features) -> None:
        super().__init__()


        self.bag = Bag()

        # 尾部卷积层
        self.tail_conv = nn.Sequential(
            conv_block(in_features=out_features,
                       out_features=out_features,
                       kernel_size=(1, 1),
                       padding=(0, 0),
                       norm_type=None,
                       activation=False)
        )

        # 主要卷积操作
        self.conv = nn.Sequential(
            conv_block(in_features=out_features // 2,
                       out_features=out_features // 4,
                       kernel_size=(1, 1),
                       padding=(0, 0),
                       norm_type=None,
                       activation=False)
        )

        # 批量归一化层
        self.bns = nn.BatchNorm2d(out_features)

        # 跳跃连接处理
        self.skips = conv_block(in_features=in_features,
                                out_features=out_features,
                                kernel_size=(1, 1),
                                padding=(0, 0),
                                norm_type=None,
                                activation=False)

        self.skips_2 = conv_block(in_features=in_features * 2,
                                  out_features=out_features,
                                  kernel_size=(1, 1),
                                  padding=(0, 0),
                                  norm_type=None,
                                  activation=False)

        self.skips_3 = nn.Conv2d(in_features // 2, out_features,
                                 kernel_size=3, stride=2, dilation=2, padding=2)
        # self.skips_3 = nn.Conv2d(in_features // 2, out_features,
        #                          kernel_size=3, stride=2, dilation=1, padding=1)

        # 激活函数
        self.relu = nn.ReLU()
        self.gelu = nn.GELU()

    def forward(self, x, x_low, x_high):

        if x_high is not None:
            x_high = self.skips_3(x_high)
            x_high = torch.chunk(x_high, 4, dim=1)


        if x_low is not None:
            x_low = self.skips_2(x_low)
            x_low = F.interpolate(x_low, size=[x.size(2), x.size(3)], mode='bilinear', align_corners=True)
            x_low = torch.chunk(x_low, 4, dim=1)


        x_skip = self.skips(x)
        x = self.skips(x)
        x = torch.chunk(x, 4, dim=1)


        if x_high is None:
            x0 = self.conv(torch.cat((x[0], x_low[0]), dim=1))
            x1 = self.conv(torch.cat((x[1], x_low[1]), dim=1))
            x2 = self.conv(torch.cat((x[2], x_low[2]), dim=1))
            x3 = self.conv(torch.cat((x[3], x_low[3]), dim=1))
        elif x_low is None:
            x0 = self.conv(torch.cat((x[0], x_high[0]), dim=1))
            x1 = self.conv(torch.cat((x[0], x_high[1]), dim=1))
            x2 = self.conv(torch.cat((x[0], x_high[2]), dim=1))
            x3 = self.conv(torch.cat((x[0], x_high[3]), dim=1))
        else:
            x0 = self.bag(x_low[0], x_high[0], x[0])
            x1 = self.bag(x_low[1], x_high[1], x[1])
            x2 = self.bag(x_low[2], x_high[2], x[2])
            x3 = self.bag(x_low[3], x_high[3], x[3])

        # 合并处理后的特征
        x = torch.cat((x0, x1, x2, x3), dim=1)

        # 尾部卷积和跳跃连接
        x = self.tail_conv(x)
        x += x_skip

        # 批量归一化和激活函数
        x = self.bns(x)
        x = self.relu(x)

        return x

YOLO26引入代码

在根目录下的ultralytics/nn/目录,新建一个attention目录,然后新建一个以 DASI为文件名的py文件, 把代码拷贝进去。

相关文章
|
20天前
|
机器学习/深度学习 人工智能 计算机视觉
YOLO26改进 - 注意力机制 | 多扩张通道细化器MDCR 通过通道划分与异构扩张卷积提升小目标定位能力
本文介绍了一种在YOLO26目标检测模型中引入高效解码器模块EMCAD的创新方法,以提升模型在资源受限场景下的性能与效率。EMCAD由多个模块构成,其中核心的EUCB(高效上卷积块)通过上采样、深度可分离卷积、激活归一化和通道调整等操作,兼顾了特征质量与计算成本。实验结果显示,该模块在显著减少参数与FLOPs的同时仍具备优异性能。文章还提供了完整的YOLO26模型集成流程、配置和训练实战。
YOLO26改进 - 注意力机制 | 多扩张通道细化器MDCR 通过通道划分与异构扩张卷积提升小目标定位能力
|
20天前
|
人工智能 开发框架 IDE
AI 时代的量化革命:10分钟开发你的第一个交易策略
本文手把手教你用AI工具10分钟开发首个量化交易策略:从克隆SDK、启动AI IDE,到生成KDJ_RSI组合策略、配置运行环境并实盘验证。零基础也能快速上手,开启AI驱动的量化投资新范式!
220 17
|
19天前
|
关系型数据库 项目管理 数据安全/隐私保护
Leantime:开源项目管理神器
Leantime是一款专为非专业项目经理设计的开源项目管理工具,在Jira的臃肿和Trello的简化之间找到了完美平衡。它集成了战略规划、敏捷看板、甘特图、知识管理、工时跟踪等全面功能,支持Docker一键部署。无论是创业团队还是企业部门,Leantime都能以极低的学习成本,让每位成员轻松参与项目协作。告别过度复杂的工具,用这款轻量而强大的神器,为你的2026年项目计划保驾护航。
135 16
 Leantime:开源项目管理神器
|
21天前
|
人工智能 前端开发 测试技术
Violit: Streamlit杀手,无需全局刷新,构建AI快捷面板
Violit 是新一代 Python Web 框架,融合 Streamlit 的简洁语法与 React 的响应式性能。首创 O(1) 信号状态架构,零重运行、无需 `@cache`/`key`/回调,支持桌面原生应用与 30+ 主题,开箱即用、极速如光。
144 15
|
6天前
|
人工智能 数据可视化 应用服务中间件
2026年新手快速部署OpenClaw(Clawdbot)+接入Telegram步骤流程
对于零基础新手而言,部署OpenClaw(原Clawdbot,曾用名Moltbot)并接入Telegram,往往会陷入“环境配置繁琐、依赖安装失败、跨平台对接无响应”的困境。2026年,阿里云针对OpenClaw(v2026.1.25最新版)优化推出专属一键部署方案,依托轻量应用服务器的稳定基础设施与预置应用镜像,将环境配置、依赖安装、服务启动全流程封装,彻底解决新手部署难题;同时结合Telegram的跨终端特性,实现“聊天式指挥AI干活”,部署完成后,可直接在Telegram客户端(电脑/手机/平板)发送自然语言指令,让OpenClaw完成文件处理、信息查询、日程提醒、自动化任务、代码生成等
238 15
|
19天前
|
机器学习/深度学习 数据采集 人工智能
大模型应用:大模型参数调优:结合本地模型对比多种组合探索差异.7
本文系统解析大模型核心生成参数(如temperature、top_p、top_k、repetition_penalty等)的原理、作用机制与实践影响,结合Qwen1.5-1.8B本地模型实测,通过创意写作、技术问答、代码生成三类任务对比分析参数组合效果,并提供分场景调优建议与黄金配置方案,助力从“调参新手”进阶为“生成质量掌控者”。
142 21
|
5天前
|
存储 人工智能 物联网
大模型微调内存优化全攻略:无需昂贵显卡,打造你的AI助手
本文深入解析大模型微调为何“烧显存”,从原理(模型参数、优化器状态、激活值三大显存杀手)到实战:推荐QLoRA等高效方法,结合梯度累积、序列截断、混合精度与DeepSpeed优化,并介绍LLaMA-Factory Online等低门槛平台,助开发者用消费级显卡轻松微调专属模型。(239字)
107 22
大模型微调内存优化全攻略:无需昂贵显卡,打造你的AI助手
|
20天前
|
Ubuntu Linux 算法框架/工具
超详细!OFA 视觉问答(VQA)模型部署教学(避坑完整版)
本文详解OFA视觉问答(VQA)模型在ModelScope平台的完整部署教程:涵盖Linux环境搭建、Miniconda虚拟环境配置、严格匹配依赖版本(transformers 4.48.3等)、禁用自动依赖覆盖、输入格式规范及避坑指南(含5类高频问题的现象+原因+解法),附可直接运行的Python脚本,新手友好,开箱即用。
318 15
|
4天前
|
数据采集 人工智能 安全
别再用ChatGPT群发祝福了!30分钟微调一个懂你关系的“人情味”拜年AI
春节祝福太难写?本文手把手教你用LoRA微调大模型,让AI学会“看人下菜”:识别关系、风格、细节,30分钟训练出懂人情世故的拜年助手。无需代码,量化+批处理保障秒级响应,让每条祝福都像你亲手写的。(239字)
127 35
|
21天前
|
云安全 安全 固态存储
你的第一个云服务器,从阿里云轻量应用服务器开始——简单、稳定、超值!
阿里云轻量应用服务器,专为新手打造:38元/年起(2核2G+200Mbps带宽+40G SSD),5分钟一键建站,无需技术基础。支持WordPress、宝塔等应用镜像,Web控制台在线连接,安全稳定,开箱即用——上云,原来如此简单!