【深度学习】EfficientNet系列网络结构

pytorch实现的EfficientNet

https://github.com/lukemelas/EfficientNet-PyTorch

安装:

git clone https://github.com/lukemelas/EfficientNet-PyTorch
cd EfficientNet-Pytorch
sudo pip3 install -e .

MobileNetV2和Inverted residual block

深度可分离卷积

深度可分离卷积通过将乘法运算变为加法运算,使得在能够保证卷积精度的情况下,极大的降低运算成本。
深度可分离卷积的计算原理在【深度学习】用caffe+ShuffleNet-V2做回归中进行了说明。

标准的卷积层将一个 h i × w i × d i h_i ×w_i ×d_i hi×wi×di的tensor,通过size为 k × k k ×k k×k的卷积核,输出一个 h i × w i × d j h_i × w_i × d_j hi×wi×dj的tensor,需要的计算成本为: k × k × d i × h i × w i × d j k×k×d_i×h_i ×w_i × d_j k×k×di×hi×wi×dj,而同样size的输入输出,深度可分离卷积的计算成本为: k × k × 1 × h i × w i × d i + 1 × 1 × d i × h i × w i × d j = h i × w i × d i × ( k 2 + d j ) k×k×1×h_i×w_i×d_i +1×1×d_i×h_i×w_i×d_j=h_i×w_i×d_i×(k^2+d_j) k×k×1×hi×wi×di+1×1×di×hi×wi×dj=hi×wi×di×(k2+dj)

Inverted residual block

在这里插入图片描述 Inverted residual block的结构如上图所示,当深度可分离卷积中的深度卷积部分(图中Dwise)步长不为1的时候,不加shortcut connection。另外,当expansion ratio为1的时候,去掉最接近input的那个 1 ∗ 1 1*1 11的卷积层。
在这里插入图片描述Inverted:倒置的,这个block叫倒置残差的原因,是残差网络的结构是通过 1 ∗ 1 1*1 11的卷积将tensor的channel降低,通过 3 ∗ 3 3*3 33的卷积后,再通过 1 ∗ 1 1*1 11的卷积将tensor的channel提高,而Inverted residual block的通过 1 ∗ 1 1*1 11的卷积将tensor的channel提高(expansion ratio,也就是上表中的t,大于1),通过 3 ∗ 3 3*3 33的卷积后,再通过 1 ∗ 1 1*1 11的卷积将tensor的channel降低。

ReLU6激活函数

ReLU6就是普通的ReLU但是限制最大输出值为6(对输出值做clip),这是为了在移动端设备float16的低精度的时候,也能有很好的数值分辨率,如果对ReLU的激活范围不加限制,输出范围为0到正无穷,如果激活值非常大,分布在一个很大的范围内,则低精度的float16无法很好地精确描述如此大范围的数值,带来精度损失。

MobileNetV2网络结构

在这里插入图片描述MobileNetV2的网络结构,t是Inverted residual block的expansion ratio,c是输出tensor的channel,n是block重复的次数,s是卷积步长。注意MobileNetV2对输入tensor进行了32倍下采样,是全卷积网络。

EfficientNet-B0的baseline网络结构

在这里插入图片描述EfficientNet-B0的baseline网络结构如图所示,Resolution是输入tensor的size,#Channels是输出tensor的channel,#Layers是block重复的次数。MBConv的网络结构和MobileNetV2的Inverted residual block相同,例如:MBConv6,k3×3代表,t为6,深度卷积的卷积核尺寸为3×3。

不同之处在于,EfficientNet-B0将ReLU6激活函数换成了Swish激活函数。另外,可以选择使用squeeze-and-excitation优化。

Swish激活函数

Swish激活函数公式为: f ( x ) = x ∗ s i g m o i d ( β x ) f(x)=x*sigmoid({\beta}x) f(x)=xsigmoid(βx)
在这里插入图片描述 β \beta β默认为 1.0 1.0 1.0

EfficientNet的网络scale up策略

在这里插入图片描述卷积神经网络有三个scale up网络规模的维度:

  • w i d t h — — w width——w widthw:如上图 ( b ) (b) (b)通过增加baseline的channel向维度,对网络规模scale up。 w i d e r wider wider的网络能够捕获更加细粒度的特征,而且训练更容易
  • d e p t h — — d depth——d depthd:如上图 ( c ) (c) (c)通过增加baseline的深度,也就是增加卷积层的数量,对网络规模scale up。 d e e p e r deeper deeper的网络能够捕获更丰富、更复杂的特征,但是由于梯度弥散、梯度爆炸等问题,训练难度较大
  • r e s o l u t i o n — — r resolution——r resolutionr:如上图 ( d ) (d) (d)通过增加baseline输入image的分辨率,对网络规模scale up。 h i g h e r higher higher r e s o l u t i o n resolution resolution的网络能够捕获更加细粒度的特征

EfficientNet的网络scale up策略是:因为如果图像的分辨率更大,就需要更深的网络来提高感受野,需要更多的channel数来捕获更加细粒度的特征,因此:通过一个固定的比例对 w i d t h 、 d e p t h width、depth widthdepth r e s o l u t i o n resolution resolution同时进行scale up,实现一个卷积神经网络中三者的平衡。也就是如上图 ( e ) (e) (e)

scale up策略

一个卷积层可以看作一个函数:
Y i = F i ( X i ) Y_i=F_i(X_i) Yi=Fi(Xi) F i F_i Fi是卷积操作, Y i Y_i Yi是输出tensor, X i X_i Xi是输入tensor, X i X_i Xi的shape为 < H i , W i , C i > <H_i, W_i, C_i> <Hi,Wi,Ci>

因此一个卷积神经网络 N N N可以看作一个函数:
在这里插入图片描述
因为卷积神经网络可以视为几个stage的组合,每个stage重复不同的次数,而每个相同的stage的重复block都有相同的结构,所以卷积神经网络的函数可以定义如下:
在这里插入图片描述
i i i是stage的索引, F i L i {F_i}^{L_i} FiLi的含义是block F i F_i Fi重复 L i L_i Li次, < H i , W i , C i > <H_i, W_i, C_i> <Hi,Wi,Ci> H i H_i Hi W i W_i Wi表示索引为 i i i的stage的输入tensor的height和width方向的size, C i C_i Ci表示输出tensor的channel数。

上述中卷积神经网络的三个scale up网络规模的维度, w i d t h width width对应于增大 C i C_i Ci d e p t h depth depth对应于增大 L i L_i Li r e s o l u t i o n resolution resolution对应于增大 < H i , W i > <H_i, W_i> <Hi,Wi>

这里规定一个卷积神经网络,所有的block都按相同的比例对三个维度进行scale up,因此,scale up的优化目标可以定义为:
在这里插入图片描述
也就是在baseline的基础上,给定 d , w , r d,w,r d,w,r对卷积神经网络进行scale up,让scale up后的卷积神经网络的性能最优

w i d t h 、 d e p t h 、 r e s o l u t i o n width、depth、resolution widthdepthresolution三个维度的scale up系数的确定方法:

  1. d e p t h : d = α ϕ depth:d={\alpha}^{\phi} depth:d=αϕ
  2. w i d t h : w = β ϕ width:w={\beta}^{\phi} width:w=βϕ
  3. r e s o l u t i o n : r = γ ϕ resolution:r={\gamma}^{\phi} resolution:r=γϕ

约束条件:

  • α ∗ β 2 ∗ γ 2 约 等 于 2 {\alpha}*{\beta}^2*{\gamma}^2约等于2 αβ2γ22
  • α 、 β 、 γ 都 不 小 于 1 \alpha、\beta、\gamma都不小于1 αβγ1

其中, α 、 β 、 γ \alpha、\beta、\gamma αβγ是通过grid search得到的常数, ϕ \phi ϕ是根据计算资源的大小设置的常数。

对于EfficientNet-B0的baseline网络,固定 ϕ \phi ϕ为1,通过grid search得到 α = 1.2 \alpha=1.2 α=1.2 β = 1.1 \beta=1.1 β=1.1 γ = 1.15 \gamma=1.15 γ=1.15,时,scale up的卷积神经网络性能最优,得到EfficientNet-B0。

固定 α = 1.2 \alpha=1.2 α=1.2 β = 1.1 \beta=1.1 β=1.1 γ = 1.15 \gamma=1.15 γ=1.15,通过设置不同的 ϕ \phi ϕ值,对EfficientNet-B0的baseline网络进行scale up,进而得到EfficientNet-B1到EfficientNet-B7。

如果直接在规模更大的baseline上进行grid search得到 α \alpha α β \beta β γ \gamma γ,会得到性能更优的卷积神经网络,但是grid search需要的计算成本更大,因此,这里在小的baseline上进行grid search,然后通过修改 ϕ \phi ϕ的值,对网络进行scale up得到规模更大的卷积神经网络

结语

如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
手打很辛苦,如果我的文章对您有帮助,转载请注明出处。

  • 9
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: YOLOX-EfficientNet 是一种基于 EfficientNet 的目标检测算法,其结构构成与 YOLOv5 相似,包括骨干网络、FPN、头网络等模块。具体来说,YOLOX-EfficientNet 使用了 EfficientNet 作为骨干网络,并在其基础上添加了一些轻量化的模块,如SPP模块、CSP Bottleneck 模块等,以提高网络的感受野和特征表达能力。在FPN模块中,YOLOX-EfficientNet 采用了PANet模块来实现跨尺度特征融合,同时还采用了多尺度训练策略和数据增强技术来提高模型的鲁棒性和泛化能力。在头网络中,YOLOX-EfficientNet 采用了YOLOv5的思路,使用了多层的卷积和池化操作来生成检测结果。整个网络结构轻量化、高效,并且具有很好的检测精度和速度。 ### 回答2: YOLOX-EfficientNet是一个目标检测模型,结合了YOLOX和EfficientNet的优点。它的结构主要由两个部分组成:基础特征提取网络和目标检测头部。 首先,基础特征提取网络采用了EfficientNet作为其骨干网络。EfficientNet是一种轻量级的卷积神经网络结构,具有高效的计算性能和较好的图像特征表示能力。它通过使用复合系数来调整特征提取网络的深度、宽度和分辨率,以平衡模型的性能和计算资源的消耗。在YOLOX-EfficientNet中,基础特征提取网络负责从输入图像中提取高维度的特征表示,以便于后续的目标检测任务。 其次,目标检测头部是YOLOX-EfficientNet的关键部分。目标检测头部包括一系列的卷积层、全局池化层和全连接层等,用于从基础特征中提取目标检测相关的信息。具体来说,目标检测头部通过多个卷积层来对基础特征进行特征融合和降维处理,以减少计算量和参数数量。全局池化层用于将特征图转化为固定大小的向量表示,以便于后续的目标分类和定位任务。最后的全连接层用于生成目标检测的预测结果,包括目标的类别、位置和置信度等信息。 通过结合YOLOX和EfficientNet的优点,YOLOX-EfficientNet在目标检测任务上取得了较好的性能和速度平衡。它不仅具有高效的计算性能和较小的网络模型大小,还能够准确地检测和分类图像中的多个目标。这使得YOLOX-EfficientNet在实际应用中具有很高的实用性和应用价值。 ### 回答3: YOLOX-EfficientNet是一种结合了YOLOX目标检测算法和EfficientNet模型的深度学习网络结构。 YOLOX是一种基于YOLO系列算法的高性能目标检测算法,它采用骨干网络+检测头的结构,在不损失精度的情况下大幅度提升了检测速度。YOLOX具有鲁棒性强、准确率高、检测速度快的特点。 而EfficientNet是一种高效的卷积神经网络结构,它通过组合多个模块来构建网络,能够在保持一定准确率的情况下大幅度减少网络的计算量。EfficientNet具有计算效率高、参数量小、模型轻量化的特点。 YOLOX-EfficientNet结合了YOLOX和EfficientNet的优点,它的整体结构分为两部分:YOLOX骨干网络和EfficientNet检测头。 YOLOX骨干网络采用EfficientNet的方式构建,通过组合多个卷积模块来构建深度网络。这些卷积模块包括卷积层、池化层、批标准化层等,它们能够提取出图像的高层语义特征,实现对目标的整体理解。 EfficientNet检测头则是用于目标检测的头部网络结构,它包括多个卷积层和全连接层,用于对骨干网络提取的特征图进行目标的检测和定位。 总而言之,YOLOX-EfficientNet结构构成了一种高效、准确的目标检测模型,它通过对YOLOX算法和EfficientNet模型的有机结合,实现了在保持准确率的同时大幅度提升了目标检测的速度和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值