卷积神经网络Inception Net
Posted zhiyong_will
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了卷积神经网络Inception Net相关的知识,希望对你有一定的参考价值。
1. 概述
2014年,Google提出了包含Inception模块的网络结构,并命名为GoogLeNet[1],其中LeNet为致敬LeNet网络,GoogLeNet在当年的ILSVRC的分类任务上获得冠军。GoogLeNet经过多次的迭代,最初的版本也被称为Inception v1。Inception的名字也得益于NIN和盗梦空间“We need to go deeper”的启发。提高模型的表达能力,最有效的办法是增加模型的大小,包括了模型的深度和模型的宽度,但是一味的增大模型会出现以下的一些问题:
- 模型越大,相应的参数也就会越多,就会出现过拟合;
- 模型越大,需要的计算资源也就会越多;
那么是否存在一种方法,能够在增大模型的同时,控制参数的个数呢?Inception v1中认为最基本的方法是使用稀疏连接代替全连接和卷积操作,同时引入 1 × 1 1\\times 1 1×1的卷积核来进一步减少参数个数。
2015年,Google在Inception v1的基础上提出了Batch Normalization[2]的操作,并将其添加到GoogLeNet网络中,同时对网络结构做了一些修改,也被称为Inception v2,最终在ImageNet分类任务上的成绩超过了Inception v1。
在Inception v2之后,Google对Inception模块进行重新的思考,提出了一系列的优化思路,如针对神经网络的设计提出了四条的设计原则,提出了如何分解大卷积核,重新思考训练过程中的辅助分类器的作用,最终简化了网络的结构,得到了Inception v3[3]。
2. Inception网络结构
2.1. Inception v1
在Inception v1中提出了Inception模块,该模块在增加网络的深度和宽度的过程中极大减少了模型的参数。
2.1.1. Inception模块
在Inception v1中,提出了Inception模块,希望在Inception模块中引入稀疏连接来减少参数的数量。稀疏连接有两种方法,一种是空间(spatial)上的稀疏连接,也就是传统的CNN卷积结构,即只对输入图像的某一部分patch进行卷积,而不是对整个图像进行卷积,共享参数降低了总参数的数目减少了计算量;另一种方法是在特征(feature)维度进行稀疏连接,就是前一节提到的在多个尺寸上进行卷积再聚合,把相关性强的特征聚集到一起,每一种尺寸的卷积只输出256个特征中的一部分,这也是种稀疏连接。
基于上述的特征维度的稀疏连接,Inception模块的设计便与常见的CNN网络结构不同,原先的卷积层通常采用的是串联的设计思路,而在Inception模块中则是采用将多种不同规格的卷积并联的方式,在Inception中,选择的卷积核大小分别为 1 × 1 1\\times 1 1×1, 3 × 3 3\\times 3 3×3, 5 × 5 5\\times 5 5×5,最终将各自所得到的特征图concat在一起,作为后续的输入,如下左图所示:
受到NIN[4]的启发,为进一步减少参数的个数,在 3 × 3 3\\times 3 3×3和 5 × 5 5\\times 5 5×5的卷积操作前增加了 1 × 1 1\\times 1 1×1的卷积核。如果不采用并联的方式,对于大小为 28 × 28 × 192 28\\times 28\\times 192 28×28×192的输入,其中通道数为 192 192 192,大小为 28 × 28 × 256 28\\times 28\\times 256 28×28×256的输出,如果只采用 3 × 3 3\\times 3 3×3的卷积核,则参数的个数为 3 × 3 × 192 × 256 = 442368 3\\times 3\\times 192\\times 256=442368 3×3×192×256=442368,若果只是采用 5 × 5 5\\times 5 5×5的卷积核,则参数的个数为 5 × 5 × 192 × 256 = 1228800 5\\times 5\\times 192\\times 256=1228800 5×5×192×256=1228800。
而通过concat多种不同的卷积核以及pooling操作,则可以减少参数的个数,按照上述图片中标注的每种卷积核的输出通道数,其参数的个数为:
64 × 192 96 × 192 + 3 × 3 × 96 × 128 16 × 192 + 5 × 5 × 32 × 26 32 × 192 \\left\\\\beginmatrix 64\\times 192 \\\\ 96\\times 192+3\\times 3\\times 96\\times 128 \\\\ 16\\times 192+5\\times 5\\times 32\\times 26 \\\\ 32\\times 192\\endmatrix\\right. ⎩ ⎨ ⎧64×19296×192+3×3×96×12816×192+5×5×32×2632×192
最终的参数个数为 163328 163328 163328,相比较上述采用单一的卷积核,参数个数大大较少了。
2.1.2. Inception v1的网络结构
将Inception模块融合到卷积网络中,替换卷积神经网络中的部分卷积操作便得到Inception v1的结构,其结构的具体参数如下表所示:
其具体的计算过程如下所示:
- data:大小为 224 × 224 × 3 224\\times224\\times3 224×224×3,且都进行了零均值化的预处理操作(图像每个像素减去均值)。
- convolution:输入( 224 × 224 × 3 224\\times224\\times3 224×224×3),输出( 112 × 112 × 64 112\\times112\\times64 112×112×64,其中,卷积核大小为 7 × 7 7\\times7 7×7,padding为 3 3 3,步长为 2 2 2,卷积核的个数为 64 64 64,卷积后进行ReLU操作)
- max pool:输入( 112 × 112 × 64 112\\times112\\times64 112×112×64),输出( 56 × 56 × 64 56\\times56\\times64 56×56×64,其中,核的大小为 3 × 3 3\\times3 3×3,步长为 2 2 2)
- convolution:输入( 56 × 56 × 64 56\\times56\\times64 56×56×64),输出( 56 × 56 × 192 56\\times56\\times192 56×56×192,其中,卷积核大小为 3 × 3 3\\times3 3×3,padding为 1 1 1,步长为 1 1 1,卷积核的个数为 192 192 192,卷积后进行ReLU操作)
- max pool:输入( 56 × 56 × 192 56\\times56\\times192 56×56×192),输出( 28 × 28 × 192 28\\times28\\times192 28×28×192,其中,核的大小为 3 × 3 3\\times3 3×3,步长为 2 2 2)
- Inception(3a):分为四个分支操作,输入(
28
×
28
×
192
28\\times28\\times192
28×28×192)
- 卷积1:输出( 28 × 28 × 64 28\\times28\\times64 28×28×64,其中,卷积核大小为 1 × 1 1\\times1 1×1,padding为 0 0 0,步长为 1 1 1,卷积核的个数为 64 64 64)
- 卷积2:输出( 28 × 28 × 128 28\\times28\\times128 28×28×128,其中,包含了两部分的卷积操作,第一个是 96 96 96个 1 × 1 1\\times1 1×1的卷积核,输出为 28 × 28 × 96 28\\times28\\times96 28×28×96,第二个是 128 128 128个 3 × 3 3\\times3 3×3的卷积核,输出为 28 × 28 × 128 28\\times28\\times128 28×28×128)
- 卷积3:输出( 28 × 28 × 32 28\\times28\\times32 28×28×32,其中,包含了两部分的卷积操作,第一个是 16 16 16个 1 × 1 1\\times1 1×1的卷积核,输出为 28 × 28 × 16 28\\times28\\times16 28×28×16,第二个是 32 32 32个 5 × 5 5\\times5 5×5的卷积核,输出为 28 × 28 × 32 28\\times28\\times32 28×28×32)
- 卷积4:输出( 28 × 28 × 32 28\\times28\\times32 28×28×32,其中,包含了两部分的操作,第一个是max pool,核的大小为 3 × 3 3\\times3 3×3,输出为 28 × 28 × 192 28\\times28\\times192 28×28×192,第二个是 32 32 32个 1 × 1 1\\times1 1×1的卷积核,输出为 28 × 28 × 32 28\\times28\\times32 28×28×32)
- 将这四个结果进行连接,对这四部分输出结果的第三维并联,即 64 + 128 + 32 + 32 = 256 64+128+32+32=256 64+128+32+32=256,最终输出 28 × 28 × 256 28\\times28\\times256 28×28×256
- Inception(3b):分为四个分支操作,输入(
28
×
28
×
256
28\\times28\\times256
28×28×256)
- 卷积1:输出(
28
×
28
×
128
28\\times28\\times128
28×28×128,其中,卷积核大小为
1
×
1
1\\times1
1×以上是关于卷积神经网络Inception Net的主要内容,如果未能解决你的问题,请参考以下文章
深度学习方法:卷积神经网络结构变化——Google Inception V1-V4,Xception(depthwise convolution)
- 卷积1:输出(
28
×
28
×
128
28\\times28\\times128
28×28×128,其中,卷积核大小为
1
×
1
1\\times1
1×以上是关于卷积神经网络Inception Net的主要内容,如果未能解决你的问题,请参考以下文章