论文提出应对极低计算量场景的轻量级网络MicroNet,包含两个核心思路Micro-Factorized convolution和Dynamic Shift-Max,Micro-Factorized convolution通过低秩近似将原卷积分解成多个小卷积,保持输入输出的连接性并降低连接数,Dynamic Shift-Max通过动态的组间特征融合增加节点的连接以及提升非线性,弥补网络深度减少带来的性能降低。从实验结果来看,MicroNet的性能十分强劲



来源:晓飞的算法工程笔记 公众号

论文: MicroNet: Towards Image Recognition with Extremely Low FLOPs

Introduction


  论文将研究定义在一个资源十分紧张的场景:在6MFLOPs的限定下进行分辨率为224x224的1000类图片分类。对于MobileNetV3,原版的计算量为112M MAdds,将其降低至12M MAdds时,top-1准确率从71.7%降低到了49.8%。可想而知,6M MAdds的场景是十分苛刻的,需要对网络进行细心的设计。常规的做法可直接通过降低网络的宽度和深度来降低计算量,但这会带来严重的性能下降。

  为此,论文在设计MicroNet时主要遵循两个设计要领:1)通过降低特征节点间的连通性来避免网络宽度的减少。2)通过增强非线性能力来补偿网络深度的减少。MicroNet分别提出了Micro-Factorized Convolution和Dynamic Shift-Max来满足上述两个原则,Micro-Factorized Convolution通过低秩近似减少输入输出的连接数但不改变连通性,而Dynamic Shift-Max则是更强有力的激活方法。从实验结果来看,仅需要6M MAdds就可以达到53.0%准确率,比12M MAdds的MobileNetV3还要高。

Micro-Factorized Convolution


  Micro-Factorized Convolution主要是对MobileNet的深度分离卷积进行更轻量化的改造,对pointwise convolution和depthwise convolution进行低秩近似。

Micro-Factorized Pointwise Convolution

  论文将pointwise convoluton分解成了多个稀疏的卷积,如上图所示,先对输入进行维度压缩,shuffle后进行维度扩展,个人感觉这部分与shufflenet基本一样。这样的操作在保证输入与输出均有关联的情况下,使得输入与输出之间的连接数减少了很多。

  假定卷积核\(W\)的输入输出维度相同,均为\(C\),Micro-Factorized Convolution可公式化为:

  \(W\)为\(C\times C\)矩阵,\(Q\)为\(C\times \frac{C}{R}\)矩阵,用于压缩输入,\(P\)为\(C\times \frac{C}{R}\)矩阵,用于扩展输出,\(Q\)和\(P\)均为包含\(G\)个块的对角矩阵。\(\Phi\)为\(\frac{C}{R}\times \frac{C}{R}\)排列矩阵,功能与shufflenet的shuffle channels操作一样。分解后的计算复杂度为\(\mathcal{O}=\frac{2C^2}{RG}\),上图展示的参数为\(C=18\),\(R=2\),\(G=3\)。\(G\)的大小由维度\(C\)和下降比例\(R\)而定:

  公式2是由维度数\(C\)与每个输出维度对应输入维度的连接数\(E\)之间的关系推导所得,每个输出维度与\(\frac{C}{RG}\)个中间维度连接,每个中间维度与\(\frac{C}{G}\)个输入维度连接,因此\(E=\frac{C^2}{RG^2}\)。假如固定计算复杂度\(\mathcal{O}=\frac{2C^2}{RG}\)和压缩比例R,得到:

  公式3的可视化如图3所示,随着\(G\)和\(C\)的增加,\(E\)在减少。在两者的交点\(G=\sqrt{C/R}\)处,每个输出维度刚好只与每个输入维度连接了一次,其中\(\Phi\)的shuffle作用很大。从数学上来说,矩阵\(W\)可分为\(G\times G\)个秩为1的小矩阵,从小节开头处的分解示意图可看出,矩阵\(W\)中\((i,j)\)小矩阵实际为\(P\)矩阵的\(j\)列与\(Q^T\)的\(j\)行的矩阵相乘结果(去掉空格)。

Micro-Factorized Depthwise Convolution

  论文将\(k\times k\)深度卷积分解为\(k\times 1\)卷积与\(1\times k\)卷积,计算与公式1类似,\(\Phi\)为标量1,如上图所示,可将计算复杂度从\(\mathcal{O}(k^2C)\)降低为\(\mathcal{O}(kC)\)。

Combining Micro-Factorized Pointwise and Depthwise Convolutions

  论文提供了两种Micro-Factorized Pointwise Convolution和Micro-Factorized Depthwise Convolution的组合方法:

  • 常规组合,直接将两种操作进行组合,这种情况下,两种操作的输入输出维度都是\(C\)。
  • lite组合,如上图所示,增加Micro-Factorized Depthwise Convolution的卷积核数,对输入进行维度扩展,然后用Micro-Factorized Pointwise Convolution进行维度压缩。

  相对于常规组合,lite组合的计算更高效,由于减少了Pointwise卷积的计算量,足以弥补depthwise卷积核的增加。

Dynamic Shift-Max


  论文提出Dynamic Shift-Max融合输入特征,综合输出维度对应的各分组的特征(循环偏移)进行非线性输出。由于Micro-Factorized pointwise convolution仅关注分组内的连接,Dynamic Shift-Max可作为其补充。

Definition

  定义\(C\)维输入向量\(x=\{x_i\}(i=1,\cdots, C)\),将输入分为\(G\)组,每组包含\(\frac{C}{G}\)维,\(N\)维向量的循环偏移可表示为\(x_N(i)=x_{(i+N)} mod\ C\),将维度循环偏移扩展到分组循环偏移:

  \(x_{\frac{C}{G}}(i,j)\)对应第\(i\)维输入\(x_i\)关于\(j\)分组的偏移, Dynamic Shift-Max将多个(\(J\))分组偏移进行结合:

  \(a^k_{i,j}(x)\)为输入相关的参数,可由平均池化接两个全连接层简单实现。对于输出\(y_i\),将对应每个分组的偏移维度进行\(K\)次融合,每次融合都有专属的\(a^k_{i,j}(x)\)参数,最后取融合结果的最大值。

Non-linearity

  Dynamic Shift-Max提供了两方面的非线性:

  • 输出\(K\)个的融合\(J\)个分组维度的结果中的最大值,类似于考虑多种目标特征
  • 参数\(a^k_{i,j}(x)\)是输入相关的函数,这是动态的

  上述两个特性使得Dynamic Shift-Max表达能力更强,能够弥补网络深度减少带来的损失。最近提出的dynamic ReLU可认为是Dynamic Shift-Max的\(J=1\)特例,仅考虑每个维度自身。

Connectivity

  Dynamic Shift-Max能够提升组间的维度交流,弥补MicroFactorized pointwise convolution只专注于组内连接的不足。图4为简单的静态分组偏移\(y_i=a_{i,0}x_{\frac{C}{G}}(i,0)+a_{i,1}x_{\frac{C}{G}}(i,1)\),\(K=1\),\(J=2\)以及固定的\(a^k_{i,j}\),注意排列矩阵\(\Phi\)与前面的不太一样。可以看到,尽管这样的设计很简单,但依然能够有效地提升输入输出的关联性(矩阵\(W\)的秩也从1升为2)。

Computational Complexity

  Dynamic Shift-Max包含\(CJK\)个参数\(a^k_{i,j}\),计算复杂度包含3部分:

  • 平均池化(后面的两个全连接输出输出为1,可忽略):\(\mathcal{O}(HWC)\)
  • 生成公式5的参数\(a^k_{i,j}(x)\):\(\mathcal{O}(C^2JK)\)
  • 对每个维度和特征图位置进行Dynamic Shift-Max: \(\mathcal{O}(HWCJK)\)

  当\(J\)和\(K\)很小时,整体的计算量会很轻量,论文设置为\(J=2\)以及\(K=2\)。

MicroNet Architecture


  论文设计了3种不同的Mircro-Block,里面均包含了Dynamic Shift-Max作为激活函数:

  • Micro-Block-A:使用lite组合,对分辨率较高的低维特征特别有效。
  • Micro-Block-B:在Micro-Block-A基础上加了一个 MicroFactorized pointwise convolution进行维度扩展,每个MicroNet仅包含一个Micro-Block-B。
  • Micro-Block-C:与Micro-Block-B类似,将lite组合替换为常规组合,能够集中更多的计算在维度融合,如果输入输出维度一样,则增加旁路连接。

  MicroNet的结构如表1所示,需要注意的是两种卷积的分组数\(G_1\)和\(G_2\),论文将公式2的约束改为\(G_1G_2=C/R\)。

Experiments: ImageNet Classification


  ImageNet上的结果。

  从MobileNet到MicroNet的修改对比,每个修改的提升都很大,论文还有很多关于各模块的超参数对比实验,由兴趣的可以去看看。

Conclusion


  论文提出应对极低计算量场景的轻量级网络MicroNet,包含两个核心思路Micro-Factorized convolution和Dynamic Shift-Max,Micro-Factorized convolution通过低秩近似将原卷积分解成多个小卷积,保持输入输出的连接性并降低连接数,Dynamic Shift-Max通过动态的组间特征融合增加节点的连接以及提升非线性,弥补网络深度减少带来的性能降低。从实验结果来看,MicroNet的性能十分强劲。





如果本文对你有帮助,麻烦点个赞或在看呗~

更多内容请关注 微信公众号【晓飞的算法工程笔记】

MicroNet: 低秩近似分解卷积以及超强激活函数,碾压MobileNet | 2020新文分析的更多相关文章

  1. 吴恩达机器学习笔记59-向量化:低秩矩阵分解与均值归一化(Vectorization: Low Rank Matrix Factorization & Mean Normalization)

    一.向量化:低秩矩阵分解 之前我们介绍了协同过滤算法,本节介绍该算法的向量化实现,以及说说有关该算法可以做的其他事情. 举例:1.当给出一件产品时,你能否找到与之相关的其它产品.2.一位用户最近看上一 ...

  2. HAWQ + MADlib 玩转数据挖掘之(四)——低秩矩阵分解实现推荐算法

    一.潜在因子(Latent Factor)推荐算法 本算法整理自知乎上的回答@nick lee.应用领域:"网易云音乐歌单个性化推荐"."豆瓣电台音乐推荐"等. ...

  3. 推荐系统(recommender systems):预测电影评分--构造推荐系统的一种方法:低秩矩阵分解(low rank matrix factorization)

    如上图中的predicted ratings矩阵可以分解成X与ΘT的乘积,这个叫做低秩矩阵分解. 我们先学习出product的特征参数向量,在实际应用中这些学习出来的参数向量可能比较难以理解,也很难可 ...

  4. 低秩近似 low-rank approximation

  5. 【RS】Local Low-Rank Matrix Approximation - LLORMA :局部低秩矩阵近似

    [论文标题]Local Low-Rank Matrix Approximation (icml_2013 ) [论文作者]Joonseok Lee,Seungyeon Kim,Guy Lebanon  ...

  6. 低秩稀疏矩阵恢复|ADM(IALM)算法

    一曲新词酒一杯,去年天气旧亭台.夕阳西下几时回? 无可奈何花落去,似曾相识燕归来.小园香径独徘徊. ---<浣溪沙·一曲新词酒一杯>--晏殊 更多精彩内容请关注微信公众号 "优化 ...

  7. DyLoRA:使用动态无搜索低秩适应的预训练模型的参数有效微调

    又一个针对LoRA的改进方法: DyLoRA: Parameter-Efficient Tuning of Pretrained Models using Dynamic Search-Free Lo ...

  8. 学习笔记TF014:卷积层、激活函数、池化层、归一化层、高级层

    CNN神经网络架构至少包含一个卷积层 (tf.nn.conv2d).单层CNN检测边缘.图像识别分类,使用不同层类型支持卷积层,减少过拟合,加速训练过程,降低内存占用率. TensorFlow加速所有 ...

  9. 【python实现卷积神经网络】激活函数的实现(sigmoid、softmax、tanh、relu、leakyrelu、elu、selu、softplus)

    代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...

  10. 纵览轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception

    近年提出的四个轻量化模型进行学习和对比,四个模型分别是:SqueezeNet.MobileNet.ShuffleNet.Xception. SqueezeNet https://arxiv.org/p ...

随机推荐

  1. Ehcache 3.x 笔记

    现在Ehcache版本已经到3.10了, 网上查到的大部分还是2.x版本的使用说明, 把基础用法记了一下, 以后有时间再翻译. 基础使用, 创建 CacheManager CacheManager c ...

  2. ORA-22828 输入样式或替换参数超过了32k大小限制

    今天调试程序报以下错误: ORA-22828: input pattern or replacement parameters exceed 32K size limit 22828. 00000 - ...

  3. C++ 析构函数的调用顺序

    如果指针指向基类,但是指针在运行时指向派生类,则该基类必须具有虚拟析构函数,以便破坏派生类.如果没有虚拟析构函数,则只会运行基类的析构函数. 比如: Base* basePtr; basePtr = ...

  4. docker 发布.net core 项目(linux)

    一.准备阶段:前提:一台linux系统,安装好了Docker并启动 1.上传.netcore项目压缩文件 2.解压 注:若没有解压软件,先下载rar解压软件再安装:需注意系统是64位还是32   (下 ...

  5. jstack查看JVM堆栈信息

    目录 介绍 线程状态 Monitor 调用修饰 线程动作 命令格式 常用参数说明 使用实例 jstack pid jstack 查看线程具体在做什么,可看出哪些线程在长时间占用CPU,尽快定位问题和解 ...

  6. 【Azure 应用服务】基于Azure的CI/CD工具链部署App Service

    问题描述 在中国区Azure中,App Service是否支持CI/CD工具部署呢? Windows 和Linux两个系统都是同样的方法吗? 问题解答 目前中国区Azure支持Windows 和 Li ...

  7. 从 Neo4j 导入 Nebula Graph 实践见 SPark 数据导入原理

    本文主要讲述如何使用数据导入工具 Nebula Graph Exchange 将数据从 Neo4j 导入到 Nebula Graph Database.在讲述如何实操数据导入之前,我们先来了解下 Ne ...

  8. Educational Codeforces Round 145 (Rated for Div. 2)C. Sum on Subarrays(构造)

    很意思的一道构造题 题意:给一个\(n.k\),让构造长度为n的数组满足,子数组为整数的个数为k个,负数的为\(k-(n+1)* n/2\),每个数的范围为\([-1000,1000]\) 这种构造题 ...

  9. golang开发:环境篇(三)开发利器Goland安装

    这节主要介绍下golang开发的最主要的IDE,Goland.可以有效提高开发效率.用过一段时间 IntelliJ+GO插件,其实功能上跟goland差不多.不过团队的其它开发者基本都是Goland, ...

  10. XAF Number(编号)

    前言 编号在各类系统中都会存在,同时它还会根据业务场景的不同,会有不同的生成规则.XAF提供了一个编号生成助手(DistributedIdGeneratorHelper),它能在多并发的情况下,生成一 ...