论文地址:HetConvhtml
做者对已有的新型卷积划分以下:标准卷积、Depthwise 卷积、Pointwise 卷积、群卷积(相关介绍见『高性能模型』深度可分离卷积和MobileNet_v1),后三种卷积能够取代标准卷积,使用方式通常是 Depthwise + Pointwise 或者是 Group + Pointwise 这样的两层取代(已有网络架构中的)标准卷积的一层,成功的在不损失精度的前提下实现了 FLOPs 提高,可是带来反作用是提升了网络延迟(latency),所谓 latency 直观来讲就是网络的层数增长了,因为GPU加速、并行计算要求前一层的结果出来后后一层才能开始运算,因此层数加多并不利于这些工具,做者使用 latency 衡量这一因素。
网络
模题型压缩做者认为主要成果有:connection pruning 、filter pruning 和 quantization(量子化),其中做者认为 filter pruning 比较主流(花了必定篇幅介绍),且不须要特殊的硬件/软件才能实现,但其问题在于:架构
a、训练步骤繁琐框架
b、存在精度损失工具
其通常步骤是:训练好原模型;对模型参数权重进行分析;裁剪模型参数;从新(迭代)训练弥补精度损失。能够看到十分繁琐,这里多说一句,由于我并不太了解模型剪枝,简单的调研了一下,其原理是咱们假设模型参数绝对值越大则其约重要,因此对一个卷积核种全部值的绝对值进行求和,而后排序就知道哪些核不重要了(Pruning filters for efficient convnets)。post
咱们上面提到的都是对已有网络进行加速,或者是剪枝,或者是替换,实际上网络加速有两个大方向:性能
a、妥协网络精度,目的是在低端硬件上运行,在精度和准确率之间寻求平衡点,通常会从新设计一个网络结构spa
b、保持网络 FLOPs 不变,突破精度,通常体如今对现有网络进行更复杂化的改造升级
设计
做者基于以上两种思路的共同诉求,提出了新的 HetConv(多相卷积),以同一个卷积层内的 filter 大小再也不一致为创新点,达到即下降 FLOPs 又不损失精度的效果。orm
相比已有卷积加速技术 HetConv 对标准卷积是1换1的过程,不会带来 latency;相比网络剪枝,训练时常大大缩短,训练精度不会打折。
HetConv 的核由3*3以及1*1两种组成,将所有卷积核划分为若干组,每组除含有一个3*3的核外其余均为1*1的核。下图所示为相同的核数(M)不一样的每组中的核数(P)的 HetConv 层对比示意,对比对象为相应层中的某个卷积核。注意理解 P 的意义,后面将会大量参考此参数。
固然,若是某一层的卷积核们彻底一致这个网络的语义信息很明显是有问题的,因此单层的核实际分布以下:
这样看来咱们就很熟悉了:将 Depthwise 和 Pointwise 融合到同一层中,固然这个说法不彻底准确,不过其设计思路应该就是这样。
以后做者分别对比了 D+P、G+P 和 HetConv 的复杂度,计算过程很简单(对卷积复杂度实在不熟悉的话参见:『高性能模型』卷积复杂度以及Inception系列),且我的以为计算过程有瑕疵以及对比方式不是颇有说服力,故感兴趣的话看原文第3节吧。
最后做者说每组中核心数(P)越大加越快,符合直觉:
我的感受这个卷积设计应该可以起到加速做用(相对已有方法),可是准确度不太相信可以如做者所说媲美 D+P 、 G+P 或者标准卷积,因此本文将贴出做者的实验分析,且想看看后续是否有人验证其实用性。另外感受实现起来有点麻烦(不修改框架源码的话),建立3*3的核并置零1*1的空余位好说,如何高效的锁定其值为0感受现有 API 实现比较麻烦(每次更新参数后修改一次过低效了),哎,源码苦手。不过要是这个东西真的有用,后续各大框架都会跟进就是了。
最基本的实验是基于 VGG16 和 cifar-10 的,结果如上表所示,实验思路就是将不一样的加速卷积(HetConv、D+P、G+P)取代 VGG16 的原有卷积层,上表中的后缀表示网络层组成明细:
XXX Pα: XXX is the architecture, and part value is P = α;
XXX Pα SE: SE for Squeeze-and-Excitation with reduction-ratio = 8;
XXX GWCβ PWC: GWCβ PWC is the groupwise convolution with group size β followed by pointwise convolution;
XXX DWC PWC: DWC PWC is epthwise convolution followed by pointwise convolution;
XXX PC: PC is part value P = number of input channels (input depth).
SE 网络的论文我还没怎么看,就知道其原理大概是给每一个特征加了个权重,因此暂时不了解 reduction-ratio 参数,不过这对本篇论文的理解影响不大。
第三行(P4 开头)展现了 HetConv 相对 Group 卷积的优点,最后一行展现了其相对深度可分离卷积的优点,而整个表格则反映了 P 值对网络的影响,综合来看,HetConv 确实是又好又快。
上图展现了模型压缩方法之间的比较,其余方法论文列表以下:
3:Auto-balanced filter pruning for efficient convolutional neural networks. AAAI, 2018.
21:Pruning filters for efficient convnets. ICLR, 2017.
25:Structured bayesian pruning via log-normal multiplicative noise. In NIPS, pages 6775–6784, 2017.
以后做者使用 ResNet、 MobileNet 并使用 ImageNet 数据集进行了实验,实验内容都和上面的类似,几点意外是加了 SE 的 ResNet 过拟合了(cifar-10)因此准确率低了一点,替换了 HetConv 的 MobileNet 效能更强劲,准确率反超了 使用 D+P 组合的基本模型,实验结果表格这里就不贴了,感兴趣的话查看原文便可。