前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >YOLOv8独家原创改进:SPPF自研创新 | 可变形大核注意力(D-LKA Attention),大卷积核提升不同特征感受野的注意力机制

YOLOv8独家原创改进:SPPF自研创新 | 可变形大核注意力(D-LKA Attention),大卷积核提升不同特征感受野的注意力机制

原创
作者头像
AI小怪兽
发布2023-12-09 14:56:41
2.5K1
发布2023-12-09 14:56:41
举报
文章被收录于专栏:YOLO大作战

💡💡💡本文自研创新改进: 可变形大核注意力(D-LKA Attention)高效结合SPPF进行二次创新,大卷积核提升不同特征感受野的注意力机制。

1.SPP &SPPF介绍

YOLOv5最初采用SPP结构在v6.0版本(repo)后开始使用SPPF,主要目的是融合更大尺度(全局)信息 YOLOV8使用SPPF 作者对SPP和SPPF进行了比较,SPPF在不影响mAP的情况下可以获得更快的速度和更少的FLOPs

2.改进原理介绍

论文:arxiv.org/pdf/2309.00121.pdf

为了解决这些挑战,我们引入了Deformable Large Kernel Attention (D-LKA Attention)}的概念,这是一种采用大卷积核来充分理解体积上下文的简化注意力机制。

这种机制在类似于自注意力的感受野中运行,同时避免了计算开销。 此外,我们提出的注意力机制受益于可变形卷积来灵活地扭曲采样网格,使模型能够适当地适应不同的数据模式。 我们设计了 D-LKA Attention 的 2D 和 3D 适应,后者在跨深度数据理解方面表现出色。

3.SPPF创新原理框架图

deformable_LKA和SPPF高效结合,进行创新

3.1 SPPF创新加入YOLOv5

3.1.1 SPPF_deformable_LKA加入models/sppf/SPPF_deformable_LKA.py

核心源码:

代码语言:python
代码运行次数:0
复制
class DeformConv_experimental(nn.Module):

    def __init__(self, in_channels, groups, kernel_size=(3,3), padding=1, stride=1, dilation=1, bias=True):
        super(DeformConv_experimental, self).__init__()
        
        self.conv_channel_adjust = nn.Conv2d(in_channels=in_channels, out_channels=2 * kernel_size[0] * kernel_size[1], kernel_size=(1,1))

        self.offset_net = nn.Conv2d(in_channels=2 * kernel_size[0] * kernel_size[1],
                                    out_channels=2 * kernel_size[0] * kernel_size[1],
                                    kernel_size=3,
                                    padding=1,
                                    stride=1,
                                    groups=2 * kernel_size[0] * kernel_size[1],
                                    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):
        x_chan = self.conv_channel_adjust(x)
        offsets = self.offset_net(x_chan)
        out = self.deform_conv(x, offsets)
        return out


class deformable_LKA(nn.Module):
    def __init__(self, dim):
        super().__init__()
        self.conv0 = DeformConv(dim, kernel_size=(5,5), padding=2, groups=dim)
        self.conv_spatial = DeformConv(dim, kernel_size=(7,7), stride=1, padding=9, groups=dim, dilation=3)
        self.conv1 = nn.Conv2d(dim, dim, 1)


    def forward(self, x):
        u = x.clone()        
        attn = self.conv0(x)
        attn = self.conv_spatial(attn)
        attn = self.conv1(attn)

        return u * attn

by CSDN AI小怪兽

https://blog.csdn.net/m0_63774211/category_12511737.html?spm=1001.2014.3001.5482

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.SPP &SPPF介绍
  • 2.改进原理介绍
  • 3.SPPF创新原理框架图
    • 3.1 SPPF创新加入YOLOv5
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档