[计算机视觉]-EfficientNet论文思路理解及核心工作分析

1.资源

论文链接:https://arxiv.org/abs/1905.11946
代码链接:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
第三方实现的PyTorch代码:https://github.com/lukemelas/EfficientNet-PyTorch

最近V2也公布了,做完这一期做V2


2.简介

卷积神经网络的性能公认会受到网络规模、输入图像分辨率的影响
即,我们固定一个网络的基本结构baseline,提高网络深度(depth)、网络宽度(width)和输入图像分辨率 (resolution)大小,这都会不同程度的提升网络的性能,那么如何来找到一个平衡点,使得同时改变深度、宽度、分辨率使得网络达到最优性能呢?

这就是这篇文章的核心思想,提出了一种新的模型缩放方法,它使用一个简单而高效的复合系数来从depth, width, resolution 三个维度缩放网络,不会像传统的方法那样任意缩放网络的维度,基于神经结构搜索技术可以获得最优的一组参数(复合系数)、相教于手动去试省时省力。

对于网络结构不是本文的重点,这里不过多描述。

神经网络结构搜索技术(NAS)不在本文的讨论范围内,有需要的读者自行查阅

在这里插入图片描述

Efficientnet和其他网络对比在imagenet上的参数与精度曲线

3.问题引出

对网络的扩展可以通过增加网络层数(depth,比如从 ResNet (He et al.)从resnet18到resnet200 ), 也可以通过增加宽度,比如WideResNet (Zagoruyko & Komodakis, 2016)和Mo-bileNets (Howard et al., 2017) 可以扩大网络的width (#channels), 还有就是更大的输入图像尺寸(resolution)也可以帮助提高精度。

在这里插入图片描述
如上图所示
(a)是基本baseline模型,(b)是增加宽度,即每层的channel数,(c ) 是增加深度,如resnet18->resnet200,(d)是增大输入图像分辨率,如224224->640640,(d)是EfficientNet,它从三个维度均扩大了,但是扩大多少,就是通过作者提出来的复合模型扩张方法结合神经结构搜索技术获得的。
整个核心工作就是提出了一种复合模型扩张方法


4.问题定义

一个神经网络中的一层i,可以被如下定义
Y i = F i ( X i ) Yi=Fi(Xi) Yi=Fi(Xi)
其中$Fi$代表该层进行的操作,$Xi$,$Yi$分别代表输入张量与输出张量

那么整个神经网络我们用 N N N代替,它就可以被表示为,初始输出 X 1 X1 X1经过一系列的操作后得到最红的 N N N输出,如下
N = F k ⊙ … ⊙ F 2 ⊙ F 1 ( X 1 ) = ⨀ j = 1 … k F j ( X 1 ) \mathcal{N}=\mathcal{F}_{k} \odot \ldots \odot \mathcal{F}_{2} \odot \mathcal{F}_{1}\left(X_{1}\right)=\bigodot_{j=1 \ldots k} \mathcal{F}_{j}\left(X_{1}\right) N=FkF2F1(X1)=j=1kFj(X1)

但是在实际中,通常会将多个结构相同的卷积层称为一个 stage,例如 ResNet 有5 个 stage,每个 stage 中的卷积层结构相同(除了第一层为降采样层),以 stage 为单位可以将卷积网络 N 表示为:
N = ⨀ i = 1 … s F i L i ( X ⟨ H i , W i , C i ⟩ ) \mathcal{N}=\bigodot_{i=1 \ldots s} \mathcal{F}_{i}^{L_{i}}\left(X_{\left\langle H_{i}, W_{i}, C_{i}\right\rangle}\right) N=i=1sFiLi(XHi,Wi,Ci)

在这里 F i L i \mathcal{F}_{i}^{L_{i}} FiLi代表在i这个stage中, F i Fi Fi这种类型的操作被执行了 L i Li Li次,而 < H i , W i , C i > <H_{i}, W_{i}, C_{i}> <Hi,Wi,Ci>,则代表输入网络层的张量 X X X的shape(长、宽、通道数)。

在不改变网络的架构情况下(操作 F i Fi Fi),尝试不同的网络深度、网络宽度、输入图像分辨率的组合,使得性能最佳。即

我们的目标是在有限的计算资源下,最大化 Accuracy,即
max ⁡ d , w , r Accuracy ⁡ ( N ( d , w , r ) ) \max _{d, w, r} \quad \operatorname{Accuracy}(\mathcal{N}(d, w, r)) d,w,rmaxAccuracy(N(d,w,r))
 s.t.  N ( d , w , r ) = ⨀ i = 1 … s F ^ i d ⋅ L ^ i ( X ⟨ r ⋅ H ^ i , r ⋅ W ^ i , w ⋅ C ^ i ⟩ ) \text { s.t. } \quad \mathcal{N}(d, w, r)=\bigodot_{i=1 \ldots s} \hat{\mathcal{F}}_{i}^{d \cdot \hat{L}_{i}}\left(X_{\left\langle r \cdot \hat{H}_{i}, r \cdot \hat{W}_{i}, w \cdot \hat{C}_{i}\right\rangle}\right)  s.t. N(d,w,r)=i=1sF^idL^i(XrH^i,rW^i,wC^i)
M e m o r y ( N ) < = t a r g e t M e m o r y Memory(N) <= target Memory Memory(N)<=targetMemory
F L O P S ( N ) < = t a r g e t F l o p s FLOPS(N) <= target Flops FLOPS(N)<=targetFlops

上式中, w w w d d d r r r分别代表缩放网络宽度、网络深度、输入分辨率。
F ^ i , L ^ i , H ^ i , W ^ i , C ^ i \hat{\mathcal{F}}_{i}, \hat{L}_{i}, \hat{H}_{i}, \hat{W}_{i}, \hat{C}_{i} F^i,L^i,H^i,W^i,C^i,则分别代表baseline,即我们选定的基础网络的原本的预设的参数。


5.实验验证

在这里插入图片描述
更大的网络具有更大的宽度、深度或分辨率,往往可以获得更高的精度,但精度增益在达到80%后会迅速饱和,这表明了只对单一维度进行扩张的局限性(即固定两个,扩大一个,比如固定网络宽度、深度,扩大分辨率)。

所以说,模型扩张的各个维度之间并不是完全独立的,比如说,对于更大的分辨率图像,应该使用更深、更宽的网络,这就意味着需要平衡各个扩张维度,而不是在单一维度张扩张。

如下图所示,直线上的每个点表示具有不同宽度系数(w)的模型。第一个基线网络(d=1.0,r=1.0)有18个卷积层,分辨率224x224,而最后一个基线(d=2.0,r=1.3)有36个卷积层,分辨率299x299。这个图说明了一个问题,为了追求更好的精度和效率,在ConvNet缩放过程中平衡网络宽度、深度和分辨率的所有维度是至关重要的。
在这里插入图片描述
于是有了论文提出的复合扩张方法。


6.复合扩张方法

所以本文提出了复合扩张方法,这也是文章核心的地方, α , β , γ α,β,γ α,β,γ是我们需要求解的一组参数,如下图公式,带约束的最优参数求解。 α , β , γ α,β,γ α,β,γ分别衡量着depth, width和 resolution的比重,其中 β , γ β,γ β,γ 在约束上会有平方,是因为如果增加宽度或分辨率两倍,其计算量是增加四倍,但是增加深度两倍,其计算量只会增加两倍.使用复合系数 ϕ \phi ϕ来统一的修正 α , β , γ α,β,γ α,β,γ.

 depth:  d = α ϕ  width:  w = β ϕ  resolution:  r = γ ϕ  s.t.  α ⋅ β 2 ⋅ γ 2 ≈ 2 α ≥ 1 , β ≥ 1 , γ ≥ 1 \begin{aligned}\text { depth: } & d=\alpha^{\phi} \\\text { width: } & w=\beta^{\phi} \\\text { resolution: } r &=\gamma^{\phi} \\\text { s.t. } & \alpha \cdot \beta^{2} \cdot \gamma^{2} \approx 2 \\\quad & \alpha \geq 1, \beta \geq 1, \gamma \geq 1\end{aligned}  depth:  width:  resolution: r s.t. d=αϕw=βϕ=γϕαβ2γ22α1,β1,γ1

求解方式:

  1. 固定公式中的φ=1,然后通过网格搜索(grid search)得出最优的α、β、γ,得出最基本的模型EfficientNet-B0.

  2. 固定α、β、γ的值,使用不同的φ,得到EfficientNet-B1, …, EfficientNet-B7(B0-B7就是系数变了,从而改变模型大小)

φ的大小对应着消耗资源的大小,相当于:

  1. 当φ=1时,得出了一个最小的最优基础模型;

  2. 增大φ时,相当于对基模型三个维度同时扩展,模型变大,性能也会提升,资源消耗也变大。

对于神经网络搜索,作者使用了和 MnasNet: Platform-awareneural architecture search for mobile 一样的搜索空间和优化目标。

也就是说α、β、γ,是搜索出来的。最优值,α = 1.2、β = 1.1、γ = 1.15.


7.实验结果

B0-B7分别与其他方法在imagenet数据集上的对比,flops更小,精度更高
在这里插入图片描述

将该思路迁移至其他模型,可以看到有明显涨点
在这里插入图片描述
基于同一个baselin网络,使用不同的缩放手段,可以看到确实是符合缩放方法关注到了图中更多更细致的特征
在这里插入图片描述
其他实验结果见论文。

### 关于目标检测算法的课程设计资料与教程 #### 一、理论基础 目标检测算法作为计算机视觉核心技术之一,主要任务是从图像或视频中识别并定位一个或多个特定的对象实例。除了提供对象位置(通常以边界框形式表示)外,还需标注其类别(如人、车、动物等)。近年来,在深度学习尤其是卷积神经网络的支持下,该领域获得了巨大进展[^1]。 #### 二、推荐的学习路径 对于希望深入了解此领域的学生来说,可以从以下几个方面入手: - **基础知识准备** 掌握Python编程语言以及NumPy, Pandas等常用库;了解机器学习基本概念及其工作原理;熟悉TensorFlow/PyTorch框架。 - **经典模型理解** 学习R-CNN系列(SPP-net,Fast R-CNN,Faster R-CNN),YOLOv1-v8,YOLOX,SSD,EfficientDet等流行架构的设计思路和技术特点。 - **实践操作训练** 利用Kaggle竞赛平台参与真实世界中的挑战赛;尝试使用公开数据集(COCO,VOC,Pascal VOC)进行实验练习。 #### 三、在线资源链接 为了帮助初学者更好地理解和掌握这一主题,这里列举了一些优质的免费教学材料供参考: - Coursera上由吴恩达教授开设的《Convolutional Neural Networks》专项课程涵盖了大量有关物体侦测的内容; - GitHub仓库Awesome Object Detection收集整理了大量的论文、工具包和其他实用信息; - PyImageSearch网站提供了丰富的实战案例分析文章和配套源码下载服务。 ```python import torch from torchvision.models.detection import fasterrcnn_resnet50_fpn model = fasterrcnn_resnet50_fpn(pretrained=True) model.eval() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值