代码实现yolov3主干网络,可以直接运行

news2024/11/13 11:31:41

 1. 主干网head版本1

import torch
from torch import nn
import torch.nn.functional as F
class ConvBnLeakRelu(nn.Module):
    def __init__(self,in_ch,out_ch,k=3,s=1):
        super().__init__()
        self.layer=nn.Sequential(
            nn.Conv2d(in_ch, out_ch, kernel_size=k, padding=k // 2,stride=s),
            nn.BatchNorm2d(out_ch),
            nn.LeakyReLU(),
        )
    def forward(self,x):
        return self.layer(x)
class Resnet(nn.Module):
    def __init__(self,ch):
        super().__init__()
        self.resblock=nn.Sequential(
            ConvBnLeakRelu(ch,ch//2,k=1),
            ConvBnLeakRelu(ch//2,ch,k=3)
        )
    def forward(self,x):
        return F.relu(self.resblock(x)+x)
class Unsample(nn.Module):
    def __init__(self,in_ch,out_ch):
        super().__init__()
        self.layer=ConvBnLeakRelu(in_ch,out_ch,k=3,s=2)
    def forward(self,x):
        return self.layer(x)

class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.inpuiut_layer=nn.Conv2d(3,32,3,1)
        self.layer1=nn.Sequential(
            Unsample(32,64),
                Resnet(64),
        )
        self.layer2=nn.Sequential(
            Unsample(64, 128),
            Resnet(128),
            Resnet(128),
        )
        self.layer3 = nn.Sequential(
            Unsample(128, 256),
            Resnet(256),
            Resnet(256),
            Resnet(256),
            Resnet(256),
            Resnet(256),
            Resnet(256),
            Resnet(256),
            Resnet(256),
        )

        self.layer4 = nn.Sequential(
            Unsample(256, 512),
            Resnet(512),
            Resnet(512),
            Resnet(512),
            Resnet(512),
            Resnet(512),
            Resnet(512),
            Resnet(512),
            Resnet(512),
        )
        self.layer5 = nn.Sequential(
            Unsample(512, 1024),
            Resnet(1024),
            Resnet(1024),
            Resnet(1024),
            Resnet(1024),
        )
    def forward(self,x):
        x=self.inpuiut_layer(x)
        x=self.layer1(x)
        x=self.layer2(x)
        x_52=self.layer3(x)
        x_26=self.layer4(x_52)
        x_13=self.layer5(x_26)
        return x_52,x_26,x_13
if __name__ == '__main__':
    x=torch.randn(1,3,416,416)
    net=Net()
    out=net(x)
    for i in out:
        print(i.shape)

 

  2. 主干网head版本2

 

import torch
from torch import nn
import torch.nn.functional as F
class ConvBnLeakRelu(nn.Module):
    def __init__(self,in_ch,out_ch,k=3,s=1):
        super().__init__()
        self.layer=nn.Sequential(
            nn.Conv2d(in_ch, out_ch, kernel_size=k, padding=k // 2,stride=s),
            nn.BatchNorm2d(out_ch),
            nn.LeakyReLU(),
        )
    def forward(self,x):
        return self.layer(x)
class Resnet(nn.Module):
    def __init__(self,ch):
        super().__init__()
        self.resblock=nn.Sequential(
            ConvBnLeakRelu(ch,ch//2,k=1),
            ConvBnLeakRelu(ch//2,ch,k=3)
        )
    def forward(self,x):
        return F.relu(self.resblock(x)+x)
class Unsample(nn.Module):
    def __init__(self,in_ch,out_ch):
        super().__init__()
        self.layer=ConvBnLeakRelu(in_ch,out_ch,k=3,s=2)
    def forward(self,x):
        return self.layer(x)

class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.inpuiut_layer=nn.Conv2d(3,32,3,1)
        self.layer1=self.make_layer(32,64,1)
        self.layer2=self.make_layer(64, 128,2)
        self.layer3=self.make_layer(128, 256,8)
        self.layer4=self.make_layer(256, 512,8)
        self.layer5=self.make_layer(512, 1024,4)

    def make_layer(self,in_ch,out_ch,block_num):
        layers=[]
        layers+=[Unsample(in_ch, out_ch)]
        for i in range(block_num):
            layers+=[Resnet(out_ch)]
        return nn.Sequential(*layers)
    def forward(self,x):
        x=self.inpuiut_layer(x)
        x=self.layer1(x)
        x=self.layer2(x)
        x_52=self.layer3(x)
        x_26=self.layer4(x_52)
        x_13=self.layer5(x_26)
        return x_52,x_26,x_13
if __name__ == '__main__':
    x=torch.randn(1,3,416,416)
    net=Net()
    out=net(x)
    for i in out:
        print(i.shape)

 

 

 3. 将网络层全部放入数组切片取输出

 

 

import torch
from torch import nn
import torch.nn.functional as F


class ConvBnLeakRelu(nn.Module):
    def __init__(self, in_ch, out_ch, k=3, s=1):
        super().__init__()
        self.layer = nn.Sequential(
            nn.Conv2d(in_ch, out_ch, kernel_size=k, padding=k // 2, stride=s),
            nn.BatchNorm2d(out_ch),
            nn.LeakyReLU(),
        )

    def forward(self, x):
        return self.layer(x)


class Resnet(nn.Module):
    def __init__(self, ch):
        super().__init__()
        self.resblock = nn.Sequential(
            ConvBnLeakRelu(ch, ch // 2, k=1),
            ConvBnLeakRelu(ch // 2, ch, k=3)
        )

    def forward(self, x):
        return F.relu(self.resblock(x) + x)


class Unsample(nn.Module):
    def __init__(self, in_ch, out_ch):
        super().__init__()
        self.layer = ConvBnLeakRelu(in_ch, out_ch, k=3, s=2)

    def forward(self, x):
        return self.layer(x)


cif = [[32, 64, 1],
       [64, 128, 2],
       [128, 256, 8],
       [256, 512, 8],
       [512, 1024, 4]]


class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.inpuiut_layer = nn.Conv2d(3, 32, 3, 1)
        # self.layer1 = self.make_layer(32, 64, 1)
        # self.layer2 = self.make_layer(64, 128, 2)
        # self.layer3 = self.make_layer(128, 256, 8)
        # self.layer4 = self.make_layer(256, 512, 8)
        # self.layer5 = self.make_layer(512, 1024, 4)
        self.layers = []
        for in_ch,out_ch,block_num in cif:
            self.layers+=[self.make_layer(in_ch, out_ch,block_num)]
        self.layers=nn.Sequential(*self.layers)
    def make_layer(self, in_ch, out_ch, block_num):
        layers = []
        layers += [Unsample(in_ch, out_ch)]
        for i in range(block_num):
            layers += [Resnet(out_ch)]
        return nn.Sequential(*layers)

    def forward(self, x):
        x = self.inpuiut_layer(x)
        x_52 = self.layers[0:3](x)
        x_26 = self.layers[3:4](x_52)
        x_13 = self.layers[4:5](x_26)
        return x_52, x_26, x_13


if __name__ == '__main__':
    x = torch.randn(1, 3, 416, 416)
    net = Net()
    out = net(x)
    for i in out:
        print(i.shape)

 4. 用循环写法将输入输出提取出来yaml文件

import torch
import yaml
from torch import nn
import torch.nn.functional as F


class ConvBnLeakRelu(nn.Module):
    def __init__(self, in_ch, out_ch, k=3, s=1):
        super().__init__()
        self.layer = nn.Sequential(
            nn.Conv2d(in_ch, out_ch, kernel_size=k, padding=k // 2, stride=s),
            nn.BatchNorm2d(out_ch),
            nn.LeakyReLU(),
        )

    def forward(self, x):
        return self.layer(x)


class Resnet(nn.Module):
    def __init__(self, ch):
        super().__init__()
        self.resblock = nn.Sequential(
            ConvBnLeakRelu(ch, ch // 2, k=1),
            ConvBnLeakRelu(ch // 2, ch, k=3)
        )

    def forward(self, x):
        return F.relu(self.resblock(x) + x)


class Unsample(nn.Module):
    def __init__(self, in_ch, out_ch):
        super().__init__()
        self.layer = ConvBnLeakRelu(in_ch, out_ch, k=3, s=2)

    def forward(self, x):
        return self.layer(x)


# cif = [[32, 64, 1],
#        [64, 128, 2],
#        [128, 256, 8],
#        [256, 512, 8],
#        [512, 1024, 4]]
with open('tt.yaml','r') as file:
    cif=yaml.load(file,Loader=yaml.Loader)
    cif=cif['conf']
print(cif)
class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.inpuiut_layer = nn.Conv2d(3, 32, 3, 1)
        # self.layer1 = self.make_layer(32, 64, 1)
        # self.layer2 = self.make_layer(64, 128, 2)
        # self.layer3 = self.make_layer(128, 256, 8)
        # self.layer4 = self.make_layer(256, 512, 8)
        # self.layer5 = self.make_layer(512, 1024, 4)
        self.layers = []
        for in_ch,out_ch,block_num in cif:
            self.layers+=[self.make_layer(in_ch, out_ch,block_num)]
        self.layers=nn.Sequential(*self.layers)
    def make_layer(self, in_ch, out_ch, block_num):
        layers = []
        layers += [Unsample(in_ch, out_ch)]
        for i in range(block_num):
            layers += [Resnet(out_ch)]
        return nn.Sequential(*layers)

    def forward(self, x):
        x = self.inpuiut_layer(x)
        x_52 = self.layers[0:3](x)
        x_26 = self.layers[3:4](x_52)
        x_13 = self.layers[4:5](x_26)
        return x_52, x_26, x_13


if __name__ == '__main__':
    x = torch.randn(1, 3, 416, 416)
    net = Net()
    out = net(x)
    for i in out:
        print(i.shape)

 tt.yaml

#conf:
#  [ [ 32, 64, 1 ],
#    [ 64, 128, 2 ],
#    [ 128, 256, 8 ],
#    [ 256, 512, 8 ],
#    [ 512, 1024, 4 ] ]
conf:
  - [ 32, 64, 1 ]
  - [ 64, 128, 2 ]
  - [ 128, 256, 8 ]
  - [ 256, 512, 8 ]
  - [ 512, 1024, 4 ]

 

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

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

相关文章

H264记录和翻译

官方中文文档: 📎H.264_ITU官方中文版.pdf 官方下载地址: https://www.itu.int/rec/T-REC-H.264/en JM源码: https://iphome.hhi.de/suehring/tml/download/ 博客参考学习:H.264官方软件JM源代码简单分析-解码器ld…

真免费!10 款必备的语言类 AI 大模型

好多小伙伴反映,买了好多AI工具,但并不好用,今天我给你推荐10个好用且免费的语言类AI大模型。 以后就别去花冤枉钱了。 排名不分先后。 各有所长,大家收藏自行去测试甄选适合自己的AI工具。 — 1 — 文心一言 文心一言是百度…

Android12 显示框架之getSurface

目录:Android显示终极宝典 在上篇文章中,我们讲到了应用通过createSurface()在surfaceflinger内生成了一个Layer,并且获取到了该Layer的Handle且将其和其他信息保存到了SurfaceControl。应用拿到了这个SurfaceControl,那么接下来…

uniapp APP端使用web-view,跳转回APP指定页面

URL Scheme 首先我一开始想到的是UrlSchemes,发现UrlSchemes不好实现就转为下面的方法 URL Scheme 是一种用于在移动应用程序中打开另一个应用程序或执行特定操作的机制。通过使用 URL Scheme,应用程序可以将用户重定向到其他应用程序或执行特定的任务…

大模型在自动驾驶领域是怎么应用的?最新综述一览

写在前面 大语言模型(LLMs)是在海量文本语料库上训练的人工智能模型,具备卓越的语言理解和生成能力,正在改变自动驾驶(AD)领域。随着自动驾驶系统从基于规则和优化的方法向基于学习的技术(如深…

关于企微群聊天工具功能的开发---PHP+JS+CSS+layui (手把手教学)

文章目录 前言准备工作PHP代码示例前端代码示例 主要是js踩的小坑&笔记最终达成的效果总结 前言 公司要求开发企微群聊天工具。首先一个客户一个群,其余群成员都是公司销售、设计师、工长、售后等人员。要求开发一个群聊天工具,工长点击进来以后就可…

selenium自动化代码报错“NoSuchElementException”——解决方案详解

假设自动化代码报错“NoSuchElementException”: 第一步:在报错的代码前,添加Thread.sleep(秒),设置的时间长一点。 第二步: 执行自动化,在自动化打开的页面里,打开前端开发者工具&#xff0c…

二百五十三、OceanBase——Linux上安装OceanBase数据库(三):OBD页面上部署OceanBase数据库

一、目的 安装OceanBase后,启动obd web,需要在OBD页面上部署OceanBase数据库 二、参考文档 http://t.csdnimg.cn/Qeedq 三、实施步骤 1 在obadmin用户下,启动obd服务,登录页面访问 [obadminhurys23 oceanbase]$ obd web 2 登…

AIGC重塑设施农业:让农事操作更智能,生产效率更高

设施农业是现代农业的重要组成部分,随着人工智能等前沿技术的快速发展,这个领域迎来了新的变革机遇。尤其是大语言模型(Large Language Model,LLM)技术的崛起,其强大的语言理解和知识汇聚能力,为设施农业智能化发展带来了新的想象空间。本文将深入探讨大模型技术在设施农业生产…

寝室恶性负载识别模块原理和功能

石家庄光大远通电气有限公司寝室恶性负载识别智能模块导轨式安装,采用局域网或者4G集中控制,在宿舍多回路中可以单独设置控制参数达到精细化管理。 原理:‌ 电压电流检测法:‌通过检测电路中的电压和电流,‌计算电路中…

网段划分(为什么+分类划分,CIDR),ip地址组成,路由器介绍,广播地址,DHCP,NAT技术,ipv6,如何申请网络

目录 网段划分 引入 ip地址的组成 同一网段内 不同的网段 路由器 ip地址的分配 DHCP技术 分类划分法 分组 弊端 CIDR(无类域间路由) 变长子网掩码 数据包转发 子网地址范围计算 两个特殊的ip地址 网络号 广播地址 作用 其他解决方…

学习Java的日子 Day62 Filter过滤器

Day62 Filter过滤器 简介 Filter:过滤器,通过Filter可以拦截访问web资源的请求与响应操作。 Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器。他可以拦…

数据结构——二叉树_堆

目录 一、堆的概念 二、堆的结构 三、性质 (1)堆的性质 (2)二叉树的性质 四、堆的实现 (1)头文件——Heap.h (2)源文件——Heap.c 1.堆的初始化 2.堆的销毁 3.向上调整算法 4.堆的插入 4.判断堆…

​人工智能薪酬排行榜:2024年哪些岗位最吃香?

近日,智联招聘发布了2024年二季度《中国企业招聘薪酬报告》。报告显示,人工智能行业平均薪酬为13594元/月,位居行业榜首。 同时,在“2024年二季度企业招聘薪酬TOP20职业”中,人工智能工程师以平均月薪22003元排名第一。…

口碑最好的麦克风品牌有哪些,无线领夹麦克风十大品牌推荐

​在内容丰富的自媒体世界里,每一个细节都可能是吸引观众的关键,尤其是音质。面对这么多的无线领夹麦克风,到底哪款更值得入手呢?我试用并挑选了几款性价比高的无线领夹麦克风,它们能够为各类视频制作提供令人印象深刻…

7.5寸电子日历

7.5英寸无线智能纸质显示屏幕办公名牌电子墨水数字显示ESL标签仓库使用

ONVIF 摄像头视频流获取 - 步骤与Python例程

1.基本流程 加入组播udp接口,查询子网内在线的ONVIF摄像头的设备地址: 设备地址形如:http://192.168.0.6/onvif/device_service 这一步,参看上一篇发文:[ONVIF系列 - 01] 简介 - 设备发现 - 相关工具-CSDN博客查询med…

叉车车队管理系统怎么选,满足监管要求!

在现代物流与仓储管理中,选择一个高效且可靠的叉车车队管理系统至关重要。一个高性能的管理系统不仅提升作业效率,还能保障作业安全。企业管理者在采购叉车车队管理系统前需要考虑几个关键因素: 1、提升管理效率:‌确保系统能够实…

机器学习赋能的智能光子学器件系统研究与应用

在人工智能与光子学设计融合的背景下,科研的边界持续扩展,创新成果不断涌现。从理论模型的整合到光学现象的复杂模拟,从数据驱动的探索到光场的智能分析,机器学习正以前所未有的动力推动光子学领域的革新。据调查,目前…