经典网络GoogLeNet介绍

徘徊边缘 提交于 2021-02-07 10:42:21

经典网络GoogLeNet由Christian Szegedy等于2014年提出,论文名为《Going deeper with convolutions》,论文见:https://arxiv.org/pdf/1409.4842v1.pdf

GoogLeNet网络用到了Inception-v1模块,关于Inception模块的介绍可以参考:https://blog.csdn.net/fengbingchun/article/details/113482036

假如输入图像大小为n*n,过滤器(filter)为f*f,padding为p,步长(stride)为s,则输出大小为:计算卷积层大小,如果商不是整数,向下取整,即floor函数;计算池化层大小,如果商不是整数,向上取整,即ceil函数。参考:https://blog.csdn.net/fengbingchun/article/details/80262495   

GoogLeNet网络:

(1).使用了1*1卷积核,减少feature map数。

(2).采用了模块化的结构(Inception-v1模块),方便增添和修改。

(3).网络最后采用全局平均池化(global average pooling)+全连接层+Softmax,而VGG和AlexNet最后使用连续3个全连接层+Softmax。

(4).为避免梯度消失,训练网络时额外增加了2个辅助分类器,辅助分类器是将中间某一层的输出用作分类,并按一个较小的权重加到最终分类结果中。

GoogLeNet测试样本处理:

(1).对于每个测试样本,将图像的短边缩放到四种尺寸,分别为256、288、320、352;

(2).从每种缩放后的尺寸的测试样本中,截取图像的左、中、右方形区域(在肖像图像中截取上、中、下方形区域);

(3).对于截取后的每个方形区域,从4个角和中心分别截取一个224*224区域,再将此方形区域缩小到224*224;

(4).将每个获取的224*224图像进行水平翻转;

这样每个原始测试样本共得到4*3*6*2=144张图像。

GoogLeNet训练网络时架构(有22+5层),论文截图如下:

Caffe中GoogLeNet网络相关文件见:https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet

GoogLeNet推理网络架构:总共包含有9个Inception-v1模块,blvc_googlenet中deploy.prototxt,输入层shape为[10,3,224,224],即batch为10,这里调整为1

(1).输入层(Input):图像大小224*224*3。

(2).卷积层1+ReLU:使用64个7*7的filter,stride为2,padding为3,输出为112*112*64,64个feature maps。

(3).最大池化层1+LRN:filter为3*3,stride为2,padding为0,输出为56*56*64,64个feature maps。

(4).卷积层2+ReLU:使用64个1*1的filter,stride为1,padding为0,输出为56*56*64,64个feature maps。

(5).卷积层3+ReLU+LRN:使用192个3*3的filter,stride为1,padding为1,输出为56*56*192,192个feature maps。

(6).最大池化层2:filter为3*3,stride为2,padding为0,输出为28*28*192,192个feature maps。

(7).Inception-1:由左往右,最终输出并拼接为28*28*256,feature maps总数为64+128+32+32=256。

A.卷积+ReLU:使用64个1*1的filter,stride为1,padding为0,输出为28*28*64。

B.卷积+ReLU:使用96个1*1的filter,stride为1,padding为0,输出为28*28*96。然后再一次卷积+ReLU:使用128个3*3的filter,stride为1,padding为1,最终输出为28*28*128。

C. 卷积+ReLU:使用16个1*1的filter,stride为1,padding为0,输出为28*28*16。然后再一次卷积+ReLU:使用32个5*5的filter,stride为1,padding为2,最终输出为28*28*32。

D.最大池化:filter为3*3,stride为1,padding为1,输出为28*28*192。然后再卷积+ReLU:使用32个1*1的filter,stride为1,padding为0,最终输出为28*28*32。

(8).Inception-2:由左往右,最终输出并拼接为28*28*480,feature maps总数为128+192+96+64=480。

(9).最大池化层3:filter为3*3,stride为2,padding为0,输出为14*14*480,480个feature maps。

(10).Inception-3:由左往右,最终输出并拼接为14*14*512,feature maps总数为192+208+48+64=512。

(11).Inception-4:由左往右,最终输出并拼接为14*14*512,feature maps总数为160+224+64+64=512。

(12).Inception-5:由左往右,最终输出并拼接为14*14*512,feature maps总数为128+256+64+64=512。

(13).Inception-6:由左往右,最终输出并拼接为14*14*528,feature maps总数为112+288+64+64=528。

(14).Inception-7:由左往右,最终输出并拼接为14*14*832,feature maps总数为256+320+128+128=832。

(15).最大池化层4:filter为3*3,stride为2,padding为0,输出为7*7*832,832个feature maps。

(16).Inception-8:由左往右,最终输出并拼接为7*7*832,feature maps总数为256+320+128+128=832。

(17).Inception-9:由左往右,最终输出并拼接为14*14*1024,feature maps总数为384+384+128+128=1024。

(18).平均池化层5+Dropout:filter为7*7,stride为1,padding为0,输出为1*1*1024,1024个feature maps。

(19).全连接层:有1000个神经元或1000个feature maps。

(20).输出层(Softmax):输出分类结果,看它究竟是1000个可能类别中的哪一个。

可视化结果如下图所示:

GitHubhttps://github.com/fengbingchun/NN_Test

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!