【CV】EfficientNet相比resnet有哪些优点,什么是深度可分离卷积

news2024/11/17 16:41:29

目录

  • 前言
  • 使用深度可分离卷积
    • 普通卷积的计算参数量
    • 深度可分离卷积分为两个步骤:深度卷积和逐点卷积
  • 使用多个缩放因子
  • 使用 Swish 激活函数

前言

高效的神经网络主要通过:1. 减少参数数量;2. 量化参数,减少每个参数占用内存
目前的研究总结来看分为两个方向:
一是对训练好的复杂模型进行压缩得到小模型;
二是直接设计小模型并进行训练。(EfficientNet属于这类)
深度可分离卷积中的深度卷积不改变输入通道数,再由逐点卷积的方式,将多通道信息相融合。
ResNet和EfficientNet都是非常经典和高效的卷积神经网络,它们各有特点,适用于不同的场景和任务。ResNet通过残差连接解决梯度消失问题,可以构建非常深的神经网络,适用于图像分类、目标检测和语义分割等任务;
EfficientNet通过复合缩放方法优化网络结构,可以在保持高准确性的同时减少计算量和内存占用,适用于移动设备和嵌入式设备等资源受限的场景。

使用深度可分离卷积

传统的卷积操作在处理通道和空间信息时是耦合的,而深度可分离卷积可以分别对通道和空间信息进行处理,从而减少了计算量和参数量。具体来说,深度可分离卷积分为两个步骤:深度卷积和逐点卷积。深度卷积使用一个卷积核对每个通道进行卷积,而逐点卷积则使用 1x1 的卷积核对每个通道的输出进行组合。由于逐点卷积的计算量比传统的卷积操作小得多,因此深度可分离卷积可以大大减少计算量和参数量。
在这里插入图片描述

普通卷积的计算参数量

传统卷积的参数计算可以简单地理解为卷积核中所有参数的数量。具体地,假设输入张量的大小为 H × W × C H \times W \times C H×W×C,输出张量的大小为 H ′ × W ′ × C ′ H' \times W' \times C' H×W×C,卷积核的大小为 K × K K \times K K×K,传统卷积的参数计算如下:

对于每个输出通道 c ′ c' c,都要使用一个独立的卷积核来卷积输入张量的所有通道。因此,对于每个输出通道 c ′ c' c,卷积核中的参数数量为 K × K × C K \times K \times C K×K×C

由于每个输出通道都有一个独立的卷积核,因此对于所有输出通道的卷积核,参数数量为 K × K × C × C ′ K \times K \times C \times C' K×K×C×C

需要加上偏置的参数数量,假设每个输出通道都有一个独立的偏置,那么偏置的参数数量为 C ′ C' C

因此,传统卷积的总参数数量为 K × K × C × C ′ + C ′ K \times K \times C \times C' + C' K×K×C×C+C
例如,假设输入张量大小为 224 × 224 × 3 224 \times 224 \times 3 224×224×3,输出张量大小为 112 × 112 × 32 112 \times 112 \times 32 112×112×32,卷积核大小为 3 × 3 3 \times 3 3×3。那么传统卷积的总参数数量为 3 × 3 × 3 × 32 + 32 = 896 3 \times 3 \times 3 \times 32 + 32 = 896 3×3×3×32+32=896
需要注意的是,传统卷积的参数数量随着输入和输出张量的大小、卷积核的大小和输出通道数的增加而增加,这可能导致在深层网络中出现参数量过大的问题。因此,深度可分离卷积是一种有效的替代方法,可以减少参数数量和计算量。

深度可分离卷积分为两个步骤:深度卷积和逐点卷积

深度也就是指:channel这一维度。
深度卷积操作是将每个通道单独处理,以减少计算量和参数量。具体来说,对于一个输入张量,深度卷积操作首先对每个通道应用一个单独的卷积核,然后将每个通道的结果相加得到输出张量。由于每个通道使用单独的卷积核,因此每个卷积核的参数量大大减少。
逐点卷积操作是用一个 1x1 的卷积核对每个通道的输出进行组合。逐点卷积可以将不同通道的信息进行组合,从而增强特征表示能力。

深度可分离卷积的参数数目比传统卷积要少得多,这是深度可分离卷积被广泛应用于移动设备和嵌入式设备等资源受限的环境中的主要原因之一。下面以一个简单的例子说明深度可分离卷积的参数数目:
假设输入张量的大小为 H × W × C H \times W \times C H×W×C,输出张量的大小为 H ′ × W ′ × C ′ H' \times W' \times C' H×W×C,卷积核的大小为 K × K K \times K K×K,深度可分离卷积的参数数目可以分为两个部分:深度卷积的参数数目和逐点卷积的参数数目。

深度卷积的参数数目。深度卷积使用一个 K × K × 1 K \times K \times 1 K×K×1 的卷积核对每个通道进行卷积,因此每个卷积核的参数数目为 K × K × 1 = K 2 K \times K \times 1=K^2 K×K×1=K2,所有卷积核的参数数目为 K 2 × C ′ K^2 \times C' K2×C,即深度卷积的参数数目为 K 2 × C ′ K^2 \times C' K2×C

逐点卷积的参数数目。逐点卷积使用一个 1 × 1 1 \times 1 1×1 的卷积核对每个通道的输出进行组合,因此每个卷积核的参数数目为 1 × 1 × C = C 1 \times 1 \times C= C 1×1×C=C,所有卷积核的参数数目为 C × C ′ C \times C' C×C,即逐点卷积的参数数目为 C × C ′ C \times C' C×C
因此,深度可分离卷积的总参数数目为 K 2 × C ′ + C × C ′ K^2 \times C' + C \times C' K2×C+C×C,相比传统卷积,深度可分离卷积的参数数目大大减少,这使得深度可分离卷积能够在相同的计算资源下获得更好的性能。

使用多个缩放因子

EfficientNet 使用了一种称为 Compound Scaling 的方法,对网络的深度、宽度和分辨率进行缩放,以适应不同的计算资源和应用场景。具体来说,Compound Scaling 包括三个因子:深度因子、宽度因子和分辨率因子。深度因子控制网络的深度,宽度因子控制每层的通道数,分辨率因子控制输入图像的分辨率。通过调整这些因子,可以在不同的计算资源下获得更好的性能。
通过增加输入图像的分辨率来提升网络的表达能力和视觉感知能力。
这三个方面的缩放是相互关联的,因此需要进行联合优化。具体来说,对于每个缩放因子 ϕ \phi ϕ,可以使用以下公式来计算网络的深度 d d d、宽度 w w w 和分辨率 r r r
d = α ϕ   w = β ϕ   r = γ ϕ   \begin{aligned} d &= \alpha^\phi \ w &= \beta^\phi \ r &= \gamma^\phi \ \end{aligned} d=αϕ w=βϕ r=γϕ 
其中, α \alpha α β \beta β γ \gamma γ 是网络的基础深度、宽度和分辨率, ϕ \phi ϕ 是缩放因子,可以根据计算资源的限制来确定。通过联合优化这三个方面的缩放因子,可以获得更加高效的网络结构。
需要注意的是,EfficientNet 使用了一种复合扩张系数(Compound Coefficient)的方法,将每个卷积层的扩张系数设置为一个复合系数,可以在不增加计算量的情况下增加网络的表达能力。具体来说,复合扩张系数由两个部分组成:一个固定的基础扩张系数 θ \theta θ 和一个可调整的复合因子 ϕ \phi ϕ。每个卷积层的扩张系数可以表示为 α β ϕ \alpha\beta^\phi αβϕ,其中 α \alpha α 是网络基础通道数, β \beta β 是复合系数中的基础系数, ϕ \phi ϕ 是可调整的复合因子。通过联合优化复合扩张系数和缩放因子,可以获得更加高效的网络结构。
总之,Compound Scaling 方法能够同时对网络深度、宽度和分辨率进行优化,通过联合优化复合扩张系数和缩放因子,可以获得更加高效的网络结构,从而获得更好的性能和计算效率。

使用 Swish 激活函数

EfficientNet 使用了 Swish 激活函数代替了传统的 ReLU 激活函数。Swish 激活函数的公式为 f(x) = x * sigmoid(x),它可以更好地平衡计算速度和准确率。Swish 激活函数在计算量方面与 ReLU 相当,但在准确率方面更好。
总之,EfficientNet 的优化方法主要包括使用深度可分离卷积、使用多个缩放因子和使用 Swish 激活函数。这些优化方法的目的是减少计算量和参数量,提高计算效率和准确率,并使网络更加适用于现代计算机视觉应用。

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

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

相关文章

Transformer中的Q,K,V

Query,Key,Value的概念取自于信息检索系统,举个简单的搜索的例子来说。当你在某电商平台搜索某件商品(年轻女士冬季穿的红色薄款羽绒服)时,你在搜索引擎上输入的内容便是Query,然后搜索引擎根据…

【历史上的今天】6 月 25 日:笔记本之父诞生;Windows 98 发布;通用产品代码首次商用

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 6 月 25 日,在 1951 年的这一天,世界上第一部彩色电视节目播出。电视经过了许多年的发展,人类的娱乐途径随着互联网的到来变…

SpringBoot 如何使用 Spring Test 进行集成测试

SpringBoot 如何使用 Spring Test 进行集成测试 简介 在开发过程中,单元测试是不可或缺的,它可以帮助我们及时发现代码的问题并进行修复,从而提高代码的质量和可维护性。但是,单元测试只能测试单个方法或类的功能,无…

HTTP | 深度解析HTTPS比HTTP 更安全的原因

目录 1. 不安全的 HTTP 🌳 为什么 HTTP 协议不安全呢? 容易被窃听 容易被篡改 容易被伪造身份 🌳 HTTPS 是如何解决以上安全性问题的呢? 数据加密 完整性摘要 数字证书 2. 加密算法 (1)对称加密…

Springboot宠物医院管理系统的设计与实现-计算机毕设 附源码84724

Springboot宠物医院管理系统的设计与实现 摘 要 现如今生活质量提高,人们追求精神健康,与家中宠物朝夕相处,感情深厚,宠物渐渐成了我们身边的朋友。因而宠物生病了,需要去看病,自古医院救死扶伤&#xff0c…

LabVIEW开发汽车发动机故障模拟器

LabVIEW开发汽车发动机故障模拟器 汽车发动机故障模拟器是一种电子培训系统,旨在指导初学者了解发动机的各种故障。有一些参数称为发动机故障,例如脏油、压缩不良、冷却液损失、润滑不良、散热器堵塞、火花爆震和火花塞磨损。任何系统在存在时都有一些缺…

分布式系统的事务处理:2PC与3PC的演化与挑战

在传统的单体应用中,事务管理相对较为简单,可以通过数据库事务来实现数据的一致性。然而,随着系统的拆分和分布式架构的应用,跨多个服务的事务操作变得更为复杂。这就引出了分布式事务的概念,它是保证分布式系统数据一…

io.netty学习(十二)Netty 工作原理

目录 前言 Netty 模型 代码示例 引入Maven依赖 服务端的管道处理器 服务端主程序 客户端管道处理器 客户端主程序 测试运行 总结 前言 上一篇文章我们对 Reactor 模型进行了详细的讲解,下面我们就来探究一下 Netty 模型,Netty 采用的就是 主从…

一章:UltraiSO制作启动u盘+制作winPE镜像+硬盘安装系统

简单明了,希望对于伙伴们有帮助!!! 目录 一、使用ultraiso制作启动u盘 二、老毛桃制作winPE镜像 三、硬盘安装系统 等待完成即可 一、使用ultraiso制作启动u盘 第一步 双击打开ultraiso,点击文件->打开->选…

Navicat for Redis 功能介绍

Navicat Premium 版本 16.2在原本已很优秀的产品上新增了多个令人兴奋的新功能,其中最值得注意的是对 Redis 的支持。现在,Navicat 有一个特别针对 Redis 管理和开发的客户端——Navicat for Redis。它为用户提供了一个易于访问的界面,以可视…

花了3周理解的xgboost算法原理

文章目录 算法流程CART树最佳节点值最佳树结构 算法流程 先学决策树,再学随机森林,最后才来到xgboost。本以为如此平滑地过渡过来,会容易一些,没想到还是这么艰难。零零散散花了3周多的时间,看了好多文章的解释和阐述…

大数据从0到1的完美落地之Flume案例2

案例演示 实时采集(监听目录):Spool File HDFS Spool 是Source来源于目录,有文件进入目录就摄取,File Channel将它暂存到磁盘,最终目的地是HDFS 即只要某个目录不断有文件,HDFS上也会同步到所有数据。 配置方案 [ro…

机器学习:基于逻辑回归对航空公司乘客满意度的因素分析

机器学习:基于逻辑回归对航空公司乘客满意度的因素分析 作者:i阿极 作者简介:数据分析领域优质创作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点…

前端Vue仿京东加入购物车弹框立即购买弹框shopDialog自定义弹框内容

前端Vue仿京东加入购物车弹框立即购买弹框shopDialog自定义弹框内容, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id13183 效果图如下: # cc-shopDialog #### 使用方法 使用注意: 该插件需引用…

【软件基础】面向对象编程知识总结

文章目录 前言一、面向对象要解决的问题1、 软件重用性差2、软件可维护性差3、不能满足用户需求 二、面向对象的基本概念三、面向对象的特征四、面向对象的要素五、面向对象的开发方法六、面向对象的模型1、对象模型2、动态模型3、功能模型 总结1、鸭子抽象类2、鸭子类3、鸭子动…

【Tableau案例】神奇宝贝属性及实力强弱|数据可视化

提前声明:神奇宝贝的数据分析仅供参考,不涉及对于神奇宝贝的各种评价,另外我是初学tableau,涉及到使用的tableau操作可能很简单,复杂的还掌握不熟练,之后会拿时间系统学习tabelau。 数据预处理 该数据集有…

电容笔和触控笔哪个好用?推荐平价好用的电容笔

实际上,电容笔和触控笔这两款笔最大的区别,就在于它的应用范围,一个是适用电容型屏幕,一个是适用电阻型屏幕。如果你想要一个与IPAD相匹配的电容笔,苹果的Pencil将会是一个很好的选择。实际上,平替的电容笔…

Java-API简析_java.lang.Throwable类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131367906 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

成都爱尔林江院长解析看懂验光单,掌握配镜“秘密”

想要更了解自己的“数据”, 想知道自己近视有没有增长, 该如何知道自己的度数呢? 到医院进行验光, 验光后得到的验光单,自己有仔细看过吗? 一串字母与数字,知道都代表着什么吗?…

警惕度量指标陷阱

本文首发于个人网站「BY林子」,转载请参考版权声明。 近日,某群有人发了领导制定的绩效考核指标: 对测试人员的工作成效进行考核,指标是发现的 Bug 的情况,甚至有参考指标细到每个小时要求发现多少 Bug,同时…