卷积神经网络NIN

1. 概述

在传统的CNN网络中,使用卷积(Convolution)操作来提取感受野中的特征,卷积操作是由一个线性变换与非线性激活函数组成,为了能增强CNN网络的局部辨识能力,2014年Network In Network[1]的结构被提出,其使用多层感知机的网络结构替换感受野上的线形变换和非线性激活函数,以此来增强模型的局部建模能力。

2. 算法的基本思想

2.1. NIN的卷积层

在传统的CNN网络中,卷积层的操作包括卷积操作,非线性变换(如使用ReLU激活函数),具体过程如下图所示:

在这里插入图片描述

卷积层的操作是在feature map进行卷积和非线性变换,得到新的feature map,如上图中左侧的feature map在经过卷积层后得到右侧的feature map,图中两个feature map的绿色部分是对应的。为了能增强CNN网络的局部辨识能力,NIN中在卷积层中的卷积+非线性变换后采用了多层神经网络的结构,进一步增强模型的局部建模能力,具体过程如下图所示:

在这里插入图片描述

这样一个卷积+非线性变换+mlp+mlp就组成了新的卷积层,在NIN中称为mlp卷积层,与之前的卷积层对比如下图所示:

在这里插入图片描述

上述的mlp等价于卷积核大小为

1

×

1

1times1

1×1的卷积操作+非线性变换

2.2. Global Average Pooling

在传统的CNN网络中,经过多层的Convolution+Pooling的操作后得到一系列最终的feature map,针对分类问题,通常通过Flatten的操作将多个feature map转换成一维的向量,下图以

3

3

3个feature map为例:

在这里插入图片描述

在单个feature map中,以同样的方式将其转换成一维向量,具体过程如下图所示:

在这里插入图片描述

在转换成一维向量后,再通过全连接网络实现最终的分类目标,这种方式存在的一个最大的问题是过拟合。Dropout是处理过拟合有效的方式,在NIN中提出使用全局平均聚合(Global Average Pooling)来代替全连接层。全局平均聚合的具体做法是要求在最后一个mlpconv层产出对应分类个数的feature map,并在每一个feature map上使用平均聚合,如在分类个数为

3

3

3的情况下,全局平均聚合的具体过程如下:

在这里插入图片描述

采用全局平均聚合的优点主要有,第一,最终的每个feature map与指定的分类类目是对应的,如上图中的蓝色的feature map与第一个分类类目是对应的;第二,全局平均聚合中没有参数。

2.3. NIN的网络结构

通过将传统的CNN网络中的卷积层替换成MLP卷积层,同时将最后的全连接网络替换成全局平均聚合,便得到了最终的NIN网络结构,如下图所示:

在这里插入图片描述

参照[2]的参数格式,可以绘制出如下的网络结构:
在这里插入图片描述

其中,上图中紫色的部分即为卷积核大小为

1

×

1

1times1

1×1的卷积操作,由一个卷积conv和两个cccp组成MLP卷积层。最终的pool4实现了全局平均聚合。以conv1,relu0,cccp1,relu1,cccp2,relu2,pool0为例:

  • conv1:输入(

    224

    ×

    224

    ×

    3

    224times224times3

    224×224×3),输出(

    54

    ×

    54

    ×

    96

    54times54times96

    54×54×96,其中,卷积核的大小为

    11

    ×

    11

    11times11

    11×11,步长为

    4

    4

    4,卷积核的个数为

    96

    96

    96

  • relu0:输入(

    54

    ×

    54

    ×

    96

    54times54times96

    54×54×96),输出(

    54

    ×

    54

    ×

    96

    54times54times96

    54×54×96

  • cccp1:输入(

    54

    ×

    54

    ×

    96

    54times54times96

    54×54×96),输出(

    54

    ×

    54

    ×

    96

    54times54times96

    54×54×96,其中,卷积核的大小为

    1

    ×

    1

    1times1

    1×1,步长为

    1

    1

    1,卷积核的个数为

    96

    96

    96

  • relu1:输入(

    54

    ×

    54

    ×

    96

    54times54times96

    54×54×96),输出(

    54

    ×

    54

    ×

    96

    54times54times96

    54×54×96

  • cccp2:输入(

    54

    ×

    54

    ×

    96

    54times54times96

    54×54×96),输出(

    54

    ×

    54

    ×

    96

    54times54times96

    54×54×96,其中,卷积核的大小为

    1

    ×

    1

    1times1

    1×1,步长为

    1

    1

    1,卷积核的个数为

    96

    96

    96

  • relu2:输入(

    54

    ×

    54

    ×

    96

    54times54times96

    54×54×96),输出(

    54

    ×

    54

    ×

    96

    54times54times96

    54×54×96

  • pool0:输入(

    54

    ×

    54

    ×

    96

    54times54times96

    54×54×96),输出(

    27

    ×

    27

    ×

    96

    27times27times96

    27×27×96,其中,核大小为

    3

    ×

    3

    3times3

    3×3,步长为

    2

    2

    2

图中后续的MLP卷积层与此类似,最后的全局平均聚合以conv4-1024,relu10,cccp7-1024,relu11,cccp8-1024,relu12,pool4为例:

  • conv4-1024:输入(

    6

    ×

    6

    ×

    384

    6times6times384

    6×6×384),输出(

    6

    ×

    6

    ×

    1024

    6times6times1024

    6×6×1024,其中,卷积核的大小为

    3

    ×

    3

    3times3

    3×3,步长为

    1

    1

    1,padding为

    1

    1

    1,卷积核的个数为

    1024

    1024

    1024

  • relu10:输入(

    6

    ×

    6

    ×

    1024

    6times6times1024

    6×6×1024),输出(

    6

    ×

    6

    ×

    1024

    6times6times1024

    6×6×1024

  • cccp7-1024:输入(

    6

    ×

    6

    ×

    1024

    6times6times1024

    6×6×1024),输出(

    6

    ×

    6

    ×

    1024

    6times6times1024

    6×6×1024,其中,卷积核的大小为

    1

    ×

    1

    1times1

    1×1,步长为

    1

    1

    1,卷积核的个数为

    1024

    1024

    1024

  • relu11:输入(

    6

    ×

    6

    ×

    1024

    6times6times1024

    6×6×1024),输出(

    6

    ×

    6

    ×

    1024

    6times6times1024

    6×6×1024

  • cccp8-1024:输入(

    6

    ×

    6

    ×

    1024

    6times6times1024

    6×6×1024),输出(

    6

    ×

    6

    ×

    1000

    6times6times1000

    6×6×1000,其中,卷积核的大小为

    1

    ×

    1

    1times1

    1×1,步长为

    1

    1

    1,卷积核的个数为

    1000

    1000

    1000),在此将feature map的个数转换成与分类类目个数一致

  • relu12:输入(

    6

    ×

    6

    ×

    1000

    6times6times1000

    6×6×1000),输出(

    6

    ×

    6

    ×

    1000

    6times6times1000

    6×6×1000

  • pool4:输入(

    6

    ×

    6

    ×

    1000

    6times6times1000

    6×6×1000),输出(

    1

    ×

    1

    ×

    1000

    1times1times1000

    1×1×1000,其中,核大小为

    6

    ×

    6

    6times6

    6×6,步长为

    1

    1

    1),至此实现了全局平均聚合

3. 总结

在NIN卷积网络中,有两个点优化,第一,在传统的卷积层中加入MLP,进一步提升局部特征的提取能力;第二,引入全局平均聚合,将feature map与最终的分类类目对应,缓解因全连接网络引起的过拟合。

参考文献

[1] Lin M , Chen Q , Yan S . Network In Network[J]. Computer Science, 2013.

[2] https://dgschwend.github.io/netscope/#/preset/nin

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>