卷积神经网络上目前深度学习应用在图像处理和自然语言处理的非常具有代表性的神经网络,其经历了不断的优化发展,性能越来越强。在图像处理、计算机视觉领域的应用包括图像特征提取、目标分类、目标分割、目标识别等。相比于传统的神经网络需要将一定的特征信息作为输入,卷积神经网络可以直接将原始图像或经过预处理之后的图像作为网络模型的输入,一个卷积神经网络通常包括输入输出层和多个隐藏层,隐藏层通常包括卷积层和RELU层(即激活函数)、池化层、全连接层和归一化层等。卷积神经网络中有三个基本的概念:局部感受野(Local Receptive Fields)、共享权值(Shared Weights)、池化(Pooling)。 (1)局部感受野。对于全连接式的神经网络,图像的每一个像素点连接到全连接的每一个神经元中,造成大量的计算量,而卷积神经网络则是把每一个卷积核的点只连接到图像的某个局部区域,从而减少参数量。 (2)共享权值。在卷积神经网络的卷积层中,神经元对应的权值是相同的,由于权值相同,因此可以减少训练的参数量。 (3)池化。类似于人的视觉观察物体原理,关注点由大到小,首先输入图像往往都比较大,在卷积过程中通过不断提取特征,并且经过池化操作来对图像进行缩小,同时提取低阶和高阶的抽象特征信息。 卷机的原理和各种卷积的变种在之前的文章里提过。(深度学习系列(一)常见的卷积类型)
1、LeNet-52、AlexNet特点:3、VGG16/19特点:4、GoogLeNet /Inception v15、Inception V26、Inception V37、Inception V4
《Gradient-based learning applied to document recognition》
最早提出的卷积神经网络,一共有7层,3个卷积层,2个池化层,2个全连接层,卷积核大小都是5×5,模型中含有可训练参数的只有卷积层和全连接层,因此为LeNet-5,LeNet-5的提出是解决手写数字识别Mnist的自动识别问题,对MNIST数据集的分识别准确度可达99.2%
《ImageNet Classification with Deep Convolutional Neural Networks》 https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf Alexnet模型是一种更深的更宽的版本。该模型在ILSVRS 2012年的比赛中一举夺冠,top-5错误的概率下降到16.4%,识别的准确度有了质的飞跃,从而刮起了深度卷积学习之热。AlexNet网络结构更为复杂,有五层卷积,卷积核大小有11×11、5×5、3×3,三层全连接网络,最终的输出层是1000通道的softmax,具有8个可训练参数的层,利用了两块GPU进行计算,大大提高了运算效率。很多pretrained的方法就是使用VGG的model(主要是16和19)。
1-ReLU作为CNN的激活函数,成功解决了Sigmoid在网络较深的时候出现的梯度弥散的问题(也就是常说的梯度消失) 2-训练数据集的时候加入Dropout随机忽略一部分的神经元,从而避免模型的过拟合问题,增加模型的泛化能力。在Alexnet中主要是后面的几个全连接层使用。 3-使用最大池化(Max Pool),这可以很好的解决平均池化的模糊问题 4-提出了LRN(Local Response Normalization,局部响应归一化)层概念,具有对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得更大,而对响应比较小的值更加加以抑制,从而增强模型的泛化能力。
《Very Deep Convolutional Networks for Large-Scale Image Recognition》https://arxiv.org/abs/1409.1556 VGG是Oxford的Visual Geometry Group提出的在ILSVRC 2014上的相关工作,证明了增加网络的深度能够在一定程度上影响网络最终的性能。VGG有两种结构,分别是VGG16和VGG19,两者并没有本质上的区别,只是网络深度不一样。
1-多个小卷积核代替一个大卷积核,使用了3个3x3卷积核来代替AlexNet的7x7卷积核,使用了2个3x3卷积核来代替AlexNet的5x5卷积核,在保证具有相同感知野的情况下提升网络的深度,在一定程度上提升了神经网络的效果。从参数量的角度看,3个3x3的卷积参数总量为 3x(9xC1xC2),7x7卷积核参数总量为 49xC1xC2,这里C1和C2 指的是输入和输出的通道数。很明显,27xC1xC2小于49xC1xC2,可以减少参数,而且3x3卷积核有利于更好地保持图像性质。 2-VGG耗费大量计算资源,主要来自于第一个全连接层。
Going Deeper with Convolutions》https://arxiv.org/abs/1409.4842 之前在构建神经网络的时候只考虑了模型的深度,GooLeNet将网络的宽度考虑进来,并定义为Inception结构,是一个稀疏网络结构,称为网中网(network in network),就是本来的网络节点设计成一个小网络。
Inception module 的提出主要考虑多个不同 size 的卷积核能够增强网络的适应力,分别使用1x1、3x3、5x5卷积核,同时加入3x3 max pooling。
为了对输出有效进行降维,因此文章提出了Inception module with dimension reduction,在4个分支后引入1x1卷积,在不损失模型特征表示能力的前提下,尽量减少 filters 的数量,达到降低模型复杂度的目的。Inception Module 的4个分支在最后通过一个聚合操作合并。 1x1卷积的主要目的是为了减少维度,上一层的输出为100x100x128,经过具有256个通道的5x5卷积层之后,输出数据为100x100x256,其中,卷积层的参数为128x5x5x256= 819200。而假如上一层输出先经过具有32个通道的1x1卷积层,再经过具有256个输出的5x5卷积层,那么输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256= 204800,大约减少了4倍。
具体网络结构如下
《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》https://arxiv.org/abs/1502.03167 在Inceptiion v2中,借鉴VGG用两个3x3卷积代替5x5的大卷积,既可以降低参数也可以增加更多的非线性变换。
另外提出了著名的 Batch Normalization(以下简称BN)方法。BN 是一个非常有效的正则化方法,可以让大型卷积网络的训练速度加快很多倍,同时收敛后的分类准确率也可以得到大幅提高。BN 在用于神经网络某层时,会对每一个 mini-batch 数据的内部进行标准化(normalization)处理,使输出规范化到 N(0,1) 的正态分布,所以可以减少或者取消Dropout和LRN,简化网络结构 BN的主要优势: 1-避免了由于不同batch的数据分布不一样导致数据存在covariance shift。 2-梯度不会随着数据的变化而发生太大的变化,因此选择学习率时可以稍微大一点而不用担心模型发散。 3-像sigmoid这样的激活函数只有在数据接近0的地方梯度明显,当数据的绝对值非常大时,梯度是会很小的甚至接近0的,这会使得网络非常的难以训练,但是batch normalization后数据范围基本被限制在了0附近,因此激活函数也可以有更多选择了。 具体网络结构如下:
《Rethinking Inception Architecture for Computer Vision(Inception v3)》https://arxiv.org/abs/1512.00567 在Inception V3中,引入非对称卷积,用n x 1 + 1 x n的卷积核代替了n x n的卷积核,这样比把3x3变成2x2更能节省计算量,非对称卷积即卷积核不是一个方阵,而是一个矩形,如下图。
3x3的卷积变换为下图
Inception V3还变换了增加特征图维度的方式,以往特征图再进行pool之前都要把维度升起来保证模型的表达能力不受影响,但是这样的操作太耗时了,V3用一个并行(conv + pooling两个path的stride都为2)来实现,然后再把两者拼起来即可。它很cheap并且避免了representation瓶颈。如下图
Inception v3整体架构
《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》https://arxiv.org/pdf/1602.07261.pdf Inception V4 相比 V3 主要是结合了微软的ResNet引入了Residual模块,文中一共缔造了三种网络,分别叫Inception-v4、Inception-ResNet-v1以及Inception-ResNet-v2,其中Inception-v4中没有使用残差模块,但是网络深度比原来更深了。后两个网络则引入的残差模块,但是在设计上还是略有不同 下图是Inception-v4的结构
Stem模块为:
Inception-v4网络35×35网格的框架(对应图中Inception-A块):
Inception-v4网络17×17网格块的框架(对应图中Inception-B块):
Inception-v4网络的8×8网格模块的框架(对应图中Inception-C块):
不同的Inception模块的连接,减小了feature map,却增加了filter bank。 35x35变为17x17模块,即Reduction-A :
17x17变为8x8模块,即Reduction-B :
Inception-ResNet V1和V2基本结构相同,细节不同
Inception-ResNet-v1的Stem模块:
Inception-ResNet-v2和Inception-v4使用相同的Stem模块,Inception-resnet是细节不同的残差模块。
本文分享自 Python编程和深度学习 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!