26_EfficientNet网络详解

1.1简介

EfficientNet是由Google Research团队开发的一种高效卷积神经网络(CNN)模型,首次在2019年的论文《EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks》中提出。此模型设计的核心在于平衡网络的深度、宽度以及输入分辨率,以达到更高的计算效率和更优的性能。EfficientNet通过引入复合缩放(Compound Scaling)的概念,对网络结构进行了创新性优化,相较于以往模型,它能够在保持较高精度的同时显著减少模型的参数量和计算成本。

核心组件及技术

  1. 深度可分离卷积(Depthwise Separable Convolutions)

    • 这种卷积方式首先在MobileNet中被广泛应用,它将标准卷积分解为深度卷积(逐通道卷积)和点卷积(1x1卷积)两个步骤,极大地减少了计算量和参数量,提高了模型的效率。
  2. 自适应空间金字塔池化(Adaptive Average Pooling)

    • 在模型的末端,EfficientNet采用了一种全局平均池化策略,即自适应空间金字塔池化,以适应不同尺寸的输入,并有效提取多尺度特征,提升模型的泛化能力。
  3. 网络缩放系数(Network Scaling)

    • EfficientNet提出了复合缩放方法,即不仅仅单独改变网络的深度、宽度或分辨率,而是这三个维度同时按比例调整,但不是等比例缩放。它基于一个复合缩放公式来确定这三个维度的最佳比例,公式为:New Size=Original Size×Scaling Factor𝜙New Size=Original Size×Scaling Factorϕ,其中𝜙ϕ是一个超参数,对于深度、宽度、分辨率分别有不同的值。
  4. 模型结构

    • EfficientNet的基本结构包含多个模块,每个模块由一系列的MBConv(Mobile Inverted Bottleneck Convolution)块组成,这些块结合了深度可分离卷积、残差连接和膨胀操作,以提高效率和性能。
    • 模型按照不同的复杂度和规模,从EfficientNet-B0到EfficientNet-B7,B0是最小的,B7则是最大的。每个变种都是通过调整基础网络的深度、宽度和分辨率得到的,遵循复合缩放原则。

性能特点

  • 高效性:相比于其他流行的CNN模型,如ResNet、VGG等,EfficientNet能够在相似的计算成本下达到更高的准确性。
  • 可扩展性:通过调整复合缩放的参数,可以方便地生成一系列模型,覆盖从移动端到服务器端的各种应用场景。
  • 泛化能力
    • 在ImageNet数据集上的实验显示,EfficientNet取得了当时最好的成绩,不仅提升了准确性,还大幅降低了模型的参数量和计算需求。
    • 它也在多个计算机视觉任务中展示了出色的性能,包括物体检测、图像分割等。

应用场景

由于其高效和高性能的特点,EfficientNet广泛应用于图像分类、物体识别、图像生成、医疗影像分析等领域,尤其适合于资源受限的环境,如移动设备和边缘计算。

结论

EfficientNet的出现是对卷积神经网络设计的一次重大革新,它通过精心设计的网络结构和缩放规则,实现了模型效率与性能的最优平衡,成为了现代深度学习领域中的一个重要里程碑。

1.2 网络结构

(d)是提高了图像的分辨率,自然地得到的特征矩阵的高和宽也会相应的增加。

(e)是结合前面的,同时增加网络的宽度,深度,图像分辨率。

EfficientNet-B0(beseline)

表中的卷积层后默认都跟有BN和Swish激活函数。

MBConv就是mobile net convolution。

第三列代表的输入每个stage时的高和宽。

layers是将stage重复多少次。

最右是stride参数,根据分辨率(resolution)信息得到的(若stride=2,对于layer>1的情况只有第一个layer步距为2,其他的都是等于1的)

MBConv(Mobile Inverted Bottleneck Convolution)

  1. 1x1 Pointwise Convolution (PWConv):这是模块的起始部分,使用1x1卷积核对输入特征图进行升维处理,目的是增加通道数。这一操作有助于减少后续运算的计算成本,因为较宽的特征图在深度可分离卷积时可以更高效地捕获特征。该步骤通常伴随着Batch Normalization (BN)和激活函数(如ReLU或Swish)。

  2. Depthwise Convolution (DWConv):紧接着是深度卷积,它使用kxk大小的卷积核,其中k通常为3或5,但EfficientNetV2偏好使用3x3。深度卷积对输入特征图的每个通道独立进行卷积,仅在空间维度上进行滤波,而不是跨通道,这大大减少了参数量。同样,之后会接BN和激活函数。

  3. Squeeze-and-Excitation (SE) Layer(部分变体):在某些MBConv变体中,尤其是在EfficientNet的早期版本中,会包含一个Squeeze-and-Excitation层。该层通过先全局平均池化(压缩),然后通过两个全连接层来调整通道间的权重,实现对特征通道的重新校准,增强重要特征,抑制不重要的特征。

  4. 1x1 Pointwise Convolution (Again):在深度卷积后,再次使用1x1卷积进行降维处理,减少通道数。这一步骤帮助减少模型的复杂度,使得输出特征图的通道数与模块输入相匹配或接近,以便于残差连接。

  5. DropConnect(或Dropout):EfficientNet在某些MBConv模块中使用DropConnect来替代传统Dropout,以随机丢弃一些连接而不是整个特征图的神经元,有助于防止过拟合。

  6. Residual Connection(残差连接):MBConv模块通常包含一个残差连接,将模块的输入与经过上述操作后的输出相加,以促进梯度流动,加速训练过程,并有助于解决深度网络中的退化问题。

Fused-MBConv模块(EfficientNetV2)

在EfficientNetV2中,引入了Fused-MBConv模块,这是对MBConv的进一步优化。Fused-MBConv将1x1卷积和深度卷积合并成一个操作,减少了内存访问开销,同时降低了扩张率(expansion ratio),使用更小的卷积核尺寸(如3x3代替5x5),进一步提高了模型效率。

效果与目的

MBConv模块通过深度可分离卷积和精心设计的结构,显著减少了模型的参数量和计算量,同时通过残差连接和SE层等机制保持了模型的表达能力,使得EfficientNet能够在保持高效的同时,达到或超越了许多更大、更复杂的模型的性能。这种模块化设计也便于模型的扩展和定制,适应不同计算资源和精度要求的应用场景。

第一个1x1卷积用于升维,这里的n就是之前表格中后面的数字。

后面的1x1卷积用于降维。SE即SE注意力模块。

(注意:在源码中只有使用到shortcut连接的MBConv模块才有Dropout层)

SE(Squeeze-and-Excitation)

SE(Squeeze-and-Excitation)模块是EfficientNet模型中的一个关键组成部分,它最初由Hu等人在2017年提出的SENet中引入,旨在通过动态调整网络中各个通道的重要性来提升模型的特征表示能力。在EfficientNet中,SE模块被集成到MBConv模块中,增强了模型的特征选择能力和效率。下面是SE模块的详细解释:

工作原理

SE模块的主要目的是实现特征的通道注意力机制,具体分为三个步骤:挤压(Squeeze)、激励(Excitation)和重新校准(Re-calibration)。

  1. 挤压(Squeeze):

    • 这一步骤旨在压缩每个特征图的空间信息,转化为通道描述。通过全局平均池化(Global Average Pooling, GAP)操作实现,它将每个通道的所有空间位置上的特征值求平均,得到一个代表该通道整体特征强度的标量。这样,对于一个形状为 H×W×C 的特征图,挤压后得到的特征向量形状变为 1×1×C。
  2. 激励(Excitation):

    • 该阶段的目标是学习每个通道的权重,以此来衡量该通道对于最终任务的贡献度。这通过两个连续的全连接层实现,中间通常伴随非线性激活函数。在EfficientNet中,第一个全连接层(FC1)将通道数降维至输入通道数的1/4(对于MBConv输入的特征图通道数),并使用Swish激活函数;第二个全连接层(FC2)则将通道数恢复到与输入相同,并使用Sigmoid激活函数,以确保输出的权重范围在0到1之间,代表通道的激活程度。
  3. 重新校准(Re-calibration):

    • 最后,利用激励阶段得到的通道权重对原始特征图进行逐通道的加权调整。具体来说,将Sigmoid函数输出的通道权重与原始特征图的每个通道对应相乘,完成特征图的动态加权,增强重要通道的信号,抑制不重要的通道,从而实现特征的精细调制。

目的与效果

SE模块通过上述机制,为网络引入了通道间依赖性,允许网络根据输入内容自动调节不同特征通道的贡献度,从而提升了模型的适应性和表达能力。这种动态调整机制有助于模型在资源有限的情况下,更加高效地利用计算资源,提高模型的性能。在EfficientNet中,SE模块的加入进一步增强了模型的效率-精度权衡,使得模型在保持较小的计算负担的同时,达到了顶尖的图像分类性能。

B1-B7

drop_connect_rate是指1x1降维之后的那个dropout随机失活的比例。

dropout_rate指的是网络最后一个全连接层FC前面的dropout层随机失活比例。

1.3 性能对比

EfficientNet是最准,参数量最少,而且运算次数也最少的。但是EfficientNet有一个问题,就是非常占GPU显存,因为像B4B5B6B7这种模型,它输入的图像分辨率非常大,那么特征矩阵的高和宽都要相应地增加,那么显存也会增加。

1.4 Swish激活函数

Swish激活函数是一种自我门控的激活函数,由谷歌的研究人员在2017年提出,它结合了线性整流单元(ReLU)的简单性和sigmoid函数的自适应性。Swish旨在提高神经网络的性能,尤其是在深度学习任务中,有时表现得比ReLU和其他传统的激活函数更优。

Swish函数的数学表达式为:

Swish函数的优点包括:

  1. 平滑性:Swish是一个平滑的函数,这意味着它的导数也是连续的,有助于优化过程中的稳定性和泛化能力。
  2. 无上界且有下界:Swish函数的输出范围从负无穷大到正无穷大,无上界,但有一个下界(当x接近负无穷时,f(x)接近0),这有助于模型学习更广泛的函数关系。
  3. 自适应性:由于它结合了输入值x和sigmoid函数,Swish能够根据输入的大小自动调整其响应,这意味着在输入值较大或较小时,激活函数的行为会有所不同,提高了模型的灵活性。
  4. 正则化效果:当输入值远离零时,Swish函数的输出接近输入值x,类似于线性变换;而当输入值接近零时,输出会减小,这有助于模型在训练过程中减少对某些特征的依赖,起到正则化的作用。

Swish函数的这些特性使其在深度学习模型中成为一个吸引人的选择,尤其是在追求高性能和高效率的应用场景中。然而,由于Swish涉及sigmoid函数的计算,相比ReLU等简单激活函数,其计算成本可能会更高。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何规划数据科学和机器学习领域的下一步职业发展

。 欢迎来到云闪世界。数据科学和机器学习专业人士面临着来自多个方面的不确定性 欢迎来到云闪世界。全球经济、人工智能工具及其对工作保障的影响,以及不断变化的技术堆栈,仅举几例。如今,谈论职业生涯是否能够抵御经济衰退…

MySQL 进阶(三)【SQL 优化】

1、SQL 优化 1.1、插入数据优化 1.1.1、Insert 优化 1、批量插入 插入多条数据时,不建议使用单条的插入语句,而是下面的批量插入: INSERT INTO tb_name VALUES (),(),(),...; 批量插入建议一次批量 500~100 条,如果数据量比…

GNN学习笔记

1.拉普拉斯矩阵 D是度矩阵,A是邻接矩阵 L的第二个公式常用 L的特征值>0 2.图的整体,节点,边都能代表一个分类/回归问题。 3.GNN的感受野 N-Hop Neighbors,某一点的n阶邻居。n步以内能到达的点。 4.残差连接 最后对图结果的处…

RK3568笔记三十六:LED驱动开发(设备树)

若该文为原创文章,转载请注明原文出处。 记录使用设备树编写一个简单的 LED 灯驱动程序 一、编程思路 程序编写的主要内容为添加 LED 灯的设备树节点、在驱动程序中使用 of 函数获取设备节点中的 属性,编写测试应用程序。 • 首先向设备树添加 LED 设备…

SCSA第八天

防火墙的带宽管理 核心思想 1,带宽限制 --- 限制非关键业务流量占用带宽的比例 2,带宽保证 --- 这里需要保证的是我们关键业务流量;再业务繁忙时,确保关键业务不受影 响; 3,连接数的限制 --- 这也…

如何生成好看的zabbix告警报表并发送邮件

作者 乐维社区(forum.lwops.cn) 许远 一、场景模拟 小东是一名资深的IT运维人员,其直属领导想要了解公司业务系统的健康状态以及小东日常的工作情况等,要求小东每周统计系统告警情况并发邮件给到他。小东所在公司搭建了一套zabbix…

为什么品牌需要做 IP 形象?

品牌做IP形象的原因有多方面,这些原因共同构成了IP形象在品牌建设中的重要性和价值,主要原因有以下几个方面: 增强品牌识别度与记忆点: IP形象作为品牌的视觉符号,具有独特性和辨识性,能够在消费者心中留…

Linux--网络基础

计算机网络背景 计算机网络背景是一个复杂而丰富的领域,涵盖了从计算机单机模式到网络互联的演变过程,以及网络技术的不断发展和创新。 计算机单机模式和独立发展 在早期,计算机主要以单机模式存在,即每台计算机都是独立的&…

SAC-IA粗配准算法记录

1. 算法思路 SAC-IA(Sample Consensus Initial Aligment,SAC-IA)粗配准算法是一种基于局部特征描述子的点云粗配准算法,其需要计算点云的快速点特征直方图(FPFH)来保持对应点对之间的相似关系,根据相似关系来搜索点云中的对应点。其基本原理是采用采样一致性的思想,通过查…

P2712 摄像头

好久没发帖了&#xff0c;放假了来水一波。 代码&#xff1a; #include<iostream> #include<cstring> #include<algorithm> using namespace std;const int N 200010, mod 80112002;int n, m; int nn; int e[N], h[N], ne[N], idx; int q[N], in[N], chu[N…

宝塔安装RabbitMq教程

需要放开15672端口&#xff0c;默认账号密码为guest/guest

前端开发日记——在MacBook上配置Vue环境

前言 大家好&#xff0c;我是来自CSDN的寄术区博主PleaSure乐事。今天是开始学习vue的第一天&#xff0c;我使用的编译器是vscode&#xff0c;浏览器使用的是谷歌浏览器&#xff0c;后续会下载webstorm进行使用&#xff0c;当前学习阶段使用vscode也是可以的&#xff0c;不用担…

Jupyter Notebook安装及基本使用

Jupyter Notebook安装及基本使用 目录 Jupyter Notebook安装及基本使用方式一&#xff1a;Anaconda直接安装方式二&#xff1a;pip命令安装Jupyter使用虚拟环境 方式一&#xff1a;Anaconda直接安装 安装Anaconda 下载地址&#xff0c;输入邮箱&#xff0c;Windows下载 开始安…

【sgWatermark.js】自定义组件:基于Vue2+html2canvas实现全局水印效果

sgWatermark.js源码 import html2canvas from html2canvas; // npm install --save html2canvas (官网&#xff1a;https://html2canvas.hertzen.com) export default {addWatermark({container document.body, // 水印添加到的容器innerHTML "水印文字内容", //…

最大文件句柄数

优质博文&#xff1a;IT-BLOG-CN 灵感来源 一、什么是文件句柄 文件句柄File Handle是操作系统中用于访问文件的一种数据结构&#xff0c;通常是一个整数或指针。文件句柄用于标识打开的文件&#xff0c;每个打开的文件都有一个唯一的文件句柄。 它们是对文件、网络套接字或…

实战:功能强大齐全BBS论坛项目Echo简介

项目简介 Echo 是一套前后端不分离的开源社区系统&#xff0c;基于目前主流 Java Web 技术栈&#xff08;SpringBoot MyBatis MySQL Redis Kafka Elasticsearch Spring Security ...&#xff09;&#xff0c;并提供详细的开发文档和配套教程。包含帖子、评论、私信、系…

InstaPrism能否平替BayesPrism(贝叶斯棱镜)?

上一期内容提到了BayesPrism算法用于单细胞数据的反卷积&#xff0c;BayesPrism算法在实际应用中非常占用计算资源以及消耗使用者的时间。那么是否有较好的替代包呢&#xff1f; 曾老师告诉了我一个R包—InstaPrism&#xff0c;他希望我将其和BayesPrism算法做个对比。 开发者…

使用Python Turtle绘制圣诞树和装饰

简介(❤ ω ❤) 在这篇文章中&#xff0c;我们将探索如何使用Python的Turtle模块来绘制一个充满节日气氛的圣诞树&#xff0c;以及一些可爱的装饰品。Turtle是一个受Logo语言启发的图形库&#xff0c;非常适合初学者学习编程和创建图形。 码农不是吗喽&#xff08;大学生版&…

【常见开源库的二次开发】基于openssl的加密与解密——单向散列函数(四)

目录&#xff1a; 目录&#xff1a; 一、什么是单项散列函数&#xff1f; 1.1 如何验证文件是否被修改过 1.2 单项散列函数&#xff1a; 二、单向hash抗碰撞 2.1 弱抗碰撞&#xff08;Weak Collision Resistance&#xff09; 2.2 强抗碰撞&#xff08;Strong Collision Resista…

图像边缘检测中Sobel算子的原理,并附OpenCV和Matlab的示例代码

Sobel算子是一种用于图像边缘检测的离散微分算子。它结合了图像的平滑处理和微分计算&#xff0c;旨在强调图像中强度变化显著的区域&#xff0c;即边缘。Sobel算子在图像处理中被广泛使用&#xff0c;特别是在计算机视觉和图像分析领域。 Sobel算子的原理 Sobel算子主要用于计…