2024即插即用轻量化自适应提取模块LAE,涨点起飞起飞了

文摘   2024-11-30 17:20   北京  

论文介绍

题目:LSM-YOLO: A Compact and Effective ROI Detector for Medical Detection

论文地址:https://arxiv.org/pdf/2408.14087

QQ深度学习交流群:719278780

扫描下方二维码,加入深度学习论文指南星球!

加入即可获得,模块缝合、制作、写作技巧,学会“结构”创新、“创新点”创新,从三区到顶会,小论文大论文,毕业一站式服务

创新点

  • 提出了轻量化的医疗检测模型LSM-YOLO

  • 作者设计了一种名为“轻量化分流匹配 YOLO (Lightweight Shunt Matching-YOLO, LSM-YOLO)”的模型,专注于在保持高检测准确率的同时实现实时性和轻量化,适合医疗图像ROI(感兴趣区域)的自动检测。

  • 引入了两个关键模块

    • 轻量化自适应提取 (Lightweight Adaptive Extraction, LAE):该模块通过提取多尺度特征图,保留更多上下文信息和高分辨率细节,同时减少噪声的影响。相比传统卷积,LAE显著减少了参数和计算成本。

    • 多路径分流特征匹配 (Multipath Shunt Feature Matching, MSFM):通过改进高阶语义特征和低阶视觉特征的融合,MSFM提升了小目标的检测性能,使得模型在处理医疗图像中小病灶时表现出色。

  • 设计了新的特征融合方法

  • 结合LAE和MSFM模块,实现了从高分辨率到低分辨率的特征提取和特征融合,同时设计了具有残差连接和无残差连接的MSFM模块版本,以适应不同的检测阶段。

  • 性能表现

  • 在多个医疗数据集(胰腺肿瘤、血细胞检测和脑肿瘤检测)上进行测试,显示出LSM-YOLO相比其他主流模型具有更高的检测准确率和更低的参数量。例如,在胰腺肿瘤数据集上,LSM-YOLO以极低的参数量(2.87M)实现了48.6%的AP(平均准确率),超过了其他主流模型。

  • 实时性与轻量化设计

  • 模型设计注重轻量化,便于部署到资源受限的医疗设备中,同时保证了实时检测的能力,为实际医疗应用提供了可能性。

方法

1. 模型架构概览

主要由以下模块组成:

  • Backbone(骨干网络):用于提取多尺度特征。

  • Head(检测头):对提取的特征进行进一步处理和融合,最终生成检测结果。

  • Output Heads(输出头):包含多个检测头(如大目标、中目标、小目标、极小目标),分别处理不同尺度的目标。


2. 核心模块描述

2.1 轻量化自适应提取(Lightweight Adaptive Extraction, LAE)

  • 功能:对输入特征图进行多尺度下采样,提取丰富的上下文信息和高分辨率细节,同时减少计算成本。

  • 结构

    • 一条分支负责轻量化提取。

    • 另一条分支负责自适应提取,通过加权处理输入特征图的局部和全局信息。

    • 通过组卷积降低计算复杂度。

    • 使用两条分支并行提取特征:

    • 结合后实现高效的信息保留和提取。

2.2 多路径分流特征匹配(Multipath Shunt Feature Matching, MSFM)

  • 功能:融合不同层级的特征,增强高阶语义特征和低阶空间特征的匹配能力。

  • 结构

    • 带残差连接的版本:用于骨干网络,增强特征表达能力。

    • 无残差连接的版本:用于检测头,避免多余的信息叠加。

    • 通道信息分流:通过全局池化和卷积提取全局语义信息。

    • 空间信息分流:提取特征图的高度和宽度信息,辅助捕获小目标的上下文。

    • 采用分流概念,将输入特征划分为不同部分进行处理:

    • 两种版本

2.3 接受场注意卷积(Receptive-Field Attention Convolution, RFABlock)

  • 功能:引入注意力机制,提升卷积对目标区域和背景区域的区分能力。

  • 位置:主要用于骨干网络的特征提取阶段。



3. 多尺度特征融合

模型设计了多尺度特征融合机制:

  • 基于改进的路径聚合特征金字塔网络(Path Aggregation-Feature Pyramid Network, PA-FPN),融合高分辨率和低分辨率特征。

  • 在特征融合后,分配到四个检测头,分别处理不同尺度的目标区域。



4. 损失函数

模型的损失函数包含三个部分:

  • 分类损失:使用二元交叉熵损失(Binary Cross-Entropy Loss)。

  • 边界框回归损失

    • 分布焦点损失(Distribution Focal Loss, DFL):提高边界框的定位精度。

    • SCYLLA-IoU损失(SIoU Loss):优化边界框的回归效果。

  • 整体损失:上述三部分按权重组合,确保分类和回归的平衡

即插即用模块作用

LAE 作为一个即插即用模块

  • 医疗图像检测

    • 特定场景:如 CT、MRI、血液检测等医疗图像,尤其是在检测肿瘤、小病灶或其他小目标时。

    • 作用:提取丰富的多尺度特征,增强对小目标及其上下文的关注能力,同时减少噪声影响。


  • 小目标检测任务

    • 特定场景:如自然场景下的小物体检测(例如密集场景中的人脸、车辆等)或具有强背景干扰的目标。

    • 作用:通过在多尺度采样中保留边界信息,有效检测小目标,并提高模型的定位和分类精度。


  • 计算资源有限的环境

    • 特定场景:如边缘设备部署、嵌入式系统、实时检测需求的场景。

    • 作用:以极低的参数量和计算成本完成高效特征提取,满足实时性和轻量化的需求。


  • 噪声干扰较大的检测任务

    • 特定场景:如目标与背景差异较小或图像质量较差的场景(例如低分辨率图像)。

    • 作用:通过自适应提取路径,动态调整对高信息熵区域的关注度,减少噪声干扰,提升特征表达能力。

消融实验结果

  • 通过对 RFABlock、LAE 和 MSFM 三个核心模块的独立及联合测试,展示了它们对模型性能的显著影响。单独使用每个模块均能提升检测性能,其中 MSFM 贡献最大,而三者协同使用时达到最佳效果,AP50:95 提升至 48.6%。这表明三个模块在特征提取、融合和上下文理解中的作用互补且设计合理。

  • 表5 针对 LAE 模块内部的轻量化提取(LE)、自适应提取(AE)和维度映射(DM)三个组件进行了测试,发现每个组件单独启用均能提升检测性能,联合使用时效果更优,其中 DM 的加入进一步强化了上下文特征的整合能力,使 AP50:95 达到 48.6%。这验证了 LAE 模块在高效提取多尺度特征上的设计优势。

  • 表6 测试了 MSFM 模块中空间信息处理和通道信息处理的独立及联合效果,发现两者单独启用时各自提高了检测性能,而同时启用时 AP50:95 提升至最高的 48.6%。这表明空间与通道信息处理在特征融合上具有显著的互补性,有助于增强 ROI 区域与邻域特征的交互,提升检测精度和鲁棒性。

即插即用模块

import torch
import torch.nn as nn
from einops import rearrange
# 论文地址:https://arxiv.org/pdf/2408.14087
# 论文:LSM-YOLO: A Compact and Effective ROI Detector for Medical Detection


def autopad(k, p=None, d=1):  # kernel, padding, dilation
    """Pad to 'same' shape outputs."""
    if d > 1:
        k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k] # actual kernel-size
    if p is None:
        p = k // 2 if isinstance(k, int) else [x // 2 for x in k] # auto-pad
    return p

class Conv(nn.Module):
    """Standard convolution with args(ch_in, ch_out, kernel, stride, padding, groups, dilation, activation)."""
    default_act = nn.SiLU() # default activation

    def __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True):
        """Initialize Conv layer with given arguments including activation."""
        super().__init__()
        self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groups=g, dilation=d, bias=False)
        self.bn = nn.BatchNorm2d(c2)
        self.act = self.default_act if act is True else act if isinstance(act, nn.Module) else nn.Identity()

    def forward(self, x):
        """Apply convolution, batch normalization and activation to input tensor."""
        return self.act(self.bn(self.conv(x)))

    def forward_fuse(self, x):
        """Perform transposed convolution of 2D data."""
        return self.act(self.conv(x))

class LAE(nn.Module):
    # Light-weight Adaptive Extraction
    def __init__(self, ch, group=16) -> None:
        super().__init__()

        self.softmax = nn.Softmax(dim=-1)
        self.attention = nn.Sequential(
            nn.AvgPool2d(kernel_size=3, stride=1, padding=1),
            Conv(ch, ch, k=1)
        )

        self.ds_conv = Conv(ch, ch * 4, k=3, s=2, g=(ch // group))

    def forward(self, x):
        # bs, ch, 2*h, 2*w => bs, ch, h, w, 4
        att = rearrange(self.attention(x), 'bs ch (s1 h) (s2 w) -> bs ch h w (s1 s2)', s1=2, s2=2)
        att = self.softmax(att)

        # bs, 4 * ch, h, w => bs, ch, h, w, 4
        x = rearrange(self.ds_conv(x), 'bs (s ch) h w -> bs ch h w s', s=4)
        x = torch.sum(x * att, dim=-1)
        return x


if __name__ == '__main__':

    input = torch.randn(1, 16, 64, 64) # B C H W
    block = LAE(ch=16)
    output = block(input)
    print(input.size())    print(output.size())

便捷下载方式

浏览打开网址:https://github.com/ai-dawang/PlugNPlay-Modules

更多分析可见原文


ai缝合大王
聚焦AI前沿,分享相关技术、论文,研究生自救指南
 最新文章