【Block总结】MDCR,多尺度深度可分离卷积,捕捉不同感受野范围的空间特征

embedded/2025/2/7 12:47:04/

论文信息

HCF-Net(Hierarchical Context Fusion Network)是一种新提出的深度学习模型,专门用于红外小目标检测。该论文于2024年3月16日发布,作者包括Shibiao Xu、ShuChen Zheng等,主要研究机构为北京邮电大学。该模型旨在提高红外图像中微小目标的识别和定位能力,尤其是在复杂背景下。

  • 论文链接:https://arxiv.org/pdf/2403.10778
  • 官方GitHub代码:https://github.com/zhengshuchen/HCFNet

在这里插入图片描述

创新点

HCF-Net的主要创新包括:

  • 并行化补丁感知注意力(PPA)模块:通过多分支特征提取策略,捕获不同尺度和层次的特征信息,增强小目标的表示能力。

  • 维度感知选择性融合(DASI)模块:实现自适应的通道选择和融合,优化特征信息的整合,提高模型的灵活性和准确性。

  • 多膨胀通道细化器(MDCR)模块:通过多层深度可分离卷积捕捉不同感受野范围的空间特征,增强对小目标的定位能力。

这些模块的结合使得HCF-Net在处理红外小目标检测时,能够有效应对小目标丢失和背景复杂度高的问题。

方法

HCF-Net采用了一种升级版的U-Net架构,主要由三个关键模块组成:

  1. PPA模块

    • 采用多分支特征提取策略,分别提取局部和全局特征。
    • 通过注意力机制增强特征表示,确保在多次下采样过程中保留关键信息。
  2. DASI模块

    • 通过自适应选择和融合高维与低维特征,增强小目标的显著性。
    • 采用通道分割选择机制,根据目标的大小和特征自适应选择合适的特征进行融合。
  3. MDCR模块

    • 引入多个深度可分离卷积层,捕捉不同感受野范围的空间特征。
    • 通过通道分割和重组增强特征表示,提升小目标的辨识能力。
      在这里插入图片描述

MDCR模块解读

概述

MDCR(Multi-Dilated Channel Refiner)模块是HCF-Net中的关键组成部分,旨在通过多种扩张率的深度可分离卷积层来捕捉不同感受野大小下的空间特征,从而增强对红外小目标的辨识能力。该模块通过细致建模目标与背景之间的差异,提升了小目标的检测性能。

主要功能

  1. 多感受野特征提取

    • MDCR模块通过引入多个具有不同膨胀率的深度可分离卷积层,能够在不同的感受野范围内提取空间特征。这种设计使得网络能够更好地理解红外图像中目标的上下文和细节。
  2. 通道分割与重组

    • 输入特征首先沿通道维度被划分为多个头部(通常为四个),每个头部对应特定的特征集合。每个头部独立进行深度可分离卷积,生成不同的特征表示。随后,这些特征被交错排列,以增强多尺度特征的多样性。
  3. 轻量级高效聚合

    • MDCR模块通过逐点卷积实现组内和组间信息的融合,最终生成输出特征。这种聚合方式不仅提高了特征表示的有效性,还保持了计算的高效性。

具体实现

  • 输入特征划分
    输入特征 F a ∈ R H × W × C \mathbf{F}_a \in \mathbb{R}^{H \times W \times C} FaRH×W×C 被分割成四个部分,生成 a i ∈ R H × W × C 4 \mathbf{a}_i \in \mathbb{R}^{H \times W \times \frac{C}{4}} aiRH×W×4C,其中 i i i 从1到4。

  • 深度可分离卷积
    每个头部应用不同的膨胀率进行深度可分离卷积,得到特征 a i ′ \mathbf{a}^{\prime}_i ai。这些卷积的膨胀率分别标记为 d 1 , d 2 , d 3 , d 4 d_1, d_2, d_3, d_4 d1,d2,d3,d4

  • 特征增强与输出
    通过对各个头部的特征进行处理,MDCR模块最终生成输出特征 F o ∈ R H × W × C \mathbf{F}_o \in \mathbb{R}^{H \times W \times C} FoRH×W×C,实现轻量级且高效的特征聚合。

MDCR模块通过多膨胀率的深度可分离卷积和通道分割重组策略,增强了HCF-Net在红外小目标检测中的特征表示能力。其设计不仅提高了小目标的检测精度,还确保了计算效率,为红外图像处理提供了强有力的支持。

效果

HCF-Net在SIRST红外单帧图像数据集上的实验结果表明,该模型在红外小目标检测任务中表现优异,超越了其他传统和深度学习模型。具体而言,HCF-Net在小目标的识别和定位上具有显著的优势,能够有效减少小目标在复杂背景下的丢失率。

实验结果

  • 数据集: HCF-Net在SIRST数据集上进行评估。
  • 性能指标: HCF-Net在IoU(Intersection over Union)和nIoU(normalized IoU)上分别达到80.09%和78.31%,显著优于其他方法。
  • 对比实验: 与传统方法和其他深度学习模型相比,HCF-Net在多个指标上均表现出色,验证了其设计的有效性和实用性。

总结

HCF-Net通过创新的模块设计和深度学习方法,显著提升了红外小目标检测的性能。其在处理小目标丢失和背景复杂度高的问题上展现了良好的能力,为未来的研究和应用提供了新的思路和方向。该模型的成功应用不仅推动了红外图像处理技术的发展,也为相关领域的实际应用提供了强有力的支持。

代码

import torch.nn.functional
import torch
import torch.nn as nnclass conv_block(nn.Module):def __init__(self,in_features,out_features,kernel_size=(3, 3),stride=(1, 1),padding=(1, 1),dilation=(1, 1),norm_type='bn',activation=True,use_bias=True,groups = 1):super().__init__()self.conv = nn.Conv2d(in_channels=in_features,out_channels=out_features,kernel_size=kernel_size,stride=stride,padding=padding,dilation=dilation,bias=use_bias,groups = groups)self.norm_type = norm_typeself.act = activationif self.norm_type == 'gn':self.norm = nn.GroupNorm(32 if out_features >= 32 else out_features, out_features)if self.norm_type == 'bn':self.norm = nn.BatchNorm2d(out_features)if self.act:# self.relu = nn.GELU()self.relu = nn.ReLU(inplace=False)def forward(self, x):x = self.conv(x)if self.norm_type is not None:x = self.norm(x)if self.act:x = self.relu(x)return xclass MDCR(nn.Module):def __init__(self, in_features, out_features, norm_type='bn', activation=True, rate=[1, 4, 8, 16]):super().__init__()self.block1 = conv_block(in_features=in_features//4,out_features=out_features//4,padding=rate[0],dilation=rate[0],norm_type=norm_type,activation=activation,groups = 128)self.block2 = conv_block(in_features=in_features//4,out_features=out_features//4,padding=rate[1],dilation=rate[1],norm_type=norm_type,activation=activation,groups=128)self.block3 = conv_block(in_features=in_features//4,out_features=out_features//4,padding=rate[2],dilation=rate[2],norm_type=norm_type,activation=activation,groups=128)self.block4 = conv_block(in_features=in_features//4,out_features=out_features//4,padding=rate[3],dilation=rate[3],norm_type=norm_type,activation=activation,groups=128)self.out_s = conv_block(in_features=4,out_features=4,kernel_size=(1, 1),padding=(0, 0),norm_type=norm_type,activation=activation,)self.out = conv_block(in_features=out_features,out_features=out_features,kernel_size=(1, 1),padding=(0, 0),norm_type=norm_type,activation=activation,)def forward(self, x):split_tensors = []x = torch.chunk(x, 4, dim=1)x1 = self.block1(x[0])x2 = self.block2(x[1])x3 = self.block3(x[2])x4 = self.block4(x[3])for channel in range(x1.size(1)):channel_tensors = [tensor[:, channel:channel + 1, :, :] for tensor in [x1, x2, x3, x4]]concatenated_channel = self.out_s(torch.cat(channel_tensors, dim=1))  # 拼接在 batch_size 维度上split_tensors.append(concatenated_channel)x = torch.cat(split_tensors, dim=1)x = self.out(x)return xif __name__ == "__main__":dim=512# 如果GPU可用,将模块移动到 GPUdevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")# 输入张量 (batch_size, channels,height, width)x = torch.randn(2,dim,40,40).to(device)# 初始化 Sea_Attention 模块block = MDCR(dim,dim) # kernel_size为height或者widthprint(block)block = block.to(device)# 前向传播output = block(x)print("输入:", x.shape)print("输出:", output.shape)

输出结果:
在这里插入图片描述


http://www.ppmy.cn/embedded/160302.html

相关文章

Spring Boot实现多数据源连接和切换

文章目录 前言一、多数据源配置与切换方案二、实现步骤 1. 创建多个 DataSource 配置类2. 创建 DataSource 配置类3. 创建动态数据源路由类4. 实现 DynamicDataSource 类5. 创建 DataSourceContextHolder 来存储当前的数据源标识6. AOP 方式切换数据源7. 自定义注解来指定数据…

计算机网络知识速记:HTTP与HTTPS

计算机网络知识速记:HTTP与HTTPS 一、HTTP基础知识 HTTP(超文本传输协议)是一个无状态的协议,通常用于在客户端与服务器之间传输数据。HTTP采用的是一种请求-响应模型,客户端发出请求后,服务器返回数据。…

c++:vector

1.使用 1.1构造函数 常见的三种构造方式:空构造,拷贝构造,指定元素构造 1.2iterator begin和end也分为正向和反向。 注意:反向迭代器可以反向遍历是因为在定义rbegin和rend函数的时候把尾地址给到了rbegin,而不是说改…

流媒体娱乐服务平台在AWS上使用Presto作为大数据的交互式查询引擎的具体流程和代码

一家流媒体娱乐服务平台拥有庞大的用户群体和海量的数据。为了高效处理和分析这些数据,它选择了Presto作为其在AWS EMR上的大数据查询引擎。在AWS EMR上使用Presto取得了显著的成果和收获。这些成果不仅提升了数据查询效率,降低了运维成本,还…

基于Flask的商城应用系统的设计与实现

【FLask】基于Flask的商城应用系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统包括前端商城和后台管理系统,旨在为用户提供一个全面、便捷的在线购物平台及高…

大模型 RAG 优化之预生成qa对

1. 写在前面 检索增强生成 (Retrieval-Augmented Generation, RAG) 是一种将检索 (Retrieval) 和生成 (Generation) 相结合的技术,它利用检索到的相关信息来增强大型语言模型 (LLM) 的生成能力。传统的 RAG 系统通常直接使用用户输入的 query 在文档库中进行检索 (query-doc …

网件r7000刷回原厂固件合集测评

《网件R7000路由器刷回原厂固件详解》 网件R7000是一款备受赞誉的高性能无线路由器,其强大的性能和可定制性吸引了许多高级用户。然而,有时候用户可能会尝试第三方固件以提升功能或优化网络性能,但这也可能导致一些问题,如系统不…

Java面试:a+=a-=aa原理解析

Java面试:aa-a*a原理解析 aa-a*a属于Java基础中比较难以理解的,面试中也经常会遇到这个问题,本篇博客对此问题进行分享总结。 1.问题代码 public static void main(String[] args) {int a 2;aa-a*a;System.out.println("a"a);}我…