爆改YOLOv8|利用yolov9的ADown改进卷积Conv-轻量化

1,本文介绍

本文将利用YOLOv9的ADown模块改进卷积。

关于ADown的详细介绍可以看论文:https://arxiv.org/abs/2402.13616

本文将讲解如何将ADown融合进yolov8

话不多说,上代码!

2, 将ADown融合进yolov8

2.1 步骤一

找到如下的目录'ultralytics/nn/modules',然后在这个目录下创建一个ADown.py文件,文件名字可以根据你自己的习惯起,然后将ADown的核心代码复制进去。


import torch
import torch.nn as nn__all__ = ['ADown']def autopad(k, p=None, d=1):  # kernel, padding, dilation# Pad to 'same' shape outputsif d > 1:k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k]  # actual kernel-sizeif p is None:p = k // 2 if isinstance(k, int) else [x // 2 for x in k]  # auto-padreturn pclass Conv(nn.Module):# Standard convolution with args(ch_in, ch_out, kernel, stride, padding, groups, dilation, activation)default_act = nn.SiLU()  # default activationdef __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True):super().__init__()self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groups=g, dilation=d, bias=False)self.bn = nn.BatchNorm2d(c2)self.act = self.default_act if act is True else act if isinstance(act, nn.Module) else nn.Identity()def forward(self, x):return self.act(self.bn(self.conv(x)))def forward_fuse(self, x):return self.act(self.conv(x))class ADown(nn.Module):def __init__(self, c1, c2):  # ch_in, ch_out, shortcut, kernels, groups, expandsuper().__init__()self.c = c2 // 2self.cv1 = Conv(c1 // 2, self.c, 3, 2, 1)self.cv2 = Conv(c1 // 2, self.c, 1, 1, 0)def forward(self, x):x = torch.nn.functional.avg_pool2d(x, 2, 1, 0, False, True)x1,x2 = x.chunk(2, 1)x1 = self.cv1(x1)x2 = torch.nn.functional.max_pool2d(x2, 3, 2, 1)x2 = self.cv2(x2)return torch.cat((x1, x2), 1)def autopad(k, p=None, d=1):  # kernel, padding, dilation"""Pad to 'same' shape outputs."""if d > 1:k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k]  # actual kernel-sizeif p is None:p = k // 2 if isinstance(k, int) else [x // 2 for x in k]  # auto-padreturn pclass Conv(nn.Module):"""Standard convolution with args(ch_in, ch_out, kernel, stride, padding, groups, dilation, activation)."""default_act = nn.SiLU()  # default activationdef __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True):"""Initialize Conv layer with given arguments including activation."""super().__init__()self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groups=g, dilation=d, bias=False)self.bn = nn.BatchNorm2d(c2)self.act = self.default_act if act is True else act if isinstance(act, nn.Module) else nn.Identity()def forward(self, x):"""Apply convolution, batch normalization and activation to input tensor."""return self.act(self.bn(self.conv(x)))def forward_fuse(self, x):"""Perform transposed convolution of 2D data."""return self.act(self.conv(x))

2.2 步骤二

在task.py导入我们的模块

from .modules.ADown import Adown

2.3 步骤三

在task.py的parse_model方法里面注册我们的模块

到此注册成功,复制后面的yaml文件直接运行即可

yaml文件

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80  # number of classes
scales:  # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2- [-1, 1, ADown, [128]]  # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, ADown, [256]]  # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, ADown, [512]]  # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, ADown, [1024]]  # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]]  # 9# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 6], 1, Concat, [1]]  # cat backbone P4- [-1, 3, C2f, [512]]  # 12- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 4], 1, Concat, [1]]  # cat backbone P3- [-1, 3, C2f, [256]]  # 15 (P3/8-small)- [-1, 1, ADown, [256]]- [[-1, 12], 1, Concat, [1]]  # cat head P4- [-1, 3, C2f, [512]]  # 18 (P4/16-medium)- [-1, 1, ADown, [512]]- [[-1, 9], 1, Concat, [1]]  # cat head P5- [-1, 3, C2f, [1024]]  # 21 (P5/32-large)- [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)

# 关于ADown的位置大家可以自行调换,位置不同结果不同

不知不觉已经看完了哦,动动小手留个点赞收藏吧--_--

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

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

相关文章

【高中物理】用代码缩写胡克定律公式原理图

用代码缩写胡克定律公式原理图 代码实现了以下功能: 交互式滑块:用户可以通过滑块调整弹簧的弹性系数(k)、拉力大小(F)和弹簧的原长(l0),实时观察弹簧的伸长和受力变化。…

在VB.net中,TimeSpan有什么属性与方法

标题 在VB.net中,TimeSpan有什么属性与方法 正文 在 VB.NET 中,TimeSpan 结构表示时间间隔,即一段时间,而不表示特定的时间点。TimeSpan 提供了多种属性来获取时间间隔的各个组成部分,以及一些方法来操作这些时间间隔。…

【观察者】设计模式:构建灵活且响应式的软件系统

引言 在软件开发中,我们经常面临需要在多个对象之间进行通信的挑战。特别是当一个对象的状态发生变化时,我们希望所有依赖于这个状态的对象都能自动更新。这就是观察者设计模式大显身手的地方。 简介 观察者模式是一种行为设计模式,它定义…

基于vue框架的城市交通管理系统的设计与实现9fcck(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,区域,车站信息,公交线路 开题报告内容 基于Vue框架的城市交通管理系统的设计与实现开题报告 一、研究背景与意义 1.1 研究背景 随着城市化进程的加速,城市交通问题日益严峻,包括交通拥堵、交通事故频发、…

“CSDN独家揭秘:AIGC技术在AI绘画领域的应用与学习攻略”

导语:人工智能的发展正推动着内容创作的革新,AIGC(AI Generated Content)技术便是其中的佼佼者。本文将带您领略AIGC在AI绘画领域的魅力,并分享一些学习资源和路径,助您在艺术与技术交汇的旅途中更进一步。…

山东省行政执法证照片要求及图像处理方法

在山东省,行政执法证是执法人员身份的重要标识,其照片的规范性对于证件的有效性至关重要。本文将详细介绍山东省行政执法证照片的要求,并提供使用手机相机拍照的实用方法,以确保照片符合标准。 一、山东省行政人员执法证照片拍摄要…

表情迁移大法,LivePortrait 帮你快速处理图片!

LivePortrait 由快手可灵大模型团队开源,主要功能包括从单一图像生成生动动画、精确控制眼睛和嘴唇的动作、处理多个人物肖像的无缝拼接、支持多风格肖像、生成高分辨率动画等。该项目使用的是基于隐式关键点框架的 AI 肖像动画生成框架。它能够将驱动视频的表情和姿…

sql语句的训练2024/9/9

1题 需要看清思路:不是将数据库中的device_id的名字改为user_infors_example,而是在查找的时候,需要将device_id看成user_infors_example来进行查找。 答案 select device_id AS user_infos_example FROM user_profile limit 2 2 当固定查找…

Leangoo敏捷工具在缺陷跟踪(BUG)管理中的高效应用

在开发过程中,缺陷(BUG)管理一直是项目管理中的一个关键环节。及时发现并修复BUG,不仅能够提高产品质量,还能有效提升团队的工作效率和用户满意度。 在敏捷开发中,快速迭代和频繁交付的特点使得缺陷管理的…

2024.09.04【读书笔记】|如何使用Tombo进行Nanopore Direct RNA-seq(DRS)分析

文章目录 Tombo快速使用介绍模型介绍RNA修饰分析步骤特异性替代碱基检测(推荐)De novo canonical model comparison ONT全长转录组分析步骤疑难解答Minimap2在比对nanopore直接RNA-seq数据时的最佳实践和参数设置有哪些?featureCounts在进行R…

红米K60U/K50/Note11TPro澎湃OS无法绑定账号解锁BL-不能激活小米账号

小米澎湃OS对于解锁BL,新增了各种限制,早前我们还能使用bypass脚本来实现澎湃OS上绑 定账号成功,但随着澎湃OS七月系统上的推送,旧版的bypass已经彻底失效,并且无法安装 旧版的设置APK来解决问题。此次涉及的机型有红米…

【Java】实体类Javabean的运用案例

文章目录 前言一、定义一个操作类专门处理数据二、代码总结 前言 实体类Javabean的运用案例,现在需要把数据与业务串联起来。 一、定义一个操作类专门处理数据 这里定义了一个叫DogOperator的类,专门用来处理Dog类里面的数据。 解析: 要把…

即时零售,电商平台们的「新战场」?

【潮汐商业评论/原创】 周末宅家的Cindy心血来潮要重启减肥计划,“第一步就是需要一个体脂秤,我要看看现在到底多少斤,以及其他的指标,不知道有没有一两个小时就能送到的?”Cindy边说边打开手机搜了起来。“还真有哎&…

大学英语四六级报名照不通过的原因

大学英语四六级报名照不通过的原因 #英语四六级 #大学英语四六级 #大学英语四六级考试 #英语四六级报名照片 #英语四六级考试报名照片

大数据Flink(一百一十四):PyFlink的作业开发入门案例

文章目录 PyFlink的作业开发入门案例 一、批处理的入门案例 1、示例 2、​​​​​​​​​​​​​​开发步骤 3、参考代码:基于DataStreamAPI编程 二、​​​​​​​​​​​​​​流处理的入门案例 1、​​​​​​​​​​​​​​示例 2、​​​​​…

【树和二叉树的相关定义】概念

1.回顾与概览 2.什么是树型结构 3.树的(递归)定义与基本术语 3.1树的定义 注意:除了根结点以外,任何一个结点都有且仅有一个前驱 3.2树的其他表示方式 3.3树的基本术语 结点:数据元素以及指向子树的分支根结点:非空…

人员随机分组

如何实现男女比例平均分组? 在团队活动中,合理地将人员分组是一项重要的组织工作,它有助于提高团队合作的效率和质量。云分组小程序提供了一个便捷的解决方案,通过智能算法帮助用户快速实现人员分组。本文将详细介绍如何使用云分组…

考试:软件工程(01)

软件开发生命周期 ◆软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标, 具体可分成问题定义、可行性研究、需求分析等。 ◆软件开发时期:就是软件的设计与实现,可分成概要设计…

【逐行注释】自适应Q的AUKF|MATLAB代码(附下载链接)

文章目录 逐行注释的说明运行结果自适应UKF介绍实现过程 部分代码各模块解释 逐行注释的说明 每一行都标有中文注释: 是我自己一个字一个字打的,如果有错别字等问题,欢迎指正。 运行结果 三轴的估计值、真值、滤波前的值对比&#xff1a…

【教师节视频制作】飞机降落飞机机身AE模板修改文字软件生成器教程特效素材【AE模板】

教师节祝福视频制作教程飞机降落飞机机身AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程 怎么如何做的【教师节视频制作】飞机降落飞机机身AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 下载AE模板 安装AE软件 把AE模板导入AE软件 …