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

news2024/12/23 13:43:18
一、导言

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

  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.coloradmin.cn/o/1688797.html

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

相关文章

完成商品属性分组和商品属性关联维护

文章目录 1.前端页面搭建1.复制attrgroup-attr-relation.vue到src/views/modules/commodity下2.加入超链接和引入组件 src/views/modules/commodity/attrgroup.vue1.加入超链接2.引入组件 3.数据池加入变量4.使用组件1.引用组件2.添加方法3.测试,点击关联&#xff0…

【低照度图像增强系列(7)】RDDNet算法详解与代码实现(同济大学|ICME)

前言 ☀️ 在低照度场景下进行目标检测任务,常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题,给检测带来一定的难度。 🌻使用图像增强模块对原始图像进行画质提升,恢复各类图像信息,再使用目标检测…

qt改变样式表 label

border:1px solid black; background-color:rgb(238,234,235); border-color:rgb(0,112,249);

Zabbix实现7x24小时架构监控

上篇:https://blog.csdn.net/Lzcsfg/article/details/138774511 文章目录 Zabbix功能介绍Zabbix平台选择安装Zabbix监控端部署MySQL数据库Zabbix参数介绍登录Zabbix WEBWEB界面概览修改WEB界面语言添加被控主机导入监控模板主机绑定模板查看主机状态查看监控数据解…

一文了解基于ITIL的运维管理体系框架

本文来自腾讯蓝鲸智云社区用户:CanWay ITIL(Information Technology Infrastructure Library)是全球最广泛使用的 IT 服务管理方法,旨在帮助组织充分利用其技术基础设施和云服务来实现增长和转型。优化IT运维,作为企业…

U-Boot menu菜单分析

文章目录 前言目标环境背景U-Boot如何自动调起菜单U-Boot添加自定义命令实践 前言 在某个厂家的开发板中,在进入它的U-Boot后,会自动弹出一个菜单页面,输入对应的选项就会执行对应的功能。如SD卡镜像更新、显示设置等: 目标 本…

Linux进程--函数 system 和 popen 的区别

system() 和 popen() 是 C 语言中用于执行外部命令的两个函数,它们的功能类似,但在使用方式和特性上有一些区别。 system() system() 函数允许您在程序中执行外部命令,并等待该命令执行完成后继续执行程序。其基本语法如下: in…

本地idea连接虚拟机linux中的docker进行打包镜像上传--maven的dockerfile-maven-plugin插件

项目名必须是英文,-,.,_,这些数字,idea需要管理员运行,因为idea控制台mvn命令需要管理员权限才能运行(maven需配置环境变量)改linux中的Docker服务文件,使用2375 进行非加密通信,然后加载重启 2.1 #修改Docker服务文件 vi /lib/systemd/system/docker.service ​ # 通常使…

深度学习基于Tensorflow卷积神经网络VGG16的CT影像识别分类

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着医疗技术的快速发展,CT(Computed Tomography)影像已成为医生…

练习题(2024/5/22)

1N 皇后 II n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。 示例 1: 输入:n 4 输出:2 解释:如上…

WAF绕过(下)

过流量检测 这里的流量检测就是在网络层的waf拦截到我们向webshell传输的数据包,以及webshell返回的数据 包,检测其中是否包含敏感信息的一种检测方式。如果是大马的情况下,可以在大马中添加多处判断代码,因此在执行大马提供的功…

设计模式12——外观模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 外观模式(Facade&a…

【Linux】高效文本处理命令

目录 一.sort命令(排序) 1.语法格式 2.常用选项 3.相关示例 3.1. 3.2. 二.unip命令(去重) 1.语法格式 2.常用选项 3.相关示例 3.1. 3.2. 三.tr命令(替换) 1.语法格式 2.常用选项 3.相关示例…

如何在 Ubuntu 24.04 (桌面版) 上配置静态IP地址 ?

如果你想在你的 Ubuntu 24.04 桌面有一个持久的 IP 地址,那么你必须配置一个静态 IP 地址。当我们安装 Ubuntu 时,默认情况下 DHCP 是启用的,如果网络上可用,它会尝试从 DHCP 服务器获取 IP 地址。 在本文中,我们将向…

MySQL主从复制(二):高可用

正常情况下, 只要主库执行更新生成的所有binlog, 都可以传到备库并被正确地执行, 备库就能达到跟主库一致的状态, 这就是最终一致性。 但是, MySQL要提供高可用能力, 只有最终一致性是不够的。 双M结构的…

2024年甘肃特岗教师招聘报名流程,速速查收哦!

2024年甘肃特岗教师招聘报名流程,速速查收哦!

WXML模板语法-事件绑定

一、 1.事件 事件是渲染层到逻辑层的通讯方式,通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理 2.小程序中常用的事件 3.事件对象的属性列表 当事件回调触发的时候,会收到一个事件对象event,其属性为&#x…

Mysql之基本架构

1.Mysql简介 mysql是一种关系型数据库,由表结构来存储数据与数据之间的关系,同时为sql(结构化查询语句)来进行数据操作。 sql语句进行操作又分为几个重要的操作类型 DQL: Data Query Language 数据查询语句 DML: Data Manipulation Language 添加、删…

axios案例应用

1、Spring概述 Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control: 反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层。Spring JDBC 以及业务层事务管理等众多…

C++进阶:C++11(列表初始化、右值引用与移动构造移动赋值、可变参数模版...Args、lambda表达式、function包装器)

C进阶:C11(列表初始化、右值引用与移动构造移动赋值、可变参数模版…Args、lambda表达式、function包装器) 今天接着进行语法方面知识点的讲解 文章目录 1.统一的列表初始化1.1{}初始化1.2 initializer_listpair的补充 2.声明相关关键字2.1a…