【Yolov5】涨点亲测有效,Yolov5添加PSA极化自注意力机制

这篇具有很好参考价值的文章主要介绍了【Yolov5】涨点亲测有效,Yolov5添加PSA极化自注意力机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在学习目标检测领域的yolov5算法,发现PSA(极化自注意力机制)对于该算法的改进可能有用,于是在网上几经搜寻,无果,遂自己动手写了一个,现分享给大家

PSA极化自注意力机制来源

论文链接: Polarized Self-Attention: Towards High-quality Pixel-wise Regression
代码地址: https://github.com/DeLightCMU/PSA

使用效果

【Yolov5】涨点亲测有效,Yolov5添加PSA极化自注意力机制,pytorch,深度学习,python,计算机视觉,人工智能图1 原图
【Yolov5】涨点亲测有效,Yolov5添加PSA极化自注意力机制,pytorch,深度学习,python,计算机视觉,人工智能 图2 平行极化
【Yolov5】涨点亲测有效,Yolov5添加PSA极化自注意力机制,pytorch,深度学习,python,计算机视觉,人工智能图3 顺序极化

极化过程示意图

作者在网上没有找到pytorch框架下的PSA模块源码,于是根据论文中的流程自己动手写了一个。
论文中的流程图:
【Yolov5】涨点亲测有效,Yolov5添加PSA极化自注意力机制,pytorch,深度学习,python,计算机视觉,人工智能

源代码

class PSA_Channel(nn.Module):
    def __init__(self, c1) -> None:
        super().__init__()
        c_ = c1 // 2  # hidden channels
        self.cv1 = nn.Conv2d(c1, c_, 1)
        self.cv2 = nn.Conv2d(c1, 1, 1)
        self.cv3 = nn.Conv2d(c_, c1, 1)
        self.reshape1 = nn.Flatten(start_dim=-2, end_dim=-1)
        self.reshape2 = nn.Flatten()
        self.sigmoid = nn.Sigmoid()
        self.softmax = nn.Softmax(1)
        self.layernorm = nn.LayerNorm([c1, 1, 1])

    def forward(self, x): # shape(batch, channel, height, width)
        x1 = self.reshape1(self.cv1(x)) # shape(batch, channel/2, height*width)
        x2 = self.softmax(self.reshape2(self.cv2(x))) # shape(batch, height*width)
        y = torch.matmul(x1, x2.unsqueeze(-1)).unsqueeze(-1) # 高维度下的矩阵乘法(最后两个维度相乘)
        return self.sigmoid(self.layernorm(self.cv3(y))) * x

class PSA_Spatial(nn.Module):
    def __init__(self, c1) -> None:
        super().__init__()
        c_ = c1 // 2  # hidden channels
        self.cv1 = nn.Conv2d(c1, c_, 1)
        self.cv2 = nn.Conv2d(c1, c_, 1)
        self.reshape1 = nn.Flatten(start_dim=-2, end_dim=-1)
        self.globalPooling = nn.AdaptiveAvgPool2d(1)
        self.softmax = nn.Softmax(1)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x): # shape(batch, channel, height, width)
        x1 = self.reshape1(self.cv1(x)) # shape(batch, channel/2, height*width)
        x2 = self.softmax(self.globalPooling(self.cv2(x)).squeeze(-1)) # shape(batch, channel/2, 1)
        y = torch.bmm(x2.permute(0,2,1), x1) # shape(batch, 1, height*width)
        return self.sigmoid(y.view(x.shape[0], 1, x.shape[2], x.shape[3])) * x

class PSA(nn.Module):
    def __init__(self, in_channel, parallel=True) -> None:
        super().__init__()
        self.parallel = parallel
        self.channel = PSA_Channel(in_channel)
        self.spatial = PSA_Spatial(in_channel)

    def forward(self, x):
        if(self.parallel):
            return self.channel(x) + self.spatial(x)
        return self.spatial(self.channel(x))

Yolov5添加PSA极化自注意力的步骤

第一步,将☝️上面的PSA模块代码粘贴到models/common.py文件下。

第二步,构建添加PSA模块的网络。在models文件夹下面创建yolov5s-PSA.yaml文件,并且将👇下面的内容粘贴上去。

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple  深度——神经网络的层数, 宽度——每层的通道数, 分辨率——是指网络中特征图的分辨率
width_multiple: 0.50  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, PSA, [64]], # PSA
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, PSA, [128]], # PSA
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, PSA, [256]], # PSA
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 8], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 5], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 17], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 13], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[20, 23, 26], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

第三步,在终端输入命令python models/yolo.py --cfg=yolov5s-PSA.yaml,运行后可查看网络细节。
【Yolov5】涨点亲测有效,Yolov5添加PSA极化自注意力机制,pytorch,深度学习,python,计算机视觉,人工智能
到这一步大功告成,我们就可以愉快的使用这个网络了😊文章来源地址https://www.toymoban.com/news/detail-617762.html

到了这里,关于【Yolov5】涨点亲测有效,Yolov5添加PSA极化自注意力机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOv5、YOLOv7改进首发最新PWConv核心结构|来自最新CVPR2023顶会,进一步轻量化!测试数据集mAP有效涨点,进一步降低参数量,追求更高的 FLOPS

    💡 本篇内容 :YOLOv5,YOLOv7改进首发最新PWConv核心结构|来自最新顶会CVPR2023, 🚀🚀各种数据集mAP有效涨点,进一步降低参数量,追求更高的 FLOPS 💡 🚀🚀🚀内含·改进源代码·,按步骤操作运行改进后的代码即可 重点 :🔥🔥🔥有同学已经使用这个 PWConv 创新点 在 数据集

    2024年02月06日
    浏览(45)
  • YOLOV5 | AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘ 问题解决 亲测有效

    如图: 1.点击报错行该路径,进入编辑页 2.将原代码(153-154行)修改为如下所示(155行): 即: 保存后再次运行detect.py,即可: 来看看训练结果吧 运行detect.py之前,应该将YOLOV5对应的权重文件放到项目文件夹下: 这里提供官方权重文件,可点击下方链接自行下载: YOLOv

    2024年02月13日
    浏览(101)
  • YOLOV8改进:更换为MPDIOU,实现有效涨点

    1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 2.涨点效果:更换为MPDIOU,实现有效涨点! 目录

    2024年02月10日
    浏览(57)
  • 涨点技巧:Detect系列---Yolov5/Yolov7加入ASFF特征金字塔融合方法,涨点明显

    目录   1.ASFF介绍  2.ASFF加入Yolov5提升检测精度 2.1 ASFF加入common.py中: 2.2 ASFF加入yolo.py中:  2.3 修改yolov5s_asff.yaml 2.4 与cbam结合 进一步提升检测精度 🏆 🏆🏆🏆🏆🏆🏆Yolov5/Yolov7成长师🏆🏆🏆🏆🏆🏆🏆 🍉🍉进阶专栏Yolov5/Yolov7魔术师:http://t.csdn.cn/D4NqB 🍉🍉 ✨✨✨

    2023年04月08日
    浏览(46)
  • 涨点神器:CVPR2023 InceptionNeXt当Inception遇见ConvNeXt,在Yolov5/Yolov7/Yolov8即插即用,小目标检测涨点明显

    论文地址: https://arxiv.org/pdf/2303.16900.pdf 代码: GitHub - sail-sg/inceptionnext: InceptionNeXt: When Inception Meets ConvNeXt 单位:NUS, Sea AI Lab(颜水成等人) 1. InceptionNeXt介绍 摘要:受ViT的 long-range 建模能力的启发,大核卷积来扩大感受野用于提升模型性能,比如ConvNeXt了采用7x7深度卷积。虽

    2024年02月02日
    浏览(51)
  • 涨点技巧:注意力机制---Yolov5/Yolov7引入BoTNet Transformer、MHSA

    目录 1. BoTNet(Bottleneck Transformer Network) 2.Yolov5/Yolov7加入BoTNet、MHSA 2.1 BoTNet、MHSA加入common.py中  2.3 BoTNet、MHSA加入yolo.py中 2.4修改 yolov5s_botnet.yaml 2.5 修改 yolov5s_mhsa.yaml UC伯克利,谷歌研究院(Ashish Vaswani, 大名鼎鼎的Transformer一作) 论文:https://arxiv.org/abs/2101.11605 Github:https:

    2023年04月23日
    浏览(46)
  • 目标检测算法——YOLOv5/YOLOv7改进之结合Swin Transformer V2(涨点神器)

    作者提出了将Swin Transformer缩放到30亿个参数的技术 ,并使其能够使用高达1536×1536分辨率的图像进行训练。在很多方面达到了SOTA。 目前,视觉模型尚未像NLP语言模型那样被广泛探索,部分原因是训练和应用中的以下差异: (1)视觉模型通常在规模上面临不稳定性问题; (2)

    2024年02月05日
    浏览(272)
  • 改进YOLO系列:YOLOv5结合转置卷积,实现小目标涨点

    该函数是用来进行转置卷积的,它主要做了这几件事:首先,对输入的feature map进行padding操作,得到新的feature map;然后,随机初始化一定尺寸的卷积核;最后,用随机初始化的一定尺寸的卷积核在新的feature map上进行卷积操作。 补充一下,卷积核确实是随机初始的,但是后

    2023年04月09日
    浏览(47)
  • YOLOv5改进 | 融合改进篇 | 华为VanillaNet + BiFPN突破涨点极限

    本文给大家带来的改进机制是 华为VanillaNet 主干 配合 BiFPN 实现融合涨点,这个主干是一种注重极简主义和效率的神经网络我也将其进行了实验, 其中的BiFPN不用介绍了从其发布到现在一直是比较热门的改进机制,其主要思想是通过多层级的特征金字塔和双向信息传递来提高

    2024年02月20日
    浏览(38)
  • 改进YOLOv7系列:结合最新即插即用的动态卷积ODConv,有效涨点

    💡该教程包含大量的原创首发改进方式, 所有文章都是原创首发改进内容🌟 降低改进难度,改进点包含最新最全的Backbone部分、Neck部分、Head部分、注意力机制部分、自注意力机制部分等完整教程🌟 💡本篇文章为 基于 YOLOv7、YOLOv7-Tiny 、YOLOv5、YOLOv6、YOLOX、YOLOv4 结合 即插即用

    2024年02月07日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包