卷积神经网络的改进 | 您所在的位置:网站首页 › 二维卷积核可以是5*5的吗 › 卷积神经网络的改进 |
1、普通卷积
我们用了同等的参数量运算量生成了 g 个 feature map。 所以 group conv 常用在轻量型高效网络中,因为它用少量的参数量和运算量就能生成大量的 feature map,大量的 feature map 意味着能够编码更多的信息! 从分组卷积的角度来看,分组数就像一个控制旋钮,最小值是1,此时的卷积就是普通卷积;最大值是输入 feature map 的通道数,此时的卷积就是 depthwise sepereable convolution,即深度分离卷积,又叫逐通道卷积。 分组卷积的用途
Depthwise Convolution 完成后的 Feature map 数量与输入层的通道数相同,无法扩展 Feature map。而且这种运算对输入层的每个通道独立进行卷积运算,没有有效的利用不同通道在相同空间位置上的feature信息。因此需要 Pointwise Convolution 来将这些Feature map进行组合生成新的Feature map。 DW卷积的计算量和标准卷积计算量之间比例关系为:(注意是运算量,不是参数量) Pointwise Convolution 的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M,M 为上一层的通道数。所以这里的卷积运算会将上一步的 Feature map 在深度方向上进行加权组合,生成新的 Feature map,有几个卷积核就有几个输出 Feature map。如上图所示。 由于采用的是1×1卷积的方式,此步中卷积涉及到的参数个数可以计算为: N_pointwise = 1 × 1 × 3 × 4 = 12 经过 Pointwise Convolution 之后,同样输出了4张 Feature map,与常规卷积的输出维度相同。 参数对比回顾一下,常规卷积的参数个数为: N_std = 4 × 3 × 3 × 3 = 108 Separable Convolution的参数由两部分相加得到: N_depthwise = 3 × 3 × 3 = 27 N_pointwise = 1 × 1 × 3 × 4 = 12 N_separable = N_depthwise + N_pointwise = 39 相同的输入,同样是得到 4 张 Feature map,Separable Convolution的参数个数是常规卷积的约1/3。 因此,在参数量相同的前提下,采用 Separable Convolution 的神经网络层数可以做的更深。 卷积神经网络的改进演化 1、卷积可以不在同一组进行-- Group convolutionGroup convolution 分组卷积,最早在AlexNet中出现,由于当时的硬件资源有限,训练AlexNet时卷积操作不能全部放在同一个GPU处理,因此作者把feature maps分给多个GPU分别进行处理,最后把多个GPU的结果进行融合。 lexNet中用到了一些非常大的卷积核,比如11×11、5×5卷积核,之前人们的观念是,卷积核越大,receptive field(感受野)越大,看到的图片信息越多,因此获得的特征越好。虽说如此,但是大的卷积核会导致计算量的暴增,不利于模型深度的增加,计算性能也会降低。于是在VGG(最早使用)、Inception网络中,利用2个3×3卷积核的组合比1个5×5卷积核的效果更佳,同时参数量(3×3×2+1 VS 5×5×1+1)被降低,因此后来3×3卷积核被广泛应用在各种模型中。 传统的层叠式网络,基本上都是一个个卷积层的堆叠,每层只用一个尺寸的卷积核,例如VGG结构中使用了大量的3×3卷积层。事实上,同一层feature map可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到的特征往往比使用单一卷积核的要好,谷歌的GoogleNet,或者说Inception系列的网络,就使用了多个卷积核的结构。 4、减少卷积层参数量 – Bottleneck发明GoogleNet的团队发现,如果仅仅引入多个尺寸的卷积核,会带来大量的额外的参数,受到Network In Network中1×1卷积核的启发,为了解决这个问题,他们往Inception结构中加入了一些1×1的卷积核,如图所示: 传统的卷积层层叠网络会遇到一个问题,当层数加深时,网络的表现越来越差,很大程度上的原因是因为当层数加深时,梯度消散得越来越严重,以至于反向传播很难训练到浅层的网络。为了解决这个问题,何凯明大神想出了一个“残差网络”,使得梯度更容易地流动到浅层的网络当中去,而且这种“skip connection”能带来更多的好处。 7、卷积操作时不用必须同时考虑通道和区域 – DepthWise操作
这种操作是相当有效的,在imagenet 1000类分类任务中已经超过了InceptionV3的表现,而且也同时减少了大量的参数。 8、分组卷积对通道进行随机分组 – ShuffleNet在AlexNet的Group Convolution当中,特征的通道被平均分到不同组里面,最后再通过两个全连接层来融合特征,这样一来,就只能在最后时刻才融合不同组之间的特征,对模型的泛化性是相当不利的。为了解决这个问题,ShuffleNet在每一次层叠这种Group conv层前,都进行一次channel shuffle,shuffle过的通道被分配到不同组当中。进行完一次group conv之后,再一次channel shuffle,然后分到下一层组卷积当中,以此循环。 要注意的是,Group conv是一种channel分组的方式,Depthwise +Pointwise是卷积的方式,只是ShuffleNet里面把两者应用起来了。因此Group conv和Depthwise +Pointwise并不能划等号。 8、通道间的特征可以不平等 – SEnet无论是在Inception、DenseNet或者ShuffleNet里面,我们对所有通道产生的特征都是不分权重直接结合的,那为什么要认为所有通道的特征对模型的作用就是相等的呢? 这是一个好问题,于是,ImageNet2017 冠军SEnet就出来了。 标准的3×3卷积核只能看到对应区域3×3的大小,但是为了能让卷积核看到更大的范围,dilated conv使其成为了可能。dilated conv原论文中的结构如图所示: 传统的卷积核一般都是长方形或正方形,但MSRA提出了一个相当反直觉的见解,认为卷积核的形状可以是变化的,变形的卷积核能让它只看感兴趣的图像区域 ,这样识别出来的特征更佳。 卷积神经网络的改进思考现在越来越多的CNN模型从巨型网络到轻量化网络一步步演变,模型准确率也越来越高。现在工业界追求的重点已经不是准确率的提升(因为都已经很高了),都聚焦于速度与准确率的trade off,都希望模型又快又准。因此从原来AlexNet、VGGnet,到体积小一点的Inception、Resnet系列,到目前能移植到移动端的mobilenet、ShuffleNet(体积能降低到0.5mb!),我们可以看到这样一些趋势: 1、卷积核方面: ● 大卷积核用多个小卷积核代替; ● 单一尺寸卷积核用多尺寸卷积核代替; ● 固定形状卷积核趋于使用可变形卷积核; ● 使用1×1卷积核(bottleneck结构)。 ● 空洞卷积 2、卷积层通道方面: ● 标准卷积用depthwise卷积代替;
3、卷积层连接方面: ● 使用skip connection,让模型更深; ● densely connection,使每一层都融合上其它层的特征输出(DenseNet) 启发 类比到通道加权操作,卷积层跨层连接能否也进行加权处理?bottleneck + Group conv + channel shuffle + depthwise 的结合会不会成为以后降低参数量的标准配置? |
CopyRight 2018-2019 实验室设备网 版权所有 |