RT-DETR融合CVPR[2020]轻量化卷积模块Ghost Module模块


RT-DETR使用教程: RT-DETR使用教程

RT-DETR改进汇总贴:RT-DETR更新汇总贴


《GhostNet: More Features from Cheap Operations》

一、 模块介绍

        论文链接:https://arxiv.org/abs/1911.11907

        代码链接:GitHub - huawei-noah/Efficient-AI-Backbones: Efficient AI Backbones including GhostNet, TNT and MLP, developed by Huawei Noah's Ark Lab.

论文速览:

        由于内存和计算资源有限,在嵌入式设备上部署卷积神经网络 (CNN) 非常困难。特征图中的冗余是那些成功的 CNN 的一个重要特征,但在神经架构设计中很少被研究。本文提出了一种新颖的 Ghost 模块,用于从廉价操作中生成更多特征图。基于一组内在特征图,我们应用了一系列成本低廉的线性变换,生成了许多可以充分揭示内在特征底层信息的幽灵特征图。所提出的 Ghost 模块可以作为即插即用组件来升级现有的卷积神经网络。Ghost 瓶颈旨在堆叠 Ghost 模块,然后可以轻松建立轻量级的 GhostNet。在基准测试中进行的实验表明,所提出的 Ghost 模块是基线模型中卷积层的一个令人印象深刻的替代方案,我们的 GhostNet 可以实现更高的识别性能(例如75.7%top-1 准确率)与 MobileNetV3 相比,在 ImageNet ILSVRC-2012 分类数据集上的计算成本相似。

总结:华为诺亚方舟实验室推出的轻量化卷积模块,遥遥领先。


二、 加入到RT-DETR中

2.1 创建脚本文件

        首先在ultralytics->nn路径下创建blocks.py脚本,用于存放模块代码。

2.2 复制代码        

        复制代码粘到刚刚创建的blocks.py脚本中,如下图所示:

import torch
import torch.nn as nn
import torch.nn.functional as F
from ultralytics.nn.modules.conv import Conv
import mathclass GhostModule(nn.Module):def __init__(self, c1, c2, kernel_size=1, ratio=2, dw_size=3, stride=1, relu=True):super(GhostModule, self).__init__()self.oup = c2init_channels = math.ceil(c2 / ratio)new_channels = init_channels*(ratio-1)self.primary_conv = nn.Sequential(nn.Conv2d(c1, init_channels, kernel_size, stride, kernel_size//2, bias=False),nn.BatchNorm2d(init_channels),nn.ReLU(inplace=True) if relu else nn.Sequential(),)self.cheap_operation = nn.Sequential(nn.Conv2d(init_channels, new_channels, dw_size, 1, dw_size//2, groups=init_channels, bias=False),nn.BatchNorm2d(new_channels),nn.ReLU(inplace=True) if relu else nn.Sequential(),)def forward(self, x):x1 = self.primary_conv(x)x2 = self.cheap_operation(x1)out = torch.cat([x1,x2], dim=1)return out[:,:self.oup,:,:]

2.3 更改task.py文件 

       打开ultralytics->nn->modules->task.py,在脚本空白处导入函数。

from ultralytics.nn.blocks import *

        之后找到模型解析函数parse_model(约在tasks.py脚本中940行左右位置,可能因代码版本不同变动),在该函数的最后一个else分支上面增加相关解析代码。

        elif m is GhostModule:c2 = args[0]args = [ch[f], *args]

2.4 更改yaml文件 

yam文件解读:YOLO系列 “.yaml“文件解读_yolo yaml文件-CSDN博客

       打开更改ultralytics/cfg/models/rt-detr路径下的rtdetr-l.yaml文件,替换原有模块。(放在该位置仅能插入该模块,具体效果未知。博主精力有限,仅完成与其他模块二次创新融合的测试,结构图见文末,代码见群文件更新。)

# 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, HGStem, [32, 48]] # 0-P2/4- [-1, 6, HGBlock, [48, 128, 3]] # stage 1- [-1, 1, DWConv, [128, 3, 2, 1, False]] # 2-P3/8- [-1, 6, HGBlock, [96, 512, 3]] # stage 2- [-1, 1, DWConv, [512, 3, 2, 1, False]] # 4-P3/16- [-1, 2, GhostModule, [512]] # cm, c2, k, light, shortcut- [-1, 6, HGBlock, [192, 1024, 5, True, True]]- [-1, 6, HGBlock, [192, 1024, 5, True, True]] # stage 3- [-1, 1, DWConv, [1024, 3, 2, 1, False]] # 8-P4/32- [-1, 6, HGBlock, [384, 2048, 5, True, False]] # stage 4head:- [-1, 1, Conv, [256, 1, 1, None, 1, 1, False]] # 10 input_proj.2- [-1, 1, AIFI, [1024, 8]]- [-1, 1, Conv, [256, 1, 1]] # 12, Y5, lateral_convs.0- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [7, 1, Conv, [256, 1, 1, None, 1, 1, False]] # 14 input_proj.1- [[-2, -1], 1, Concat, [1]]- [-1, 3, RepC3, [256]] # 16, fpn_blocks.0- [-1, 1, Conv, [256, 1, 1]] # 17, Y4, lateral_convs.1- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [3, 1, Conv, [256, 1, 1, None, 1, 1, False]] # 19 input_proj.0- [[-2, -1], 1, Concat, [1]] # cat backbone P4- [-1, 3, RepC3, [256]] # X3 (21), fpn_blocks.1- [-1, 1, Conv, [256, 3, 2]] # 22, downsample_convs.0- [[-1, 17], 1, Concat, [1]] # cat Y4- [-1, 3, RepC3, [256]] # F4 (24), pan_blocks.0- [-1, 1, Conv, [256, 3, 2]] # 25, downsample_convs.1- [[-1, 12], 1, Concat, [1]] # cat Y5- [-1, 3, RepC3, [256]] # F5 (27), pan_blocks.1- [[21, 24, 27], 1, RTDETRDecoder, [nc]] # Detect(P3, P4, P5)


 2.5 修改train.py文件

       创建Train_RT脚本用于训练。

from ultralytics.models import RTDETR
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'if __name__ == '__main__':model = RTDETR(model='ultralytics/cfg/models/rt-detr/rtdetr-l.yaml')# model.load('yolov8n.pt')model.train(data='./data.yaml', epochs=2, batch=1, device='0', imgsz=640, workers=2, cache=False,amp=True, mosaic=False, project='runs/train', name='exp')

         在train.py脚本中填入修改好的yaml路径,运行即可训。

三、相关改进思路(2024/11/16日群文件)

       自研模块与其余融合代码及yaml文件见群文件。

 ⭐另外,融合上百种改进模块的YOLO项目仅79.9(含百种改进的v9),RTDETR79.9,含高性能自研模型,更易发论文,代码每周更新,欢迎点击下方小卡片加我了解。

⭐⭐平均每个文章对应4-6个二创及自研融合模块⭐⭐


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《TCP/IP网络编程》学习笔记 | Chapter 11:进程间通信

《TCP/IP网络编程》学习笔记 | Chapter 11:进程间通信 《TCP/IP网络编程》学习笔记 | Chapter 11:进程间通信进程间通信的基本概念通过管道实现进程间通信通过管道进行进程间双向通信 运用进程间通信习题(1)什么是进程间通信&…

2024 kali操作系统安装Docker步骤

1、更新系统 在开始之前,确保你的Kali系统是最新的。打开终端并运行以下命令: apt update 2、安装 apt install docker.io 3、查看启动状态 systemctl status docker 4、安装完 Docker 后,启动 systemctl start docker 5、启动并使…

LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略

LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略 目录 Github Spark的简介 Github Spark的安装和使用方法 1、安装 2、使用方法 Github Spark的案例应用 Github Spark的简介 2024年10月30日,GitHub 重磅发布GitHub Spark 是一…

MySQL数据库:SQL语言入门 【上】(学习笔记)

SQL(Structured Query Language)是结构化查询语言的简称,它是一种数据库查询和程序设计语言,同时也是目前使用最广泛的关系型数据库操作语言。(95%适用于所有关系型数据库) 【 SQL是关系型数据库通用的操作…

腾讯云nginx SSL证书配置

本章教程,记录在使用腾讯云域名nginx证书配置SSL配置过程。 一、nginx配置 域名和证书,替换成自己的即可。证书文件可以自定义路径位置。服务器安全组或者防火墙需要开放80和443端口。 server {#SSL 默认访问端口号为 443listen 443 ssl; #请填写绑定证书的域名server_name c…

使用electron-egg把vue项目在linux Ubuntu环境下打包并安装运行

electron-egg一个入门简单、跨平台、企业级桌面软件开发框架https://www.kaka996.com/electron-egg 跳转地址 1,使用 git下载代码到本地,如果没有git需要进行安装 # gitee git clone https://gitee.com/dromara/electron-egg.git # github git clone https://github.com/dro…

Nginx配置自带的stub状态实现活动监控指标

场景 为了确保应用以最佳性能和精度运行,需要清晰地了解有关其活动的监控指标。 NGINX 提供了多种监控选项,例如 stub 状态。 注: 博客:霸道流氓气质-CSDN博客 实现 启用 NGINX stub 状态 启用 NGINX HTTP 服务器内 locati…

vscode下nuget包的本地引入方法

优势: nuget包的本地引入可以方便打包后的本地测试,确保打包正确、功能完善后再上传至nuget服务端本地引入方式也极为简单,三步操作即可搞定,熟悉之后这个操作2分钟内就可以搞定 具体步骤(以引入Epic.RobotService包…

【知识科普】SPA单页应用程序介绍

SPA单页应用程序 概述和传统的多页应用有什么区别?用户体验架构和开发性能和优化SEO(搜索引擎优化)维护和扩展 如何优化SEO服务端渲染和预渲染有什么区别? 概述 SPA,全称为Single Page Application(单页应用…

免费HTML模板和CSS样式网站汇总

HTML模板:(注意版权,部分不可商用) 1、Tooplate,免费HTML模板下载 Download 60 Free HTML Templates for your websitesDownload 60 free HTML website templates or responsive Bootstrap templates instantly from T…

深入理解接口测试:实用指南与最佳实践5.0(二)

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/cat…

【go从零单排】Random Numbers、Number Parsing

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 这里是引用 💻代码 Random Numbers package mainimport ("fmt…

网页web无插件播放器EasyPlayer.js点播播放器遇到视频地址播放不了的现象及措施

在数字媒体时代,视频点播已成为用户获取信息和娱乐的重要方式。EasyPlayer.js作为一款流行的点播播放器,以其强大的功能和易用性受到广泛欢迎。然而,在使用过程中,用户可能会遇到视频地址无法播放的问题,这不仅影响用户…

mysql5.7安装SSL报错解决(2),总结

Caused by: java.io.EOFException: SSL peer shut down incorrectly 在java里面连接mysql5.7.17数据库,报以上错误, 将数据库升级到mysql5.7.44就可以了。 这两天处理java连接mysql的问题,报了各种错误,总结一下就是openssl和mysq…

vue项目npm run serve出现【- Network: unavailable】(从排查到放弃)

1. 问题现象 环境: 系统:win11node:v16.20.2“vue”: “2.6.10” 执行npm run serve启动vue项目,期望: App running at:- Local: http://localhost:9528/ - Network: http://x.x.x.x:9528/实际: App runn…

【vue2.0入门】vue单文件组件

目录 引言一、配置编辑器vue2代码片段模版1. 配置vue2代码模版2. 使用vue模版 二、模版介绍1. template区域2. script 区域2.1 name2.2 components2.3 props2.4 data2.5 computed2.6 watch2.7 methods2.8 生命周期函数 3. style 区域 三、总结 引言 本系列教程旨在帮助一些零基…

外星人入侵

学习于Python编程从入门到实践(Eric Matthes 著) 整体目录:外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站:Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果:可以上下左右移…

【Qt】Macbook M1下载安装

文章目录 一、下载Xcode命令行工具二、在Cion中配置编译器三、安装Qt四、配置qmake环境五、创建Qt项目 博主已经下载了Clion,所以本文是将qt配置到Clion上 本博客所写的教程有一定的问题,因为我在官网下载后发现有一些所需的包是没有的,不知道…

Vim9 语法高亮syntax 在指定的缓冲区和窗口执行命令

背景:从开发,创建makefile、编译、单元测试、到生产部署都只有俺一个人,所以所有的工作都要自己完成,因此有了想法做一个插件,按需实现:构建Makefile,编译、打包、压缩、上传服务器、解压、安装…

docker之容器设置开机自启(4)

命令语法: docker update --restartalways 容器ID/容器名 选项: --restart参数 no 默认策略,在容器退出时不重启容器 on-failure 在容器非正常退出时(退出状态非0),才会重启容器 …