efficientnet rethinking model scaling for convolutional neural networks(ConvNets)论文阅读

论文地址: https://arxiv.org/pdf/1905.11946.pdf

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

tensorflow:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet

keras: https://github.com/qubvel/efficientnet

 

参考:https://www.jianshu.com/p/2ac06d97a830

这篇ICML2019的论文对目前分类网络的优化提出更加泛化的思想,传统的提升模型精度的方法有加宽网络,加深网络,加大输入分辨率等,比如ResNet-18到ResNet-152就是通过增加网络深度的方法来提高准确率.

作者跳出了前人对放缩模型的理解,从一个高度去审视这些放缩维度.作者认为这三个维度之间是相互影响的并探索出了三者之间最好的组合,在此基础上提出了最新的网络EfficientNet,该网络的表现如下

问题抽象

下面将这个问题用公式的方式表示出来,符号会比较多,不过并不难理解,我们将整个卷积网络称为N,它的第i个卷积层可以看作是下面的函数映射:

Y_i=F_i(X_i)

Y_i为输出张量,X_i为输入张量,设其维度为<H_i,W_i,C_i>,这里为了方便叙述省略了batch维度,那么整个卷积网络N,由k个卷积层组成,可以表示为:

实际中,通常将多个结构相同的卷积层称为一个stage,例如ResNet可以分为5个stage,每个stage中的卷积层结构相同(除了第一层为降采样层),以stage为单位可以将卷积网络N表示为:

其中,下标i(从1到s)表示stage的序号,F_i^{L_i}表示第i个stage,它由卷积层F_i重复L_i次构成,<H_i,W_i,C_i>表示该stage输入tensor的维度.

为了减小搜索空间,作者固定了网络的基本结构,而只变动上面提到的三个放缩维度:网络深度(Li),网络宽度(Ci),输入分辨率大小(Hi,Wi).然而就算只搜索这三个维度,搜索空间也很大,因此作者又加了一个限制,网络的放大只能在初始网络(就是后面的EfficientNet-B0)的基础上乘上常数倍率,那么我们只需要优化那些倍率就好了,以此抽象出最终的数学模型:

其中,w,d,r 分别是网络宽度,网络深度,分辨率的倍率.

EfficientNet采用了一种机制同时使用三者提出了compound model scaling 算法,通过综合优化网络宽度,网络深度图像分辨率达到指标提升的目的,能够达到准确率指标和现有分类网络相似的情况下,大大减少模型参数量和计算量。然后EfficientDet是在目标检测领域中的应用,提出了一个比之前看的自下而上和自上而下的FPN更高效的BiFPN.

model scalings是什么?

先通过图了解下model scaleing的含义,作者将目前分类网络的model scaling 大致分为加宽网络,加深网络和增大分辨率,也就是分别对应下图中的b,c,d,这3个分别从不同的维度来做model scaling,举个例子,对resnet网络做深度方面的model scaling可以得到resnet50,resnet101等不同深度的网络结构,而这篇论文要做的是将这3者结合起来一起优化,也就是e

那么第一个问题就是:单个维度做scaling 存在什么问题吗?针对这个问题,作者做了figure 3这个实验,也就是针对某个分类网络的3个维度(宽度,深度和分辨率)分别做model scaling的结果对比,显然,单独优化这3个维度都能提升模型效果,但上限也比较明显,基本上Acc达到80后提升就很小了。

 既然如此,假如多个维度结合做scaling效果如何?针对这个问题,作者做了figure 4这个实验,相当于手动设置3个维度的model scaling参数,蓝色线表示的是只对宽度做model scaling的实验结果,上面的每个点表示不同宽度的网络,因此不同线条上相同顺序的点表示的网络宽度设置是一样的,可以看到,通过手动设置3个维度的model scaling参数就能有效提升模型的效果(突破80,这就说明多维度融合是有效的)

那么接下来的问题就是,怎么找到最优的3个维度的scaling参数?这就是这篇文章提出的compound model scaling算法要解决的问题.

值得一提的EfficientNet-B0是用MnasNet的方法搜出来的,利用这个作为baseline来联合调整深度,宽度以及分辨率的效果明显要比ResNet或者MobileNetV2要好,因此可见强化学习搜出来的网络架构上限可能更高!可以看看EfficientNet-B0的网络结构,就会发现和我们手工设计的网络有明显的几处区别,如下图:

第一处区别是在最开始降采样没有采用maxpooling,而是换成了stride=2的conv,猜测是为了减少信息丢失,尤其是对小模型来说,前期的底层特征提取更重要,尤其是对小模型来说,前期的低层特征提取更重要.

第二处区别是第一次降采样后的channel反而减少了,这个没搞懂为什么......

第三处区别就是有很多stage都采用了5*5的conv,这是因为对于depthwise separable conv来说,5*5的计算量要比两个3*3的计算量要小,有人说large kernel is all your need.

第四处区别是降采样后的特征图尺寸减半,但是channel没有扩大两倍,第6个stage特征图尺寸没变,但是channel也扩大了,这些可能都是收工设计很难搞定的,可能是因为MnasNet在搜网络结构的时候带上了运算量的约束,可以理解成网络在训练的时候就考虑了pruing(裁枝),因此才会出现一些不规则的channel数,同时这个带来另外的一个好处就是,网络可以更好的训练更有意义的权重,因此这些搜出来的网络结构的上限更高.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值