前言
在目标检测中,损失函数与激活函数对模型的性能有着至关重要的影响。YOLOv12 默认采用 Silu 作为激活函数,并结合 IoU 系列作为边界框回归的优化目标。虽然 Silu 在非线性建模方面表现不错,但在复杂数据场景下仍存在 梯度消失 与 稳定性不足 的问题。
本文将详细介绍:
- 如何替换 YOLOv12 中的激活函数(Mish、PReLU、Hardswish、LeakyReLU、ReLU6);
- 如何引入 带注意力机制的激活函数 AReLU;
- 如何在损失函数部分引入 Focaler-IoU 系列,进一步提升边界框回归效果。
一、YOLOv12 默认激活函数回顾:Silu
Silu(Sigmoid Linear Unit)定义为:
Silu(x)=x⋅σ(x)=x1+e−x \text{Silu}(x) = x \cdot \sigma(x) = \frac{x}{1 + e^{-x}} Silu(x)=x⋅σ(x)=1+e−xx
优点:引入非线性,能拟合复杂函数关系。
缺点:在深层网络中仍存在 梯度消失风险,对输入分布较敏感。
二、替换现有激活函数
YOLOv12 的激活函数主要定义在 ultralytics/nn/modules/conv.py 文件中。
我们可以修改 Conv 模块来实现激活函数的自由切换。
1. 支持的常见激活函数
- Mish:平滑且连续的非线性,能保持梯度流动;
- PReLU:带可学习参数,适应不同数据分布;
- Hardswish:轻量化的 Swish 近似,适合移动端;
- LeakyReLU:避免 ReLU 神经元死亡;
- ReLU6:对激活值做上限约束,常用于轻量模型。
2. 代码修改示例
import torch
import torch.nn as nn
import torch.nn.functional as F
# Mish 激活函数
class Mish(nn.Module):
def forward(self, x):
return x * torch.tanh(F.softplus(x<

最低0.47元/天 解锁文章
394

被折叠的 条评论
为什么被折叠?



