前言

VGG16采用大量的简单卷积网络堆叠,使得计算量巨大,严重消耗性能,后来逐渐出现了很多新架构的神经网络,能够在大量减少计算量的情况下保证相同或者更优秀的正确率,同时网络存储空间占用也将大大减少。比如MobileNet, 经过测试表明,MobileNet能够在获得与VGG16获得相同准确率的结果情况下,占用空间比VGG16小32倍,速度快10倍以上,可以说深度网络发展的过程就是一个朝着模型正确率越高,同时网络模型大小越小的一个过程。

GoogleNet

最开始的AlexNet采用了一些如11*11,5*5等之类的很大的卷积核,当时人们认为卷积核越大,卷积的视野越大,获取到的信息越多,得到的特征越好。然后大的卷积和会带来大量的计算量,对性能要求比较高。随着卷积神经网络的发展,人们发现,使用两个3*3的卷积核的效果会比使用一个5*5的效果好,同时随着网络的加深,网络的效果会越好,所以VGG就采用了大量的3*3的卷积和分组堆叠,在当时获得了世界领先的效果。

但是又过了段时间,人们发现在同一层中使用不同尺寸的卷积核带来的效果比使用单一尺度的卷积核的效果好,于是人们使用在一个卷积层中,使用了一个1*1卷积,一个5*5卷积,一个3*3卷积结合,产生了GoogleNet,如图所示,获得了比VGG16更高的准确率。

深度学习前沿:一文看懂近年来卷积神经网络性能优化历程-深度学习中文社区

GoogleNet单层结构图

1*1卷积-Inception

但是同一层中的参数量比使用单一的尺度的卷积核时多了很多,使网络效率很低下。于是Google团队又受1*1卷积核参数量较少的启发,在GoogleNet中引入了一些1*1的卷积核,单层网络结构如图3-6所示。经过这样的变化后,使网络的参数量降低到了原来的九分之一,大大加快了网络的计算速度。

深度学习前沿:一文看懂近年来卷积神经网络性能优化历程-深度学习中文社区

使用1*1卷积改进GoogleNet模型

深度可分离卷积-Xception

在标准的卷积过程中,一般同一区域所有通道是被同时计算的,而Xception网络则考虑了先对每个通道单独做卷积,卷积核数与输入通道数相同,再对得到的结果做1*1的跨通道标准卷积。这种方式被称为深度可分离卷积(DepthWise convolution),也被简写为"DW"。

深度学习前沿:一文看懂近年来卷积神经网络性能优化历程-深度学习中文社区

那么这种方式能为我们减少多少参数量呢,我们假设输入通道为3,输出通道为256,则标准3*3卷积的参数量为3*3*3*256 =6912,而使用DW卷积的参数量为3*3*3+3*1*1*256=795,可见,使用DW操作将参数量又降为了原来的1/9,而且网络准确率几乎没有下降。

MobileNet

介绍到这里,我们将要介绍的MobileNet采用的优化技术已经与Xception非常接近了,不同之处在于这两网络深度不同,同时MobileNet为了在不重新设计模型的情况下,加入了两个超参数,宽度因子与分辨率因子,能够在只改动这两个参数的情况下最快的获得更快和占用内存更小的神经网络。

宽度因子α的范围为0到1,表示的是新构建的网络每一层卷积层中使用的卷积核数占标准MobileNet中的对应卷积计算层中的卷积核数的比例,调整α的取值,可以将参数量与计算量减少到α的平方倍,不同α取值,获得的在图像识别任务上的取得的准确率如下表所示。

深度学习前沿:一文看懂近年来卷积神经网络性能优化历程-深度学习中文社区

不同宽度因子的MobileNet取得的准确率

分辨率因子β的范围为0到1,表示的是每个卷积层输入的尺寸是标准MobileNet的尺寸的比例,不同β取值,获得的在图像识别任务上的取得的准确率如下表所示。

深度学习前沿:一文看懂近年来卷积神经网络性能优化历程-深度学习中文社区

不同分辨率因子的MobileNet取得的准确率

同时1*1卷积在计算时不需要使用im2col方式对数据进行重新排列,加快了计算速度,MobileNet使用了将近四分之三的1*1卷积,大大提高了网络计算速度。完整的MobileNet模型结构如下表所示.

深度学习前沿:一文看懂近年来卷积神经网络性能优化历程-深度学习中文社区