yolov5更换主干网络shufflent

news2024/9/22 19:32:24

目录

1.网络结构解析

1.1创建yolov5s_shufflent_v2_X0_5.yaml文件

2.对common.py末尾进行添加

 3.修改yolo.py


1.网络结构解析

1.可以先看看shufflenet_v2的网络结构

import torch
from torch import nn
from torchvision import models
from torchinfo import summary


class shufflenet_v2_x0_5(nn.Module):
    def __init__(self,n):
        super().__init__()
        model = models.shufflenet_v2_x0_5(pretrained=True)
        self.model=model
    def forward(self, x):
        return self.model(x)
if __name__ == '__main__':
    x=torch.randn(1,3,640,640)
    net=shufflenet_v2_x0_5(0)
    out=net(x)
    print(out.shape)
    summary(net,(1,3,640,640))

这个是YOLOV5的网络。框出来的是yolov5的主干网络。我们用shufflenet_v2的部分替换。可以直接把shufflenet_v2的网络截取出三部分

定义

 下图的右边部分是网络shufflenet的官方网络结构,直接使用即可。

定义我们自己需要修改的shufflenet类

import torch
from torch import nn
from torchvision import models
from torchinfo import summary


class Shufflenet_v2_x0_5(nn.Module):
    def __init__(self,n):
        super().__init__()
        model = models.shufflenet_v2_x0_5(pretrained=True)
        if n==1:
            layer=[]
            layer+=[model.conv1]
            layer+=[model.maxpool]
            layer+=[model.stage2]
            self.model=nn.Sequential(*layer)
        if n==2:
            self.model=model.stage3
        if n==3:
            layer=[]
            layer+=[model.stage4]
            layer+=[model.conv5]
            self.model = nn.Sequential(*layer)
    def forward(self, x):
        return self.model(x)
if __name__ == '__main__':
    x=torch.randn(1,3,640,640)#torch.Size([1, 48, 80, 80])
    net=Shufflenet_v2_x0_5(1)
    out=net(x)
    print(out.shape)

    x1=torch.randn(1,48,80,80)#torch.Size([1, 96, 40, 40])
    net1 = Shufflenet_v2_x0_5(2)
    out1 = net1(x1)
    print(out1.shape)
    x2=torch.randn(1, 96, 40, 40)#torch.Size([1, 1024, 20, 20]
    net2 = Shufflenet_v2_x0_5(3)
    out2 = net2(x2)
    print(out2.shape)
    # summary(net,(1,3,640,640))

1.1创建yolov5s_shufflent_v2_X0_5.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,Shufflenet_v2_x0_5, [48, 1]],  # 0-P1/2
   [-1, 1,Shufflenet_v2_x0_5, [96,2]],  # 1-P2/4
   [-1, 1,Shufflenet_v2_x0_5, [1024,3]],
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 1], 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, 0], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

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

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

   [[10, 13, 16], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

2.对common.py末尾进行添加

位置如下:

        

class Shufflenet_v2_x0_5(nn.Module):
    def __init__(self,n):
        super().__init__()
        model = models.shufflenet_v2_x0_5(pretrained=True)
        if n==1:
            layer=[]
            layer+=[model.conv1]
            layer+=[model.maxpool]
            layer+=[model.stage2]
            self.model=nn.Sequential(*layer)
        if n==2:
            self.model=model.stage3
        if n==3:
            layer=[]
            layer+=[model.stage4]
            layer+=[model.conv5]
            self.model = nn.Sequential(*layer)
    def forward(self, x):
        return self.model(x)

 3.修改yolo.py

解析参数,并运行

 elif m is Shufflenet_v2_x0_5:
            c2=args[0]
            args=args[1:]

'yolov5s_shufflent_v2_X0_5.yaml'

打印网络参数如下:

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

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

相关文章

利用vscode-icons-js在Vue3项目中实现文件图标展示

背景: 在开发文件管理系统或类似的项目时,我们常常需要根据文件类型展示对应的文件图标,这样可以提高用户体验。本文将介绍如何在Vue3项目中利用vscode-icons-js库,实现类似VSCode的文件图标展示效果。 先看效果: 一…

Flink任务提交流程和运行模式

任务提交流程 Flink 的提交流程随着部署模式、资源管理平台的不同,会有不同的变化。这里做进一步的抽象,形成一个大概高视角的任务执行流程图,如下: Flink按照集群和资源管理的划分运行模式有:Standalone、Flink On…

你是否陷入了惯性思维的陷阱?

如何突破惯性思维? 文 / 周妙錥(MEOW EE CHEW)13-02-2024 什么是惯性思维? 惯性思维(Inertial Thinking)是指我们在面对问题、决策或行为选择时,倾向于依赖过去的经验、习惯或想法&#xff0…

SubtitleEdit:一个基于.Net开发的开源字幕编辑器

现在是短视频的时代,对视频的字幕编辑需求非常多,今天介绍一个功能强大的开源视频字幕编辑器。 01 项目简介 Subtitle Edit 是基于.Net开发的开源项目,支持跨平台使用,包括Windows、Linux 和 macOS。这个软件不仅支持多种字幕格…

打开 Mac 触控板的三指拖移功能

对于支持力度触控的触控板,可以选择使用三指手势来拖移项目。 相应的设置名称会因你使用的 macOS 版本而有所不同: 选取苹果菜单  >“系统设置”(或“系统偏好设置”)。 点按“辅助功能”。 点按“指针控制”(…

cms框架cookice注入漏洞

目录 一、环境 二、开始分析 2.1代码审计(未授权访问) 一、环境 环境私聊获取 二、开始分析 2.1代码审计(未授权访问) 我们可以看到构造函数ip是通过X_FORWARDED_FOR来获取的,而这个刚好可以伪造,那我…

理解张量拼接(torch.cat)

拼接 维度顺序:对于 3D 张量,通常可以理解为 (深度, 行, 列) 或 (批次, 行, 列)。 选择一个dim进行拼接的时候其他两个维度大小要相等 对于三维张量,理解 torch.cat 的 dim 参数确实变得更加抽象,但原理是相同的。让我们通过一…

【ow365】java对接使用第三方ow365预览pdf,word等office文档

ow365官网 文档在线预览 OfficeWeb365 速度更快的Office在线预览服务提供office在线预览及PDF在线预览服务,支持Word文档在线预览、Excel在线预览、PowerPoint在线预览、WPS等Office文件在线预览,支持所有浏览器及移动设备Mobile预览,无需安…

一款免费开源快速启动工具,提高工作效率!

这是一款可以帮助我们快速启动windows电脑上的程序的工具,可以添加分组,设置网站,程序,系统工具快速一键打开,让桌面变的更简洁,打开程序更方便。小编提醒,直接拖动程序快捷方式到程序框内&…

游戏直播、教学录制两不误:2024年Win适用录屏软件推荐

回顾一下你是去线下看活动的次数多还是在线上参与活动的次数多。线下活动的时候我们一般是举着相机或者手机进行录制,那线上呢?只要找到适合win10录屏的工具你线上活动记录起来就更方便了。 1.FOXIT录屏大师 链接直达:https://www.foxitsof…

隐藏WindTerm左边的时间戳

文章目录 1、快捷键操作隐藏时间戳2、鼠标方式操作隐藏 1、快捷键操作隐藏时间戳 按住 alt 键不动,连续按 t 两下 即可隐藏时间戳 2、鼠标方式操作隐藏 取消勾选时间戳即可隐藏时间戳

NRBO-XGBoost分类 基于牛顿-拉夫逊优化算法[24年最新算法]-XGBoost多特征分类预测+交叉验证

NRBO-XGBoost分类 基于牛顿-拉夫逊优化算法[24年最新算法]-XGBoost多特征分类预测交叉验证 多输入单输出) matlab代码 程序已调试好,无需更改代码替换数据直接使用!!!数据格式为excel格式!需要定制可私&a…

CTF — 图像隐写三板斧

这几天做CTF比赛相关的题目,每天总结一篇与大家分享,本人对CTF也算是个初学者,通过一些学习感觉收获还是很多的。学会了一些工具软件的使用和相关知识的原理。今天继续分享图片隐写,图像隐写类题目的特点:考法多样,思路清奇,工具众多。先分享“第一板斧”的解题套路。 …

Spark轨迹大数据高效处理_计算两经纬度点间的距离_使用Haversine formula公式

开发背景 接上文我求的两经纬度点之间的方位角,我的需求里还提到了要计算距离,当然这个距离也是为后面的需求做铺垫的,因此需要求两个经纬度电之间的距离。 不要妄想用勾股定理求出来,实际上距离的计算还是稍微复杂些。这里使用的…

关于Libarary loader转化成16.6的使用方法

关于Libarary loader转化成16.6的使用方法 直接去贸泽下载程序,免费使用的 2.开始安装 出现图标 3.桌面新建文件夹作为文件生成路径 4.下载ECAD模型的文件 5.打开Library loader 6.这玩意需要搞个邮箱注册,可以用QQ邮箱随便注册一个 7.将下载的文件放…

VBA 指定快捷键在Excel中粘贴指定缩放图片

1. 应用背景 做测试的时候需要在Excel文件中贴图,但是直接粘贴的话图片又太大,需要手动调整,这时就可以利用这个宏来实现一次性粘贴并调整好图片的大小。 2. 宏的制作 可以是.xlsm文件,将该文件放到[C:\Program Files\Microsof…

YOLO:使用labelme进行图片数据标签制作,并转换为YOLO格式

作者:CSDN _养乐多_ 本文将介绍如何使用 labelme 进行图片数据标签制作的方法,并将标签的格式从 JSON 格式转换为 YOLO 格式。 文章目录 一、安装labelme二、使用流程三、json格式转为YOLO格式四、按比例划分数据集(训练、验证、测试&#…

Black Hat USA 2024:微软AI助手Copilot安全隐患曝光

在Black Hat USA 2024,一位研究人员披露了微软AI助手Copilot存在的多个安全隐患,攻击者能够借此漏洞窃取敏感数据和企业凭证。 微软声称,通过将任务委派给AI助手Copilot,每天可以节省数百小时的工作时间。Copilot是微软在2023年2月…

MindSearch:用于增强网络搜索效率的开源人工智能

Web 信息查找与集成是搜索、检索、提取或集成 Web 资源以满足特定需求的活动,是实际生活中几乎所有领域中每个决策和解决问题的实体都必须执行的操作。 大型语言模型 (LLM) 与搜索引擎的集成重新定义了我们在网络上查找和使用信息的方式。因此,LLM 能够…

开放式耳机好用吗?开放式耳机推荐

开放式耳机好用吗? 开放式耳机确实在特定场景下表现出色,它们有着独特的优点,使得不少用户对其青睐有加。 首先,从舒适度来看,开放式耳机避免了入耳式耳机可能带来的耳道压迫感,长时间佩戴也能保持相对舒适…