【YOLOv5/v7改进系列】替换激活函数为SiLU、ReLU、LeakyReLU、FReLU、PReLU、Hardswish、Mish、ELU等

一、导言

激活函数在目标检测中的作用至关重要,它们主要服务于以下几个关键目的:

  1. 引入非线性:神经网络的基本构建块(如卷积层、全连接层等)本质上是线性变换,而激活函数通过引入非线性,使得网络能够学习和表达更复杂、更丰富的数据特征。这对于目标检测任务尤为重要,因为目标可能出现在图像中的任何位置、大小和姿态,且彼此之间可能有重叠或遮挡,非线性表达能力可以帮助模型更好地理解和区分这些复杂的场景。

  2. 控制梯度流:激活函数的形状影响着反向传播过程中的梯度传递,这对于权重更新和学习过程至关重要。例如,ReLU及其变体(如Leaky ReLU、PReLU、FReLU等)通过在负值区域保持非零斜率,解决了传统ReLU可能导致的“神经元死亡”问题,从而促进了深层网络中的梯度流动。

  3. 增强模型表达能力:特定的激活函数能够提升模型在特定任务上的表现。例如,FReLU(Funnel Activation Function)通过在激活阶段整合空间信息,提高了模型的空间理解能力,这对于目标检测这种需要精确定位的任务非常有利。

  4. 影响计算效率:不同的激活函数具有不同的计算复杂度。在实时目标检测系统如YOLO系列中,选择计算成本低且效果好的激活函数(如ReLU)对于保证模型的运行速度和资源效率是必要的。

  5. 输出范围调整:某些激活函数(如Sigmoid和Softmax)能够将输出限制在特定范围内,这在输出层特别有用,比如将网络输出转化为概率值,便于进行目标类别预测。

综上所述,激活函数不仅决定了神经网络的学习能力,还在很大程度上影响了目标检测模型的精度、训练效率以及最终的检测性能。因此,在设计目标检测网络时,精心选择和设计激活函数是一个重要环节。

二、YOLO训练中常见且有效的激活函数
  1. SiLU (Sigmoid Linear Unit): 也称为Swish,是一种自适应激活函数。SiLU尝试结合了线性变换和sigmoid函数的优点,能够提升模型的非线性表达能力,同时缓解梯度消失问题。

  2. ReLU (Rectified Linear Unit): 是最常用的激活函数之一,当输入为正时,输出等于输入;为负时,输出为0。ReLU解决了sigmoid和tanh函数的梯度饱和问题,加速了神经网络的训练,但在负值区域梯度为0,可能导致“死亡ReLU”现象。

  3. Leaky ReLU: 为了解决ReLU在负值区域梯度消失的问题而提出,即使负输入时函数也有非零斜率,帮助梯度流动。

  4. FReLU (Fractional ReLU): 是ReLU的一个变种,它引入了一个可学习的参数来调整负输入部分的斜率,提供了比Leaky ReLU更灵活的调整能力。

  5. PReLU (Parametric ReLU): 类似于Leaky ReLU,适用于不同层可能需要不同负斜率的情况。

  6. Hardswish: 是MobileNetV3中引入的一种激活函数,试图模仿Swish但计算成本更低。它在移动端设备上表现高效且性能良好。

  7. Mish: 由D. Misra提出,Mish结合了自我门控的性质和ReLU的简单性,被发现能在多种任务上提高模型性能。

  8. ELU (Exponential Linear Unit): 目的是减少ReLU的偏差移位问题并加速学习过程。

  9. CELU (Continuously Differentiable Exponential Linear Unit): 是ELU的一个连续可微分版本,旨在保持ELU的优点同时确保所有点的导数存在,适合需要严格平滑性的应用。

  10. GELU (Gaussian Error Linear Unit): 形式较为复杂,与高斯分布的累积分布函数有关。GELU在Transformer等模型中表现优秀,因为它能更好地匹配神经网络中权重初始化的分布。

  11. SELU (Scaled Exponential Linear Unit): 设计用于自归一化神经网络,SELU旨在确保网络的输出具有零均值和单位方差,从而简化训练过程中的归一化需求。

需要注意的是,YOLOv7、YOLOv5项目采用的默认激活函数为SiLU,而YOLOv7-tiny项目采用的激活函数为LeakyReLU,ResNet系列采用的激活函数则为ReLU,选择何种激活函数为自己的Baseline需要先查阅相关论文再下判断,以此为改进的对照方可得出结果。

同时,YOLOv5/v7的激活函数一般在models/activations.py下

三、YOLOv7-tiny改进工作

了解二后,在YOLOv7项目文件下的models文件夹下的common.py,采用ctrl+F搜索如下代码。

self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())

将其替换为二的激活函数即可。

四、YOLOv7改进工作

了解二后,在YOLOv7项目文件下的models文件夹下的common.py,采用ctrl+F搜索如下代码。

self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())

将其替换为二的激活函数即可。

五、YOLOv5改进工作

了解二后,在YOLOv5项目文件下的models文件夹下的common.py,采用ctrl+F搜索如下代码。

self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())

将其替换为二的激活函数即可。

更多文章产出中,主打简洁和准确,欢迎关注我,共同探讨!

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

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

相关文章

urllib3 发起https请求时报错 certificate verify failed

情况描述 近期需要访问https的一个API接口同步数据,在办公主机完成urllib3初步的测试以后,到测试环境验证发现无法请求,报错: 提示:解决办法可以直接到第四节查看 一、提示 SSL 认证失败 OpenSSL.SSL.Error: [(SSL …

保安维稳,四信以科技构筑高速公路安全智慧防线

近日,广东梅大高速发生严重塌方事故,造成了严重的人员伤亡和财产损失。这一事件在公众心中敲响了安全的警钟,再次引起了公众对于交通设施运营安全性的重点关注。 国务院安委会办公室和国家防灾减灾救灾委员会办公室等主管机构先后印发紧急通知…

Spring Security整合Gitee第三方登录

文章目录 学习链接环境准备1. 搭建基本web应用引入依赖ThirdApp启动类创建index页面application.yml配置访问测试 2. 引入security引入依赖ProjectConfig访问测试 第三方认证简介注册gitee客户端实现1引入依赖application.yml配置文件创建index.html页面启动类InfoControllerPr…

【数学建模】储药柜的设计

2014高教社杯全国大学生数学建模竞赛D题目 题目描述 储药柜的结构类似于书橱,通常由若干个横向隔板和竖向隔板将储药柜分割成若干个储药槽(如图1所示)。为保证药品分拣的准确率,防止发药错误,一个储药槽内只能摆放同一种药品。药品在储药槽…

Python闭包探索,释放函数记忆的秘术

引言 hello,大家好,我是一点,专注于Python编程,如果你也对感Python感兴趣,欢迎关注交流。 希望可以持续更新一些有意思的文章,如果觉得还不错,欢迎点赞关注,有啥想说的,可…

docker搭建gitlab及默认密码修改及配置修改

推荐官方文档 https://docs.gitlab.com/17.0/ee/install/docker.html 我使用的是docker run的方式,官方文档后面有docker-compose、swarm、k8s的部署文档 版本说明 1:可以部署gitlab-ce社区版和gitlab-ee企业版,然后,鉴于是个人…

Mysql总结2

Mysql慢优化 在mysql中,long_query_time的值为10,当sql语句执行的时间超过这个数值时,则会被记录到慢查询日志中。 Mysql语句查询流程 1、客户端发送sql语句到服务端; 2、服务端查看是否打开了缓存,若缓存打开&…

AIGC绘画设计基础-建筑设计应用

一、AI及AIGC 对于AI大家都不陌生,但是AIGC这个概念好多人其实不大清楚。“AI”是指人工智能技术本身,而“AIGC”是指基于人工智能技术而生成的内容。 生成式人工智能——AIGC(Artificial Intelligence Generated Content)&…

近邻算法详解

近邻算法(Nearest Neighbor Algorithm),也称为K-近邻算法(K-Nearest Neighbors,KNN),是一种基本的分类和回归方法。它的工作原理非常直观:通过测量不同特征点之间的距离来进行预测。…

使用CommandLine库创建.NET命令行应用

CommandLine是一个.NET库,用于创建命令行应用程序。它提供了一种简单的方法来解析命令行参数,并且可以帮助您构建一个功能强大的命令行界面。在本文中,我们将介绍如何使用CommandLine库创建.NET命令行应用程序。 1. 背景 在.NET开发中&#…

SpringFramework实战指南

二、SpringFramework实战指南 目录 一、技术体系结构 1.1 总体技术体系1.2 框架概念和理解 二、SpringFramework介绍 2.1 Spring 和 SpringFramework概念2.2 SpringFramework主要功能模块2.3 SpringFramework 主要优势 三、Spring IoC容器和核心概念 3.1 组件和组件管理概念3…

起底震网病毒的来龙去脉

2010年,震网病毒被发现,引起世界哗然,在后续的10年间,陆陆续续有更多关于该病毒的背景和细节曝光。今年,《以色列时报》和《荷兰日报》又披露了关于此事件的更多信息,基于这些信息,我们重新梳理…

优于InstantID!中山大学提出ConsistentID:可以仅使用单个图像根据文本提示生成不同的个性化ID图像

给定一些输入ID的图像,ConsistentID可以仅使用单个图像根据文本提示生成不同的个性化ID图像。效果看起来也是非常不错。 相关链接 Code:https://github.com/JackAILab/ConsistentID Paper:https://ssugarwh.github.io/consistentid.github.io/arXiv.pd…

计算机毕业设计 | springboot养老院管理系统 老人社区管理(附源码)

1,绪论 1.1 背景调研 养老院是集医疗、护理、康复、膳食、社工等服务服务于一体的综合行养老院,经过我们前期的调查,院方大部分工作采用手工操作方式,会带来工作效率过低,运营成本过大的问题。 院方可用合理的较少投入取得更好…

Python数据可视化(七)

绘制 3D 图形 到目前为止,我们一直在讨论有关 2D 图形的绘制方法和绘制技术。3D 图形也是数据可视化的 一个很重要的应用方面,我们接下来就重点讲解有关 3D 图形的实现方法。绘制 3D 图形通常需要导 入 mpl_toolkits 包中的 mplot3d 包的相关模块&#x…

三、Gazebo中实现机器人仿真(小白上手)+ubuntu18.04

接上一篇文章 1、\导航 vim .bashrc \先采用Nanocar尝试导航 关闭终端:roslaunch robot_navigation gmapping.launch simulation:true rosrun teleop_twist_keyboard teleop_twist_keyboard.py 重启终端: cd catkin_ws source ./devel/setu…

护网经验面试题目原版

文章目录 一、护网项目经验1.项目经验**Hvv的分组和流程**有没有遇到过有意思的逻辑漏洞?有没有自己开发过武器/工具?有做过代码审计吗?有0day吗有cve/cnvd吗?有src排名吗?有没有写过技战法有钓鱼经历吗?具…

【数据结构】哈夫曼树和哈夫曼编码

一、哈夫曼树 1.1 哈夫曼树的概念 给定一个序列,将序列中的所有元素作为叶子节点构建一棵二叉树,并使这棵树的带权路径长度最小,那么我们就得到了一棵哈夫曼树(又称最优二叉树) 接下来是名词解释: 权&a…

VC++位移操作>>和<<以及逻辑驱动器插拔产生的掩码dbv.dbcv_unitmask进行分析的相关代码

VC位移操作>>和<<以及逻辑驱动器插拔产生的掩码dbv.dbcv_unitmask进行分析的相关代码 一、VC位移操作符<<和>>1、右位移操作符 >>&#xff1a;2、左位移操作符 <<&#xff1a; 二、逻辑驱动器插拔产生的掩码 dbv.dbcv_unitmask 进行分析的…