本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过 SOTA 的经典模型逐一详解。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
本文将分 3 期进行连载,共介绍 15 个在图像分类任务上曾取得 SOTA 的经典模型。
- 第 1 期:AlexNet、VGG、GoogleNet、ResNet、ResNetXt
- 第 2 期:DenseNet、MobileNet、SENet、DPN、IGC V1
- 第 3 期:Residual Attention Network、ShuffleNet、MnasNet、EfficientNet、NFNet
您正在阅读的是其中的第 2 期。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
第 1 期回顾:图像分类必备经典模型,一文打尽知多少?(一)
本期收录模型速览
模型 | SOTA!模型资源站收录情况 | 模型来源论文 |
DenseNet | https://sota.jiqizhixin.com/models/models/5c51c076-350d-4d1c-a142-66c6e04b6e61 收录总数:18 支持框架:CANN、PyTorch、TensorFlow、PaddlePaddle、Torch等 |
Densely Connected Convolutional Networks |
MobileNet | https://sota.jiqizhixin.com/models/models/111fcb54-cf50-49f0-a340-2b80ce56ae4c 收录总数:8 支持框架:TensorFlow、CANN、PaddlePaddle、PyTorch等 |
MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications |
SENet | https://sota.jiqizhixin.com/models/models/c7dfc0ec-ee5d-4d85-866d-0b4ac306e1ff 收录总数:15 支持框架:CANN、PyTorch、MindSpore、PaddlePaddle、TensorFlow等 |
Squeeze-and-Excitation Networks |
DPN | https://sota.jiqizhixin.com/models/models/4431847d-c2b1-4cba-a31a-fa5585495abb 收录总数:8 支持框架:CANN、PyTorch、TensorFlow、MindSpore、PaddlePaddle等 |
Dual Path Networks |
IGC V1 | https://sota.jiqizhixin.com/models/models/8a1636be-753d-4b72-a4c7-ec7a9f6ffc6f 收录总数:1 支持框架:MXNet |
Interleaved Group Convolutions for Deep Neural Networks |
图像分类是计算机视觉领域最经典的任务之一,目的是将输入的图像对应到预定义的语义类别中,即打上类别标签。传统的图像分类方法由底层特征学习、特征编码、空间约束、分类器设计、模型融合等步骤组成。
首先,从图像中提取特征,经典的特征提取方法包括 HOG(Histogram of Oriented Gradient, 方向梯度直方图) 、LBP(Local Bianray Pattern, 局部二值模式)、SIFT(Scale-Invariant Feature Transform, 尺度不变特征转换)等,也可以将多种特征融合以保留更多有用信息。然后,对特征进行编码后去除冗余和噪声,生成特征编码,经典方法包括稀疏编码、局部线性约束编码、Fisher 向量编码等。再然后,经过空间特征约束后实现特征汇聚,例如经典的金字塔特征匹配方法。最后,利用分类器进行分类,经典分类器包括 SVM、随机森林等等。
Alex Krizhevsky 在 2012 年 ILSVRC 提出的 CNN 模型首次将深度学习应用于大规模图像分类任务,其效果远超传统的图像分类方法,一举获得 ILSVRC 2012 的冠军,开启了深度学习模型在图像分类中的应用历程。这个模型就是著名的 AlexNet。自此,图像分类改变了传统的致力于提取有效的特征、改进分类器的有效性的研究和应用路径,转为研究不同的深度学习模型架构。
深度卷积神经网络为图像分类带来了一系列突破。深度神经网络集成了低/中/高层次的特征,可以被端到端训练,特征的层次可以通过网络的深度来丰富。甚至有研究人员称,正是在图像分类任务中应用的巨大成功,带动了深度学习的方法。
DenseNet
DenseNet 是 CVPR 2017 年的 Best Paper。DenseNet 脱离了加深网络层数 (ResNet) 和加宽网络结构 (Inception) 来提升网络性能的定式思维。DenseNet 的思路是通过特征重用和旁路 (Bypass) 设置,在减少参数量的同时缓解梯度消失、模型退化问题。
考虑一个通过卷积网络的单一图像 x_0。该网络由 L 层组成,每个层都实现了非线性变换 H_(·),其中 l 指代该层。H_(·) 可以是一个操作的复合函数,如批量归一化(BN)、整顿线性单元(ReLU)、池化或卷积(Conv)。为了进一步改善各层之间的信息流,作者提出了一种不同的连接模式:作者引入了从任何一层到所有后续层的直接连接。图 11 示意性地说明了 DenseNet 的结构:第 l 层接收前面所有层的特征图作为输入。
[x_0,...X_(l-1)] 是指在第 0、...、l-1 层产生的特征图的串联。由于其密集的连接性,将这种网络结构称为密集卷积网络(DenseNet)。将 H_(·)
定义为三个连续操作的复合函数:批量归一化(BN),然后是 ReLU 和 3×3 卷积(Conv)。当特征图的大小发生变化时,连接操作是不可行的。然而,卷积网络的一个重要部分是改变特征图大小的下采样层。为了便于在架构中进行下采样,将网络分为多个密集连接的密集块。我们把块间的层称为过渡层,过渡层执行卷积和池化操作。实验中使用的过渡层包括一个批处理归一化层和一个 1×1 卷积层,然后是一个 2×2 平均池化层。
图 1 一个有三个密集块的 DenseNet
如图 1 所示,DenseNet 两个相邻块之间的层被称为过渡层,通过卷积和池化改变特征图的大小。
如果每个函数 H 产生 k 个特征图,那么,第 l 层有 k_0+k×(l-1) 个输入特征图,其中k_0 是输入层的通道数。DenseNet 与现有网络架构的一个重要区别是,DenseNet 可以有很窄的层,例如,k=12。我们把超参k称为网络的增长率。每一层都可以访问其块中所有先前的特征图,因此,可以访问网络的 "collective knowledge",我们可以把特征图看作是网络的整体状态,每一层都在这个状态中加入自己的 k 个特征图。全局状态可以从网络中的任何地方访问,而且与传统的网络架构不同,不需要在层与层之间进行复制。虽然每层只产生 k 个输出特征图,但它通常有更多的输入。可以在每个 3×3 卷积之前引入一个 1×1 卷积作为瓶颈层,以减少输入特征图的数量,从而提高计算效率。作者发现这种设计对 DenseNet 特别有效,于是把带有这种瓶颈层的网络,即 H_l 的BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3) 版本,命名为 DenseNet-B。
为了进一步优化模型的简洁性,可以在 transition layer 中降低 feature map 的数量。若一个 Dense block 中包含 m 个 feature maps,那么我们使其输出连接的 transition layer 层生成 ⌊θ_m⌋ 个输出 feature map。其中 θ 为压缩因子。当 θ=1 时,transition layer 将保留原特征维度不变。作者将使用压缩处理且 θ=0.5 的 DenseNet 命名为DenseNet-C,将引入瓶颈层和压缩处理且 θ=0.5 的 DenseNet 命名为 DenseNet-BC。
当前 SOTA!平台收录 DenseNet 共 18 个模型实现资源,支持的主流框架包含 CANN、PyTorch、TensorFlow、PaddlePaddle、Torch 等。
模型 | SOTA!平台模型详情页 |
DenseNet | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/5c51c076-350d-4d1c-a142-66c6e04b6e61 |
MobileNet (MobileNet系列)
MobileNet 模型是 Google 针对手机等嵌入式设备提出的一种轻量级的深层神经网络,其核心思想是depthwise separable convolution(深度可分离卷积),而整个网络实际上就是深度可分离卷积模块的堆叠。该系列包括 MobileNet v1、v2 和 v3。
MobileNet V1 是由 Google 在 2016 年提出,CVPR 2017 发表的文章。深度可分离卷积已被证明是轻量级网络的有效设计,它是因子化卷积的一种形式,将标准卷积分解为深度卷积和 1×1 卷积,称为逐点卷积(pointwise)。对于移动网络来说,纵深卷积对每个输入通道应用一个单一的过滤器。然后,逐点卷积应用 1×1 卷积来组合逐深度卷积的输出,主要作用就是对特征图进行升维和降维。标准卷积在一个步骤中对输入进行过滤并合并成一组新的输出。深度可分离卷积则分成两层,一个单独的过滤层和一个单独的组合层。这种因子分解具有大幅减少计算和模型大小的效果。图 2 显示了一个标准卷积(图 2(a))是如何被分解成逐深度卷积(图 2(b))和 1×1 逐点卷积(图 2(c))的。
图2. (a)中的标准卷积滤波器被两层所取代:(b)中的逐深度卷积和(c)中的逐点卷积,以建立一个深度可分离的滤波器
标准卷积层将 DF×DF×M 的特征图 F 作为输入,产生 DF×DF×N 的特征图 G,其中DF 是正方形输入特征图的空间宽度和高度,M 是输入通道的数量(输入深度),DG 是正方形输出特征图的空间宽度和高度,N 是输出通道的数量(输出深度)。标准卷积层的参数是大小为 DK×DK×M×N 的卷积核 K,其中 DK 是假定为方形的核的空间维度,M 是输入通道数,N 是前面定义的输出通道数。假设跨度为 1,标准卷积的输出特征图计算为:
标准卷积的计算成本为:
其中,计算成本为输入通道数 M、输出通道数 N、内核大小 Dk×Dk 和特征图大小DF×DF 的倍数。MobileNet 模型解决了这些条款中的每一项及其相互作用。首先,它使用深度可分离卷积来打破输出通道的数量和内核的大小之间的相互作用。
深度可分离卷积是由两层组成的:逐深度卷积和逐点卷积。我们使用逐深度卷积来为每个输入通道(输入深度)应用一个过滤器。顺时针卷积,一个简单的 1×1 卷积,被用来创建深度层输出的线性组合。每个输入通道有一个滤波器的纵深卷积 (输入深度)可以写作:
K^为大小为 DK × DK × M 的深度卷积核。逐深度卷积的计算成本为:
逐深度卷积相对于标准卷积来说是非常有效的。然而,它只是对输入通道进行过滤,并没有将它们结合起来以构建新的特征。因此,需要一个额外的层,通过 1×1 卷积计算深度卷积输出的线性组合,以产生这些新的特征。深度可分离卷积成本为:
通过将卷积表达为过滤和组合的两步过程,减少了计算量:
对比标准卷积和深度可分离卷积的计算量就会发现,因为卷积核的尺寸 K 通常远小于输出通道数 ,因此标准卷积的计算复杂度近似为 DW + PW 组合卷积的 K^2 倍。计算量减少,模型的计算过程自然会快。MobileNet 使用 3×3 的深度可分离卷积,比标准卷积的计算量少了 8 到 9 倍,而准确度只是略有下降。
MobileNet v1 的结构定义在表 1 中。除了最后的全连接层没有非线性之外,所有的层都有一个 batchnorm 和 ReLU,并将其送入一个 softmax 层进行分类。
表1 MobileNet的结构
图 3 将具有常规卷积、batchnorm 和 ReLU 的层与具有逐深度卷积、1×1 逐点状卷积以及 batchnorm 和每个卷积层后的 ReLU 的因子化层进行了对比。在逐深度卷积和第一层中,向下采样是用分层卷积处理的。在全连接层之前,最后的平均集合将空间分辨率降低到1。将逐深度和逐点卷积算作独立的层,MobileNet 有 28 层。
图 3. 左图:带有 batchnorm 和 ReLU 的标准卷积层。右图:深度可分离卷积层与逐深度和逐点数层,然后是 batchnorm 和 ReLU。
由图 3,MobileNet v1 的结构实际上非常简单,是类似于 VGG 的直筒结构,没有复用图像特征。此外,逐深度卷积也存在一些问题,一是在处理低维数据(比如逐深度的卷积)时,relu 函数会造成信息的丢失;二是,DW 卷积由于本身的计算特性决定它自己没有改变通道数的能力,上一层给它多少通道,它就只能输出多少通道。所以如果上一层给的通道数本身很少的话,DW 也只能在低维空间提特征,因此效果不够好。
与 v1 相比,MobileNet v2 提出了 Bottleneck Residual Block(瓶颈残差模块)(《MobileNetV2: Inverted Residuals and Linear Bottlenecks》https://arxiv.org/pdf/1801.04381.pdf)。MobileNet v2 最后的 Point-Wise 卷积的ReLU 都换成了线性函数,作者将这个操作命名为 linear bottleneck 。深度卷积本身没有改变通道的作用,为了能让深度卷积能在高维上工作,v2 提出在深度卷积之前加一个扩充通道的卷积操作,即增加一个 1x1 卷积。这种在深度卷积之前扩充通道的操作在 v2 中被称作 Expansion layer 。此外,v2 在 v1 网络结构基础上加入了跳跃连接。相较于引入跳跃连接的 ResNet 的残差块结构,v2 给这种结构命名为 Inverted resdiual block,即倒残差块。如图 4 所示。
图 4 残差块和倒残差的区别
对角线上加盖的层不使用非线性。我们用每个块的厚度来表示它的相对通道数。注意经典的残差是如何连接通道数量多的层的,而倒置的残差则是连接瓶颈的
综合上述三个关键点:Linear Bottlenecks、Expansion layer 和 Inverted resdiual 之后就组成了 MobileNet v2 的 block,如图 5 所示。
图5 MobileNet v2 结构
MobileNet v3 是谷歌于 2019 年提出的(《Searching for MobileNetV3》1905.02244.pdf (arxiv.org))。在 v2 网络的基础上,v3 提出了四个大的改进措施:一是,使用 NAS 神经架构搜索确定网络结构;二是在 v2 的 block 基础上引入Squeeze and Excitation 结构;三是使用 h-swish 激活函数;四是对 v2 网络尾部结构进行改进。MobileNet v3 的结构如图 6。
图 6 MobileNet v3 结构
当前 SOTA!平台收录 MobileNet 共 8 个模型实现资源,支持的主流框架包含 TensorFlow、CANN、PaddlePaddle、PyTorch 等。
模型 | SOTA!平台模型详情页 |
MobileNet | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/111fcb54-cf50-49f0-a340-2b80ce56ae4c |