【CNN系列】卷积核介绍包括1*1卷积核讲解

转载自https://blog.csdn.net/touch_dream/article/details/77601534
1、AlexNet中国使用到了一些非常大的卷积核,比如1111,55卷积核,之前人们的观念认为receptive filed感受野越大,看到的图片信息越多,因此获得的特征越好。但另外一个方面大的卷积核会导致计算量的暴增,不利于模型深度的增加,计算性能也会降低,于是Inception网络中,就利用了两个33来代替一个55卷积核,参数量上大大的降低了。
【CNN系列】卷积核介绍包括1*1卷积核讲解_第1张图片
2、后来另外一些人开始思考,每层卷积只能用一种尺寸的卷积核?InceptionV2里面就使用了多个尺度卷积核然后进行特征的融合,传统的层叠式网络,基本上都是一个个卷积层的堆叠,每层只用一个尺寸的卷积核,例如VGG结构中使用了大量的3×3卷积层。事实上,同一层feature map可以分别使用多个不同尺寸的卷积核,以获得不同尺度的特征,再把这些特征结合起来,得到的特征往往比使用单一卷积核的要好,因此谷歌发明的GoogleNet,或者说Inception系列的网络,就使用了多个卷积核的结构:
【CNN系列】卷积核介绍包括1*1卷积核讲解_第2张图片
3、怎么样去减少多尺度带来的参数量增多?
GoogleNet的团队发现,如果仅仅引入多个尺度的卷积核,会带来参数额外增多,为了解决问题,他们往Inception结构中加入了些1*1的卷积核如下图:
【CNN系列】卷积核介绍包括1*1卷积核讲解_第3张图片
根据下图,我们来做个对比计算,假设输入feature map的维度为256维,要求输出维度也是256维。有以下两种操作:
256维的输入直接经过一个3×3×256的卷积层,输出一个256维的feature map,那么参数量为:256×3×3×256 = 589,824
256维的输入先经过一个1×1×64的卷积层,再经过一个3×3×64的卷积层,最后经过一个1×1×256的卷积层,输出256维,参数量为:256×1×1×64 + 64×3×3×64 + 64×1×1×256 = 69,632。足足把第一种操作的参数量降低到九分之一!
1×1卷积核也被认为是影响深远的操作,往后大型的网络为了降低参数量都会应用上1×1卷积核。

【CNN系列】卷积核介绍包括1*1卷积核讲解_第4张图片
4、针对深层次的网络——ResNet残差网络
传统的卷积层层叠网络会遇到一个问题,当层数加深时,网络的表现越来越差,很大程度上的原因是因为当层数加深时,梯度消散得越来越严重,以至于反向传播很难训练到浅层的网络。为了解决这个问题,何凯明大神想出了一个“残差网络”,使得梯度更容易地流动到浅层的网络当中去。
5、卷积操作必须同时考虑通道和区域?DepthWise操作
标准的卷积过程一般是需要把图像区域中的所有通道均被同时考虑,有另外的研究者对此提出疑问,用另外一种连接方式,称为Xception。
【CNN系列】卷积核介绍包括1*1卷积核讲解_第5张图片
Xception网络就是基于以上的问题发明而来。我们首先对每一个通道进行各自的卷积操作,有多少个通道就有多少个过滤器。得到新的通道feature maps之后,这时再对这批新的通道feature maps进行标准的1×1跨通道卷积操作。这种操作被称为 “DepthWise convolution” ,缩写“DW”。
这种操作是相当有效的,在imagenet 1000类分类任务中已经超过了InceptionV3的表现,而且也同时减少了大量的参数,我们来算一算,假设输入通道数为3,要求输出通道数为256,两种做法:

(1)直接接一个3×3×256的卷积核,参数量为:3×3×3×256 = 6,912

(2)DW操作,分两步完成,参数量为:3×3×3 + 3×1×1×256 = 795,又把参数量降低到九分之一!
因此,一个depthwise操作比标准的卷积操作降低不少的参数量,同时论文中指出这个模型得到了更好的分类效果。
6、分组卷积能否对通道进行随机分组?– ShuffleNet
在AlexNet的Group Convolution当中,特征的通道被平均分到不同组里面,最后再通过两个全连接层来融合特征,这样一来,就只能在最后时刻才融合不同组之间的特征,对模型的泛化性是相当不利的。为了解决这个问题,ShuffleNet在每一次层叠这种Group conv层前,都进行一次channel shuffle,shuffle过的通道被分配到不同组当中。进行完一次group conv之后,再一次channel shuffle,然后分到下一层组卷积当中,以此循环。
【CNN系列】卷积核介绍包括1*1卷积核讲解_第6张图片
来自ShuffleNet论文
经过channel shuffle之后,Group conv输出的特征能考虑到更多通道,输出的特征自然代表性就更高。另外,AlexNet的分组卷积,实际上是标准卷积操作,而在ShuffleNet里面的分组卷积操作是depthwise卷积,因此结合了通道洗牌和分组depthwise卷积的ShuffleNet,能得到超少量的参数以及超越mobilenet、媲美AlexNet的准确率!

7、通道间的特征都是平等的吗? – SEnet
无论是在Inception、DenseNet或者ShuffleNet里面,我们对所有通道产生的特征都是不分权重直接结合的,那为什么要认为所有通道的特征对模型的作用就是相等的呢? 这是一个好问题,于是,ImageNet2017 冠军SEnet就出来了。
【CNN系列】卷积核介绍包括1*1卷积核讲解_第7张图片
一组特征在上一层被输出,这时候分两条路线,第一条直接通过,第二条首先进行Squeeze操作(Global Average Pooling),把每个通道2维的特征压缩成一个1维,从而得到一个特征通道向量(每个数字代表对应通道的特征)。然后进行Excitation操作,把这一列特征通道向量输入两个全连接层和sigmoid,建模出特征通道间的相关性,得到的输出其实就是每个通道对应的权重,把这些权重通过Scale乘法通道加权到原来的特征上(第一条路),这样就完成了特征通道的权重分配。
8、能否让固定大小的卷积核看到更大范围的区域?– Dilated convolution
标准的3×3卷积核只能看到对应区域3×3的大小,但是为了能让卷积核看到更大的范围,dilated conv使其成为了可能。dilated conv原论文中的结构如图所示:
【CNN系列】卷积核介绍包括1*1卷积核讲解_第8张图片
上图b可以理解为卷积核大小依然是3×3,但是每个卷积点之间有1个空洞,也就是在绿色7×7区域里面,只有9个红色点位置作了卷积处理,其余点权重为0。这样即使卷积核大小不变,但它看到的区域变得更大了。
9、卷积核形状一定是矩形吗?– Deformable convolution 可变形卷积核
【CNN系列】卷积核介绍包括1*1卷积核讲解_第9张图片
传统的卷积核一般都是长方形或正方形,但MSRA提出了一个相当反直觉的见解,认为卷积核的形状可以是变化的,变形的卷积核能让它只看感兴趣的图像区域 ,这样识别出来的特征更佳。
【CNN系列】卷积核介绍包括1*1卷积核讲解_第10张图片
图来自微软亚洲研究院公众号要做到这个操作,可以直接在原来的过滤器前面再加一层过滤器,这层过滤器学习的是下一层卷积核的位置偏移量(offset),这样只是增加了一层过滤器,或者直接把原网络中的某一层过滤器当成学习offset的过滤器,这样实际增加的计算量是相当少的,但能实现可变形卷积核,识别特征的效果更好。
启发和思考
现在越来越多的CNN模型从巨型网络到轻量化网络一步步演变,模型准确率也越来越高。现在工业界追求的重点已经不是准确率的提升(因为都已经很高了),都聚焦于速度与准确率的trade off,都希望模型又快又准。因此从原来AlexNet、VGGnet,到体积小一点的Inception、Resnet系列,到目前能移植到移动端的mobilenet、ShuffleNet(体积能降低到0.5mb!),我们可以看到这样一些趋势:

卷积核方面:
大卷积核用多个小卷积核代替;
单一尺寸卷积核用多尺寸卷积核代替;
固定形状卷积核趋于使用可变形卷积核;
使用1×1卷积核(bottleneck结构)。

卷积层通道方面:
标准卷积用depthwise卷积代替;
使用分组卷积;
分组卷积前使用channel shuffle;
通道加权计算。

卷积层连接方面:
使用skip connection,让模型更深;
densely connection,使每一层都融合上其它层的特征输出(DenseNet)

启发
类比到通道加权操作,卷积层跨层连接能否也进行加权处理?bottleneck + Group conv + channel shuffle + depthwise的结合会不会成为以后降低参数量的标准配置?

你可能感兴趣的:(CNN,CNN)