YOLO目标检测创新改进与实战案例专栏
专栏目录: YOLO有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例
专栏链接: YOLO基础解析+创新改进+实战案例
介绍
摘要
摘要——红外小目标检测是计算机视觉中的一项重要任务,涉及识别和定位红外图像中的微小目标,这些目标通常只有几个像素。然而,由于目标体积小且红外图像背景通常复杂,这项任务面临诸多挑战。本文提出了一种深度学习方法HCF-Net,通过多个实用模块显著提升红外小目标检测性能。具体而言,该方法包括并行化的感知补丁注意力(PPA)模块、维度感知选择性融合(DASI)模块和多膨胀通道优化(MDCR)模块。PPA模块使用多分支特征提取策略来捕捉不同尺度和层次的特征信息。DASI模块实现了自适应的通道选择和融合。MDCR模块通过多层深度可分离卷积捕捉不同感受野范围的空间特征。大量实验结果表明,在SIRST红外单帧图像数据集上,所提出的HCF-Net表现优异,超越了其他传统和深度学习模型。代码可在https://github.com/zhengshuchen/HCFNet获取。
文章链接
论文地址:论文地址
代码地址:代码地址
基本原理
HCF-Net(Hierarchical Context Fusion Network)是一种用于红外小目标检测的深度学习模型,旨在提高对红外图像中微小目标的识别和定位能力。
网络架构:HCF-Net采用了一种升级版的U-Net架构,主要由三个关键模块组成:Parallelized Patch-Aware Attention(PPA)模块、Dimension-Aware Selective Integration(DASI)模块和Multi-Dilated Channel Refiner(MDCR)模块。这些模块在不同层级上解决了红外小目标检测中的挑战 。
PPA模块:
- Hierarchical Feature Fusion:PPA模块利用分层特征融合和注意力机制,以在多次下采样过程中保持和增强小目标的表示,确保关键信息在整个网络中得以保留[T1]。
- Multi-Branch Feature Extraction:PPA采用多分支特征提取策略,以捕获不同尺度和级别的特征信息,从而提高小目标检测的准确性 。
DASI模块:
- Adaptive Feature Fusion:DASI模块增强了U-Net中的跳跃连接,专注于高低维特征的自适应选择和精细融合,以增强小目标的显著性 。
MDCR模块:
- Spatial Feature Refinement:MDCR模块通过多个深度可分离卷积层捕获不同感受野范围的空间特征,更细致地建模目标和背景之间的差异,提高了定位小目标的能力 。
yolov8 引入
class PPA(nn.Module): def __init__(self, in_features, filters) -> None: super().__init__() # 定义跳跃连接卷积块 self.skip = conv_block(in_features=in_features, out_features=filters, kernel_size=(1, 1), padding=(0, 0), norm_type='bn', activation=False) # 定义连续卷积块 self.c1 = conv_block(in_features=in_features, out_features=filters, kernel_size=(3, 3), padding=(1, 1), norm_type='bn', activation=True) self.c2 = conv_block(in_features=filters, out_features=filters, kernel_size=(3, 3), padding=(1, 1), norm_type='bn', activation=True) self.c3 = conv_block(in_features=filters, out_features=filters, kernel_size=(3, 3), padding=(1, 1), norm_type='bn', activation=True) # 定义空间注意力模块 self.sa = SpatialAttentionModule() # 定义ECA模块 self.cn = ECA(filters) # 定义局部和全局注意力模块 self.lga2 = LocalGlobalAttention(filters, 2) self.lga4 = LocalGlobalAttention(filters, 4) # 定义批归一化层、dropout层和激活函数 self.bn1 = nn.BatchNorm2d(filters) self.drop = nn.Dropout2d(0.1) self.relu = nn.ReLU() self.gelu = nn.GELU() def forward(self, x): x_skip = self.skip(x) # 跳跃连接输出 x_lga2 = self.lga2(x_skip) # 局部和全局注意力输出(大小为2的patch) x_lga4 = self.lga4(x_skip) # 局部和全局注意力输出(大小为4的patch) x1 = self.c1(x) # 第一个卷积块输出 x2 = self.c2(x1) # 第二个卷积块输出 x3 = self.c3(x2) # 第三个卷积块输出 x = x1 + x2 + x3 + x_skip + x_lga2 + x_lga4 # 合并所有输出 x = self.cn(x) # ECA模块 x = self.sa(x) # 空间注意力模块 x = self.drop(x) # Dropout层 x = self.bn1(x) # 批归一化层 x = self.relu(x) # 激活函数 return x
task与yaml配置
详见:https://blog.csdn.net/shangyanaf/article/details/140111479