写在前面
这篇文章配合原文食用效果更佳。作者资历尚浅,仍在学习中,欢迎讨论指正。
论文传送门:Rethinking Channel Dimension for Efficient Model Design
主要思路
通过研究channel数量的变化对网络的表达能力的影响,找到一种最优的配置channel数的方法,使轻量化网络(定义为限制网络的parameters 和 Flops)的accuracy提高。
创新
“Channel Dimension Configuration”。NAS的方法大部分是固定channel数,配置网络的其他参数,或仅仅在传统channel配置附近做一些微调,没有系统的研究过怎么样配置每一层channel的数量是最优的。因此NAS方法也有一定局限性。
实验过程
前述知识:
矩阵的秩:一个矩阵的最大线性无关行数称为行秩,最大线性无关列数称为列秩,秩是行秩和列秩中的较小值。
inverted bottleneck:
residual block和 inverted residual block 最大的区别在于,residual block是将特征图的通道数通过1x1卷积进行压缩,再进行处理。inverted residual block是将特征图的通道数变多再进行处理。
上图是inverted residual block的详细结构,其中PW: point-wise conv; DW: depth-wise conv。
上述图源及inverted residual block的详细解释请转:https://www.cnblogs.com/hejunlin1992/p/9395345.html
1. 研究一次channel数的变化和矩阵秩的变化的关系
channel数的变化影响输出特征图矩阵的秩,作者猜想矩阵的秩可以评估每层的表达能力。秩越大,该层的表达能力越强。
Channel Dimension ratio=输入channel数 / 输出channel数 Rank Ratio = 秩 / 输出channel数
Expansion Ratio = 输出channel数 / 输入channel数
由图分析:
- 剧烈的channel数增加对秩没有好处。(如图c中DR=0.2处RR很小)
- 非线性可以帮助增大秩。(固定DR,蓝色组曲线比红色组曲线的RR更高)
- 非线性对卷积更重要。(图a和图b中蓝色组曲线比红色组曲线高的更明显)
得出结论:
- inverted bottleneck的第一层1x1卷积需要expansion ratio小于等于6
- inverted bottleneck中有depth-wise卷积的层需要更大的dimension ratio
- ELU和SiLU这样的复杂非线性函数需要放在1x1卷积或3x3卷积后面(不要放在depth-wise conv后面)
实验证明:
2. 研究整个网络的channel数量配置方案
问题的公式化:
令ci = a * f(i) + b
其中,a和b是待搜索的参数,f(i)是分段线性函数,每层是一个线性函数。
实验结果:
(样本总量为200个;mid10%:50%-60%)
实验结论:最好的channel数量配置方法是随着层数序号的增加呈线性函数。(例如,第1层16channels,第二层32channels,第三层48channels,线性函数y = 16x)(如上图所有top10%的都是线性增加的,acc越低的越不是线性的)
3. 按照所得结论升级现有网络
1)ImageNet上的分类任务
数据集ImageNet(分辨率224x224) + 有数据增强 + SGD + 【minibatch size=512 】+【 lr=0.5 cosine lr schedule】 +【 weight decay=1e-5】
2)单独和EfficientNet进行比较
Accuracy的比较:
可伸缩性的比较:
CPU:Intel Xeon CPU E5-2630(batchsize=1)
GPU:V100 (batchsize=64)
可伸缩性好。基本上所有的ReXNet都比相应大小的EfficientNet效果好。同时随着模型的深度增加,不管是在CPU还是GPU上,ReXNet所需时间都更短。
检测部分实验略。
3)channel数线性增长为最优解的结论不受Flops限制
4)秩的可视化
奇异值:
矩阵A的秩等于它的非零奇异值的个数。