卷积神经网络技巧总结

摘要:
从可变形卷积核到可分离卷积?卷积神经网络中排名前十的运算绝对令人惊叹。

变形卷积核、可分离卷积?卷积神经网络中十大拍案叫绝的操作。中梳理提取补充.

前提名词

  • feature map: 特征图, 卷积核的输入和输出都被称为feature map

卷积核技巧

0x01 多个小卷积核代替大卷积核

之前的观念是越大的卷积核感受野(receptive field)越大, 看到的信息越多, 提取的特征越好, 但存在问题:

  • 参数剧增, 计算性能降低
  • 不利于模型深度的增加

使用多个小卷积核代替单个大卷积核, 如在vggInception网络中, 使用两个(3 imes{3})卷积核组合代替一个(5 imes{5})卷积核(原来的一层变为两层). 好处:

  • 参数减少: (5 imes{5} imes{1})减少为(3 imes{3} imes{2}), 参数减少, 效率提高.

这种做法有效的原因:

VGG网络的论文中, 除开网络本身, 最大的贡献来自于对卷积叠加的观察:

  • (5 imes{5})卷积核的正则等效于两个(3 imes{3})卷积核, (7 imes{7})卷积核的正则等效于三个(3 imes{3})卷积核, 如下图所示

卷积神经网络技巧总结第1张

因此, 使用这种小卷积核叠加代替大卷积核有两个好处:

  • 大幅减少参数数量
  • 本身带有正则性质, 更能学习一个具有鲁棒性的模型

0x02 多尺寸卷积核代替单尺寸卷积核

传统的CNN网络都是层叠式网络, 每层都只使用一个卷积核. VGG网络使用了大量的(3 imes{3})卷积核. 在Inception网络中, 对于同一层的feature map, 使用多个不同尺寸的卷积核, 提取出不同的特征, 再将这些特征合并起来(在通道维度上). 不同角度的特征的表现一般比单一卷积核要好.

卷积神经网络技巧总结第2张

存在的问题:

  • 参数量比单核多很多, 模型训练效率低下

0x03 Bottleneck, (1 imes{1})卷积核

作用: 控制通道数量, 大幅减少神经网络的参数数量, 加快网络的训练.

Inception网络中, 由于引入了多种尺寸的卷积核, 参数数量的爆炸, 需要使用(1 imes{1})卷积核来减少参数的数量.

卷积神经网络技巧总结第3张

以其中一个(3 imes{3})卷积核为例, 说明如何减少:

卷积神经网络技巧总结第4张

在卷积核之前加入一个(1 imes{1})卷积核, 将通道数量由原来的256压缩到64. 经过(3 imes{3})卷积核计算后, 再使用另一个(1 imes{1})卷积核将通道数量恢复.

  • 原来的(3 imes{3})卷积核参数的数量为: (256 imes{3} imes{3} imes{256} = 589824)
  • 使用(1 imes{1})卷积核处理后的参数数量为: (256 imes{1} imes{1} imes{64} + 64 imes{3} imes{3} imes{64} + 64 imes{1} imes{1} imes{256} = 69632)

参数量降到原来的将近九分之一.

0x04 空洞卷积(Dilated convolution)

标准的(3 imes{3})卷积核只能看到(3 imes{3})矩形区域的大小, 为了增大卷积核的感受野, 可以在标准的卷积核里注入空洞, 使卷积核拥有更大的范围, 但卷积点仍然为9个.

标准卷积核空洞卷积核

上面就是标准卷积核与空洞卷积核的工作方法. 对于空洞卷积核引入了新的超参数: dilation rate. 指的是核中点的间隔数量, 标准卷积核的dilation rate为1.

对于空洞卷积, 这篇文章如何理解空洞卷积中的回答很全面, 下面的内容也是大部分来自于这篇文章, 加以组织.

相关论文:

MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS

Understanding Convolution for Semantic Segmentation

Rethinking Atrous Convolution for Semantic Image Segmentation

首先讨论空洞卷积核的问题:

  • The Gridding Effect

    使用dilation rate为2的(3 imes{3})卷积核多次叠加, 这里的叠加指的是多层相同的空洞卷积叠加作用, 则会出现下图的情况:

    卷积神经网络技巧总结第7张

    上图是多层(3 imes{3})空洞卷积核的叠加, 红色为中心, 最左侧红色中心由中心和周围的蓝色点卷积得到, 而蓝色的每个点, 又由他们本身与周围的8个点卷积得到, 也就是发散到了中间的图. 如此继续叠加, 最终红色中心的值由周围若干个点卷积得到, 如右图. 蓝色越深表示卷积权重越大.

    可以观察得到的是, 空洞卷积叠加之后, 等效的卷积核并不连续, 计算每个点的时候, 并不是周围所有的pixel点都用来计算了, 因此会损失信息的连续性. 这对于某些问题来说是致命的.

  • 如何同时处理不同大小的物体关系

    空洞卷积核设计的本身是为了获取大范围的信息, 但是如果采用大的dilation rate获取的信息只对大的物体具有分割效果, 对于小的物体可能就采集不到了. 因此, 如何均衡两者, 是空洞卷积设计的关键为题.

然后就是空洞卷积核的设计方法, Hybrid Dilated Convolution:

  1. 叠加卷积的dilation rate不能有大于1的公约数, 如[2, 4, 6]不是可行的三层卷积, 会出现gridding effect.

  2. 将dilation rate设计成锯齿结构, 如 [1, 2, 5, 1, 2, 5] 循环结构.

  3. 满足式子(M_i=max[M_{i+1}-2r_i, M_{i+1}-2(M_{i+1}-r_i), r_i])

    其中(r_i)(i)层的dilation rate, (M_i)是到(i)层最大的dilation rate, 对于最后一层(n), 就有(M_n=r_n), [1, 2, 5]就是一个可行的方案.

锯齿状本身的性质就比较好的来同时满足小物体大物体的分割要求, 小的dilation rate关心近距离信息, 大的dilation rate关心远距离信息.

一个良好设计的空洞卷积网络能够有效的避免gridding effect:

卷积神经网络技巧总结第8张

0x05 可变形卷积核(Deformable convolution)

传统的卷积核都是正方形, 因此只能提取固定范围, 固定形状的特征. 可变性卷积核则认为卷积核的形状是可以变化的, 即卷积核应当聚集于它真正感兴趣的图像区域.

卷积神经网络技巧总结第9张

实现这种操作, 需要添加一个新的卷积核, 将这个卷积核作用于输入的feature map, 目的是学习卷积采样的位置偏移量(offset). 这个偏移参数如同正常的卷积核参数一样, 直接通过训练一起得到, 不需要额外的监督标签.

假设作用在2D的feature map上, 需要设定的这个偏移量卷积核的通道数应当是feature map通道数的两倍, 因为每个通道中的每个pixel都需要计算x方向和y方向两个方向上的偏移量.

卷积神经网络技巧总结第10张

总结下, deformable convolution由两步组成:

  • 使用偏移量卷积核在输入的feature map上采样
  • 将采样值与标准卷积核卷积求和, 输出新的feature map

由于单纯的使用偏移量采样, 将会产生对不连续位置求导的问题, 使用双差值方法, 将任何一个位置的输出转换为对于输入的feature map插值计算的结果.

关于可变形卷积核的详解, 包含差值方法参见Deformable Convolution Networks[译], 使用keras实现的可变卷积核Layerkingofoz / deform-conv.

通道技巧

0x01 DepthWise

标准卷积核对输入的feature map的所有通道都会进行计算. 而DepthWise方法则将图像区域通道分开考虑:

卷积神经网络技巧总结第11张

  • 首先, 对输入的feature map中的每个通道, 各自进行卷积操作, 有多少个通道就有多少个filter
  • 对经过filters处理得到的新的feature map, 使用标准的(1 imes{1})卷积核跨通道操作, 得到最后的输出结果. 输出通道有多少, 就有多少个(1 imes{1})卷积核.

这种操作被称为DepthWise convolution, 最大的好处就是降低了参数的数量. 因为使用了(1 imes{1})卷积核, 所以一般参数量会降为直接使用标准卷积核的九分之一. 而且这种方法在降低参数的同时, 不会拉低模型的表现, 甚至会取得更好的表现.

0x02 ShuffleNet

ShuffleNet其实是两种技术的结合:

  1. DepthWise: 上面的方法, ShuffleNet没有使用传统的卷积方法.
  2. Group Convolution: channel分组进行卷积. 即卷积核不是对输入的feature map中的所有通道进行计算, 而是只选取一部分. 然后把所有分组的结果合并在一起作为卷积最后输出的结果. 在AlexNet中, 最先被提出.

ShuffleNet在每次对feature map进行分组卷积(Group conv)操作前, 对所有通道进行洗牌随机分组, 然后每组使用DepthWise的方式进行卷积.

卷积神经网络技巧总结第12张

上图中的(b)就是标准的Group Convolution方法, channels被平均分配到不同组里面, 然后通过全连接层来融合所有组的特征. (c)就是shuffle group conv的方法.

0x03 SEnet(通道加权计算)

标准卷积方法中, 每个卷积核都是对所有的通道进行卷积, 然后直接加和在一起, 即相当于所有通道的权重是平等的. SEnet认为不同的通道, 对模型的贡献是不同的, 因此有必要引入通道的权重参数.

卷积神经网络技巧总结第13张

网络的整体结构如上图:

  • 对于输入的feature map即(X), 其特征通道数为(c_1). 通过正常的卷积变换, 得到的输出的feature map的通道数量为(c_2). 这一步与标准卷积没有区别.
  • 然后就要对当前的输出结果进行调整. 通过三个操作来实现:
    • 首先是Squeeze操作, 对输出的feature map进行压缩, 通过Global Average Pooling, 将每个通道压缩成一个实数, 这样就得到了长度为(c_2)的通道向量. 这个向量某种程度上具有全局的感受野, 表征着在特征通道上响应的全局分布.
    • 然后是Excitation操作, 通过参数来为每个特征通道生成权重, 这里的参数是可被学习的, 被学习用来显式地建模特征通道间的相关性. 论文中把这一列特征通道向量输入两个全连接层和sigmoid转换得到.
    • 最后是Reweight操作, 将上一步的输出的权重, 看作是进过特征选择后的每个特征通道的重要性, 然后通过乘法逐通道加权到先前的特征上, 完成在通道维度上的对原始特征的重标定.

卷积神经网络技巧总结第14张

连接技巧

0x01 ResNet(skip connection)

神经网络的层数加深时, 网络表现难以提高, 甚至会降低, 原因即熟悉的梯度消散, 使得反向传播很难训练到考前的层中. 残差网络(ResNet)通过skip connection技巧, 可以解决这个问题, 使得梯度更容易地流动到浅层的网络当中去.

卷积神经网络技巧总结第15张

至于能够起作用的原因, 可以参见这篇文章: 对ResNet的理解. 简单概括如下:

卷积神经网络技巧总结第16张

这种skip connection的方式, 可以被分解. 如图中右侧的三层串联的Residual module, 可以被分解成左侧的多种路径组合的网络. 因此, 残差网络其实是很多并行子网络的组合, 整个残差网络其实相当于一个多人投票系统Ensembling.

0x02 DenseNet

skip connection只连接了上一层的输出作为本层输出的一部分, DenseNet中的每一层输出结果都是前面所有层输出结果的叠加.

卷积神经网络技巧总结第17张

关于DenseNet的细节请阅读论文Densely Connected Convolutional Networks.

免责声明:文章转载自《卷积神经网络技巧总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇用bat文件传值(可读取系统环境变量)给c#控制台应用程序Python面向对象之反射下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用Java语言开发机器学习框架和参数服务器

https://github.com/wudikua/ps 本项目是我自己动手实现的机器学习训练框架,代码简单,有很多不完善,但是也保留了最小可用功能 通过自己编写这个项目,可以帮助自己入门机器学习 准备 1. 学习梯度下降法训练LR模型原理,了解机器学习一般的套路 2. 学习神经网络的模型结构,正向传导和反向传导 3. 学习一些python写的神经网络,...

多视觉任务的全能: HRNet

多视觉任务的全能: HRNet HRNet是微软亚洲研究院的王井东老师领导的团队完成的,打通图像分类、图像分割、目标检测、人脸对齐、姿态识别、风格迁移、Image Inpainting、超分、optical flow、Depth estimation、边缘检测等网络结构。王老师在ValseWebinar《物体和关键点检测》中亲自讲解了HRNet,讲解地非常...

机器学习相关的面试问题

机器学习: 伪代码实现:LR、梯度下降、最小二乘、KNN、Kmeans; 基本知识:1)监督与非监督区别;2)L1L2区别;3)生成模型和判别模型区别 算法的优缺点以及相应解决方案:k-means, KNN, apriori 算法原理:LR、KNN、k-means、apriori、ID3(C45,CART)、SVM、神经网络,协同过滤,em算法 常见问题:...

机器学习sklearn(四十二):算法实例(十一)分类(五)RandomForestClassifier(二)实例:随机森林在乳腺癌数据上的调参

案例中,往往使用真实数据,为什么我们要使用sklearn自带的数据呢?因为真实数据在随机森林下的调参过程,往往非常缓慢。真实数据量大,维度高,在使用随机森林之前需要一系列的处理,因此不太适合用来做直播中的案例演示。在本章,我为大家准备了kaggle上下载的辨别手写数字的数据,有4W多条记录700多个左右的特征,随机森林在这个辨别手写数字的数据上有非常好的表...

谷歌发布"自动机器学习"技术 AI可自我创造

谷歌发布"自动机器学习"技术 AI可自我创造 据Inverse报道,今年5月份,谷歌宣布其人工智能(AI)研究取得重大进展,似乎帮助科幻小说中最耸人听闻的末日预言成为现实。谷歌推出名为“自动机器学习(AutoML)”的技术,在无需人类工程师的支持下,允许AI进行自我创造。 从表面上看,这种技术可能会让人觉得AI发展终于迎来“奇点时刻”,它正在失去控制。但...

cnn经典网络-深度残差网络resnet

转自:https://www.cnblogs.com/yanshw/p/10576354.html 深度残差网络resnet 解决问题 深度网络的退化问题:深度网络难以训练,梯度消失,梯度爆炸,老生常谈,不多说 resnet 解决了这个问题,并且将网络深度扩展到了最多152层。怎么解决的呢? 残差学习 在普通的卷积过程中加入了一个x的恒等映射(ident...