论文:https://arxiv.org/abs/1905.11946
中心思想
- 提出了一种同时对深度,宽度,尺度(这里指的是输入的分辨率)的网络扩展(scale)方式
- 以往的工作仅限于在width /height/resolution(input resolution)三者之一进行扩展
- 而同时调节这几个变量又费时费力
- 本文发现3个变量只需要同时乘一个系数就能得到比较好的效果,称为compound scale method,复合网络扩展
- 使用了网络结构搜索的方式,得到EfficientNet作为baseline
- 具体的用法举例:假如算力增大倍,depth/width/resolution可增大倍,是通过grid search产生的
- 这种复合扩展背后的原理是:输入更大需要更多layer来提升感受野需要更多的channel捕捉精细特征
网络复合扩展问题描述
- 一般来说,像ResNet MobileNets网络回根据stage来进行划分,每个stage有相同的卷积类型(可能还会包含降采样模块)
- 模型扩展(Model Scaling):指的是固定网络结构(Basic Block的结构,以及Stage的数目),使得网络更容易扩展,只改变每个Layer中的,意味着若想将网络变大,可以只调整
- 为了进一步压缩搜索空间:使用相同的扩展系数来调整
- 因此可以将的搜索问题转换为:找到一个统一的缩放系数,在有限的资源(Memory, FLOPs)下,对原有的网络的depth/width/resolution进行扩展
- depth/width/resolution进行扩展对应的收益:
- 将网络做深,有利于学到更多复杂的信息,使得网络的任务迁移更容易。但容易出现梯度弥散的问题
- 而对于小网络而言,惯用的方式是使用宽度的扩展,将网络做的更宽,一方面更容易学习,另一方面能够学到更多细节特征(因为特征表达空间变大了),但无法学习高层次的语义信息
- 输入分辨率越大,图像包含越多的细节,最终的表现必然会更好
- 但对于这三个维度而言,随着扩展程度的增大(网络变得越来越大),得到的增益将会越来越小
- 增益越来越小的背后原因是,这三个维度往往是联动的:
- 分辨率变大,一方面需要增大感受野,因此需要加深
- 另一方面需要提升特征的粒度(特征表达空间),因此需要加宽
- 基于上述的结论,这里提出了一种复合缩放的方法,使用一个复合扩展系数:
- depth:
- width:
- resolution:
- 约束:,2的含义是:复合系数为,资源增加倍,平方是因为宽度和分辨率这两个系数一旦翻倍,算力要求就翻4倍,是一个平方关系
EfficientNet网络结构:
- 有了扩展方法后,关键是baseline网络的定义
- 本文利用了优化目标,T是目标FLOPs。这里因为没有指定硬件,所以只能用Flops衡量,而不能用Latency
- 利用MobileNet V2中的BLock作为基本模块(并添加了SE Block,以及用),搜索出类似MNas的网络,称为Efficient-B0,具体结构如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LeOONHc0-1590812218030)(evernotecid://D30B22A8-2B96-415B-9535-CB4BD1311155/appyinxiangcom/21566865/ENResource/p359)] - 有了Efficient-B0之后,若扩展系数,通过以下的方式,对网络进行扩展
- 对于上表中每个stage的深度(#Layers),乘以一个系数,然后向上取整
- 对于上表中每个stage的宽度(#channels),乘以一个系数,然后以Padding=8为基准做“四舍五入”:与8的余数大于4,就向上padding为8的倍数,否则向下padding
- Efficient-B1对应,以此类推,分别得到EfficientNetB1-7
EfficientNet实现:
- EfficientNet的具体实现会和网络定义略微有不同,具体实现可以看:https://ai.googleblog.com/2019/05/efficientnet-improving-accuracy-and.html
- 具体来说,代码实现与论文相比,在2个stage中进行了提前的降采样。下图中上部分为论文描述,下部分为代码实现