YOLOv4 中的 Mish 激活函数
作者 | Miracle R
编译 | ronghuaiyang
转自 | AI公园
导读
对YOLOv4中的Mish激活函数进行解释和优缺点对比。
YOLO,是一种 one-shot 的目标检测技术,由Joseph Redmon和Ali Farhadi在2016年引入,目前已经有4个版本的技术。在这里,我们会来看看YOLOv4,特别是它的优化器,使用的两个bags的优化函数:在训练期间使用的“Bag of Freebies (BoF)”和在推理期间使用的“Bag of Specials (BoS)”。
Bag of Specials包含了用于YOLOv4架构的主干和检测器的低计算成本模块。这些是:
在这里,我们可以看到Mish激活函数同时存在于主干和检测器中。那么,是什么让它“special”呢?让我们进一步了解这个激活函数。
Mish激活函数
Mish是光滑的非单调激活函数,可定义为:
f(x) = x・tanh(ς(x))
其中, ς(x) = ln(1+e^x),是一个softmax激活函数和。
这与另一个被称为Swish函数的激活函数非常相似,可以定义为:
在YOLOv4中使用Mish函数的原因是它的低成本和它的平滑、非单调、上无界、有下界等特点,与其他常用函数如ReLU和Swish相比,提高了它的性能。
Mish的性能详细说明如下:
无上界有有界:无上界是任何激活函数都需要的特性,因为它避免了导致训练速度急剧下降的梯度饱和。因此,加快训练过程。无下界属性有助于实现强正则化效果(适当的拟合模型)。(Mish的这个性质类似于ReLU和Swish的性质,其范围是[≈0.31,∞))。
非单调函数:这种性质有助于保持小的负值,从而稳定网络梯度流。大多数常用的激活函数,如ReLU [f(x) = max(0, x)], Leaky ReLU [f(x) = max(0, x), 1],由于其差分为0,不能保持负值,因此大多数神经元没有得到更新。
无穷阶连续性和光滑性:Mish是光滑函数,具有较好的泛化能力和结果的有效优化能力,可以提高结果的质量。在图中,可以看到ReLU和Mish之间的一个随机初始化的神经网络在宏观平滑度上的剧烈变化。然而,在Swish和Mish的情况下,宏观上或多或少还是相似的。
计算量较大,但是效果更好:与ReLU相比,它的计算比较贵,但在深度神经网络中显示了比ReLU更好的结果。
![](Mish Activation Function In YOLOv4.assets/0_PJVEahgbKstqbgAd.png)
自门控:此属性受到Swish函数的启发,其中标量输入被提供给gate。它优于像ReLU这样的点式激活函数,后者只接受单个标量输入,而不需要更改网络参数。
Python实现
使用PyTorch可以在python中实现Mish函数,如下所示:
![0_93iwe6BzbP6VRSAj](Mish Activation Function In YOLOv4.assets/0_93iwe6BzbP6VRSAj.png)import torch
import torch.nn as nn
import torch.nn.functional as Fclass Mish(nn.Module):def __init__(self):super().__init__()def forward(self, x):return x*(torch.tanh(F.softplus(x)))
总结
在诸如CIFAR-10, CIFAR-100, CalTech-256, ASL等具有挑战性的数据集的70多个不同的问题标准中,Mish函数的表现超过了广泛使用的激活函数,如ReLU和Swish。下图显示了Mish、Swish和ReLU在不同模型的CIFAR-10数据集上的性能,从图中可以很容易地推断,Mish比Swish函数的性能大约高0.494%,ReLU比Swish函数的性能高1.671%,因此是三者中最准确的:
在YOLOv4中,使用了Mish函数+ CSPDarknet53的组合,尽管代价有点高,但它极大地提高了检测的准确性,因此使Mish成为**“Specials”**之一。
感谢你的分享,点赞,在看三连↓
YOLOv4 中的 Mish 激活函数相关推荐
- Mish激活函数,ReLU的继任者
参考链接:https://blog.csdn.net/u011984148/article/details/101444274 对激活函数的研究一直没有停止过,ReLU还是统治着深度学习的激活函数,不 ...
- yolov4中的route和shortcut层
1.shortcut层 shortcut层的输入层一般是两个(目前还没出现多余两个的情况),实现两个张量相加,例如: 对应的cfg文件中的层为: #4 [convolutional] batch_no ...
- DL之AF:机器学习/深度学习中常用的激活函数(sigmoid、softmax等)简介、应用、计算图实现、代码实现详细攻略
DL之AF:机器学习/深度学习中常用的激活函数(sigmoid.softmax等)简介.应用.计算图实现.代码实现详细攻略 目录 激活函数(Activation functions)相关配图 各个激活 ...
- SELU︱在keras、tensorflow中使用SELU激活函数
arXiv 上公开的一篇 NIPS 投稿论文<Self-Normalizing Neural Networks>引起了圈内极大的关注,它提出了缩放指数型线性单元(SELU)而引进了自归一化 ...
- 浅谈yolov4中的一部分数据增强
浅谈yolov4中的数据增强 前言 数据增强 数据增强步骤 1.对图片进行水平翻转 2.对图片进行缩放 3.对图片HSV色域变换 4. Mosaic数据增强 5. 总代码 前言 在接下来的几天,我将解 ...
- yolov4中的mosaic数据增强
文章详细讲解yolov4中的mosaic数据增强方法以及代码细节,如有错误,希望指正. 参考代码链接:https://github.com/bubbliiiing/yolov4-keras 1.下述代 ...
- Soft-Clipping Mish激活函数
Soft-Clipping激活函数 论文:Soft Clipping Mish – A Novel Activation Function for Deep Learning 年份:2021 简介 该 ...
- pytorch和tensorflow中实现SMU激活函数
在Pytorch中实现SMU激活函数 本文代码来源于githubuSMU源码链接 # coding=utf-8import torch from torch import nnclass SMU(nn ...
- tensorflow中Leaky Relu激活函数
tensorflow中Leaky Relu激活函数 引用API:tensorflow.nn.leaky_relu(x) Leaky Relu激活函数 Leaky Relu激活函数引入一个固定斜率a,具 ...
最新文章
- 0308-标签的用法(a,ul/ol,table)
- 读论文之《基于 FPGA 的并行全比较排序算法》
- 在Spark上用Scala实验梯度下降算法
- 现实世界 机器学习_公司沟通分析简介现实世界的机器学习方法
- 【转】wpf和winform的区别
- angularjs html 缓存,如何删除使用AngularJS的HTML中的浏览器缓存?
- codevs4203山区建小学
- nagios监控mysql主从
- MQTT 固定报头 中 剩余长度字段的计算
- Redis 订阅与发布
- 网上预约订餐系统(联网可用)
- 微信小程序 java高校科研管理系统
- BT种子结构及bencoding编码解析
- GeekTool介绍及Shell模式应用二则(以及df、cal、date、sed的使用)
- 关于MFC窗口隐藏的方法
- BZOJ-1898 Swamp 沼泽鳄鱼
- 绝了,hutool导出excel 图片居然没有调用方法
- 测试人员进阶之路:成为测试专家或测试管理都需要知道什么
- JavaEE中,考勤(签到签退)功能的实现
- MySQL学习笔记day2--DQL案例练习