YOLOv12 改进策略【损失函数篇】| 激活函数替换与 Focaler-IoU 实战

前言

在目标检测中,损失函数与激活函数对模型的性能有着至关重要的影响。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+exx

优点:引入非线性,能拟合复杂函数关系。
缺点:在深层网络中仍存在 梯度消失风险,对输入分布较敏感。


二、替换现有激活函数

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<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值