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(14−5+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 10∗10的特征图,卷积核大小是 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×5(10/2)
神经元数量: 5 × 5 × 16 = 400 5×5×16=400 5×5×16=400
连接数: 16 × ( 2 × 2 + 1 ) × 5 × 5 = 2000 16×(2×2+1)×5×5=2000 16×(2×2+1)×5×5=2000
S4中每个特征图的大小是C3中特征图大小的1/4
详细说明:S4是pooling层,窗口大小仍然是2×2,共计16个feature map,C3层的16个10x10的图分别进行以2x2为单位的池化得到16个5x5的特征图。有 5 × 5 × 5 × 16 = 2000 5×5×5×16=2000 5×5×5×16=2000个连接。连接的方式与S2层类似。
6、C5层-卷积层
输入:S4层的全部16个单元特征map(与s4全相连)
卷积核大小: 5 × 5 5×5 5×5
卷积核种类: 120 120 120
输出featureMap大小: 1 × 1 ( 5 − 5 + 1 ) 1×1(5-5+1) 1×1(5−5+1)
可训练参数/连接: 120 × ( 16 × 5 × 5 + 1 ) = 48120 120×(16×5×5+1)=48120 120×(16×5×5+1)=48120
详细说明:C5层是一个卷积层。由于S4层的16个图的大小为5x5,与卷积核的大小相同,所以卷积后形成的图的大小为1x1。这里形成120个卷积结果。每个都与上一层的16个图相连。所以共有 ( 5 × 5 × 16 + 1 ) × 120 = 48120 (5×5×16+1)×120 = 48120 (5×5×16+1)×120=48120个参数,同样有48120个连接。C5层的网络结构如下:
7、F6层-全连接层
输入:c5 120维向量
计算方式:计算输入向量和权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。
可训练参数: 84 × ( 120 + 1 ) = 10164 84×(120+1)=10164 84×(120+1)=10164
详细说明:6层是全连接层。F6层有84个节点,对应于一个7x12的比特图,-1表示白色,1表示黑色,这样每个符号的比特图的黑白色就对应于一个编码。该层的训练参数和连接数是 ( 120 + 1 ) ∗ 84 = 10164 (120 + 1)*84=10164 (120+1)∗84=10164。F6层的连接方式如下:
8、Output层-全连接层
Output层也是全连接层,共有10个节点,分别代表数字0到9,且如果节点i的值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式。假设x是上一层的输入,y是RBF的输出,则RBF输出的计算方式是:
上式 w i j w_ij wij 的值由i的比特图编码确定,i从0到9,j取值从0到 7 ∗ 12 − 1 7*12-1 7∗12−1。RBF输出的值越接近于0,则越接近于i,即越接近于i的ASCII编码图,表示当前网络输入的识别结果是字符i。该层有 84 × 10 = 840 84×10=840 84×10=840个参数和连接。
上图是LeNet-5识别数字3的过程。
各层参数总结
| 网络层 | 输入尺寸 | 核尺寸 | 输出尺寸 | 可训练参数量 |
| :-: | :-: | :-: | :-: | :-: |
| 卷积层 C 1 C_1 C1 | 32 × 32 × 1 32\times32\times1 32×32×1 | 5 × 5 × 1 / 1 , 6 5\times5\times1/1,6 5×5×1/1,6 | 28 × 28 × 6 28\times28\times6 28×28×6 | ( 5 × 5 × 1 + 1 ) × 6 (5\times5\times1+1)\times6 (5×5×1+1)×6 |
| 下采样层 S 2 S_2 S2 | 28 × 28 × 6 28\times28\times6 28×28×6 | 2 × 2 / 2 2\times2/2 2×2/2 | 14 × 14 × 6 14\times14\times6 14×14×6 | ( 1 + 1 ) × 6 (1+1)\times6 (1+1)×6 $ _{注1}$ |
| 卷积层 C 3 C_3 C3 | 14 × 14 × 6 14\times14\times6 14×14×6 | 5 × 5 × 6 / 1 , 16 5\times5\times6/1,16 5×5×6/1,16 | 10 × 10 × 16 10\times10\times16 10×10×16 | 151 6 注 2 1516_{注2} 1516注2 |
| 下采样层 S 4 S_4 S4 | 10 × 10 × 16 10\times10\times16 10×10×16 | 2 × 2 / 2 2\times2/2 2×2/2 | 5 × 5 × 16 5\times5\times16 5×5×16 | ( 1 + 1 ) × 16 (1+1)\times16 (1+1)×16 |
| 卷积层 C 5 C_5 C5 ∗ ^* ∗ | 5 × 5 × 16 5\times5\times16 5×5×16 | 5 × 5 × 16 / 1 , 120 5\times5\times16/1,120 5×5×16/1,120 | 1 × 1 × 120 1\times1\times120 1×1×120 | ( 5 × 5 × 16 + 1 ) × 120 (5\times5\times16+1)\times120 (5×5×16+1)×120 |
| 全连接层 F 6 F_6 F6 | 1 × 1 × 120 1\times1\times120 1×1×120 | 120 × 84 120\times84 120×84 | 1 × 1 × 84 1\times1\times84 1×1×84 | ( 120 + 1 ) × 84 (120+1)\times84 (120+1)×84 |
| 输出层 | 1 × 1 × 84 1\times1\times84 1×1×84 | 84 × 10 84\times10 84×10 | 1 × 1 × 10 1\times1\times10 1×1×10 | ( 84 + 1 ) × 10 (84+1)\times10 (84+1)×10 |
注1 在LeNet中,下采样操作和池化操作类似,但是在得到采样结果后会乘以一个系数和加上一个偏置项,所以下采样的参数个数是 ( 1 + 1 ) × 6 (1+1)\times6 (1+1)×6而不是零。
注2 C 3 C_3 C3卷积层可训练参数并未直接连接 S 2 S_2 S2中所有的特征图(Feature Map),而是采用如图4.2所示的采样特征方式进行连接(稀疏连接),生成的16个通道特征图中分别按照相邻3个特征图、相邻4个特征图、非相邻4个特征图和全部6个特征图进行映射,得到的参数个数计算公式为 6 × ( 25 × 3 + 1 ) + 6 × ( 25 × 4 + 1 ) + 3 × ( 25 × 4 + 1 ) + 1 × ( 25 × 6 + 1 ) = 1516 6\times(25\times3+1)+6\times(25\times4+1)+3\times(25\times4+1)+1\times(25\times6+1)=1516 6×(25×3+1)+6×(25×4+1)+3×(25×4+1)+1×(25×6+1)=1516,在原论文中解释了使用这种采样方式原因包含两点:限制了连接数不至于过大(当年的计算能力比较弱);强制限定不同特征图的组合可以使映射得到的特征图学习到不同的特征模式。
-
卷积网络使用一个3层的序列组合:卷积、下采样(池化)、非线性映射(LeNet-5最重要的特性,奠定了目前深层卷积网络的基础)
-
使用卷积提取空间特征
-
使用映射的空间均值进行下采样
-
使用 t a n h tanh tanh或 s i g m o i d sigmoid sigmoid进行非线性映射
-
多层神经网络(MLP)作为最终的分类器
-
层间的稀疏连接矩阵以避免巨大的计算开销
====================================================================
AlexNet是由Alex Krizhevsky 提出的首个应用于图像分类的深层卷积神经网络,该网络在2012年ILSVRC(ImageNet Large Scale Visual Recognition Competition)图像分类竞赛中以15.3%的top-5测试错误率赢得第一名。也是在那年之后,更多的更深的神经网络被提出,比如优秀的vgg,GoogLeNet。 这对于传统的机器学习分类算法而言,已经相当的出色。
AlexNet中包含了几个比较新的技术点,也首次在CNN中成功应用了ReLU、Dropout和LRN等Trick。同时AlexNet也使用了GPU进行运算加速。
AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中。AlexNet主要使用到的新技术点如下:
(1)成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光大。
(2)训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。
(3)在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。
(4)提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
(5)使用CUDA加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算。AlexNet使用了两块GTX 580 GPU进行训练,单个GTX 580只有3GB显存,这限制了可训练的网络的最大规模。因此作者将AlexNet分布在两个GPU上,在每个GPU的显存中储存一半的神经元的参数。因为GPU之间通信方便,可以互相访问显存,而不需要通过主机内存,所以同时使用多块GPU也是非常高效的。同时,AlexNet的设计让GPU之间的通信只在网络的某些层进行,控制了通信的性能损耗。
(6)数据增强,随机地从256_256的原始图像中截取224_224大小的区域(以及水平翻转的镜像),相当于增加了2*(256-224)^2=2048倍的数据量。如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷入过拟合中,使用了数据增强后可以大大减轻过拟合,提升泛化能力。进行预测时,则是取图片的四个角加中间共5个位置,并进行左右翻转,一共获得10张图片,对他们进行预测并对10次结果求均值。同时,AlexNet论文中提到了会对图像的RGB数据进行PCA处理,并对主成分做一个标准差为0.1的高斯扰动,增加一些噪声,这个Trick可以让错误率再下降1%。
首先这幅图分为上下两个部分的网络,论文中提到这两部分网络是分别对应两个GPU,只有到了特定的网络层后才需要两块GPU进行交互,这种设置完全是利用两块GPU来提高运算的效率,其实在网络结构上差异不是很大。为了更方便的理解,我们假设现在只有一块GPU或者我们用CPU进行运算,我们从这个稍微简化点的方向区分析这个网络结构。网络总共的层数为8层,5层卷积,3层全连接层。
第一层:卷积层1,输入为 224 × 224 × 3 的图像,卷积核的数量为96,论文中两片GPU分别计算48个核; 卷积核的大小为 11 × 11 × 3 11 × 11 × 3 11×11×3,stride = 4,stride表示的是步长,padding = 2。
卷积后的图形大小是怎样的呢?
wide = (224 + 2 * padding - kernel_size) / stride + 1 = 55
height = (224 + 2 * padding - kernel_size) / stride + 1 = 55
dimention = 96
然后进行 (Local Response Normalized), 后面跟着池化pool_size = (3, 3), stride = 2, pad = 0 最终获得第一层卷积的feature map
最终第一层卷积的输出为 96 × 55 × 55 96×55×55 96×55×55
第二层:卷积层2, 输入为上一层卷积的feature map, 卷积的个数为256个,论文中的两个GPU分别有128个卷积核。卷积核的大小为: 5 × 5 × 48 5 × 5 × 48 5×5×48, padding = 2, stride = 1; 然后做 LRN, 最后 max_pooling, pool_size = (3, 3), stride = 2;
第三层:卷积3, 输入为第二层的输出,卷积核个数为384, kernel_size = (3 × 3 × 256 ), padding = 1, 第三层没有做LRN和Pool
第四层:卷积4, 输入为第三层的输出,卷积核个数为384, kernel_size = (3 × 3 ), padding = 1, 和第三层一样,没有LRN和Pool
第五层:卷积5, 输入为第四层的输出,卷积核个数为256, kernel_size = (3 × 3 ), padding = 1。然后直接进行max_pooling, pool_size = (3, 3), stride = 2;
第6,7,8层是全连接层,每一层的神经元的个数为4096,最终输出softmax为1000,因为上面介绍过,ImageNet这个比赛的分类个数为1000。全连接层中使用了RELU和Dropout。
下图是对上面参数的总结。
-
所有卷积层都使用ReLU作为非线性映射函数,使模型收敛速度更快
-
在多个GPU上进行模型的训练,不但可以提高模型的训练速度,还能提升数据的使用规模
-
使用LRN对局部的特征进行归一化,结果作为ReLU激活函数的输入能有效降低错误率
-
重叠最大池化(overlapping max pooling),即池化范围z与步长s存在关系z>s(如)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1HkWEhXO-1629694836350)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]中核尺度为3×3/2),避免平均池化(average pooling)的平均效应
-
使用随机丢弃技术(dropout)选择性地忽略训练中的单个神经元,避免模型的过拟合
===================================================================
VGGNet是由牛津大学视觉几何小组(Visual Geometry Group, VGG)提出的一种深层卷积网络结构,他们以7.32%的错误率赢得了2014年ILSVRC分类任务的亚军(冠军由GoogLeNet以6.65%的错误率夺得)和25.32%的错误率夺得定位任务(Localization)的第一名(GoogLeNet错误率为26.44%),网络名称VGGNet取自该小组名缩写。VGGNet是首批把图像分类的错误率降低到10%以内模型,同时该网络所采用的 卷积核的思想是后来许多模型的基础,该模型发表在2015年国际学习表征会议(International Conference On Learning Representations, ICLR)后至今被引用的次数已经超过1万4千余次,yyds!。很多的物体检测模型的主干网络(例如SSD、M2Det)都是采用VGGNet、还有图像风格迁移、图像分割等等,所以VGGNet是我们深度学习必学的模型之一。
上图是VGG16-3模型,在原论文中的VGGNet包含了6个版本的演进,分别对应VGG11、VGG11-LRN、VGG13、VGG16-1、VGG16-3和VGG19,如下图:
不同的后缀数值表示不同的网络层数(VGG11-LRN表示在第一层中采用了LRN的VGG11,VGG16-1表示后三组卷积块中最后一层卷积采用卷积核尺寸为1×1 ,相应的VGG16-3表示卷积核尺寸为 3×3),本节介绍的VGG16为VGG16-3,参数的详细配置如下表:
| 网络层 | 输入尺寸 | 核尺寸 | 输出尺寸 | 参数个数 |
| — | — | — | — | :-: |
| 卷积层 C_11 | 224×224×3 | 3×3×64/1 | 224×224×64 | (3×3×3+1)×64 |
| 卷积层 C_12 | 224×224×64 | 3×3×64/1 | 224×224×64 | (3×3×64+1)×64 |
| 池化 Max Pool 1 | 224×224×64 | 2×2/2 | 112×112×64 | 0 |
| 卷积层 C_21 | 112×112×64 | 3×3×128/1 | 112×112×128 | (3×3×64+1)×128 |
| 卷积层 C_22 | 112×112×128 | 3×3×128/1 | 112×112×128 | (3×3×128+1)×128 |
| 池化 Max Pool 2 | 112×112×128 | 2×2/2 | 56×56×128 | 0 |
| 卷积层 C_31 | 56×56×128 | 3×3×256/1 | 56×56×256 | (3×3×128+1)×256 |
| 卷积层 C_32 | 56×56×256 | 3×3×256/1 | 56×56×256 | (3×3×256+1)×256 |
| 卷积层 C_33 | 56×56×256 | 3×3×256/1 | 56×56×256 | (3×3×256+1)×256 |
| 池化 Max Pool 3 | 56×56×256 | 2×2/2 | 28×28×256 | 0 |
| 卷积层 C_41 | 28×28×256 | 3×3×512/1 | 28×28×512 | (3×3×256+1)×512 |
| 卷积层 C_42 | 28×28×512 | 3×3×512/1 | 28×28×512 | (3×3×512+1)×512 |
| 卷积层 C_43 | 28×28×512 | 3×3×512/1 | 28×28×512 | (3×3×512+1)×512 |
| 池化 Max Pool 4 | 28×28×512 | 2×2/2 | 14×14×512 | 0 |
| 卷积层 C_51 | 14×14×512 | 3×3×512/1 | 14×14×512 | (3×3×512+1)×512 |
| 卷积层 C_52 | 14×14×512 | 3×3×512/1 | 14×14×512 | (3×3×512+1)×512 |
| 卷积层 C_53 | 14×14×512 | 3×3×512/1 | 14×14×512 | (3×3×512+1)×512 |
| 池化 Max Pool 5 | 14×14×512 | 2×2/2 | 7×7×512 | 0 |
| 全连接层 FC_1 | 7×7×512 | (7×7×512)×4096 | 1×4096 | (7×7×512+1)×4096 |
| 全连接层 FC_2 | 1×4096 | 4096×4096 | 1×4096 | (4096+1)×4096 |
| 全连接层 FC_3 | 1×4096 | 4096×1000 | 1×1000 | (4096+1)×1000 |
整个网络都使用了同样大小的卷积核尺寸3×3和最大池化尺寸2×2。
1×1卷积的意义主要在于线性变换,而输入通道数和输出通道数不变,没有发生降维。
两个3×3的卷积层串联相当于1个5×5的卷积层,感受野大小为5×5。同样地,3个3×3的卷积层串联的效果则相当于1个7×7的卷积层。这样的连接方式使得网络参数量更小,而且多层的激活函数令网络对特征的学习能力更强。
注:VGGNet在训练时有一个小技巧,先训练浅层的的简单网络VGG11,再复用VGG11的权重来初始化VGG13,如此反复训练并初始化VGG19,能够使训练时收敛的速度更快。在训练过程中使用多尺度的变换对原始数据做数据增强,使得模型不易过拟合。
VGG Pytorch复现参考:【图像分类】一文学会VGGNet(pytorch)_AI浩-CSDN博客
VGG 实战:【图像分类】实战——使用VGG16实现对植物幼苗的分类(pytroch)_AI浩-CSDN博客
======================================================================
GoogLeNet作为2014年ILSVRC在分类任务上的冠军,以6.65%的错误率力压VGGNet等模型,在分类的准确率上面相比过去两届冠军ZFNet和AlexNet都有很大的提升。从名字GoogLeNet可以知道这是来自谷歌工程师所设计的网络结构,而名字中GoogLeNet更是致敬了LeNet。GoogLeNet中最核心的部分是其内部子网络结构Inception,该结构灵感来源于NIN,至今已经经历了四次版本迭代(Inception_v1-4)。下表是Inception_v1-4提出的时间表
Inception不同版本的性能比较图
一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,但一味地增加,会带来诸多问题:
1)参数太多,如果训练数据集有限,很容易产生过拟合;
2)网络越大、参数越多,计算复杂度越大,难以应用;
3)网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型。
我们希望在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。在这种需求和形势下,Google研究人员提出了Inception的方法。
如图所示,GoogLeNet相比于以前的卷积神经网络结构,除了在深度上进行了延伸,还对网络的宽度进行了扩展,整个网络由许多块状子网络的堆叠而成,这个子网络构成了Inception结构。为了更详细的了解Inception,下面对Inception_v1、Inception_v2、Inception_v3、Inception_v4做更详细的说明。
4.2.1 Inception_v1
Inception_v1在同一层中采用不同的卷积核,并对卷积结果进行合并; 下面的两张图展示Inception_v1采用的两种卷积模块a和b。
对上图做以下说明:
1 . 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;
2 . 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了;
3 . 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了。
4 . 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。
但是,使用5x5的卷积核仍然会带来巨大的计算量。 为此,文章借鉴NIN2,采用1x1卷积核来进行降维。
例如:上一层的输出为100x100x128,经过具有256个输出的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256。其中,卷积层的参数为128x5x5x256。假如上一层输出先经过具有32个输出的1x1卷积层,再经过具有256个输出的5x5卷积层,那么最终的输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256,大约减少了4倍。
具体改进后的Inception Module如下图:
GoogLeNet中Inception_v1网络参数配置
| 网络层 | 输入尺寸 | 核尺寸 | 输出尺寸 | 参数个数 |
| — | — | — | — | — |
最后
🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!