基于Yolov8的野外烟雾检测(2):多维协作注意模块MCA,效果秒杀ECA、SRM、CBAM等 | 2023.9最新发布

目录

1.Yolov8介绍

2.野外火灾烟雾数据集介绍

3.MCA介绍

4.训练结果分析

5.系列篇


1.Yolov8介绍

Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的(SOTA)模型,它建立在先前YOLO成功基础上,并引入了新功能和改进,以进一步提升性能和灵活性。它可以在大型数据集上进行训练,并且能够在各种硬件平台上运行,从CPU到GPU。

具体改进如下:

  1. Backbone:使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻量化,同时YOLOv8依旧使用了YOLOv5等架构中使用的SPPF模块;

  2. PAN-FPN:毫无疑问YOLOv8依旧使用了PAN的思想,不过通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8将YOLOv5中PAN-FPN上采样阶段中的卷积结构删除了,同时也将C3模块替换为了C2f模块;

  3. Decoupled-Head:是不是嗅到了不一样的味道?是的,YOLOv8走向了Decoupled-Head;

  4. Anchor-Free :YOLOv8抛弃了以往的Anchor-Base,使用了Anchor-Free的思想;

  5. 损失函数:YOLOv8使用VFL Loss作为分类损失,使用DFL Loss+CIOU Loss作为分类损失;

  6. 样本匹配:YOLOv8抛弃了以往的IOU匹配或者单边比例的分配方式,而是使用了Task-Aligned Assigner匹配方式

框架图提供见链接:Brief summary of YOLOv8 model structure · Issue #189 · ultralytics/ultralytics · GitHub

2.野外火灾烟雾数据集介绍

数据集大小737张,train:val:test 随机分配为7:2:1,类别:smoke

3.MCA介绍

图 1:所提出的多维协作注意模块 (d) 与 ECA 模块 (a)、SRM (b) 和 CBAM (c) 的示意图比较。

图 2:所提出的具有三个分支的 MCA 模块的总体架构。

顶部分支用于捕获空间维度 W 中特征之间的交互。类似地,中间分支用于捕获空间维度 H 中特征之间的交互。底部分支负责捕获通道之间的交互。 在前两个分支中,我们采用置换操作来捕获通道维度与任一空间维度之间的远程依赖性。 最后,在积分阶段通过简单平均来聚合所有三个分支的输出。

图 3:原始残差块的架构(左)、MCA 集成到基本残差块(中)以及 MCA 集成到瓶颈残差块(右)。

3.1MCA加入到yolov8

核心代码:

复制代码
class MCALayer(nn.Module):
    def __init__(self, inp, no_spatial=True):
        """Constructs a MCA module.
        Args:
            inp: Number of channels of the input feature maps
            no_spatial: whether to build channel dimension interactions
        """
        super(MCALayer, self).__init__()

        lambd = 1.5
        gamma = 1
        temp = round(abs((math.log2(inp) - gamma) / lambd))
        kernel = temp if temp % 2 else temp - 1

        self.h_cw = MCAGate(3)
        self.w_hc = MCAGate(3)
        self.no_spatial = no_spatial
        if not no_spatial:
            self.c_hw = MCAGate(kernel)

    def forward(self, x):
        x_h = x.permute(0, 2, 1, 3).contiguous()
        x_h = self.h_cw(x_h)
        x_h = x_h.permute(0, 2, 1, 3).contiguous()

        x_w = x.permute(0, 3, 2, 1).contiguous()
        x_w = self.w_hc(x_w)
        x_w = x_w.permute(0, 3, 2, 1).contiguous()

        if not self.no_spatial:
            x_c = self.c_hw(x)
            x_out = 1 / 3 * (x_c + x_h + x_w)
        else:
            x_out = 1 / 2 * (x_h + x_w)

        return x_out

详见:YoloV8改进:原创独家首发 | 多维协作注意模块MCA,暴力涨点,效果秒杀ECA、SRM、CBAM等 | 即插即用系列_AI小怪兽的博客-CSDN博客

4.训练结果分析

训练结果如下:

原始mAP@0.5 0.839提升至0.87

复制代码
YOLOv8n_MCALayer summary (fused): 209 layers, 2545659 parameters, 0 gradients, 7.2 GFLOPs
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 4/4 [00:05<00:00,  1.46s/it]
                   all        199        177      0.817      0.853       0.87      0.504

5.系列篇

1)基于Yolov8的野外烟雾检测

2)基于Yolov8的野外烟雾检测(2):多维协作注意模块MCA| 2023.9最新发布

3)基于Yolov8的野外烟雾检测(3):动态蛇形卷积,实现暴力涨点 | ICCV2023

4)基于Yolov8的野外烟雾检测(4):通道优先卷积注意力(CPCA) | 中科院2023最新发表

相关推荐
不脱发的程序猿2 分钟前
纳指ETF量化策略
数据库·人工智能·1024程序员节
supabc12319 分钟前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节
abckingaa34 分钟前
AI时代代码Review瓶颈分析
人工智能·ai编程·1024程序员节
ZhengEnCi40 分钟前
AI Agent工具调用防护层怎么写-一份能直接跑的Python四层拦截实现
python·llm·agent
我喜欢就喜欢1 小时前
豆包赋能抖音内容创作与运营实战指南
人工智能·1024程序员节
weixin_435208161 小时前
大模型面试宝典——大模型(LLMs)基础面
人工智能·自然语言处理·agent
4SAPI1 小时前
AI 数据分析工具大模型 API 选型指南
大数据·人工智能·架构·php·1024程序员节
企业数字化笔记1 小时前
视频人体姿态怎么做三维可视化?2D关键点、深度局限与技术选型
人工智能·算法·音视频
ZhengEnCi1 小时前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线
python·llm·agent
古希腊掌管代码的神THU1 小时前
为什么DPO中chosen/rejected概率同时下降?
人工智能·深度学习·机器学习·自然语言处理·面试