上海自助建网站,哪个网站做照片书最好看,清廉企业建设,共享虚拟主机 几个网站一、导言
激活函数在目标检测中的作用至关重要#xff0c;它们主要服务于以下几个关键目的#xff1a; 引入非线性#xff1a;神经网络的基本构建块#xff08;如卷积层、全连接层等#xff09;本质上是线性变换#xff0c;而激活函数通过引入非线性#xff0c;使得网络…一、导言
激活函数在目标检测中的作用至关重要它们主要服务于以下几个关键目的 引入非线性神经网络的基本构建块如卷积层、全连接层等本质上是线性变换而激活函数通过引入非线性使得网络能够学习和表达更复杂、更丰富的数据特征。这对于目标检测任务尤为重要因为目标可能出现在图像中的任何位置、大小和姿态且彼此之间可能有重叠或遮挡非线性表达能力可以帮助模型更好地理解和区分这些复杂的场景。 控制梯度流激活函数的形状影响着反向传播过程中的梯度传递这对于权重更新和学习过程至关重要。例如ReLU及其变体如Leaky ReLU、PReLU、FReLU等通过在负值区域保持非零斜率解决了传统ReLU可能导致的“神经元死亡”问题从而促进了深层网络中的梯度流动。 增强模型表达能力特定的激活函数能够提升模型在特定任务上的表现。例如FReLUFunnel Activation Function通过在激活阶段整合空间信息提高了模型的空间理解能力这对于目标检测这种需要精确定位的任务非常有利。 影响计算效率不同的激活函数具有不同的计算复杂度。在实时目标检测系统如YOLO系列中选择计算成本低且效果好的激活函数如ReLU对于保证模型的运行速度和资源效率是必要的。 输出范围调整某些激活函数如Sigmoid和Softmax能够将输出限制在特定范围内这在输出层特别有用比如将网络输出转化为概率值便于进行目标类别预测。
综上所述激活函数不仅决定了神经网络的学习能力还在很大程度上影响了目标检测模型的精度、训练效率以及最终的检测性能。因此在设计目标检测网络时精心选择和设计激活函数是一个重要环节。
二、YOLO训练中常见且有效的激活函数 SiLU (Sigmoid Linear Unit): 也称为Swish是一种自适应激活函数。SiLU尝试结合了线性变换和sigmoid函数的优点能够提升模型的非线性表达能力同时缓解梯度消失问题。 ReLU (Rectified Linear Unit): 是最常用的激活函数之一当输入为正时输出等于输入为负时输出为0。ReLU解决了sigmoid和tanh函数的梯度饱和问题加速了神经网络的训练但在负值区域梯度为0可能导致“死亡ReLU”现象。 Leaky ReLU: 为了解决ReLU在负值区域梯度消失的问题而提出即使负输入时函数也有非零斜率帮助梯度流动。 FReLU (Fractional ReLU): 是ReLU的一个变种它引入了一个可学习的参数来调整负输入部分的斜率提供了比Leaky ReLU更灵活的调整能力。 PReLU (Parametric ReLU): 类似于Leaky ReLU适用于不同层可能需要不同负斜率的情况。 Hardswish: 是MobileNetV3中引入的一种激活函数试图模仿Swish但计算成本更低。它在移动端设备上表现高效且性能良好。 Mish: 由D. Misra提出Mish结合了自我门控的性质和ReLU的简单性被发现能在多种任务上提高模型性能。 ELU (Exponential Linear Unit): 目的是减少ReLU的偏差移位问题并加速学习过程。 CELU (Continuously Differentiable Exponential Linear Unit): 是ELU的一个连续可微分版本旨在保持ELU的优点同时确保所有点的导数存在适合需要严格平滑性的应用。 GELU (Gaussian Error Linear Unit): 形式较为复杂与高斯分布的累积分布函数有关。GELU在Transformer等模型中表现优秀因为它能更好地匹配神经网络中权重初始化的分布。 SELU (Scaled Exponential Linear Unit): 设计用于自归一化神经网络SELU旨在确保网络的输出具有零均值和单位方差从而简化训练过程中的归一化需求。
需要注意的是YOLOv7、YOLOv5项目采用的默认激活函数为SiLU而YOLOv7-tiny项目采用的激活函数为LeakyReLUResNet系列采用的激活函数则为ReLU选择何种激活函数为自己的Baseline需要先查阅相关论文再下判断以此为改进的对照方可得出结果。
同时YOLOv5/v7的激活函数一般在models/activations.py下 三、YOLOv7-tiny改进工作
了解二后在YOLOv7项目文件下的models文件夹下的common.py采用ctrlF搜索如下代码。
self.act nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())
将其替换为二的激活函数即可。 四、YOLOv7改进工作
了解二后在YOLOv7项目文件下的models文件夹下的common.py采用ctrlF搜索如下代码。
self.act nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())
将其替换为二的激活函数即可。 五、YOLOv5改进工作
了解二后在YOLOv5项目文件下的models文件夹下的common.py采用ctrlF搜索如下代码。
self.act nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())
将其替换为二的激活函数即可。 更多文章产出中主打简洁和准确欢迎关注我共同探讨