首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Yolo11改进策略:Neck层改进|EFC,北理提出的适用小目标的特征融合模块|即插即用

Yolo11改进策略:Neck层改进|EFC,北理提出的适用小目标的特征融合模块|即插即用

作者头像
AI浩
发布2025-01-20 20:19:07
发布2025-01-20 20:19:07
1.5K0
举报
文章被收录于专栏:AI智韵AI智韵

论文信息

论文题目:A Lightweight Fusion Strategy With Enhanced Interlayer Feature Correlation for Small Object Detection

论文链接:https://ieeexplore.ieee.org/abstract/document/10671587

官方github:https://github.com/nuliweixiao/EFC

研究贡献

为了解决上述问题,北京理工大学的研究团队提出了一种基于增强层间特征相关性的轻量级特征融合策略(EFC)。该方法的核心在于设计了分组特征关注单元(GFF)和多级特征重构模块(MFR):

  • 分组特征关注单元(GFF):通过聚焦不同特征的上下文信息,增强各层特征之间的相关性。这一过程有助于提高特征的表达能力,尤其是在复杂背景下的小目标检测中。
  • 多级特征重构模块(MFR):有效重建和转换每一层的强弱信息,减少冗余特征融合,保留更多的小目标信息。这一模块的设计旨在解决特征金字塔中不同层语义表达不一致的问题,从而提升检测精度[2][5][6]。

分组特征关注单元(GFF)

在小目标检测中,特征的相关性对于提高检测精度至关重要。分组特征关注单元(GFF)是一种新颖的机制,旨在通过优化特征之间的上下文信息来增强不同层次特征的相关性。

GFF的工作原理

GFF的增强特征相关性过程可以分为几个关键步骤:

  1. 空间聚焦
    • GFF首先通过上采样和1×1卷积操作调整特征图的分辨率和通道数,使得低分辨率特征图能够与高分辨率特征图相匹配。
    • 这些特征图随后进行元素级加法融合,并通过1×1卷积压缩到单个通道,生成一个权重图。这个权重图类似于注意力机制,决定了每个位置的重要性,从而突出关键特征,忽略不重要的部分。
  2. 特征分组与融合
    • 生成的注意力掩码帮助突出重要特征。经过空间聚焦后的特征图会按照通道分割成多个小组,对每组内部的特征应用卷积操作,以捕捉更细致的局部模式。这一过程类似于自注意力机制中计算query、key和value的过程,但在更细粒度的层面上进行操作。
  3. 空间映射归一化
    • 使用归一化技术(如Batch Normalization或Layer Normalization)处理聚合后的特征,确保数值稳定性并加快训练速度。归一化有助于保留更多关于小目标的空间位置信息,通过特征图的统计特性(均值和标准差)实现。

通过这些步骤,GFF能够有效地增强相邻特征之间的相关性,提高特征的语义表示质量,从而在复杂背景下提升小目标的检测能力[1][3][4]。

多级特征重构模块(MFR)在特征融合中的作用

在小目标检测中,特征融合是提升检测精度的关键步骤。传统的特征融合方法往往存在冗余信息和特征丢失的问题,尤其是在处理小目标时。为了解决这些问题,研究团队提出了多级特征重构模块(MFR),旨在优化特征融合过程。

MFR的主要功能

  1. 特征分离
    • MFR首先通过上采样、卷积和逐元素加法等操作,从不同阶段的特征图中提取强特征和弱特征。强特征通常包含更多的语义信息,而弱特征则可能包含细节信息但语义较弱。
    • 通过应用平均池化和Sigmoid函数,MFR为每个通道生成信息权重,帮助识别不同特征图的重要性。这一过程确保了特征的有效性和相关性。
  2. 特征转换
    • 对于强特征,MFR使用1×1卷积来生成包含更多详细信息的特征图。这一操作有助于增强特征的表达能力。
    • 对于弱特征,MFR利用设计的特征转换单元(FTU),通过深度可分离卷积来生成具有丰富语义信息的特征图,同时降低计算资源的消耗。这种方法确保了在保持特征信息的同时,减少了计算复杂度。
  3. 级联融合
    • 最后,MFR将经过特征转换的强特征和弱特征进行融合,生成最终的特征图。这个特征图不仅包含了详细信息,还实现了跨通道的信息交换,从而提高了小目标的检测精度。

MFR的优势

  • 减少冗余特征:通过有效分离和重构特征,MFR显著减少了冗余信息的产生,确保了特征融合的高效性。
  • 增强小目标信息的保留:MFR通过优化特征的重构过程,最大限度地减少了在深度网络中小目标特征信息的丢失,从而提升了小目标的表示能力。
  • 灵活性与适应性:MFR可以灵活地应用于各种基础网络,适应不同的检测任务和场景,增强了模型的通用性和实用性。

方法优势

该轻量级网络架构不仅提升了复杂场景下的小目标检测精度,还具有即插即用的特性,能够广泛应用于不同场景的小目标检测任务。研究表明,EFC策略在处理无人机图像时,能够显著提高小目标的检测效果,尤其是在背景复杂的情况下[3][5]。

代码

代码语言:javascript
复制
import torch
import torch.nn as nn
import torch.nn.functional as F

class EFC(nn.Module):
    def __init__(self,
                 c1, c2
                 ):
        super().__init__()
        self.conv1 = nn.Conv2d(c1, c2, kernel_size=1, stride=1)
        self.conv2 = nn.Conv2d(c2, c2, kernel_size=1, stride=1)
        self.conv4 = nn.Conv2d(c2, c2, kernel_size=1, stride=1)
        self.bn = nn.BatchNorm2d(c2)
        self.sigomid = nn.Sigmoid()
        self.group_num = 16
        self.eps = 1e-10
        self.gamma = nn.Parameter(torch.randn(c2, 1, 1))
        self.beta = nn.Parameter(torch.zeros(c2, 1, 1))
        self.gate_genator = nn.Sequential(
            nn.AdaptiveAvgPool2d((1, 1)),
            nn.Conv2d(c2, c2, 1, 1),
            nn.ReLU(True),
            nn.Softmax(dim=1),
        )
        self.dwconv = nn.Conv2d(c2, c2, kernel_size=3, stride=1, padding=1, groups=c2)
        self.conv3 = nn.Conv2d(c2, c2, kernel_size=1, stride=1)
        self.Apt = nn.AdaptiveAvgPool2d(1)
        self.one = c2
        self.two = c2
        self.conv4_gobal = nn.Conv2d(c2, 1, kernel_size=1, stride=1)
        for group_id in range(0, 4):
            self.interact = nn.Conv2d(c2 // 4, c2 // 4, 1, 1, )

    def forward(self, x):
        x1, x2 = x
        global_conv1 = self.conv1(x1)
        bn_x = self.bn(global_conv1)
        weight_1 = self.sigomid(bn_x)
        global_conv2 = self.conv2(x2)
        bn_x2 = self.bn(global_conv2)
        weight_2 = self.sigomid(bn_x2)
        X_GOBAL = global_conv1 + global_conv2
        x_conv4 = self.conv4_gobal(X_GOBAL)
        X_4_sigmoid = self.sigomid(x_conv4)
        X_ = X_4_sigmoid * X_GOBAL
        X_ = X_.chunk(4, dim=1)
        out = []
        for group_id in range(0, 4):
            out_1 = self.interact(X_[group_id])
            N, C, H, W = out_1.size()
            x_1_map = out_1.reshape(N, 1, -1)
            mean_1 = x_1_map.mean(dim=2, keepdim=True)
            x_1_av = x_1_map / mean_1
            x_2_2 = F.softmax(x_1_av, dim=1)
            x1 = x_2_2.reshape(N, C, H, W)
            x1 = X_[group_id] * x1
            out.append(x1)
        out = torch.cat([out[0], out[1], out[2], out[3]], dim=1)
        N, C, H, W = out.size()
        x_add_1 = out.reshape(N, self.group_num, -1)
        N, C, H, W = X_GOBAL.size()
        x_shape_1 = X_GOBAL.reshape(N, self.group_num, -1)
        mean_1 = x_shape_1.mean(dim=2, keepdim=True)
        std_1 = x_shape_1.std(dim=2, keepdim=True)
        x_guiyi = (x_add_1 - mean_1) / (std_1 + self.eps)
        x_guiyi_1 = x_guiyi.reshape(N, C, H, W)
        x_gui = (x_guiyi_1 * self.gamma + self.beta)
        weight_x3 = self.Apt(X_GOBAL)
        reweights = self.sigomid(weight_x3)
        x_up_1 = reweights >= weight_1
        x_low_1 = reweights < weight_1
        x_up_2 = reweights >= weight_2
        x_low_2 = reweights < weight_2
        x_up = x_up_1 * X_GOBAL + x_up_2 * X_GOBAL
        x_low = x_low_1 * X_GOBAL + x_low_2 * X_GOBAL
        x11_up_dwc = self.dwconv(x_low)
        x11_up_dwc = self.conv3(x11_up_dwc)
        x_so = self.gate_genator(x_low)
        x11_up_dwc = x11_up_dwc * x_so
        x22_low_pw = self.conv4(x_up)
        xL = x11_up_dwc + x22_low_pw
        xL = xL + x_gui

        return xL

if __name__ == '__main__':
    # 创建一个随机输入张量,形状为 (batch_size,height×width,channels)
    input1 = torch.rand(1, 64,40, 40)

    input2= torch.rand(1, 64,40, 40)

    # 实例化EFC模块
    block = EFC(64,64)
    # 前向传播
    output = block([input1,input2])

    # 打印输入和输出的形状
    print(input1.size(),input2.size())
    print(output.size())

EFC模块代码解读

代码结构

  1. 初始化方法 __init__:
    • 输入参数: c1c2,分别表示输入特征图的通道数和输出特征图的通道数。
    • 卷积层: 定义了多个卷积层(conv1, conv2, conv3, conv4),用于特征提取和变换。
    • 批归一化: 使用 BatchNorm2d 对卷积输出进行归一化,帮助加速训练并提高稳定性。
    • 激活函数: 使用 Sigmoid 激活函数来生成权重。
    • 门控生成器: 通过 AdaptiveAvgPool2d 和卷积层生成特征权重,使用 Softmax 进行归一化。
    • 深度可分离卷积: dwconv 用于处理通道间的特征交互。
    • 交互卷积: interact 用于在特征组之间进行交互。
  2. 前向传播方法 forward:
    • 输入处理: 接收两个输入特征图 x1x2
    • 特征提取: 通过 conv1conv2 提取特征,并进行批归一化和激活。
    • 特征融合: 将两个特征图相加,生成全局特征图 X_GOBAL
    • 特征分组: 将全局特征图分成四个组,并对每个组进行交互处理。
    • 特征标准化: 对特征进行标准化处理,以提高模型的稳定性。
    • 权重计算: 计算特征图的权重,并根据权重对特征进行加权融合。
    • 输出生成: 最终生成融合后的特征图 xL

关键步骤解析

特征提取与融合:

代码语言:javascript
复制
global_conv1 = self.conv1(x1)
global_conv2 = self.conv2(x2)
X_GOBAL = global_conv1 + global_conv2

这段代码通过两个卷积层提取输入特征图的特征,并将它们相加以生成全局特征图。

特征标准化:

代码语言:javascript
复制
x_guiyi = (x_add_1 - mean_1) / (std_1 + self.eps)

通过标准化处理,确保特征的均值为0,标准差为1,从而提高模型的训练效果。

门控机制:

代码语言:javascript
复制
x_so = self.gate_genator(x_low)

使用门控机制来控制特征的流动,增强重要特征的表达。

示例运行

__main__ 部分,创建了两个随机输入张量,并实例化了 EFC 模块。通过前向传播,输出了融合后的特征图。

代码语言:javascript
复制
input1 = torch.rand(1, 64, 40, 40)
input2 = torch.rand(1, 64, 40, 40)
block = EFC(64, 64)
output = block([input1, input2])

输出结果:

代码语言:javascript
复制
torch.Size([1, 64, 40, 40]) torch.Size([1, 64, 40, 40])
torch.Size([1, 64, 40, 40])

改进方法

https://jingjing.blog.csdn.net/article/details/145247413?spm=1001.2014.3001.5502

测试结果

代码语言:javascript
复制
YOLO11m summary (fused): 363 layers, 24,487,092 parameters, 0 gradients
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 15/15 [00:02<00:00,  6.03it/s]
                   all        230       1412      0.189      0.126      0.043     0.0172
                   c17         40        131      0.103      0.588      0.121     0.0425
                    c5         19         68     0.0416     0.0441     0.0705     0.0256
            helicopter         13         43    0.00666    0.00821     0.0192    0.00735
                  c130         20         85     0.0897        0.6      0.111     0.0486
                   f16         11         57     0.0263     0.0877     0.0222    0.00715
                    b2          2          2          1          0          0          0
                 other         13         86      0.144     0.0465     0.0778     0.0245
                   b52         21         70      0.132      0.257     0.0851     0.0321
                  kc10         12         62     0.0239     0.0161     0.0311     0.0135
               command         12         40      0.021      0.025     0.0172    0.00549
                   f15         21        123      0.066    0.00813     0.0344     0.0117
                 kc135         24         91      0.209      0.527      0.257      0.125
                   a10          4         27          0          0    0.00229    0.00099
                    b1          5         20          0          0    0.00117   0.000421
                   aew          4         25     0.0325     0.0793     0.0101    0.00565
                   f22          3         17          0          0    0.00444    0.00112
                    p3          6        105          0          0    0.00749    0.00169
                    p8          1          1          0          0          0          0
                   f35          5         32          1          0     0.0146    0.00712
                   f18         13        125      0.109      0.872      0.202     0.0796
                   v22          5         41     0.0281      0.171     0.0128    0.00595
                 su-27          5         31     0.0343     0.0645     0.0318    0.00957
                 il-38         10         27          0          0    0.00964    0.00265
                tu-134          1          1          1          0          0          0
                 su-33          1          2          0          0          0          0
                 an-70          1          2          1          0          0          0
                 tu-22          8         98      0.035     0.0102      0.018    0.00576

总结

综上所述,基于增强层间特征相关性的轻量级融合策略为小目标检测提供了一种有效的解决方案。通过优化特征融合过程,该方法能够更好地应对小目标检测中的挑战,提升检测精度和效率。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI智韵 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 论文信息
  • 研究贡献
    • 分组特征关注单元(GFF)
      • GFF的工作原理
    • 多级特征重构模块(MFR)在特征融合中的作用
      • MFR的主要功能
      • MFR的优势
  • 方法优势
  • 代码
    • EFC模块代码解读
      • 代码结构
      • 关键步骤解析
      • 示例运行
  • 改进方法
  • 测试结果
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档