季长清,高志勇,秦 静,汪祖民*
(1.大连大学物理科学与技术学院,辽宁大连 116622;2.大连大学信息工程学院,辽宁大连 116622;3.大连大学软件工程学院,辽宁大连 116622)
近年来伴随着深度学习的兴起,计算机视觉所覆盖的诸多领域逐步进入人们的视野和应用,其中图像识别技术相关的研究和应用进展较为突出。追溯自20 世纪中叶开始,图像分类技术在计算机视觉领域便取得了长足的发展,而最近几年在人工神经网络的大发展背景下,基于卷积神经网络(Convolutional Neural Network,CNN)的图像分类技术在智能数据采集和高效处理中也取得了较好的效果。
众所周知图像分类技术在互联网应用的诸多领域有着良好的应用前景,例如:航空遥感和海洋遥感图像的分析以及人脸识别等。早期的图像识别分类技术大都是把人作为设计特征的对象。对于不同的识别场景,大多数应用的特征需要由相应的专家人为地进行识别。其原理主要依靠的是设计者的先验知识,然后再根据特定的数据类型和领域特性进行人为的手工编码,这样做将很难进行海量数据的处理,存在效率极其低下等瓶颈问题。另外人为特征的设计只支持有限参数量,提取的特征会直接影响系统的性能,很可能导致实验结果不理想。在当今大数据时代,通过人工进行数据提取特征并不合适。新型的基于深度学习和CNN的方法可以通过自动执行提取和自我学习特征,有效地减少开发和优化新特征提取器的任务。本文将从CNN 结构的深度化、模块化的角度给出图1 中几种不同的网络模型的发展历程。
图1 深度神经网络模型发展历程Fig.1 Development history of deep neural network model
20 世纪80 年代,因为多层感知机模型被提出,计算机在数字识别方面表现出出色的处理能力,但由于当时受限于计算机能力,尤其是CPU 和存储等资源的处理能力,使能够处理的数据规模较小、模型表达能力一般,通常不能处理复杂的图片问题。2006 年Hinton 等提出了对网络模型进行逐层预训练的算法,通过增加人工神经网络的层数,使得具有多隐藏层的人工神经网络具备了强大的特征学习能力。他们通过训练具有小中心层的多层神经网络来重构高维的输入向量,通过编码降维,有效地降低了神经网络的深层次训练难度。除此之外,另有研究者使用支持向量机以克服训练深度CNN 所遇到的部分困难。其后,深度学习的概念和CNN 的迅速发展受到了研究人员的广泛关注。21 世纪初期,谷歌和微软等诸多互联网技术公司纷纷投入大量人力、物力进行大规模深度学习系统的研发与商用。
卷积运算作为一个多层的前馈神经网络模型,它的网络结构特征在于每一层中都单独使用一组卷积核,其有助于从局部相关的数据点中提取有用的特征。在训练过程中,CNN通过反向传播算法来进行学习。这种反向传播算法优化后的目标函数采用了一种基于响应的类人脑学习机制。反向传播算法和CNN 的不断成功,使得人工智能领域进入了新的发展阶段。
在处理复杂的学习问题时,深度架构取得的效果通常比浅层架构更好,尤其是LeNet 卷积神经网络模型在Minst 数据集上的优异表现之后,又相继出现了AlexNet、VGG、GoogLeNet、ResNet和MobileNet等相关网络模型,它们在医疗图像处理、实例分割等领域中均获得了广泛的应用。
CNN 仿照生物的神经网络,采用了核心的权重共享网络结构,使其可以通过改变网络的深度和宽度来进行调整网络模型量级。本章将对流行的深度神经网络模型的部分代表性的组件进行归纳与总结。
CNN 模型对自然图像有很强的假设性,即统计平滑性和局部相关性。卷积操作可以有效降低网络模型的学习复杂度,使网络连接和权重参数更少,这使得它比同规模的全连接网络更容易训练。常见的卷积操作有以下四种:普通卷积、转置卷积、扩张卷积和深度可分离卷积。
普通卷积是利用卷积核在图像上滑动,经过一系列的矩阵运算最终完成所有图像像素灰度值计算的过程;转置卷积实现了与普通卷积反向的采样操作,被广泛地运用于语义分割、图像识别等领域;扩张卷积又称空洞卷积、膨胀卷积,就是将空洞注入卷积核之中,这样做的目的就是增加模型的感受野,以此来进行更好的特征提取,扩张卷积在图像识别等任务中取得了较好的表现性能;深度可分离卷积也被扩展用于轻量级的网络模型MobileNet,与普通卷积方式相比,大幅地减少了网络模型运算时所需要的参数,最为重要的是深度可分离卷积实现了普通卷积操作中通道和区域的分离。卷积方式的改进,在一定程度上缓解了特征提取上的问题。
1943 年,心理学家McClloch 等基于神经元的生理特征,建立了单个神经元的数学模型,模型中提到了激活函数(Activation function)的概念。激活函数的应用增加了神经网络模型的非线性。常用的激活函数有线性整流函数(Rectified Linear Unit,ReLU)、随机线性整流函数(Randomized ReLU,RReLU)、指数线性函数(Exponential Linear Unit,ELU)等。ReLU 是最显著的非饱和激活函数之一,如图2 所示,其数学表达式如下:
图2 ReLU函数Fig.2 ReLU function
尽管ReLU 为0 时的不连续性可能会损害反向传播的性能,仍有研究表明ReLU 比Sigmoid 和tanh 激活函数更有效。
梯度下降是一种用于训练神经网络的简单方法,但需要人为地进行参数选择,导致研究者很多的时间都浪费在不确定的调参工作中。2015 年谷歌团队提出了归一层(Batch Normalization,BN)的构想。利用该方法可以使研究者选择较大的学习率,让模型在训练速度增长很快的同时,也让模型具有快速收敛性。
其中:参数ε
是为了避免被零除,用于增加数值稳定性;可学习的参数β
和γ
用于将数据调整到一个合理的分布范围内。池化层是当前CNN 中常用组件之一,自AlexNet 一文之后采用Pooling 命名。池化层通过模仿人的视觉系统对数据进行降维,利用更高层次特征来表示图像。
池化层可以非常有效地缩小矩阵的尺寸,即可以对图像的局部区域中的不同位置的特征执行集合统计操作,从而缓解卷积层对图像位置的过度敏感性,减少最后全连接层中的参数,加快计算速度。
实践中最常用的池化方式为Max Pooling、Average Pooling和Spatial Pyramid Pooling等。池化操作除了降低模型计算量、降低信息冗余以外,也在不同程度上提高了模型的尺度不变性和旋转不变性,有效地防止了过拟合。各种池化方式的改进也更好地实现了特征压缩、特征提取,大幅地减少了模型训练所需要的时间。
基于深度学习的CNN 可用于图像的识别分类。该方法从大量数据中自动学习特征用来提高模式识别系统的性能。目前常规图像分类网络的方法大多直接采用常见的深度卷积网络来直接进行图像分类,比如AlexNet、VGG、GoogleNet、ResNet以 及MobileNet等,它们曾在ImageNet 大规模视觉识别挑战赛(Imagenet Large Scale Visual Recognition Challenge,ILSVRC)上证明自己的应用价值。本章将介绍经典的网络模型。
LeCun 等于1998年提出历史上第一个CNN方法LeNet-5 并进行改进,被用于手写数字的识别。LeNet-5 定义了CNN 的基本结构,其可看作是卷积网络模型的鼻祖。LeNet-5 用较少的参数在多个位置提取相似特征,这不仅能减少可学习参数的数量,而且能够自动从原始像素中学习特征。它能够在不受小失真影响的情况下对手写数字进行分类,当时的很多银行将其用来识别支票上面的手写数字。LeNet-5 网络模型共有7 层,如图3 所示,分别是C1 卷积层、S2 池化层、C3 卷积层、S4 池化层、C5 卷积层、F6 全连接层、输出层。
图3 LeNet-5模型的结构Fig.3 Structure of LeNet-5 model
AlexNet可以被称为第一个现代深度卷积网络模型,首次使用了很多现代深度卷积网络技术。它是由Hinton 研究组于2012 年在Large Scale Visual Recognition Challenge 中提出的一种模型。他们取得了当年的最好成绩,以15.3%的错误率拿到第一名,比第二名算法(26.1%)的错误率降低了10.8 个百分点。其主要贡献在于:1)首次使用多GPU 进行并行训练,克服了硬件限制深度CNN 架构学习能力的缺陷;2)采用ReLU 作为非线性激活函数,缓解了梯度消失问题,提高了网络模型的收敛速度;3)使用Dropout 层防止过拟合。图4 展示了全连接层与Dropout 层的区别;4)通过参数优化策略增强CNN 学习能力。
图4 全连接层与Dropout层原理模型Fig.4 Principle model of fully connected layer and Dropout layer
重叠二次采样和局部响应归一化也被用于减少过拟合来提高泛化能力。以上诸多优点使卷积网络模型具有高效的学习能力,并让它在新一代CNN 中具有重要意义。
stride
=1、padding
=1 的卷积核,相较于AlexNet 中11×11、5×5、3×3 的卷积核,它的参数量更少,计算代价更低。3)VGG 卷积网络模型使用了几个小卷积核(3×3)的组合,这比使用一个大卷积核(5×5、11×11)的卷积层要好。因为小尺寸卷积核的使用减少了参数的数量,提供了低计算复杂度的额外好处。同时它验证了通过不断加深网络结构可以提高性能。虽然VGG 在图像分类问题上展现出良好的结果,但是它使用了较多的参数,耗费了较多的计算资源,导致其在低资源系统上部署困难,这迫切需要研究新的算法和开发新的并行计算系统。
GoogLeNet是谷歌团队于2014 年 在Large Scale Visual Recognition Challenge 上提出的一种模型。GoogLeNet 与VGG都有很深的网络层数。虽然GoogLeNet 有22 层之多,但它的参数量只有500 万,AlexNet 的参数量是GoogLeNet 的15 倍,VGG 的参数量是GoogLeNet 的3 倍;所以在计算机硬件资源有限的情况下,GoogLeNet 是用于图像分类的一个比较好的选择。进一步提升卷积网络性能的直接方法是加深网络的深度、宽度,但是这样做存在很多问题,比如:1)由于参数过多,若是在训练数据集有限的情况下,很容易产生过拟合,而采用大数据集则会产生高成本;2)网络模型越大、参数越多,计算复杂度越大,越难应用;3)深层网络,容易出现梯度弥散的问题,难以优化。
谷歌的研究团队提出了Inception(初始模块)的概念,用以构造基础神经元,搭建一个稀疏的高性能计算的网络结构。如图5 所示,在这个CNN 中,一个卷积层包含多个不同大小的卷积操作,它能够产生稠密的数据,也保证了计算资源的使用效率。继最初的Inception V1 模块之后,Google 相继给出了Inception V2、Inception V3、Inception V4等模块结构,其改进再次取得了长足的进步。另外它使用稀疏连接,用以解决冗余信息的问题,并通过省略不相关的特征图来降低成本。最后GoogLeNet 网络模型使用全局平均池化来降低连接密度,而不是使用全连接层。
图5 Inception模块概念模型Fig.5 Inception module conceptual model
f
(x,m
)去逼近一个目标函数H
(x
),将目标函数拆分成两部分:恒等函数和残差函数。H
(x
)=x
+f
(x
,m
) (6)其中:H
(x
)为残差模块;x
为恒等函数;f
(x,m
)为残差函数。其原理如图6 所示。图6 残差模块结构Fig.6 Residual module structure
嵌入式设备不能采用复杂庞大的模型,如何研究小而高效的卷积网络模型非常重要。Google 团队在2017 年提出了MobileNet,它是专注于移动端或者嵌入式设备中的轻量级CNN。随后2018 年Google 提出了MobileNet V2,2019 年Google提出了MobileNet V3。相较于传统的CNN,MobileNet V3 在牺牲小幅度准确率的前提下,使得模型参数量大幅减少。在ImageNet 上的测试结果表明,相较于VGG-16 模型,其准确率减少了0.9%,但它的模型参数只有VGG-16 模型的3.1%。MobileNet 采用深度可分离卷积层,如图7所示,即首先对特征图的各通道进行逐深度卷积(Depthwise Convolution),然后进行逐点1×1卷积(Pointwise Convolution),以达到缩小计算量和模型参数量的目的。
图7 深度可分离卷积层结构Fig.7 Deep separable convolution layer structure
利用深度CNN 去处理图像是目前热门研究方向之一。本文总结了CNN 的发展,讨论了CNN 的部分模型。但CNN仍然面对着以下几个问题:
1)从理论上讲,将CNN 应用于新领域的一个关键问题是,需要很多先前的实践经验来选择合适的超参数,这些超参数具有内部依赖性,这使得它们的调整成本特别高。如何更好地处理这些参数仍然是个问题。
2)从应用上讲,网络模型对硬件计算能力、大规模数据的依赖性、训练模型的动态适应能力等都是目前迫切需要解决的问题。
CNN 和深度学习总体上仍然是活跃的研究领域,在未来仍有许多学习的潜力值得探索研究和挖掘。另外,在图像识别领域后来也出现了新的研究方法与思路。比如Transformer模型结构,有很多工作者试图把Transformer 模型引入到图像中去。比如尝试在CNN 中引入Transformer 的自注意力机制,或者直接用Transformer 模型结构替换卷积块。这些尝试也都取得了较好的成绩,比如DeiT、Pyramid Vision Transformer、Swin Transformer网络等。除了上述研究思路外,将深度学习与强化学习结合应用于图像分类领域也是未来的重要研究方向之一。