YOLOv8改进,YOLOv8引入HFF模块,增强特征融合能力


在这里插入图片描述


摘要

在卷积神经网络的推动下,医学图像分类得到了迅速发展网络(CNN)。作者提出了一种三分支分层多尺度特征融合网络结构作为一种新的医学图像分类方法被称为HiFuse。它可以融合Transformer和CNN来自多尺度层次结构,不破坏各自的建模,因此从而提高各种医学图像的分类精度。一个并行的局部层次结构设计了全局特征块,有效地提取局部特征和全局表示在各种语义尺度下,具有在不同尺度下建模的灵活性和线性计算能力与图像大小相关的复杂性。此外,还提出了一种自适应分层特征融合块(HFF块)设计为综合利用在不同层次上获得的特征。这个HFF块包含空间注意、通道注意、剩余倒转MLP和adap快捷方式主动融合各分支各尺度特征间的语义信息。


理论介绍

HiFuse 模型设计三分支并行架构:局部分支(CNN 提取细节)、全局分支(Transformer 关注整体特征)、融合分支(HFF Block 进行多尺度特征融合):

  1. 局部分支(Local Block):使用 3×3 深度卷积提取局部信息。
  2. 全局分支(Global Block):采用 Swin Transformer 提取全局信息。
  3. 融合分支(HFF Block):包括通道注意力、空间注意力、残差 MLP、快捷连接,自适应融合各层次信息。
    下图摘自论文
    在这里插入图片描述
    在这里插入图片描述

理论详解可以参考链接:论文地址
代码可在这个链接找到:代码地址

下文都是手把手教程,跟着操作即可添加成功


### 不同注意力机制的效果差异 在图像处理领域,多种注意力机制被广泛应用并取得了显著成果。多视角融合注意力机制通过结合多尺度特征融合和注意力机制,如BACNN、HiFuse 和 PA-Unet++等方法,能够更有效地捕捉图像中的复杂结构信息,从而提升模型的整体表现[^1]。 #### 通道注意力机制 通道注意力机制专注于调整各通道之间的权重分布,以此来增强重要特征的同时抑制不重要的部分。这种机制可以动态地根据输入数据自适应地分配资源,使得网络更加灵活高效。研究表明,该机制特别适用于那些需要区分不同语义区域的任务,因为它能更好地理解全局上下文关系[^2]。 #### 空间注意力机制 相比之下,空间注意力机制则侧重于关注特定位置上的像素级关联性。它通过对整个感受野内的响应图施加软掩码操作,突出显示最具代表性的局部模式。这种方法有助于改善细粒度分类以及目标检测等任务的表现,因为这些任务往往依赖于精确的位置信息。 当两者结合起来时——即实现空间与通道双重注意力建模,则可以在更大程度上提高模型鲁棒性和泛化能力。例如,在医学影像分析中,这样的组合可以帮助识别微小病变;而在自然场景解析方面,则可促进对物体边界及其内部纹理细节的理解。 ```python import torch.nn as nn class SpatialAttention(nn.Module): def __init__(self, kernel_size=7): super(SpatialAttention, self).__init__() assert kernel_size in (3, 7), 'kernel size must be 3 or 7' padding = 3 if kernel_size == 7 else 1 self.conv1 = nn.Conv2d(2, 1, kernel_size, padding=padding, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, x): avg_out = torch.mean(x, dim=1, keepdim=True) max_out, _ = torch.max(x, dim=1, keepdim=True) x = torch.cat([avg_out, max_out], dim=1) x = self.conv1(x) return self.sigmoid(x) class ChannelAttention(nn.Module): def __init__(self, in_planes, ratio=16): super(ChannelAttention, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.max_pool = nn.AdaptiveMaxPool2d(1) self.fc1 = nn.Conv2d(in_planes, in_planes // ratio, 1, bias=False) self.relu1 = nn.ReLU() self.fc2 = nn.Conv2d(in_planes // ratio, in_planes, 1, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, x): avg_out = self.fc2(self.relu1(self.fc1(self.avg_pool(x)))) max_out = self.fc2(self.relu1(self.fc1(self.max_pool(x)))) out = avg_out + max_out return self.sigmoid(out) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挂科边缘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值