ChannelNets
论文地址:https://arxiv.org/abs/1809.01330
摘要: 卷积神经网络(CNN)在解决各种人工智能任务方面表现出了巨大的能力。然而,不断增长的模型尺寸时它们难以在资源有限的应用中使用。这篇论文提出使用 channel-wise convolutions 来压缩深度模型,在CNN中用稀疏连接替换特征图之间的密集连接,基于此操作,该研究构建了轻量级的CNNs:ChannelNets。ChannelNets使用3个channel-wise 卷积的实例,分别是: group channel-wise convolutions;depth-wise separable channel-wise convolutions 和 convolutional classification layer. 在不损失精度的情况下,ChannelNets 实现了参数数量和计算成本的显著减少。Notably,该项工作首次尝试压缩 fully-connected classification layer,全连接分类层通常占紧凑CNN总参数的25%左右。在ImageNet数据集上的实验结果表明,与以前的方法相比,ChannelNet获得了更好的性能。
1. Introduction
构建紧凑高效的CNN的策略可分为两类:方法1. 压缩预先训练好的网络(利用乘积量化、剪枝、哈希、哈夫曼编码和因子分解等方法)。方法2. 设计新的紧凑型体系结构。如GoogleNet引入inception模块,以在不增加模型尺寸和计算成本的情况下构建更深的网络。Rigid-motion scattering for image classification引入了深度可分离网络将卷积分解为depth-wise 卷积和1*1的point-wise卷积来减少参数量。MobileNet和shuffleNet采用深度可分离卷积为移动设备设计CNNs。
这项工作遵循方法 2 构建ChannelNets,通过观察到全连接占CNN大部分参数量,提出了通道卷积,用于将特征图之间的密集连接替换为稀疏连接。
2. 背景和动机
CNN的可训练层通常由卷积层和全连接层组成。之前的大多数研究,如MobileNet 和ShuffleNet ,都集中在压缩卷积层上,而卷积层是大多数参数和计算所在。为了使讨论具体化,假设 input: df×df×m,kernel: dk×dk×m,output:df×df×n。df×df也称作空间位置。
因为每个空间位置(df×df)都共享卷积核,所以对于任何一piar(片,w×h)输入和输出,连接时稀疏的。但是在channel方向遵循全连接的方式,即,m个input channel 与所有n个channel相连接,导致m×n个term,对于深度卷积来讲,m,n通常较大(512,1024)。
解决以上问题要绕过 dk×dk 与 m×n之间的乘积,MobileNet采用了深度可分离卷积(depth-wise卷积+ 1×1point-wise卷积)如下图所示:
下图来自:霹雳吧啦Wz,该图能帮助更好地理解深度可分离卷积的执行机制。
从图中可以看出,MobileNet中 m×n 仍占据运算量,1×1的卷积导致的 m×n term,占据MobileNet总参数量的74.59%。
上个分析中,m×n来自FC模式,同样也发生在1×1卷积中。当df=1,则明显输入和输出单元之间的操作是一个具有m×n参数的全连接操作,当df>1时,则每个空间单元(共df×df个空间单元)共享全连接操作,导致1×1的 point-wise卷积,因此1×1的卷积会输出“输入特征图的 linear combination(线性连接)”。
就输入和输出的通道而言,常规卷积和深度可分离卷积都遵循全连接方式。因此,压缩卷积更好的策略是改变 input 和 output channel之间的连接方式。对于深度可分离卷积而言,相当于绕过1×1的卷积,一个简单的方式是AlexNet中采用组卷积。Input chennel m 被分成 g 组,每组独立进行1×1卷积生成 n/g 的channel。如下图所示:(每组1×1卷积需要1/g^2个参数和运算量,相比原来的1 × 1卷积,分组后总量为1/g)
下图为深度可分离卷积与加入分组后的深度可分离卷积的结构的对比,其中每个点代表 1 维特征:
(a) 深度可分离卷积(depth-wise卷积+1×1 point-wise 卷积);
(b) 用1×1组卷积代替1×1 point-wise卷积
然而组卷积使得组内无交流,为了解决此问题,ShuffleNet诞生了,在1×1的组卷积之后使用shuffle层,实现各组之间的交互。但是,任何输出组只访问 m/g的输入特征图,因此shuffleNet必须采用比MobileNet更深的体系结构来达到竞争结果。
3. Channel-Wise Convolutions and ChannelNets
在第3.1节中提出了channel-wise convolutions,并以此为基础构建ChannelNets。3.2节采用 group channel-wise convolutions 来解决分组带来的信息不一致问题。3.3 节对 ours 进行了推广,用Depth-Wise Separable Channel-Wise Convolutions直接替换深层中的深度可分离卷积。3.4节提出了一个卷积分类层 Convolutional Classification Layer 来代替全连接的输出层,进一步减少参数和计算量。最后,3.5节介绍了ChannelNets的体系结构。
3.1 Channel-Wise Convolutions
channel-wise的核心在于输入和输出连接的稀疏化,每个输出仅与部分输入相连,概念上区别于分组卷积。Channel-wise卷积是以一定的stride,在channel维度上滑动,去采样多个相关输入进行输出。
第2节的讨论,相当于使用共享的全连接操作来扫描 input 的每个 df × df 位置。一个 channel-wise 卷积采用共享的 1-D 卷积运算,而非 FC方式运算,(以一定的stride去采样多个相关输入进行输出(在channel维度滑动) ,因此,input channel 和 output channel之间的连接变稀疏,每个输出仅与部分输入相连。
设 df=1, 则:
- m 个input 单元的 size=m 的 1-D feature map; output 是 size=n 的 1-D 特征图;
- input 和 output 的 channel 都等于 1 (相当于 df 作channel,m被卷积);
- channel-wise 卷积采用适当的 padding 执行1-D卷积将 m 个 units 映射到 n个units。
当 df>1时,对每个空间位置(df × df)执行 1-D卷积,设 Kernel size = dc
上述操作如下图所示:
通过使用稀疏连接,避免了m×n项。因此,channel-wise 卷积消耗的计算量可以忽略不计,并且可以高效地执行。
3.2. Group Channel-wise Convolution
利用channel-wise 卷积来解决分组带来的信息不一致问题。 Group channel-wise 卷积作为融合层,既保留分组以进行后续的组卷积,同时允许每个组从所有组中收集信息。
经过1×1的组卷积之后,输出的是 g 组,每组的 channel=n/g,这g组完全独立计算。也就是说:分组卷积的分组思想会导致channel间的信息阻隔。为了增加分组间的channel信息交流,一般需要在后面添加一个融合层,继续保持分组的同时整合所有组的特征。使用分组channel-wise卷积层作为融合层,既保留分组以进行后续的组卷积,同时允许每个组从所有组中收集信息。具体而言:该层的input 和 output 都应该是 n 个被分成 g 组的feature,同时任何组的 n/g output channel 能从 n个input channel中进行运算。
利用 g 个 独立的 channel-wise 卷积 将 n 个 input (经过组卷积后 大小为 df×df×n 的输出作为融合层也就是组channel-wise的输入)分成 g 组,每个channel-wise 卷积使用 stride=g及合适的 padding 输出 n/g 个特征图。为确保所有 n 个 input channel 都参与到任何 output group of channel,chanel-wise的kernel size需要满足 dc>=g。
也就是说:使用分组 channel-wise 卷积层作为融合层,包含 g 个channel-wise卷积。定义输入特征维度 n,分组数 g,每个独立的 channel-wise卷积的 stride= g (这里指channel上滑动的步幅),输出特征图 n/g (每个channel-wise卷积在整个 input 上滑动 n/g 次)。为了保证每个分组的输出涵盖了所有的输入,需要满足dc>=g,最后将所有的输出concate起来,结构如下图所示:
dc远小于m,对比原来的深度可分离卷积,组channel-wise的参数量和运算量为1/g。
下图为group channel-wise 在信息融合中的应用,相同的颜色表示共享权重。
3.3. Depth-Wise Separable Channel-Wise Convolutions
有一种特殊情况,即组的数量以及输入和输出通道的数量相等,即g=m=n。在这种情况下,每组中只有1个特征图(m/g=1)。1×1组卷积只是在深度卷积中缩放卷积核,但由于每层中的batch normalization 已经涉及一个缩放项,因此1×1组卷积变得多余,可以删除。同时,不使用stride = m的m个独立的channel-wise 卷积作为融合层,而是使用stride = 1的single channel-wise 卷积。
由于去除了1×1组卷积,也就是 group channel-wise 卷积中去掉了 group 卷积,那么channel-wise 卷积直接 follows depth-wise 卷积,从而产生深度可分离的信道卷积。也就是说:深度可分离channel-wise卷积是在深度卷积(depth-wise卷积)后面接一个channel-wise卷积用以融合特征来降低参数量和计算量。
3.4 Convolutional Classification Layer
之前的大多模型压缩方法很少关注CNN的最后一层,也就是用于生成分类结果的全连接层。以ImageNet数据集上的MobileNet为例,该层使用1024个分量的特征向量作为输入,并生成1000个对应于1000个类的 Logits。因此,参数数量为1024×1000≈ 100万,占总参数的24.33%。在本节中,我们用3.3节中提出的深度可分离channel-wise 卷积的一个特殊应用以减少分类层中的大量参数。
我们注意到,second-to-the-last 层通常是一个全局平均池层,它将特征图的空间大小(w×h)减少至1。假设输入特征图的空间大小为df×df,全局平均池层相当于一种特殊的深度卷积,其内核大小为 df×df,其中内核中的权重固定为
1
/
d
f
2
1/df^2
1/df2。同时,fc层可被视为1×1卷积,因为输入特征向量可视为1×1特征映射。因此,全局平均池层 + 全连接分类层 是一个特殊的depth-wise 卷积,然后是一个1×1卷积,从而产生一个特殊的深度可分离卷积。
也就是说,全局池化+全连接层的组合实际可以转换成深度可分离卷积,使用固定权重的深度卷积代替全局池化,pointwise卷积代替全连接层。因此,可以进一步使用上述的深度可分离channel-wise卷积来进行优化,而这里由于池化和全连接之间没有使用激活函数或BN等操作,采用常规的三维卷积进行实现更高效。
假设输入特征图为 m×df×df,类别数为 n,深度卷积或全局池化可以认为是卷积核大小为 df×df×1,权重固定为
1
/
d
f
2
1/df^2
1/df2 的3D卷积,而channel-wise可认为是卷积核大小为 df×df×c 的三维卷积,两者可以合并成一个卷积核大小为 df ×df ×dc 的3D卷积。为了符合类别数量,dc=m-n+1,即每个类别的预测仅需要使用(m-n+1)个输入特征图。
以上描述如下图所示:
论文可视化了全连接分类层的权重,如下图所示,蓝色是代表为0或接近0的权重,可以看到全连接分类层的权重实际非常稀疏,即本身也只使用到部分输入,所以这里使用部分输入特征也是合理的。
ChannelNetv1完全连接的分类层中的权重模式示例。
(a)部分显示了完全连接的分类层的权重矩阵,可以看出权重是稀疏分布的,因为大多数权重都是蓝色的,表示零或接近零的值。
(b)部分是近距离观察小区域的权重。
©部分中的直方图从统计学上证明了权重的稀疏性。
3.5 ChannelNets
ChannelNet根据MobileNet的基础结构进行构建,设计了下图所示的分组模块(GM)和分组channel-wise模块(GCWM)。由于GM模块存在信息阻隔的问题,所以在GM模块前面使用GCWM来生成包含全局信息的分组特征。
(a) 部分显示了GM,它有两个深度可分离的卷积层,note: 1×1卷积被1×1组卷积替换以节省计算。添加了一个条约连接以方便模型训练。
(b) 部分描述了GCWM。与GM相比,它有一个组channel-wise 卷积来融合来自不同组的信息。
ChannelNet包含3个版本:(摘自:https://www.jianshu.com/p/9a5d4077cce7)
- ChannelNet-v1替换了部分深度可分离卷积为GM和GCWM,分组数为2,共包含约370万参数。
- ChannelNet-v2替换最后的深度可分离卷积为深度可分离channel-wise卷积,大约节省100万参数,占ChannelNet-v1的25%参数。
- ChannelNet-v3替换最后的池化层加全连接层为上述的Convolutional Classification Layer,大约节省了100万(1024x1000-7x7x25)参数。
4. 实验部分
我们在ImageNet ILSVRC 2012图像分类数据集上评估ChannelNets,该数据集是压缩模型的基准。我们将不同版本的ChannelNet与其他紧凑型CNN进行了比较。消融实验用于研究组通道卷积的影响。此外,我们还进行了一个实验来证明在全连接的分类层中权重的稀疏性。
4.1 数据集
ImageNet ILSVRC 2012数据集包含1200万张训练图片和5万张验证图片。每个图像都由1000个类别中的一个进行标记。图像缩放到256×256,使用224×224大小的随机裁剪patch进行训练。在推理过程中,224×224个center crops 被送入网络。为了与其他紧凑型CNN进行比较,我们使用在验证集上计算的训练图像和报告精度来训练我们的模型,因为测试图像的标签不公开。
4.2 实验设置
使用与MobileNet大致相同的设置来训练ChannelNets。对于深度可分离卷积,我们去掉了 depth-wise 卷积和1×1 point-wise卷积之间的batch normalization 和激活函数。我们观察到,在加快训练速度的同时,它对性能没有影响。对于GCWMs,group channel-wise 卷积的kernel size 设置为8×8;对于深度可分离channel-wise卷积,kernel size 设置为16×16。在卷积分类层,3D卷积的kernel size为7×7×25。所有模型都使用动量为0.9的随机梯度下降优化器训练80个epoch。学习率从0.1开始,在第45、60、65、70和75个epoch衰减0.1。在1×1卷积后应用rate=0.0001的dropout。我们使用4个TITAN Xp GPU和512的batch size进行训练,大约需要3天。
4.3 ChannelNet-v1与其他模型的比较
下表为ChannelNet-v1和其他CNN在ImageNet验证集的top-1 精度、总参数和图像分类所需的FLOPs的比较。
4.4 ChannelNets与使用Width Multipliers模型的比较
就ImageNet验证集的top-1精度和总参数数量而言,ChannelNet和其他具有宽度倍增器的紧凑CNN之间的比较。模型名称前的数字表示宽度乘数。
4.5 组channel-wise卷积的消融实验
ChannelNetv1和ChannelNet-v1之间的比较。ChannelNet-v1(-)表示不带group channel-wise卷积。比较的依据是ImageNet验证集的top-1精度,以及总参数的数量。
5.总结
引用链接:https://www.jianshu.com/p/9a5d4077cce7
Channel-wise卷积在channel维度上进行滑动,巧妙地解决卷积操作中输入输出的复杂全连接特性,但又不会像分组卷积那样死板,是个很不错的想法。但感觉论文本身的性能还不够最优,论文对比的也只是MobileNetV1,跟MobileNetV2比差了点。