【YOLOv8改进】D-LKA Attention:可变形大核注意力 (论文笔记+引入代码)
摘要
医学图像分割在Transformer模型的应用下取得了显著进步,这些模型在捕捉远距离上下文和全局语境信息方面表现出色。然而,这些模型的计算需求随着token数量的平方增加,限制了其深度和分辨率能力。大多数现有方法以逐片处理三维体积图像数据(称为伪3D),这忽略了重要的片间信息,从而降低了模型的整体性能。为了解决这些挑战,我们引入了可变形大核注意力(D-LKA Attention)的概念,这是一种简化的注意力机制,采用大卷积核以充分利用体积上下文信息。该机制在类似于自注意力的感受野内运行,同时避免了计算开销。此外,我们提出的注意力机制通过可变形卷积灵活变形采样网格,使模型能够适应多样的数据模式。我们设计了D-LKA Attention的2D和3D版本,其中3D版本在跨深度数据理解方面表现出色。这些组件共同构成了我们新颖的分层视觉Transformer架构,即D-LKA Net。在流行的医学分割数据集(如Synapse、NIH胰腺和皮肤病变)上对我们模型的评估表明其优于现有方法。我们的代码实现已在GitHub上公开。
YOLO目标检测创新改进与实战案例专栏
专栏目录: YOLO有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例
专栏链接: YOLO基础解析+创新改进+实战案例
基本原理
可变形大核注意力(Deformable Large Kernel Attention, D-LKA Attention)是一种简化的注意力机制,采用大卷积核来充分利用体积上下文信息。该机制在类似于自注意力的感受野内运行,同时避免了计算开销。通过可变形卷积灵活变形采样网格,使模型能够适应多样的数据模式,增强对病灶或器官变形的表征能力。同时设计了D-LKA Attention的2D和3D版本,其中3D版本在跨深度数据理解方面表现出色。这些组件共同构成了新颖的分层视觉Transformer架构,即D-LKA Net,在多种医学分割数据集上的表现优于现有方法。:
-
大卷积核:
D-LKA Attention利用大卷积核来捕捉类似于自注意力机制的感受野。这些大卷积核可以通过深度卷积、深度膨胀卷积和1×1卷积构建,从而在保持参数和计算复杂性较低的同时,获得较大的感受野。这使得模型能够更好地理解体积上下文信息,提升分割精度。 -
可变形卷积:
D-LKA Attention引入了可变形卷积,使得卷积核可以灵活地调整采样网格,从而适应不同的数据模式。这种适应性使得模型能够更准确地表征病变或器官的变形,提高对象边界的定义精度。可变形卷积通过一个额外的卷积层学习偏移场,使得卷积核可以动态调整以适应输入特征。 -
2D和3D版本:
D-LKA Attention分别设计了2D和3D版本,以适应不同的分割任务需求。2D版本在处理二维图像时,通过变形卷积提高对不规则形状和大小对象的捕捉能力。3D版本则在处理三维体积数据时,通过在现有框架中引入单个变形卷积层来增强跨深度数据的理解能力。这种设计在保持计算效率的同时,能够有效地处理片间信息,提高分割精度和上下文整合能力。
yolov8 引入
class DeformConv(nn.Module):
# 定义可变形卷积层
def __init__(self, in_channels, groups, kernel_size=(3, 3), padding=1, stride=1, dilation=1, bias=True):
super(DeformConv, self).__init__()
# 偏移量网络,用于生成偏移量
self.offset_net = nn.Conv2d(in_channels=in_channels,
out_channels=2 * kernel_size[0] * kernel_size[1],
kernel_size=kernel_size,
padding=padding,
stride=stride,
dilation=dilation,
bias=True)
# 可变形卷积层
self.deform_conv = torchvision.ops.DeformConv2d(in_channels=in_channels,
out_channels=in_channels,
kernel_size=kernel_size,
padding=padding,
groups=groups,
stride=stride,
dilation=dilation,
bias=False)
def forward(self, x):
# 前向传播
offsets = self.offset_net(x) # 计算偏移量
out = self.deform_conv(x, offsets) # 使用偏移量进行卷积操作
return out
task与yaml配置
详见:https://blog.csdn.net/shangyanaf/article/details/139212227