图像分类,一文入魂(上)

Posted AI浩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像分类,一文入魂(上)相关的知识,希望对你有一定的参考价值。

摘要

图像分类技术一直都是计算机视觉领域的研究热点。近几年来,深度学习算法在图像分类方面取得了突破性进展,通过建立层级特征自动提取模型,得到更准确且接近图像高级语义的特征。卷积神经网络(CNN)是一种识别率很高的深度学习模型,能够提取具有平移、缩放、旋转等不变性的结构特征。这一篇文章是对常用的图像分类模型做总结,包括LeNet-5、AlexNet、VGGNet、GoogLeNet、Resent、ResNeXt、Densenet、SeNet、EfficientNet、EfficientNetV2以及最新的Transformer 模型ConViT 。

如果大家认可,请多转发收藏,有不对的地方也请大家指正。

1 LeNet-5

1.1 模型介绍

LeNet-5是由LeCun在1994年提出的一种用于识别手写数字和机器印刷字符的卷积神经网络(Convolutional Neural Network,CNN),是卷积神经网络的开山之作,其命名来源于作者LeCun的名字,5则是其研究成果的代号,是LeNet的第五个版本。LeNet-5阐述了图像中像素特征之间的相关性能够由参数共享的卷积操作所提取,同时使用卷积、下采样(池化)和非线性映射这样的组合结构,是当前流行的大多数深度图像识别网络的基础。

1.2 模型结构

如上图所示,LeNet-5一共包含7层(输入层不作为网络结构),分别由2个卷积层、2个下采样层和3个连接层组成。

1.3 各层参数详解

1、输入层-INPUT
首先是数据 INPUT 层,输入图像的尺寸统一ReSize为 32 ∗ 32 32*32 3232

注意:本层不算LeNet-5的网络结构,传统上,不将输入层视为网络层次结构之一。

2、 C 1 C1 C1​层-卷积层
卷积层的计算公式参考这篇文章:CNN基础——卷积神经网络的组成_AI浩-CSDN博客

输入图片: 32 × 32 32×32 32×32

卷积核大小: 5 × 5 5×5 5×5

卷积核种类: 6 6 6

输出featuremap大小: 28 × 28 ( 32 − 5 + 1 ) = 28 28×28 (32-5+1)=28 28×28325+1=28

神经元数量: 28 × 28 × 6 28×28×6 28×28×6

可训练参数: ( 5 × 5 + 1 ) × 6 (5×5+1) × 6 5×5+1)×6(每个滤波器 5 × 5 = 25 5×5=25 5×5=25个unit参数和一个bias参数,一共6个滤波器)

连接数: ( 5 × 5 + 1 ) × 6 × 28 × 28 = 122304 (5×5+1)×6×28×28=122304 5×5+1×6×28×28=122304

详细说明:对输入图像进行第一次卷积运算(使用 6 个大小为 5 × 5 5×5 5×5 的卷积核),得到6个 C 1 C1 C1特征图(6个大小为28×28的 feature maps, 32 − 5 + 1 = 28 32-5+1=28 325+1=28)。我们再来看看需要多少个参数,卷积核的大小为 5 × 5 5×5 5×5,总共就有 6 × ( 5 × 5 + 1 ) = 156 6×(5×5+1)=156 6×5×5+1=156个参数,其中+1是表示一个核有一个bias。对于卷积层C1,C1内的每个像素都与输入图像中的5×5个像素和1个bias有连接,所以总共有 156 × 28 × 28 = 122304 156×28×28=122304 156×28×28=122304个连接(connection)。有 122304 122304 122304个连接,但是我们只需要学习156个参数,主要是通过权值共享实现的。3、 S 2 S2 S2​层-池化层(下采样层)
输入: 28 × 28 28×28 28×28

采样区域: 2 × 2 2×2 2×2

采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid

采样种类: 6 6 6

输出featureMap大小: 14 × 14 ( 28 / 2 ) 14×14(28/2) 14×1428/2

神经元数量: 14 × 14 × 6 14×14×6 14×14×6

连接数: ( 2 × 2 + 1 ) × 6 × 14 × 14 (2×2+1)×6×14×14 2×2+1×6×14×14

S2中每个特征图的大小是C1中特征图大小的1/4。

详细说明:第一次卷积之后紧接着就是池化运算,使用 2×2核 进行池化,于是得到了S2,6个 14 × 14 14×14 14×14的 特征图 ( 28 / 2 = 14 ) (28/2=14) 28/2=14。S2这个pooling层是对C1中的2×2区域内的像素求和乘以一个权值系数再加上一个偏置,然后将这个结果再做一次映射。同时有 5 × 14 × 14 × 6 = 5880 5×14×14×6=5880 5×14×14×6=5880个连接。

4、C3层-卷积层
输入:S2中所有6个或者几个特征map组合

卷积核大小: 5 × 5 5×5 5×5

卷积核种类:16

输出featureMap大小: 10 × 10 ( 14 − 5 + 1 ) = 10 10×10 (14-5+1)=10 10×10(145+1)=10

C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合

存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。

则:可训练参数: 6 × ( 3 × 5 × 5 + 1 ) + 6 × ( 4 × 5 × 5 + 1 ) + 3 × ( 4 × 5 × 5 + 1 ) + 1 × ( 6 × 5 × 5 + 1 ) = 1516 6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=1516 6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=1516

连接数: 10 × 10 × 1516 = 151600 10×10×1516=151600 10×10×1516=151600

详细说明:第一次池化之后是第二次卷积,第二次卷积的输出是C3,16个 10 ∗ 10 10*10 1010​的特征图,卷积核大小是 5 × 5 5×5 5×5​. 我们知道S2 有6个 14×14 的特征图,怎么从6 个特征图得到 16个特征图了? 这里是通过对S2 的特征图特殊组合计算得到的16个特征图。具体如下:

C3的前6个feature map(对应上图第一个红框的6列)与S2层相连的3个feature map相连接(上图第一个红框),后面6个feature map与S2层相连的4个feature map相连接(上图第二个红框),后面3个feature map与S2层部分不相连的4个feature map相连接,最后一个与S2层的所有feature map相连。卷积核大小依然为 5 × 5 5×5 5×5,所以总共有 6 × ( 3 × 5 × 5 + 1 ) + 6 × ( 4 × 5 × 5 + 1 ) + 3 × ( 4 × 5 × 5 + 1 ) + 1 × ( 6 × 5 × 5 + 1 ) = 1516 6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=1516 6×(3×5×5+1)+6×(4×5×5+1)+3×(4×5×5+1)+1×(6×5×5+1)=1516个参数。而图像大小为10×10,所以共有151600个连接。

C3与S2中前3个图相连的卷积结构如下图所示:

上图对应的参数为 3 × 5 × 5 + 1 3×5×5+1 3×5×5+1,一共进行6次卷积得到6个特征图,所以有 6 × ( 3 × 5 × 5 + 1 ) 6×(3×5×5+1) 6×3×5×5+1参数。 为什么采用上述这样的组合了?论文中说有两个原因:1)减少参数,2)这种不对称的组合连接的方式有利于提取多种组合特征。

5、S4层-池化层(下采样层)
输入: 10 × 10 10×10 10×10

采样区域: 2 × 2 2×2 2×2

采样方式:4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid

采样种类:16

输出featureMap大小: 5 × 5 ( 10 / 2 ) 5×5(10/2) 5×510/2

神经元数量:图像分类 一文读懂AlexNet

图像分类一文学会VGGNet(pytorch)

图像分类一文带你学懂经典网络GoogLeNet

从零开始学PyTorch:一文学会线性回归逻辑回归及图像分类

图像分类一文带你玩转LeNet(pytorch)

一文教你用paddlepaddle实现猫狗分类