EfficientNet网络

本文探讨了在网络设计中,分辨率、深度和宽度的关系,并介绍了EfficientNet如何通过NAS技术平衡这些因素。MBConv结构和EfficientNet-B0至B7的具体结构分析展示了如何通过调整系数来优化网络性能。
摘要由CSDN通过智能技术生成


原文链接:https://blog.csdn.net/weixin_45377629/article/details/124430796

总而言之就是调整分辨率、深度和宽度的综合关系来提高网络水平。

1 从三个问题出发


对于一个网络,输入图像分辨越高越好?
设计网络时,越深越好?
设计网络时,越宽越好?
回答: 总体而言,是的。

图像分辨率越高,网络能得到 潜在的 更高细粒度的特征channel。但有瓶颈,且会增加计算量,分辨率太高,得不偿失。
网络越深,学习到的特征越丰富、复杂。但太深容易造成梯度消失,导致训练困难。
网络越宽,网络能得到更高粒度的特征,且容易训练。但光宽不深的话,学习不到深层次的特征,且要综合衡量计算量的问题。
EfficientNet闪亮登场。
EfficientNet利用NAS(Neural Architecture Search)搜索技术,将输入分辨率,网络的深度、宽度三者同时考虑,搭建更nice的网络结构。

2 MBConv结构解析


网络中在堆叠MBConv结构(类似于Mobilenetv3中的block),那MBConv结构长什么样?

如下图所示(文中图片感谢太阳花的小绿豆 ):

MBConv结构主要包括:
一个 1x1 的普通卷积(升维作用,包含BN和Swish激活)
一个 kxk 的Depthwise Conv卷积(包含BN和Swish激活),kxk 有3x3和5x5两种情况
一个SE模块
一个 1x1 的普通卷积(降维作用,包含BN和线性激活,线性激活y=x)
一个Droupout层
搭建过程中还需要注意几点:

第一个1x1卷积层,是用来升维的,过滤器个数是输入特征矩阵channel的n倍,n ∈ { 1 , 6 } 。
当n = 1时,不要第一个升维的1x1卷积层,这和MobileNetV3网络类似。
关于shortcut短连接,仅当输入MBConv结构的特征矩阵与输出的特征矩阵shape相同(尺寸、个数)时才存在(代码中可通过stride==1 and inputc_channels==output_channels条件来判断)。
SE模块,由一个全局平均池化,两个全连接层组成。下方给出MobileNetv3中的SE模块 示意图,在此要注意区分两点:
第一个全连接层的节点个数是输入该MBConv特征矩阵channels的 1 4 \frac{1}{4} 
4
1

  ,且使用Swish激活函数。
第二个全连接层的节点个数等于Depthwise Conv层输出的特征矩阵channels,且使用Sigmoid激活函数。

Dropout层 的dropout_rate对应的是drop_connect_rate,和全连接层对应的dropout要区分开(注意,在源码实现中只有使用shortcut且drop_rate大于0 的时候才有Dropout层,至于为什么可以参考第四节的解释)。


3 网络详细结构


EfficientNet作者给了8个网络,下文以以EfficientNet-B0为例进行介绍,因为EfficientNet-B1~B7是在EfficientNet-B0的基础上,利用NAS搜索技术,对输入分辨率Resolution、网络深度Layers、网络宽度Channels三者进行综合调整。

EfficientNet-B0的网络框架,总体看,分成了9个Stage:

Stage1 是一个卷积核大小为3x3,步距为2的普通卷积层(包含BN和激活函数Swish)
Stage2~Stage8 是在重复堆叠 MBConv 结构
Stage9 是一个普通的1x1的卷积层(包含BN和激活函数Swish) + 一个平均池化层 + 一个全连接层组成

表格中每个参数解析:

表格中每个MBConv后会跟一个数字1或6,这里的1或6是倍率因子n (channels变胖倍数),即MBConv中第一个1x1的卷积层会将输入特征矩阵的channels扩充为n倍。
表格中k3x3或k5x5 表示MBConv中Depthwise Conv所采用的卷积核大小。
Resolution表示该Stage的输入channel尺寸。
Channels表示通过该Stage后输出特征矩阵的Channels。
Layers表示该Stage重复MBConv结构多少次
stride表示步长,重复多次的Layers,只针对第一个有效(stride=2,Resolution长宽 变为原来一半),其余均为1。
4 EfficientNet-B0~B7结构解读
EfficientNet-B0~B7结构区别如下:

表格中每个参数解析:

input_size 代表网络训练时输入图像大小
width_coefficient 代表channel维度上的倍率因子,比如在 EfficientNetB0中Stage1的3x3卷积层所使用的卷积核个数是32,那么在B6中就是32 × 1.8 = 57.6,接着取整到离它最近的8的整数倍即56,其它Stage同理。
depth_coefficient 代表depth维度上的倍率因子(仅针对Stage2到Stage8),比如在EfficientNetB0中Stage7中的MBConv6重复了4次,也就是的Layers=4,那么在B6中就是4 × 2.6 = 10.4 4 × 2.6=10.44×2.6=10.4,接着向上取整即11。
drop_connect_rate 是在MBConv结构中dropout层使用的drop_rate,MBConv结构的drop_rate是从0递增到drop_connect_rate的 (在源码实现中只有使用shortcut且drop_rate大于0的时候才有Dropout层)。
在MBConv中的Dropout层 表示随机丢掉整个block的主分支,只剩shortcut短分支,相当于直接跳过了这个block(可以理解为减少了网络的深度)。
dropout_rate是最后一个全连接层前的dropout层(在stage9的Pooling与FC之间)的dropout_rate。

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值