CNN 取得的大多数进展并非源自更强大的硬件、更多的数据集和更大的模型,而主要是由新的想法和算法以及优化的网络结构共同带来的结果。
原标题 | Illustrated: 10 CNN Architectures
翻译 | 廖颖、had_in(电子科技大学)、爱曼纽•西蒙(东南大学)
所谓“常见”,我指的是那些深度学习库(如TensorFlow、Keras和PyTorch)共享的有预训练权重的模型,以及通常在课堂上所讲的模型。其中一些模型在ImageNet大规模视觉识别挑战赛(ILSVRC)等竞赛中取得了成功。
将讨论的10个架构及对应论文的年份
我们将讨论在Keras中具有预训练模型的6种架构。上图改编自Keras文档中的一个表。
写这篇文章的初心是考虑到目前没有太多图解网络结构的博客和文章(如果你知道相关的文章,请分享给我吧)。所以我决定写一篇文章来作为参考。出于这样的目的,我阅读了许多论文和代码(大多来自TensorFlow和Keras)来完成这篇文章。
补充一点,我们平时看到的卷积神经网络架构是很多因素的结果——升级的计算机硬件、ImageNet比赛、处理特定的任务、新的想法等等。Google 研究员 Christian Szegedy曾提到:
CNN 取得的大多数进展并非源自更强大的硬件、更多的数据集和更大的模型,而主要是由新的想法和算法以及优化的网络结构共同带来的结果。(Christian Szegedy等人,2014)
现在我们继续介绍,看看网络结构是如何慢慢优化起来的。
关于可视化图的说明:可视化图中没有再标注卷积核数量、padding、stride、dropout和拉平操作。
LeNet-5
AlexNet
VGG-16
Inception-v1
Inception-v3
ResNet-50
Xception
Inception-v4
Inception-ResNets
ResNeXt-50
图1:LeNet-5架构,引自他们的论文
LeNet-5是最简单的架构之一。它有2个卷积层和3个全连接层(因此是“5”——神经网络的名称通常是由它们拥有的卷积层和全连接层的数量派生出来的)。我们现在所知道的平均池化层被称为子采样层,它具有可训练的权重(和当前设计CNNs不同)。这个架构有大约60,000个参数。
这种架构已经成为标准的“模板”:叠加卷积层和池化层,并以一个或多个全连接层结束网络。
论文:Gradient-Based Learning Applied to Document Recognition
作者:Yann LeCun, Léon Bottou, Yoshua Bengio, and Patrick Haffner
发表于:Proceedings of the IEEE (1998)
图2:AlexNet结构,引自他们的论文
AlexNet网络有6千万个参数,8个网络层——5个卷积层和3个全连接层。相比于LeNet-5,AlexNet只是堆了更多的网络层。
在论文发表时,作者指出AlexNet是“在ImageNet子集上训练的最大的卷积神经网络之一。”
创新点:
1.他们首次实现将线性整流函数(ReLus)作为激活函数。
2.使用卷积神经网络的重叠池化。
发表:
论文:深度卷积神经网络用于ImageNet分类
作者:Alex Krizhevsky, IIya Sutskever, Geoffrey Hinton. 加拿大,多伦多大学
发表于:2012年神经信息处理系统会议(NeurIPS 2012)
图3:VGG-16架构,引自他们的论文
你现在应该已经注意到CNNs开始变得越来越深了。这是因为提高深度神经网络性能最直接的方法是增加它们的大小(Szegedy et. al)。Visual Geometry Group (VGG)的工作人员提出了VGG-16,它有13个卷积层和3个全连接层,继续采用了AlexNet的ReLU激活函数。同样,这个网络只是在AlexNet上堆叠了更多的层。它有138M的参数,占用大约500mb的磁盘空间。他们还设计了一种更深的变型,VGG-19。
创新点:
正如他们在摘要中提到的,本文的贡献在于设计了更深层次的网络(大约是AlexNet的两倍)。
发表:
论文:Very Deep Convolutional Networks for Large-Scale Image Recognition
作者:Karen Simonyan, Andrew Zisserman. University of Oxford, UK.
arXiv 印本, 2014
图4:Inception-v1架构。这个CNN有两个辅助网络(在推断时被丢弃)。体系结构引自论文中的图3。
这个22层网络架构具有5M的参数,被称为 Inception-v1 网络 。这个架构,如论文中所述,大量使用了Network In Network(参见附录)方法。这是通过“Inception 模块”实现的。Inception模块的架构设计是对稀疏结构近似研究的产物(更多信息请阅读论文)。每个模块有3个点改进:
1.使用不同卷积的并行拓扑结构,然后进行连接,获得1×1、3×3和5×5卷积提取的不同特征,从而对它们进行“归并”。这一想法的灵感来自Arora等人在论文Provable bounds for learning some deep representations,改论文提出了一种逐层构建的方法,即分析最后一层的相关统计数据,并将其归并成具有高相关性的单元组。
2.采用1×1卷积进行降维,消除计算瓶颈。
3.1×1卷积在卷积层中加入非线性(基于Network In Network论文)。
作者还引入了两个辅助分类器,以使分类器在较浅层的网络部分也进行识别,以增加反向传播的梯度信息,并提供额外的正则化。辅助网络(连接到辅助分类器的分支)在推断时被丢弃。
创新点:
使用稠密modules/blocks构建网络。我们并非堆叠卷积层,而是堆叠modules或blocks,其中包含卷积层。Inception得名于2010年由莱昂纳多·迪卡普里奥主演的科幻电影《盗梦空间》。
发表:
论文:Going Deeper with Convolutions
作者:Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich. Google, University of Michigan, University of North Carolina
发表于:2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)
创新点:
引入BN层(为了简单起见,没有反映在上面的图中 )。
与之前的版本 Inception-v1 相比,有什么改进?
将7×7卷积替换为一系列3×3个卷积
发表:
论文:Rethinking the Inception Architecture for Computer Vision
作者:Christian Szegedy, Vincent Vanhoucke, Sergey Ioffe, Jonathon Shlens, Zbigniew Wojna. Google, University College London
发表于:2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)
创新点:推广跳连接结构skip connections (
发表:
论文:Deep Residual Learning for Image Recognition
作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun. Microsoft
发表于:2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)
图7:Xception 架构,基于keras-team在GitHub上的代码。通道独立卷积层被记作'conv sep'。
Xception是从Inception上改进,Inception模块用通道独立卷积层替换。它与Inception-v1的参数数量大致相同(23M)。
Xception将Inception假设引入eXtreme(因此而得名)。那么什么是Inception假设?谢天谢地,文章中明确提到了这一点(感谢François!)
首先,通过1x1卷积核捕获跨通道(或交叉特征映射)相关性。
其次,通过常规3x3或5x5卷积捕获每个通道内的空间相关性。
将这个想法运用到极致意味着对每个通道执行1x1卷积,然后对每个输出执行3x3。这与用通道独立卷积替换初始模块相同。
引入完全基于通道独立卷积层的CNN。
论文:Xception: Deep Learning with Depthwise Separable Convolutions
作者:François Chollet. Google.
发表于:2017 IEEE Conference on Computer Vision and Pattern Recognition(CVPR)
论文:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
作者:Christian Szegedy, Sergey Ioffe, Vincent Vanhoucke, Alex Alemi. Google.
发表于:Proceedings of the Thirty-First AAAI Conference on Artificial Intelligence
与前一个版本 Inception-v3 相比,有什么改进?
1.将 Inception模块转化为Residual Inception模块。
2.加入更多的Inception模块。
3.在Stem模块之后添加一个新的Inception模块(Inception-A)。
发表:
论文:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning
作者:Christian Szegedy, Sergey Ioffe, Vincent Vanhoucke, Alex Alemi. Google
发表于:Proceedings of the Thirty-First AAAI Conference on Artificial Intelligence
Fig. 10: ResNeXt架构, 引自对应论文.
发表:
论文:Aggregated Residual Transformations for Deep Neural Networks
作者:Saining Xie, Ross Girshick, Piotr Dollár, Zhuowen Tu, Kaiming He. University of California San Diego, Facebook Research
发表于:2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)
1.MLP卷积层, 1×1卷积
2.全局平均池化(取每个特征map的平均值,并将结果向量输入softmax层)
发表:
论文: Network In Network
作者: Min Lin, Qiang Chen, Shuicheng Yan. National University of Singapore
arXiv印本, 2013
这里把10个网络结构的可视化图再罗列一下,作简单的回顾:
这里有一些资源可以让你可视化你的神经网络:
Netron (https://lutzroeder.github.io/netron/)
TensorBoard API by TensorFlow(https://www.tensorflow.org/tensorboard/r1/overview)
plot_model API by Keras(https://keras.io/visualization/)
pytorchviz package(https://github.com/szagoruyko/pytorchviz)
CNN Architectures: LeNet, AlexNet, VGG, GoogLeNet, ResNet and more ….
A Simple Guide to the Versions of the Inception Network
我使用了提出了上述网络体系结构的论文作为参考。除此之外,这里还有一些我在本文中引用的文章:
https://github.com/tensorflow/models/tree/master/research/slim/nets(github.com/tensorflow)
Implementation of deep learning models from the Keras team(github.com/keras-team)
Lecture Notes on Convolutional Neural Network Architectures: from LeNet to ResNet (slazebni.cs.illinois.edu)
Review: NIN — Network In Network (Image Classification)(towardsdatascience.com)
via https://towardsdatascience.com/illustrated-10-cnn-architectures-95d78ace614d