从 2012 年的 AlexNet 开展至今,科学家们创造出各式各样的 CNN 模型,一个比一个深,一个比一个精确,一个比一个轻量。我下面会对近几年一些具有改造性的作业进行简略盘点,从这些充溢改造性的作业中讨论日后的 CNN 改造方向。
注:水平所限,下面的见地或许有误差,望大牛纠正。别的只介绍其间具有代表性的模型,一些闻名的模型由于原理相同将不作介绍,若有遗失也欢迎指出。
Group convolution 分组卷积,最早在 AlexNet 中呈现,由于其时的硬件资源有限,练习 AlexNet 时卷积操作不能悉数放在同一个 GPU 处理,因而作者把 feature maps 分给多个 GPU 别离进行处理,终究把多个 GPU 的成果进行交融。
分组卷积的思维影响比较深远,当时一些轻量级的 SOTA(State Of The Art)网络,都用到了分组卷积的操作,以节约核算量。但题主有个疑问是,假如分组卷积是分在不同 GPU 上的话,每个 GPU 的核算量就下降到 1/groups,但假如仍然在同一个 GPU 上核算,终究全体的核算量是否不变?找了 pytorch 上有关组卷积操作的介绍,望读者答复我的疑问。
AlexNet 顶用到了一些非常大的卷积核,比方 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 系列的网络,就运用了多个卷积核的结构:
如上图所示,一个输入的 feature map 别离一起经过 1 × 1、3 × 3、5 × 5 的卷积核的处理,得出的特征再组合起来,取得更佳的特征。但这个结构会存在一个严峻的问题:参数量比单个卷积核要多许多,如此巨大的核算量会使得模型功率低下。这就引出了一个新的结构:
创造 GoogleNet 的团队发现,假如仅仅引进多个规范的卷积核,会带来许多的额定的参数,遭到 Network In Network 中 1 × 1 卷积核的启示,为了处理这个问题,他们往 Inception 结构中加入了一些 1 × 1 的卷积核,如图所示:
依据上图,咱们来做个比照核算,假定输入 feature map 的维度为 256 维,要求输出维度也是 256 维。有以下两种操作:
1 × 1 卷积核也被以为是影响深远的操作,往后大型的网络为了下降参数量都会应用上 1 × 1 卷积核。
传统的卷积层层叠网络会遇到一个问题,当层数加深时,网络的体现越来越差,很大程度上的原因是由于当层数加深时,梯度散失得越来越严峻,以至于反向传达很难练习到浅层的网络。为了处理这个问题,何凯明大神想出了一个 残差网络 ,使得梯度更容易地流动到浅层的网络傍边去,并且这种 skip connection 能带来更多的优点,这儿能够参阅一个 PPT:极深网络(ResNet/DenseNet): Skip Connection 为何有用及其它,以及我的一篇文章:为什么 ResNet 和 DenseNet 能够这么深?一文详解残差块为何能处理梯度弥散问题。咱们能够结合下面的谈论进行考虑。
规范的卷积进程能够看上图,一个 2 × 2 的卷积核在卷积时,对应图画区域中的一切通道均被一起考虑,问题在于,为什么一定要一起考虑图画区域和通道?咱们为什么不能把通道和空间区域分隔考虑?
Xception 网络便是根据以上的问题创造而来。咱们首要对每一个通道进行各自的卷积操作,有多少个通道就有多少个过滤器。得到新的通道 feature maps 之后,这时再对这批新的通道 feature maps 进行规范的 1 × 1 跨通道卷积操作。这种操作被称为DepthWise convolution,缩写 DW。
这种操作是适当有用的,在 imagenet 1000 类分类使命中现已超过了 InceptionV3 的体现,并且也一起减少了许多的参数,咱们来算一算,假定输入通道数为 3,要求输出通道数为 256,两种做法:
因而,一个 depthwise 操作比规范的卷积操作下降不少的参数量,一起论文中指出这个模型得到了更好的分类作用。
在 AlexNet 的 Group Convolution 傍边,特征的通道被均匀分到不同组里边,终究再经过两个全衔接层来交融特征,这样一来,就只能在终究时间才交融不同组之间的特征,对模型的泛化性是适当晦气的。为了处理这个问题,ShuffleNet 在每一次层叠这种 Group conv 层前,都进行一次 channel shuffle,shuffle 过的通道被分配到不同组傍边。进行完一次 group conv 之后,再一次 channel shuffle,然后分到下一层组卷积傍边,以此循环。
经过 channel shuffle 之后,Group conv 输出的特征能考虑到更多通道,输出的特征天然代表性就更高。别的,AlexNet 的分组卷积,实践上是规范卷积操作,而在 ShuffleNet 里边的分组卷积操作是 depthwise 卷积,因而结合了通道洗牌和分组 depthwise 卷积的 ShuffleNet,能得到超少数的参数以及逾越 mobilenet、比美 AlexNet 的精确率!
别的值得一提的是,微软亚洲研究院 MSRA 最近也有相似的作业,他们提出了一个 IGC 单元(Interleaved Group Convolution),即通用卷积神经网络交织组卷积,形式上相似进行了两次组卷积,Xception 模块能够看作交织组卷积的一个特例,特别引荐看看这篇文章:王井东详解 ICCV 2017 当选论文:通用卷积神经网络交织组卷积
无论是在 Inception、DenseNet 或许 ShuffleNet 里边,咱们对一切通道发生的特征都是不分权重直接结合的,那为什么要以为一切通道的特征对模型的作用便是持平的呢? 这是一个好问题,所以,ImageNet2017 冠军 SEnet 就出来了。
一组特征在上一层被输出,这时候分两条路线,第一条直接经过,第二条首要进行 Squeeze 操作(Global Average Pooling),把每个通道 2 维的特征压缩成一个 1 维,然后得到一个特征通道向量(每个数字代表对应通道的特征)。然后进行 Excitation 操作,把这一列特征通道向量输入两个全衔接层和 sigmoid,建模出特征通道间的相关性,得到的输出其实便是每个通道对应的权重,把这些权重经过 Scale 乘法通道加权到本来的特征上(第一条路),这样就完成了特征通道的权重分配。作者具体解说能够看这篇文章:专栏 Momenta 详解 ImageNet 2017 夺冠架构 SENet
规范的 3 × 3 卷积核只能看到对应区域 3 × 3 的巨细,可是为了能让卷积核看到更大的规模,dilated conv 使其成为了或许。dilated conv 原论文中的结构如图所示:
上图 b 能够了解为卷积核巨细仍然是 3 × 3,可是每个卷积点之间有 1 个空泛,也便是在绿色 7 × 7 区域里边,只要 9 个赤色点方位作了卷积处理,其他点权重为 0。这样即便卷积核巨细不变,但它看到的区域变得更大了。具体解说能够看这个答复:怎么了解空泛卷积(dilated convolution)?
传统的卷积核一般都是长方形或正方形,但 MSRA 提出了一个适当反直觉的见地,以为卷积核的形状能够是改变的,变形的卷积核能让它只看感兴趣的图画区域,这样辨认出来的特征更佳。
图来自微软亚洲研究院大众号。要做到这个操作,能够直接在本来的过滤器前面再加一层过滤器,这层过滤器学习的是下一层卷积核的方位偏移量(offset),这样仅仅添加了一层过滤器,或许直接把原网络中的某一层过滤器当成学习 offset 的过滤器,这样实践添加的核算量是适当少的,但能完成可变形卷积核,辨认特征的作用更好。具体 MSRA 的解读能够看这个链接:可变形卷积网络:核算机新 视 界。
现在越来越多的 CNN 模型从巨型网络到轻量化网络一步步演化,模型精确率也越来越高。现在工业界寻求的要点现已不是精确率的提高(由于都现已很高了),都聚集于速度与精确率的 trade off,都期望模型又快又准。因而从本来 AlexNet、VGGnet,到体积小一点的 Inception、Resnet 系列,到现在能移植到移动端的 mobilenet、ShuffleNet(体积能下降到 0.5mb!),咱们能够看到这样一些趋势:
假如你有更多的主意或定见,欢迎谈论留言,好的 idea 值得沟通传达。别的自己的简书号是:人工智豪 - 简书,简书上会发一些比较技术性的文章,如 GPU 降温等,知乎上会发比较理论性的见地文章,欢迎重视。