0
点赞
收藏
分享

微信扫一扫

四、经典网络6(GoogleNet)

模型结构

 

Inception 结构

对上图做以下说明:

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 如下图:

 模型层次关系

原始数据,输入为 224*224*3

第一层卷积层 conv1 pad 3 64 个特征, 7*7 步长为 2 ,输出特征为 112*112*64 ,然后进行 relu ,经过 pool1 (红色的 max pool ) 进行 pooling3*3 的核,步长为 2 [ 112 - 3+1 ) /2]+1 = 56 特征为 56*56*64 ,  然后进行 norm

第二层卷积层 conv2,   pad 1 3*3 192 个特征,输出为 56*56*192 ,然后进行 relu ,进行 norm ,经过 pool2 进行 pooling 3*3 的核,步长为 2 输出为 28*28*192 然后进行 split 分成四个支线

第三层开始时 inception module ,这个的思想受到使用不同尺度的 Gabor 过滤器来处理多尺度问题,inception module 采用不同尺度的卷积核来处理问题。 3a 包含四个支线:

1:  64 1*1 的卷积核(之后进行 RULE 计算) 变成 28*28*64

2: 96 1*1 的卷积核 作为 3*3 卷积核之前的 reduce ,变成 28*28*96 , 进行 relu 计算后,再进行 128 3*3 的卷积, pad 1 28*28*128

3 16 1*1 的卷积核 作为 5*5 卷积核之前的 reduce ,变成 28*28*16 , 进行 relu 计算后,再进行 32 5*5 的卷积, pad 2 ,变成 28*28*32

4 pool 层, 3*3 的核, pad 1 ,输出还是 28*28*192 ,然后进行 32 1*1 的卷积,变成 28*28*32。

将四个结果进行连接,输出为 28*28*256

 然后将 3a 的结果又分成四条支线,开始建立 3b 的 inception module

3b

1:128 个 1*1 的卷积核(之后进行 RULE 计算) 变成 28*28*128

2:128 个 1*1 的卷积核 作为 3*3 卷积核之前的 reduce,变成 28*28*128, 再进行 192 个 3*3 的卷积,pad 为 1, 28*28*192,进行 relu 计算

3:32 个 1*1 的卷积核 作为 5*5 卷积核之前的 reduce,变成 28*28*32, 进行 relu 计算后,再进行 96 个 5*5 的卷积,pad 为 2,变成 28*28*96

4:pool 层,3*3 的核,pad 为 1,输出还是 28*28*256,然后进行 64 个 1*1 的卷积,变成 28*28*64。

将四个结果进行连接,输出为 28*28*480 同理依次推算,数据变化如下表:

 

举报

相关推荐

0 条评论