徐九 · 2022年11月17日 · 北京市

经典CNN设计演变的关键总结:从VGGNet到EfficientNet

image.png

卷积神经网络设计史上的主要里程碑:模块化、多路径、因式分解、压缩、可扩展

一般来说,分类问题是计算机视觉模型的基础,它可以延申解决更复杂的视觉问题,例如:目标检测的任务包括检测边界框并对其中的对象进行分类。而分割的任务则是对图像中的每个像素进行分类。

卷积神经网络(CNNs)首次被用于解决图像分类问题,并且取得了很好的效果,所以在这个问题上,研究人员开始展开竞争。通过对ImageNet Challenge中更精确分类器的快速跟踪研究,他们解决了与大容量神经网络的统计学习相关的更普遍的问题,导致了深度学习的重大进展。

在本文中我们将整理一些经典的CNN模型,详细介绍这些模型的设计理论和关键设计点:

VGGNet

我们介绍的第一个CNN,命名是为VGGNet[2]。它是AlexNet[3]的直接继承者,AlexNet[3]被认为是第一个“深度”神经网络,这两个网络有一个共同的祖先,那就是Lecun的LeNet[4]。

我们从它开始,尽管它的年代久远,但是由于VGGNet的特殊性,,直到今天仍然站得住脚(这是极少数的DL模型能够做到的)。第一个介绍VGGNet还有一个原因是它还建立了后续cnn所采用的通用组件和结构。

如上图1所示,卷积神经网络从一个输入层开始,它与输入图像具有相同的尺寸,224x224x3。

然后,VGGNet堆叠第一个卷积层(CL 1),其中包括64个大小为3x3的核,输出一个224x224x64的张量。

接下来,它在具有相同配置的64个通道上堆叠使用相同大小的3x3核的CL 2,生成相同尺寸的特征映射。

然后,使用filter size为2x2、填充和步幅为2的最大池化来降低特征映射的空间分辨率,从224x224x64降低到112x112x64。最大池并不影响特性映射深度,因此通道的数量仍然是64。

这里我将这三层之上称作module 1,一般情况下也被称作stem,可以理解为它提取的是最基本的线条特征。我们将其称为module 被是因为它定义为以一定分辨率操作的处理单元。所以我们可以说VGGNet的module 1以224x224分辨率工作,并生成分辨率为112x112的特征图,后面的module 2继续在其上工作。

类似地,module 2也有两个带有3x3核的CLs,用于提取更高级别的特征,其次是最大池化,将空间分辨率减半,但核的数量乘以2,使输出特征映射的通道数量翻倍。

每个module 处理输入特征映射,将通道加倍,将空间分辨率除以2,以此类推。但是不可能一直这样做,因为module 6的空间分辨率已经是7x7了。

因此,VGGNet包括一个从3D到1D的展平(flatten)操作,然后应用一个或两个稠密层,最后使用softmax计算分类概率(这里是1000个标签)。

让我们总结一下VGGNet引入的设计模式,以在准确性方面超越所有以前的研究:

✅模块化架构允许卷积层内的对称性和同质性。通过构建具有相似特征的卷积层块,并在模块之间执行下采样有助于在特征提取阶段保留有价值的信息,使用小核,两个 3x3 核的卷积的感知范围可以等效于单个 5x5 的感知范围。级联的小核卷积也增强了非线性,并且可以获得比具有一层更大核的更好的精度。小核还可加快 Nvidia GPU 上的计算速度。

✅ 与平均池化或跨步卷积(步幅大于 1)相比,最大池化操作是一种有效的下采样方法。最大池化允许捕获具有空间信息的数据中的不变性。因为图像分类任务需要这种空间信息减少才能达到类别分数的输出,而且它也被“流形假设”证明是合理的。在计算机视觉中,流形假设指出 224x224x3 维度空间中的真实图像表示非常有限的子空间。

✅ 将整体下采样与整个架构中通道数量的增加相结合形成金字塔形结构。通道的倍增补偿了由于学习到的特征图的空间分辨率不断降低而导致的表征表达能力的损失。在整个层中,特征空间会同步变窄和变深,直到它准备好被展平并作为输入向量发送到全连接层。每个特征都可以看作一个对象,其存在将在整个推理计算过程中被量化。早期的卷积层捕获基本形状,因此需要的对象更少。后面的层将这些形状组合起来,创建具有多种组合的更复杂的对象,所以需要大量的通道来保存它们。

Inception

接下来介绍与VGGNet[2]同年出现但晚一点的第二个CNN,Inception[5]。这个名字的灵感来自克里斯托弗诺兰的著名电影,这个网络引发了关于“寻求更深层次的 CNN”的争论,并很快变成了一个问题。事实上,深度学习研究人员意识到,如果能正确训练更深层次的神经网络,那么获得的准确性就越高,尤其是在涉及 ImageNet 等复杂分类任务时。简而言之,更多的堆叠层提高了神经网络的学习能力,使其能够捕捉复杂的模式并并能在复杂的数据中进行泛化。

但是设法训练更深的网络是非常困难的。堆叠更多层会产生成本,并使训练神经网络变得更加困难。这是由于梯度消失问题,当损失梯度通过无数计算层反向传播,并逐渐收敛到几乎为零的微小的值时,就会发生这种情况。因此训练网络的早期层(距离输入近的层)变得很复杂,这些层无法执行特征提取并将提取的信息传递给后续层。

在Inception中,研究人员在一个深度级别上模拟了几个层。这样既增强了神经网络的学习能力,又扩大了神经网络的参数空间,避免了梯度的消失。

上图 2 是这个多尺度处理层的内部视图结构。关注蓝色🟦 组件,我们看到一个 nxnx3 的输入层和一个 nxnxΣki 的输出层。它不是应用 k 个大小为 3x3 的卷积滤波器,而是并行应用多个处理层。相同的输入将同时通过 1x1 卷积、3x3 卷积、5x5 卷积和最大池化(步长为 1 以保持分辨率)。然后将所有生成的大小为 nxnxk1、nxnxk3、nxnxk5 和 nxnxk 的特征图连接成大小为 nxnxΣki 的输出特征图。

但是我们看到多尺度的特征的维度并不相同,所以这里的红色🟥组件聚合来自不同感知领域和处理路径的多尺度特征。每条路径至少产生 k 个通道,其中 k 是输入通道的数量。

🔔记住我之前提到的:使用最大池层的下采样阶段不会影响通道数。

但是堆叠多个多尺度层肯定会引发内存不足异常,为了克服这个问题初始设计者引入了逐点卷积,只是经典的卷积层,但是核大小为1x1,这样r < k,从而有效地减少特征图的深度,而不会牺牲此时提取的相关数据处理水平。

Inception的主要设计成果:

✅多路径是基于在体系结构中包含多重分支的想法,模拟单个神经网络中的子网络的集成。这种多尺度分层是很重的(资源需求和计算大),从来没有被广泛采用,但是在一个层内组合多条路径的能力激发了后续神经网络的发展。

✅1x1卷积是计算机视觉中一种非常有用和普遍的工具。这是一种低成本的操作,参数占用小,处理时间相对较快。使用它可以有效地减少在输出特征图中的通道数量,使神经网络需要更少的内存和计算能力。增加额外的1x1卷积层会减少参数的数量,这是因为每一层的参数数量受到输入通道数量的强烈影响。

ResNet

接下来是ResNet[6],它是最具革命性的深度学习发明之一,也是被引用次数最多的研究论文之一🥇。这是因为ResNet是第一个成功堆叠超过100层的CNN。在当时100个层完全是疯狂的想法。现在我们谈论的是transformers中的一千亿个参数都是很平常的事情。但是在当时,如果告诉你ResNet有100层时,你肯定会先问:他们解决了梯度消失的问题了吗?这是ResNet出名的原因。因为今天我们不再听到梯度消失问题任何声音了。

让我们看看这个革命性的技巧。我们使用VGGNet模块化架构,并更改单个块的内容。如下图3所示,残差块有nxnx3作为输入,也有nxnx3作为输出。

处理路径之一是一个带有3x3核的标准卷积,然后在它旁边添加一个快捷/跳过连接💡,即,一个直接将输入传递到输出的单位函数。这是深度学习领域最具革命性的创新之一。乍一看可能很奇怪,但你想得越多它就越合乎逻辑。

Resnet是一堆模块加上下采样,然后是堆叠更多模块加上再次下采样。在模块内包含一个残差块,其中包含将输入链接到输出的跳过/残差连接。输入的数据只通过这些快捷连接,这正是 ResNet 解决梯度消失问题的原因。

当输入通过快捷连接(一个恒等函数)时如何不丢失梯度?有两件事可以解释:

A)ResNet的跳过连接允许绕过给定输入数据的任何不必要的处理级别,因为深度神经网络中的一些层可能与检测应用于对象子集的特定模式有关。

B)我们可以假设输入包含响应,计算层的目标是细化它,直到推导出类。因此在每个级别添加处理结果作为迭代细化时,维护原始输入流是有意义的。

因为ResNet的出现,所以ImageNet社区决定不再进行神经网络层数堆叠挑战,因为问题已经解决,争论也差不多结束了。研究人员已经开始着手解决其他的问题,例如:试图减少FLOPS或内存占用的总数。这就是我接下来要讨论的神经网络。

MobileNet

我们在成本最小化时代的第一个CNN是MobileNet[7]。它是一个紧凑的CNN,参数较少,在移动平台上运行速度快,同时也提供高性能。

💡MobileNet的诀窍在于将卷积运算分解为两阶段的超高效处理。

如上图4所示,经典的卷积层通过3D过滤器,每个核在输出特征映射中产生一个通道。作为一种替代方案,MobileNet提出了一种深度卷积,其中应用一堆仅二维过滤器,这些过滤器通过输入张量的所有通道。

它所做的只是采用了单个过滤器的结果,不是将它们相加而是让它们保持非连接,这只是一个经典卷积的应用?

是的,但是这样做的话,最终会得到许多独立的特征地,如果我们只是将它们连接起来,那么不同的渠道之间将不再有任何关联。但是我们忽略了两点:一是特征映射需要链接,二是通道需要改变。

来自Inception的一个重要结论就出来了:当我们想要以较低的代价改变通道的数量时,我们使用点(1x1)卷积。

所以MobileNet将点向卷积应用到由深度卷积得到的特征图上。如下图5所示,使用任意数量的1x1过滤器来生成任意数量的通道。例如乘以k来得到典型的特征映射,其大小为nxnxk。

在图5中,首先看到一个处理2D空间信息的深度卷积,然后是一个合并和处理z维通道信息的点卷积。

MobileNet v2

MobileNet已经发布了第二个版本。MobileNet v2[8]是一个残差神经网络,也就是说它将残差块堆叠到更深的层次,除了在层内部,它还分解了卷积操作,以达到成本效益。

💡MobileNet v2将这些层划分为一组处理高维数据处理,另一组压缩信息并将其传输到相邻的层。

上图6中是MobileNet v2的基础块。首先使用点卷积达到高维k > r,然后使用深度卷积有效地分析信息,最后再次使用点向卷积返回低维。除此以外还包含了一个从输入层到输出层的快捷连接。

这样的压缩是如何在不降低性能的情况下工作呢?这个可以参考VGG中提到的系统下采样的假设。

EfficientNet

EfficientNet[9],这篇文章中要讨论的最后一个CNN。尽管它是在2019年底发布的,但它已经老了。如图7所示,该网络的性能超过了目前为止所有其他神经网络。

让我们详细看看是什么让它如此强大。EfficientNet可以说是MobileNetv2,在网络规模上的调整。它真的很简单,并且非常有效,这也可能是它被称作Efficient的原因吧。

EfficientNet也会堆叠反向残差块,但对神经网络的深度、宽度和分辨率的任意选择提出了自己的理解:网络的深度对应于网络的层数。宽度与一层中的神经元数量相关,或者更确切地说,与卷积层中的核器数量相关。分辨率是输入的高度和宽度。

💡EfficientNet提出了一种简单但有效的缩放技术,使用复合系数ɸ以原则性的方式均匀缩放网络的宽度、深度和分辨率。ɸ是一个用户定义的全局比例因子(整数),它控制可用资源的数量,而α、β和γ决定如何分别将这些资源分配给网络深度、宽度和分辨率。

因此,通过设置ɸ=1,可以使用网格搜索确定超参数- α, β和γ-。由于网络规模小,计算速度快。当确定最优超参数时,可以增大复合系数ɸ,从而得到更大、更精确的模型。这就是不同版本的efficiency entnet: B1到B7是如何构造的,B旁边的整数表示复合系数的值。

使用这个网络规模启发式的方法优于所有最先进的cnn,尽管所有的设计结构和模式都与MobileNet v2相同。

上面说的是高情商的解释,如果你看不懂的话那么低情商的解释是什么呢:EfficientNet是暴力调参的结果😏

总结

2014年是深度学习的元年。现在当你看到VGGNet、ResNet或EfficientNet时可能觉得已经很老了,但是他们的改进和里面的思路对于我们来说还是非常重要的,这些论文都是值得阅读和实验的。如果你对CNN感兴趣,可以去看看efficient entnetv2[10],它是在2021年底发布的。

推荐阅读
关注数
4139
内容数
718
SegmentFault 思否旗下人工智能领域产业媒体,专注技术与产业,一起探索人工智能。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息