我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Yolov5更换BiFPN的详细步骤总结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Yolov5更换BiFPN的详细步骤总结

Yolov5如何更换BiFPN?

第一步:修改common.py

将如下代码添加到common.py文件中

# BiFPN 
# 两个特征图add操作
class BiFPN_Add2(nn.Module):
    def __init__(self, c1, c2):
        super(BiFPN_Add2, self).__init__()
        # 设置可学习参数 nn.Parameter的作用是:将一个不可训练的类型Tensor转换成可以训练的类型parameter
        # 并且会向宿主模型注册该参数 成为其一部分 即model.parameters()会包含这个parameter
        # 从而在参数优化的时候可以自动一起优化
        self.w = nn.Parameter(torch.ones(2, dtype=torch.float32), requires_grad=True)
        self.epsilon = 0.0001
        self.conv = nn.Conv2d(c1, c2, kernel_size=1, stride=1, padding=0)
        self.silu = nn.SiLU()

    def forward(self, x):
        w = self.w
        weight = w / (torch.sum(w, dim=0) + self.epsilon)
        return self.conv(self.silu(weight[0] * x[0] + weight[1] * x[1]))


# 三个特征图add操作
class BiFPN_Add3(nn.Module):
    def __init__(self, c1, c2):
        super(BiFPN_Add3, self).__init__()
        self.w = nn.Parameter(torch.ones(3, dtype=torch.float32), requires_grad=True)
        self.epsilon = 0.0001
        self.conv = nn.Conv2d(c1, c2, kernel_size=1, stride=1, padding=0)
        self.silu = nn.SiLU()

    def forward(self, x):
        w = self.w
        weight = w / (torch.sum(w, dim=0) + self.epsilon)  
        # Fast normalized fusion
        return self.conv(self.silu(weight[0] * x[0] + weight[1] * x[1] + weight[2] * x[2]))

第二步:修改yolo.py

parse_model函数中找到elif m is Concat:语句,在其后面加上BiFPN_Add相关语句

elif m is Concat:
    c2 = sum(ch[x] for x in f)
# 添加bifpn_add结构
elif m in [BiFPN_Add2, BiFPN_Add3]:
    c2 = max([ch[x] for x in f])

第三步:修改train.py

将BiFPN_Add2和BiFPN_Add3函数中定义的w参数,加入g1

g = [], [], []  # optimizer parameter groups
    bn = tuple(v for k, v in nn.__dict__.items() if 'Norm' in k)  # normalization layers, i.e. BatchNorm2d()
    for v in model.modules():
        # hasattr: 测试指定的对象是否具有给定的属性,返回一个布尔值
        if hasattr(v, 'bias') and isinstance(v.bias, nn.Parameter):  # bias
            g[2].append(v.bias)
        if isinstance(v, bn):  # weight (no decay)
            g[1].append(v.weight)
        elif hasattr(v, 'weight') and isinstance(v.weight, nn.Parameter):  # weight (with decay)
            g[0].append(v.weight)
        # BiFPN_Concat
        elif isinstance(v, BiFPN_Add2) and hasattr(v, 'w') and isinstance(v.w, nn.Parameter):
            g[1].append(v.w)
        elif isinstance(v, BiFPN_Add3) and hasattr(v, 'w') and isinstance(v.w, nn.Parameter):
            g[1].append(v.w)

导入BiFPN_Add3, BiFPN_Add2

from models.common import BiFPN_Add3, BiFPN_Add2

第四步:修改yolov5.yaml

Concat全部换成BiFPN_Add

注意:BiFPN_Add本质是add操作,因此输入层通道数、feature map要完全对应

2022.8.25 官方也提供了BiFPN,可以尝试用官方的
关于5m加BiFPN的文件我已经更新到了我的Git

总结

到此这篇关于Yolov5更换BiFPN的文章就介绍到这了,更多相关Yolov5更换BiFPN内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Yolov5更换BiFPN的详细步骤总结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Yolov5更换BiFPN的详细步骤总结

将YOLOv5中的PANet层修改为EfficientDet-BiFPN,实现自上而下与自下而上的深浅层特征双向融合,明显提升YOLOv5算法检测精度,下面这篇文章主要给大家介绍了关于Yolov5更换BiFPN的详细步骤,需要的朋友可以参考下
2022-12-19

总结Gitee上创建仓库的详细步骤

如果您想在Gitee上托管您的项目或代码,需要先创建一个仓库。以下是在Gitee上创建仓库的详细步骤。第一步:登录您的Gitee账户在浏览器中打开Gitee的官方网站,并使用您的账户名和密码登录。第二步:进入仓库页面登录成功后,您会看到Gi
2023-10-22

Python+Yolov5人脸口罩识别的详细步骤

人脸口罩佩戴检测(识别)是当前急需的应用,而YOLOv5是目前流行的强悍的目标检测技术,下面这篇文章主要给大家介绍了关于Python+Yolov5人脸口罩识别的相关资料,需要的朋友可以参考下
2022-12-19

更换阿里云服务器地址的详细步骤

随着业务的不断发展,可能需要将阿里云服务器的地址进行更换。本文将详细说明如何更换阿里云服务器地址,包括更换的步骤和需要注意的事项。更换阿里云服务器地址的详细步骤:登录阿里云管理控制台首先,你需要登录到阿里云管理控制台。你可以通过输入你的阿里云账号和密码,或者通过手机号码和验证码的方式登录。选择需要更改的服务器在管
更换阿里云服务器地址的详细步骤
2023-11-20

阿里云更换服务器密码的详细步骤

阿里云服务器是许多企业和个人选择的云服务,而更换服务器密码是保护服务器安全的重要措施。本文将详细说明如何在阿里云中更换服务器密码。更换阿里云服务器密码的步骤如下:登录阿里云账号:首先,你需要登录你的阿里云账号。如果你还没有账号,你需要先注册一个。打开控制台:在阿里云的首页,找到并点击“控制台”按钮。选择服务器:在
阿里云更换服务器密码的详细步骤
2023-11-17

MySQL主从切换的超详细步骤

目录版本:前言:主从环境:切换步骤:总结版本:mysql-5.7.32+GTID前言:本文讲述MySQL主从切换流程,切换步骤主要针对主备正常切换以及主库宕机备库切换两个场景,掌握正确的切换流程,可以有效避免切换过程中可能出现的数据不
2022-06-28

discuz X1.5 更换服务器空间详细步骤 防止出错

一、后台 → 全局 → 关闭站点 (为了不影响数据库备份) 二、数据备份 1 )论坛数据库备份 步骤:后台 → 站长 → 备份 → 站点全部数据 → 提交 注意:备份好的数据存放在
2022-06-12

阿里云换绑服务器的详细步骤

阿里云是中国领先的云计算服务提供商,提供包括云服务器、云数据库、云存储等在内的多种服务。但是,有时候用户可能需要更换绑定的服务器。那么,阿里云换绑服务器的具体步骤是什么呢?本文将为您详细解答。正文:步骤一:登录阿里云账号首先,您需要登录您的阿里云账号。在浏览器中输入“https://www.aliyun.com/
阿里云换绑服务器的详细步骤
2023-12-10

pycharm查看之前的运行结果详细步骤

在工作场景下,程序员如何运用PyCharm去书写代码以及运行文件,还有学会对各种突发情况的应对,这篇文章主要给大家介绍了关于pycharm查看之前的运行结果的相关资料,需要的朋友可以参考下
2023-05-17

阿里云服务器更换安全组详细步骤和注意事项

本文详细介绍了如何在阿里云服务器中更换安全组,并提供了一些实用的注意事项,帮助您轻松完成更换安全组的操作。在阿里云服务器中更换安全组是保证服务器安全的重要步骤。安全组是阿里云提供的网络防火墙服务,可以控制服务器对外通信的流量和来源,防止不必要的攻击。本文将详细介绍如何在阿里云服务器中更换安全组。步骤:登录阿里云控
阿里云服务器更换安全组详细步骤和注意事项
2023-11-04

阿里云备案域名换服务器的详细步骤

本文详细介绍了如何在阿里云上进行备案域名换服务器的操作,包括准备步骤、操作步骤和注意事项。一、准备工作在开始备案域名换服务器的操作之前,你需要确保你已经完成以下准备工作:了解阿里云的域名备案流程,确保你的域名已经成功备案。了解你需要更换的服务器的类型和配置,确保服务器能够满足你的需求。准备好新的域名,如果你的旧域
阿里云备案域名换服务器的详细步骤
2023-11-12

阿里云服务器变更域名登录的详细步骤

阿里云服务器是一款高性能、高可靠的云服务器产品,为用户提供了灵活、可扩展的云服务。在使用过程中,用户可能会遇到需要变更域名登录的情况。本文将详细介绍如何操作阿里云服务器变更域名登录的步骤。一、登录阿里云账号首先,你需要登录阿里云账号。在浏览器中输入"阿里云",进入阿里云官方网站。然后,点击"登录"按钮,输入你的账
阿里云服务器变更域名登录的详细步骤
2023-11-02

SQLServer数据库的更改默认备份目录的详细步骤

这篇文章主要介绍了SQLServer数据库的更改默认备份目录的详细步骤,需要的朋友可以参考下
2023-05-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录