一、本文介绍
作为入门性篇章,这里介绍了LSKA注意力在YOLOv8中的使用。包含LSKA原理分析,LSKA的代码、LSKA的使用方法、以及添加以后的yaml文件及运行记录。
二、LSKA原理分析
LSKA官方论文地址:LSKA文章
LSKA注意力机制(大可分离内核注意力):LSKA将深度卷积层的二维卷积核分解为级联的水平和垂直的1-D核。提出的分解允许在注意力模块中直接使用大核的深度卷积层,而不需要任何额外的模块。
在VAN中LSKA模块能够达到与标准LKA模块相当的性能,并降低了计算复杂性和内存占用。随着核尺寸的增加,LSKA设计使VAN更偏向于物体的形状而非纹理。
相关代码:
LSKA注意力的代码,如下。
class LSKA(nn.Module):
# Large-Separable-Kernel-Attention
def __init__(self, dim, k_size=7):
super().__init__()
self.k_size = k_size
if k_size == 7:
self.conv0h = nn.Conv2d(dim, dim, kernel_size=(1, 3), stride=(1,1), padding=(0,(3-1)//2), groups=dim)
self.conv0v = nn.Conv2d(dim, dim, kernel_size=(3, 1), stride=(1,1), padding=((3-1)//2,0), groups=dim)
self.conv_spatial_h = nn.Conv2d(dim, dim, kernel_size=(1, 3), stride=(1,1), padding=(0,2), groups=dim, dilation=2)
self.conv_spatial_v = nn.Conv2d(dim, dim, kernel_size=(3, 1), stride=(1,1), padding=(2,0), groups=dim, dilation=2)
elif k_size == 11:
self.conv0h = nn.Conv2d(dim, dim, kernel_size=(1, 3), stride=(1,1), padding=(0,(3-1)//2)