YOLOv10改进策略【损失函数篇】| 替换激活函数为Mish、PReLU、Hardswish、LeakyReLU、ReLU6

前言

在卷积神经网络中,激活函数通过在神经网络中引入非线性,使网络能够学习和逼近复杂函数,从而处理复杂的模式识别与分类问题。

文章目录

  • 前言
  • 一、YOLOv11激活函数
    • SiLU激活函数
    • 特性
    • 与其他激活函数的比较
    • 实现代码
  • 二、替换激活函数:Mish
    • 实现代码
    • 替换方法
    • 模型训练
  • 三、PReLU
  • 四、Hardswish
  • 五、LeakyReLU
  • 六、ReLU6

一、YOLOv11激活函数

YOLOv11官方代码:https://github.com/ultralytics/ultralytics
YOLOv11的卷积模块中使用的基础激活函数为SiLU()。

SiLU激活函数

SiLU函数的公式定义为:
SiLU ( x ) = x ⋅ S i g m o i d ( x ) \text{SiLU}(x) = x \cdot \ Sigmoid(x) SiLU(x)=x Sigmoid(x)
其中 S i g m o i d ( x ) = 1 1 + e − x \ Sigmoid(x) = \frac{1}{1 + e^{-x}}  Sigmoid(x)=1+ex1是常见的S型非线性函数。

特性

  • 非线性:SiLU函数能够将线性关系转换为非线性关系,这对于神经网络学习复杂模式至关重要。
  • 连续可导:在整个定义域内都是可微的,这使得在反向传播过程中的梯度计算更加稳定。
  • 无上界有下界:其输出没有上界,但存在下界(接近0),这种特性有助于防止网络饱和和梯度消失问题。
  • 平滑、非单调:与ReLU相比,SiLU函数更加平滑,并且在x≈−1.28时达到全局最小值−0.28,这可以起到一个隐式正则化的作用,抑制过大的权重。
    在这里插入图片描述

与其他激活函数的比较

  • 相比Sigmoid函数,SiLU函数不易出现梯度消失问题,且计算成本更低。
  • 相比ReLU函数,SiLU函数在负数区域内具有非零梯度,这有助于避免神经元“死亡”问题,并且在整个定义域内都是可微的,有利于优化。

实现代码

class SiLU(nn.Module):@staticmethoddef forward(x):return x * torch.sigmoid(x)

二、替换激活函数:Mish

Mish激活函数以其无上限但有下限、光滑且非单调的特性,为深度学习模型提供了更好的拟合复杂数据分布的能力。
Mish ( x ) = x ⋅ tanh ⁡ ( ln ⁡ ( 1 + e x ) ) \text{Mish}(x) = x \cdot \tanh(\ln(1 + e^x)) Mish(x)=xtanh(ln(1+ex))
在这里插入图片描述

实现代码

class Mish(nn.Module):@staticmethoddef forward(x):return x * F.softplus(x).tanh()

替换方法

ultralytics/nn/modules/conv.py文件中的Conv模块实现中,定义了默认的激活函数,在torch中已经实现了Mish激活函数,需要修改的是在Conv模块,将Conv模块中的默认激活函数修改成nn.Mish(),其它不动。

    # default_act = nn.SiLU()  # default activationdefault_act = nn.Mish()  # default activation

在这里插入图片描述

模型训练

根据本机电脑算力,数据集划分信息,权重等相关配置设置好后运行运行。

在这里插入图片描述

训练效果根据各自数据集及使用的显卡配置不同而不同。

三、PReLU

PReLU的添加方式:

class PReLU(nn.Module):def __init__(self, num_parameters=1, init=0.25):super(PReLU, self).__init__()self.num_parameters = num_parametersself.weight = nn.Parameter(torch.Tensor(num_parameters).fill_(init))def forward(self, input):return torch.max(input, 0) + self.weight * torch.min(input, 0)

激活函数的修改方法均一致。

    # default_act = nn.SiLU()  # default activationdefault_act = nn.PReLU()  # default activation

四、Hardswish

Hardswish的实现代码:

def hardswish(x):return x * torch.clamp(x + 3, min=0, max=6) / 6

激活函数的修改方法均一致。

    # default_act = nn.SiLU()  # default activationdefault_act = nn.Hardswish()  # default activation

五、LeakyReLU

LeakyReLU的实现代码:

class LeakyReLU(nn.Module):def __init__(self, negative_slope=0.01):super(LeakyReLU, self).__init__()self.negative_slope = negative_slopedef forward(self, x):return torch.max(x, self.negative_slope * x)

激活函数的修改方法均一致。

    # default_act = nn.SiLU()  # default activationdefault_act = nn.LeakyReLU()  # default activation

六、ReLU6

ReLU6的实现代码:

def relu6(x):return torch.clamp(x, min=0, max=6)

激活函数的修改方法均一致。

    # default_act = nn.SiLU()  # default activationdefault_act = nn.ReLU6()  # default activation

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

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

相关文章

上市四天暴涨又暴跌,扫描全能王背后公司坐上“过山车”

股价四天涨五倍,遇到回调跌一半,扫描全能王母公司——合合信息,一上市就坐上了“过山车”。 合合信息其实早在2021年就向科创板申请上市,并在2023年成功过会,但直到9月13日才开启申购,IPO之路一走就是三年…

ssm基于Javaee的影视创作论坛的设计与实现

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 目 录 III 第1章 绪论 1 1.1选题动因 1 1.2目的和意义 1 1.3论文结构安排 2 第2章 开发环境与技术 …

minio集群部署

最近接触到minio, 将本地集群部署,分别在ubuntu、centos stream9上进行了搭建,目前看里面的小坑不小,记录以下教程,以备忘、以供他人借鉴。 #### 准备 1、因新版本的minio要求,集群部署必须使用挂载非 roo…

已经被这几种广告彻底逼疯……还好有救了

这个假期回家团聚,爸妈小心翼翼问我手机越来越难用了,让我帮忙看看是不是中病毒了,了解后才知道原来事情是这样的: 以前开屏广告不小心误触已经让人恼火,现在是手机轻微动一动就会进入广告,打开app最后都不…

探秘AIPC软件:云端和本地如何奏响混合乐章

AIPC软件的魅力 ©作者|chuiyuw 来源|神州问学 一、AI PC 的崛起之势 1. 传统 PC 受到 AI PC 挑战 AI PC 与传统 PC 相比,具有显著的不同。硬件方面,AI PC 在传统 PC 职能的基础上,集成了混合 AI 算力单元,通常配备高性能处…

《花100块做个摸鱼小网站! 》第七篇—谁访问了我们的网站?

⭐️基础链接导航⭐️ 服务器 → ☁️ 阿里云活动地址 看样例 → 🐟 摸鱼小网站地址 学代码 → 💻 源码库地址 一、前言 大家好呀,我是summo,最近发生了些事情(被裁员了,在找工作中)导致断更了,非常抱歉。…

GS-SLAM论文阅读笔记-CG-SLAM

前言 这是一篇不是最新的工作,我之前没有阅读,但是我前几天阅读GLC-SLAM的时候,发现它的一部分内容参考了CG-SLAM,并且CG-SLAM最近被ECCV2024接收,说明这是一片值得参考的好文章,接下来就阅读一下吧&#…

indeX ParaView插件

适用于 ParaView 的 NVIDIA IndeX 插件 文章目录 前言1. 以交互方式分析整个数据集。更快地取得见解。2. 特性和优势3. 结构化和非结构化立体数据的实时可视化4. 无缝的工作流程5. 快速分析大规模数据6. 开源插件前言 帮助更快获得科学发现的交互式立体可视化功能 1. 以交互方…

【完-网络安全】Shell与脚本

文章目录 1.CLI与GUI2.终端和Shell2.1 Shell 壳层2.2 终端2.3 终端和Shell区别3.标准流 4.PowerShell4.1 管理员与非管理员4.2 指令4.3 重定向4.4 管道 5.环境变量5.1 影响范围5.2环境变量的作用5.3 常见的环境变量 6.脚本 1.CLI与GUI CLI命令行界面(CLl,Command Line Interfa…

qt+opengl 实现纹理贴图,平移旋转,绘制三角形,方形

1 首先qt 已经封装了opengl,那么我们就可以直接用了,这里面有三个函数需要继承 virtual void initializeGL() override; virtual void resizeGL(int w,int h) override; virtual void paintGL() override; 这三个函数是实现opengl的重要函数。 2 我们…

粗糙表面仿真和处理软件

首款基于粗糙表面的仿真和处理软件,该软件具有三种方法,主要是二维数字滤波法,相位频谱法和共轭梯度法。可以分别仿真具有高斯和非高斯分布的粗糙表面,其中非高斯表面利用Johnson转换系统进行变换给定偏度和峰度。对生成的粗糙表面…

k8s网络通信

k8s通信整体架构 k8s通过CNI接口接入其他插件来实现网络通讯。目前比较流行的插件有flannel,calico等 CNI插件存放位置:# cat /etc/cni/net.d/10-flannel.conflist 插件使用的解决方案如下 虚拟网桥,虚拟网卡,多个容器共用一个虚…

YOLO11改进|注意力机制篇|引入局部注意力HaloAttention

目录 一、【HaloAttention】注意力机制1.1【HaloAttention】注意力介绍1.2【HaloAttention】核心代码 二、添加【HaloAttention】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【HaloAttention】注意力机制 1.1【HaloAttent…

同望OA tooneAssistantAttachement.jsp 任意文件读取漏洞复现

0x01 产品简介 同望OA,即同望科技打造的智企云协同管理系统,是一款高效的企业协同移动办公系统。秉承“互联网++企业管理”理念,定位于以移动互联办公为基础的企业协同管理软件平台。它旨在通过内置常用标准模块与专项管理模块应用,安全快速地打通管理与业务通道,实现管理…

科技控的双十一:精选五大热销数码产品,性价比爆表

随着每年一度的“双十一”购物狂欢节的临近,无数科技爱好者们已经开始摩拳擦掌,准备在这场年度大促中大展身手。对于热衷于追逐最新科技趋势的朋友们来说,“双十一”不仅仅是一场简单的购物活动,更是一个探索、发现并拥抱前沿科技…

私域电商新纪元:消费增值模式引领百万业绩飞跃

各位朋友,我是吴军,专注于带领大家深入探索私域电商领域的非凡魅力与潜在机会。 今天,我想与大家分享一个鼓舞人心的真实故事。在短短的一个月内,我们的合作伙伴实现了业绩的飞跃,突破百万大关,并且用户活跃…

大贤3D家谱-一键寻找家谱本源

点击“溯”,您可以追溯到当前节点的家谱本源。 这一功能将帮助您更深入地了解家族的历史和背景。 通过这一操作,系统会自动标注出与您当前节点相关的祖先信息,并以金色字体突出显示,便于您快速识别和查看。 演示如下&#xff1…

协变和逆变、事件、匿名函数

定义:协变(out)和逆变(in)是用于接口和委托中修饰泛型的,定义泛型类型的使用区域。 语法:<out T>那么T的数据类型只能用于返回值。<in T>那么T的数据类型只能用于参数列表。 //自定义委托 public delegate Result Fun<in T, in K, out Result>(…

Klick‘r3.0.4 |智能自动点击,高效省力

Klick’r 是一款专为 Android 设计的开源自动点击工具&#xff0c;能识别屏幕上的图像并进行相应操作。支持游戏中的自动点击、应用测试及日常任务自动化。 大小&#xff1a;27M 百度网盘&#xff1a;https://pan.baidu.com/s/1881Zfevph6_2Zhdc-H_R4A?pwdolxt 夸克网盘&…

shell 脚本批量更新本地git仓库

文章目录 一、问题概述二、解决方法三、运行效果1. windows2. centos 一、问题概述 你是否遇到这样的场景&#xff1a; 本地git仓库克隆了线上的多个项目&#xff0c;需要更新时&#xff0c;无法象svn一样&#xff0c;选中多个项目一起更新。 只能苦逼的一个个选中&#xff0c…