RT-DETR手把手教程:NEU-DET钢材表面缺陷检测任务 | 不同网络位置加入EMA注意力进行魔改

news2024/11/27 15:47:28

 💡💡💡本文独家改进:本文首先复现了将EMA引入到RT-DETR中,并跟不同模块进行结合创新;1)多种Rep C3结合;2)直接作为注意力机制放在网络不同位置;

NEU-DET钢材表面缺陷检测:

原始 rtdetr-r18 map0.5为0.67

rtdetr-r18-EMA_attention map0.5为0.691

rtdetr-r18-EMA_attentionC3 map0.5为0.72

rtdetr-r18-EMA_attentionC31 map0.5为0.718 

RT-DETR魔术师专栏介绍:

https://blog.csdn.net/m0_63774211/category_12497375.html

✨✨✨魔改创新RT-DETR

🚀🚀🚀引入前沿顶会创新,助力RT-DETR

🍉🍉🍉基于ultralytics优化,与YOLO完美结合
 

1.钢铁缺陷数据集介绍

NEU-DET钢材表面缺陷共有六大类,分别为:'crazing','inclusion','patches','pitted_surface','rolled-in_scale','scratches'

每个类别分布为:

2.EMA注意力介绍 

论文:https://arxiv.org/abs/2305.13563v1 

录用:ICASSP2023

        通过通道降维来建模跨通道关系可能会给提取深度视觉表示带来副作用。本文提出了一种新的高效的多尺度注意力(EMA)模块。以保留每个通道上的信息和降低计算开销为目标,将部分通道重塑为批量维度,并将通道维度分组为多个子特征,使空间语义特征在每个特征组中均匀分布。 

 

        提出了一种新的无需降维的高效多尺度注意力(efficient multi-scale attention, EMA)。请注意,这里只有两个卷积核将分别放置在并行子网络中。其中一个并行子网络是一个1x1卷积核,以与CA相同的方式处理,另一个是一个3x3卷积核。为了证明所提出的EMA的通用性,详细的实验在第4节中给出,包括在CIFAR-100、ImageNet-1k、COCO和VisDrone2019基准上的结果。图1给出了图像分类和目标检测任务的实验结果。我们的主要贡献如下:

        本文提出了一种新的跨空间学习方法,并设计了一个多尺度并行子网络来建立短和长依赖关系。
1)我们考虑一种通用方法,将部分通道维度重塑为批量维度,以避免通过通用卷积进行某种形式的降维。
2)除了在不进行通道降维的情况下在每个并行子网络中构建局部的跨通道交互外,我们还通过跨空间学习方法融合两个并行子网络的输出特征图。
3)与CBAM、NAM[16]、SA、ECA和CA相比,EMA不仅取得了更好的结果,而且在所需参数方面效率更高。

 

3 EMA_attention如何跟RT-DETR结合进行结合创新

3.1 如何跟Rep C3结合

EMA_attentionC3与RepC3结合方式

# Ultralytics YOLO 🚀, AGPL-3.0 license
# RT-DETR-l object detection model with P3-P5 outputs. For details see https://docs.ultralytics.com/models/rtdetr

# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n-cls.yaml' will call yolov8-cls.yaml with scale 'n'
  # [depth, width, max_channels]
  l: [1.00, 1.00, 1024]


backbone:
  # [from, repeats, module, args]
  - [-1, 1, Resnet_ConvNormLayer, [32, 3, 2, None, False, 'relu']] # 0-P1/2
  - [-1, 1, Resnet_ConvNormLayer, [32, 3, 1, None, False, 'relu']] # 1
  - [-1, 1, Resnet_ConvNormLayer, [64, 3, 1, None, False, 'relu']] # 2
  - [-1, 1, nn.MaxPool2d, [3, 2, 1]] # 3-P2/4
  
  # [ch_out, block_type, block_nums, stage_num, act, variant]
  - [-1, 1, Resnet_Blocks, [64, BasicBlock, 2, 2, 'relu']] # 4
  - [-1, 1, Resnet_Blocks, [128, BasicBlock, 2, 3, 'relu']] # 5-P3/8
  - [-1, 1, Resnet_Blocks, [256, BasicBlock, 2, 4, 'relu']] # 6-P4/16
  - [-1, 1, Resnet_Blocks, [512, BasicBlock, 2, 5, 'relu']] # 7-P5/32

head:
  - [-1, 1, Conv, [256, 1, 1, None, 1, 1, False]]  # 8 input_proj.2
  - [-1, 1, AIFI, [1024, 8]] # 9
  - [-1, 1, Conv, [256, 1, 1]]  # 10, Y5, lateral_convs.0

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']] # 11
  - [6, 1, Conv, [256, 1, 1, None, 1, 1, False]]  # 12 input_proj.1
  - [[-2, -1], 1, Concat, [1]] # 13
  - [-1, 3, EMA_attentionC3, [256, 0.5]]  # 14, fpn_blocks.0
  - [-1, 1, Conv, [256, 1, 1]]   # 15, Y4, lateral_convs.1

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']] # 16
  - [5, 1, Conv, [256, 1, 1, None, 1, 1, False]]  # 17 input_proj.0
  - [[-2, -1], 1, Concat, [1]]  # 18 cat backbone P4
  - [-1, 3, EMA_attentionC3, [256, 0.5]]    # X3 (19), fpn_blocks.1

  - [-1, 1, Conv, [256, 3, 2]]   # 20, downsample_convs.0
  - [[-1, 15], 1, Concat, [1]]  # 21 cat Y4
  - [-1, 3, EMA_attentionC3, [256, 0.5]]    # F4 (22), pan_blocks.0

  - [-1, 1, Conv, [256, 3, 2]]   # 23, downsample_convs.1
  - [[-1, 10], 1, Concat, [1]]  # 24 cat Y5
  - [-1, 3, RepC3, [256, 0.5]]    # F5 (25), pan_blocks.1

  - [[19, 22, 25], 1, RTDETRDecoder, [nc, 256, 300, 4, 8, 3]]  # Detect(P3, P4, P5)

3.2 如何跟RepC3结合

EMA_attentionC31另一种Rep C3结合方式

# Ultralytics YOLO 🚀, AGPL-3.0 license
# RT-DETR-l object detection model with P3-P5 outputs. For details see https://docs.ultralytics.com/models/rtdetr

# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n-cls.yaml' will call yolov8-cls.yaml with scale 'n'
  # [depth, width, max_channels]
  l: [1.00, 1.00, 1024]


backbone:
  # [from, repeats, module, args]
  - [-1, 1, Resnet_ConvNormLayer, [32, 3, 2, None, False, 'relu']] # 0-P1/2
  - [-1, 1, Resnet_ConvNormLayer, [32, 3, 1, None, False, 'relu']] # 1
  - [-1, 1, Resnet_ConvNormLayer, [64, 3, 1, None, False, 'relu']] # 2
  - [-1, 1, nn.MaxPool2d, [3, 2, 1]] # 3-P2/4
  
  # [ch_out, block_type, block_nums, stage_num, act, variant]
  - [-1, 1, Resnet_Blocks, [64, BasicBlock, 2, 2, 'relu']] # 4
  - [-1, 1, Resnet_Blocks, [128, BasicBlock, 2, 3, 'relu']] # 5-P3/8
  - [-1, 1, Resnet_Blocks, [256, BasicBlock, 2, 4, 'relu']] # 6-P4/16
  - [-1, 1, Resnet_Blocks, [512, BasicBlock, 2, 5, 'relu']] # 7-P5/32

head:
  - [-1, 1, Conv, [256, 1, 1, None, 1, 1, False]]  # 8 input_proj.2
  - [-1, 1, AIFI, [1024, 8]] # 9
  - [-1, 1, Conv, [256, 1, 1]]  # 10, Y5, lateral_convs.0

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']] # 11
  - [6, 1, Conv, [256, 1, 1, None, 1, 1, False]]  # 12 input_proj.1
  - [[-2, -1], 1, Concat, [1]] # 13
  - [-1, 3, EMA_attentionC31, [256, 0.5]]  # 14, fpn_blocks.0
  - [-1, 1, Conv, [256, 1, 1]]   # 15, Y4, lateral_convs.1

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']] # 16
  - [5, 1, Conv, [256, 1, 1, None, 1, 1, False]]  # 17 input_proj.0
  - [[-2, -1], 1, Concat, [1]]  # 18 cat backbone P4
  - [-1, 3, EMA_attentionC31, [256, 0.5]]    # X3 (19), fpn_blocks.1

  - [-1, 1, Conv, [256, 3, 2]]   # 20, downsample_convs.0
  - [[-1, 15], 1, Concat, [1]]  # 21 cat Y4
  - [-1, 3, EMA_attentionC31, [256, 0.5]]    # F4 (22), pan_blocks.0

  - [-1, 1, Conv, [256, 3, 2]]   # 23, downsample_convs.1
  - [[-1, 10], 1, Concat, [1]]  # 24 cat Y5
  - [-1, 3, RepC3, [256, 0.5]]    # F5 (25), pan_blocks.1

  - [[19, 22, 25], 1, RTDETRDecoder, [nc, 256, 300, 4, 8, 3]]  # Detect(P3, P4, P5)

3.3 直接作为注意力机制放在网络不同位置

# Ultralytics YOLO 🚀, AGPL-3.0 license
# RT-DETR-l object detection model with P3-P5 outputs. For details see https://docs.ultralytics.com/models/rtdetr

# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n-cls.yaml' will call yolov8-cls.yaml with scale 'n'
  # [depth, width, max_channels]
  l: [1.00, 1.00, 1024]


backbone:
  # [from, repeats, module, args]
  - [-1, 1, Resnet_ConvNormLayer, [32, 3, 2, None, False, 'relu']] # 0-P1/2
  - [-1, 1, Resnet_ConvNormLayer, [32, 3, 1, None, False, 'relu']] # 1
  - [-1, 1, Resnet_ConvNormLayer, [64, 3, 1, None, False, 'relu']] # 2
  - [-1, 1, nn.MaxPool2d, [3, 2, 1]] # 3-P2/4
  
  # [ch_out, block_type, block_nums, stage_num, act, variant]
  - [-1, 1, Resnet_Blocks, [64, BasicBlock, 2, 2, 'relu']] # 4
  - [-1, 1, Resnet_Blocks, [128, BasicBlock, 2, 3, 'relu']] # 5-P3/8
  - [-1, 1, Resnet_Blocks, [256, BasicBlock, 2, 4, 'relu']] # 6-P4/16
  - [-1, 1, Resnet_Blocks, [512, BasicBlock, 2, 5, 'relu']] # 7-P5/32

head:
  - [-1, 1, Conv, [256, 1, 1, None, 1, 1, False]]  # 8 input_proj.2
  - [-1, 1, AIFI, [1024, 8]] # 9
  - [-1, 1, Conv, [256, 1, 1]]  # 10, Y5, lateral_convs.0
  - [-1, 1, EMA_attention, [256]]   # 11

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']] # 12
  - [6, 1, Conv, [256, 1, 1, None, 1, 1, False]]  # 13 input_proj.1
  - [[-2, -1], 1, Concat, [1]] # 14
  - [-1, 3, RepC3, [256, 0.5]]  # 15, fpn_blocks.0
  - [-1, 1, Conv, [256, 1, 1]]   # 16, Y4, lateral_convs.1
  - [-1, 1, EMA_attention, [256]]   # 17

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']] # 16
  - [5, 1, Conv, [256, 1, 1, None, 1, 1, False]]  # 17 input_proj.0
  - [[-2, -1], 1, Concat, [1]]  # 18 cat backbone P4
  - [-1, 3, RepC3, [256, 0.5]]    # X3 (21), fpn_blocks.1

  - [-1, 1, Conv, [256, 3, 2]]   # 20, downsample_convs.0
  - [[-1, 17], 1, Concat, [1]]  # 21 cat Y4
  - [-1, 3, RepC3, [256, 0.5]]    # F4 (24), pan_blocks.0

  - [-1, 1, Conv, [256, 3, 2]]   # 23, downsample_convs.1
  - [[-1, 10], 1, Concat, [1]]  # 24 cat Y5
  - [-1, 3, RepC3, [256, 0.5]]    # F5 (27), pan_blocks.1

  - [[21, 24, 27], 1, RTDETRDecoder, [nc, 256, 300, 4, 8, 3]]  # Detect(P3, P4, P5)

4.实验结果分析

原始rtdetr-r18

rtdetr-r18 summary: 319 layers, 19884264 parameters, 0 gradients
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 16/16 [00:12<00:00,  1.24it/s]
                   all        486       1069      0.658       0.63       0.67      0.379
               crazing        486        149      0.593      0.107      0.236     0.0901
             inclusion        486        222        0.6      0.784      0.772      0.404
               patches        486        243      0.835      0.855      0.908      0.561
        pitted_surface        486        130      0.695      0.738      0.766       0.48
       rolled-in_scale        486        171      0.592      0.449      0.506      0.241
             scratches        486        154      0.631      0.844       0.83      0.495

rtdetr-r18-EMA_attention

rtdetr-r18-EMA_attention summary: 335 layers, 19885608 parameters, 0 gradients
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 16/16 [00:13<00:00,  1.21it/s]
                   all        486       1069      0.748      0.638      0.691      0.393
               crazing        486        149      0.459      0.248      0.242     0.0776
             inclusion        486        222      0.825      0.739      0.797      0.416
               patches        486        243      0.883      0.831      0.898      0.571
        pitted_surface        486        130      0.904      0.722      0.823      0.514
       rolled-in_scale        486        171      0.609      0.456      0.503      0.219
             scratches        486        154       0.81      0.832      0.885      0.562

rtdetr-r18-EMA_attentionC3

rtdetr-r18-EMA_attentionC3 summary: 373 layers, 18557592 parameters, 0 gradients
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 16/16 [00:13<00:00,  1.16it/s]
                   all        486       1069      0.732      0.657       0.72      0.405
               crazing        486        149      0.475      0.231      0.288      0.107
             inclusion        486        222      0.784      0.721      0.814      0.437
               patches        486        243      0.885      0.819      0.918      0.583
        pitted_surface        486        130      0.868      0.708        0.8      0.488
       rolled-in_scale        486        171      0.624      0.602      0.604      0.261
             scratches        486        154      0.755      0.859      0.899      0.557

rtdetr-r18-EMA_attentionC31

rtdetr-r18-EMA_attentionC31 summary: 343 layers, 19884792 parameters, 0 gradients
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 16/16 [00:14<00:00,  1.14it/s]
                   all        486       1069       0.74      0.668      0.718      0.407
               crazing        486        149      0.469      0.255      0.261      0.104
             inclusion        486        222      0.792      0.775      0.825      0.419
               patches        486        243      0.865       0.86       0.91      0.584
        pitted_surface        486        130      0.887      0.715      0.801      0.517
       rolled-in_scale        486        171      0.617      0.532       0.61      0.274
             scratches        486        154      0.809       0.87      0.903      0.542

源码详见:

RT-DETR手把手教程:NEU-DET钢材表面缺陷检测任务 | 不同网络位置加入EMA注意力进行魔改-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1291595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rename--一些例子与问题

指令 A 和指令 B之间存在先写后读(RAW)的相关性 指令 B 的源寄存器 r0 来自于指令 A 产生的结果因此在进行寄存器重命名的时候&#xff0c;指令 B 的 r0 对应的物理寄存器应该直接来自于指令A所对应的P30,而不应该来自于从RAT读取的值。指令A,B,D之间存在先写后写(WAW)的相关性…

指针(二)

这里写目录标题 字符指针字符指针与常量字符串的区别&#xff1a; 指针数组数组指针两者的区别&#xff1a;&数组名 &#xff0c;sizeof(arr)数组指针的使用数组参数&#xff0c;指针参数一维数组传参整型数组&#xff1a;整型指针数组&#xff1a; 一级指针传参二级指针传…

openai 1.3.x 版本 openai.APITimeoutError: Request timed out. 解决

问题描述 openai 1.3.x 版本 请求出现 Request timed out File "E:\Python\Python312\Lib\site-packages\openai\_base_client.py", line 920, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "E:\Python\Python312\L…

数据结构与算法编程题48

有向图的邻接表 #include <iostream> using namespace std;#define MVnum 100 typedef string VertexType;typedef struct ArcNode {int adjvex;struct ArcNode* nextarc;int weight; }ArcNode;typedef struct VNode {VertexType data;struct ArcNode* firstarc; }VNode,…

NAS外网访问方案

基础流程 路由器开启端口映射&#xff08;如果有猫则要配置猫为转发模式&#xff0c;由路由器直接拨号即可使用第三方程序让内网ip发布到公网上&#xff08;如果有云服务器&#xff09;需要开启防火墙端口 好用的第三方程序 FRP穿透 优点&#xff1a;开源免费&#xff0c;速…

基于ssm学院党员管理系统论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对鄂尔多斯应用技术学院党员信息管理混乱&#xff0c;出错率高&#x…

金蝶云星空业务对象列表显示动态列

文章目录 金蝶云星空业务对象列表显示动态列需求设计开发实现列表插件字段标题数据绑定前事件数据绑定列表插件注册测试 金蝶云星空业务对象列表显示动态列 需求设计 《产品序列号档案》的序列号、适用组织分别关联《序列号主档》的序列号字段&#xff0c;的适用组织表的组织…

Java简易版 TCP协议一对一聊天

客户端 package 二十一章;import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class Server {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;priv…

1.pipenv创建pyqt5虚拟环境

pipenv创建pyqt5虚拟环境 一、安装pipenv ​ cmd输入指令&#xff1a; pip install pipenv二、安装虚拟环境 cmd进入我要创建环境的目录下 我使用以下命令在当前目录下创建虚拟环境&#xff1a; pipenv --python 3.8创建一个基于Python 3.8的虚拟环境&#xff0c;并生成一个…

深度探索Linux操作系统 —— 构建内核

系列文章目录 深度探索Linux操作系统 —— 编译过程分析 深度探索Linux操作系统 —— 构建工具链 深度探索Linux操作系统 —— 构建内核 文章目录 系列文章目录前言一、内核映像的组成 前言 内核的构建系统 kbuild 基于GNU Make&#xff0c;是一套非常复杂的系统。 对于编译内核…

【神化世界】asp网页500内部服务器错误的解决方法

问题解决方案记录 一、问题 在asp网页调试的时候&#xff0c;不小心改错了&#xff0c;好好的页面突然出现如下错误信息了&#xff1a; 二、解决方法 终于找到了问题所在&#xff0c;是sql语句出错造成的&#xff0c;特别记录一下。 正确的写法 sql"select * from mem…

好用的远程访问软件有哪些?

借助远程访问软件可以对不在身边的电脑进行远程控制或访问&#xff0c;这对于需要远程办公的人来说十分的方便&#xff0c;通过这些软件可以使团队协作和沟通不再受地域限制。市面上的远程访问软件有很多&#xff0c;有哪些好用的远程访问软件呢&#xff1f;这里&#xff0c;本…

【顶级神刊】IEEE旗下TOP,CCF-A,投稿5次也要一试再试,升职法宝,这本期刊逆天了!

计算机类 • 好刊解读 今天小编带来IEEE旗下计算机领域顶级神刊&#xff0c;CCF-A类推荐的期刊解读&#xff0c;众多作者投稿5次也要一试再试&#xff0c;究竟这本期刊如何&#xff1f;如您有投稿需求&#xff0c;可作为重点关注&#xff01;后文有相关领域真实发表案例&#…

网络安全攻击预警/态势预测算法汇总

总结&#xff1a; 网络安全攻击预警/态势预测算法众多&#xff0c;主要包括&#xff1a; 基于统计学的算法&#xff1a;协方差矩阵、马尔可夫模型等&#xff1b; 基于机器学习的算法&#xff1a;贝叶斯网络、聚类算法、支持向量机SVM、遗传算法、层次分析法AHP、决策树等&am…

Talk | UCSB博士生欧阳思琦: 利用词级别对比学习实现低资源下的语音翻译

本期为TechBeat人工智能社区第553期线上Talk。 北京时间12月6日(周三)20:00&#xff0c;加州大学圣塔芭芭拉分校博士生—欧阳思琦的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “利用词级别对比学习实现低资源下的语音翻译”&#xff0c;介绍了他…

扔掉sql语句,用 QxOrm 让你的数据库操作从来没有这么简单过!

ORM简介&#xff1a; ORM 全称是 Object Relational Mapping&#xff08;对象关系映射&#xff09;&#xff0c;是一种程序设计技术&#xff0c;用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说&#xff0c;它其实是创建了一个可在编程语言里使用的“虚拟…

优思学院|六西格玛质量管理的工具、方法和手段

质量管理涉及多种技术不同的手段&#xff0c;包括了理性分析的和数据分析的工具&#xff0c;绝大部分工具都可以在六西格玛绿带和黑带知识领域中找到&#xff0c;因此&#xff0c;质量人应该学好六西格玛。以下&#xff0c;我们列举一些常见的技术手段。 六西格玛项目方法&…

Java基础——桥洞盖小被

文章目录 1. ArryayList2. LinkedList3. HashMap 1. ArryayList 2. LinkedList 3. HashMap

免费的AI改写工具推荐,AI改写工具大全

在本文中&#xff0c;我们将专心分享AI改写的方法、工具以及技巧&#xff0c;旨在帮助大家更好地理解和利用写作利器。我们将揭示AI改写的背后原理&#xff0c;探讨目前市场上主流的AI改写工具&#xff0c;并分享一些提高改写效果的使用技巧。 AI改写的背后技术原理 在深入讨…

基于ssm学生请假系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本学生请假系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…