🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题
🍊专栏推荐:深度学习网络原理与实战
🍊近期目标:写好专栏的每一篇文章
🍊支持小苏:点赞👍🏼、收藏⭐、留言📩
GoogleNet
GoogleNet是2014年ILSVRC分类比赛冠军 ,在介绍完整的GoogleNet的网络结构之前,我们先来介绍其子结构——Inception,GoogleNet就是由这样的一个个Inception组成的。Inception结构如下:
可以看出,Inception结构将原始的图像进行了三种不同大小的卷积操作及一次池化操作,然后将四次操作得到的特征图结合在一些得到一个大的特征图。这样的拼接操作可以融合不同尺度的特征,最后的特征图包含不同感受野的信息。【注意:这里的卷积池化操作得到的一个特征图的大小必须是一样的,这样才可以将它们拼接在一起,这就要求需要设置不同的步长s和padding,y以达到输入输出前后特征图大小一致的效果(这里再插一句,往往用3*3的卷积核进行卷积,则采用s=1,padding=0可使输入输出前后特征图大小不变;对应5*5的卷积核,则需要设置s=1,padding=2)】
在GoogleNet的论文中对上图的Inception结构进行了改善,即在3x3和5x5的过滤器前面,maxpooling后分别加上了1x1的卷积核,因为这样可以大大减少参数量。结构如下图所示:
对于为什么加上1x1的卷积之后,参数量变少了,我们给出以下解释【拿之前的5*5的卷积和后面的加上1*1的卷积举例】
通过上图可以很明显的发现:当加入1x1的卷积后参数大大减少了。
在解释了Inception模块后,GoogleNet的结构就很清晰了,主要由9个Inception模块,如下图所示:【需要注意的是在网络中4a和4d模块增加了2个额外的softmax层,但是这部分在网络测试过程中是不需要的】
这部分就不解释每一步的特征图变化了(实在太多了😭😭😭)我相信前面的大家会了的话,这里是很容易推导的!!!方便大家推导,再附上论文中自带的每次输入输出变化的情况图表,如下图所示:
这个图开始看可能不是很懂,这里给出论文中的解释就会明白了,如下图所示:【注意:上表中param表示需要参数的量,但我计算的结果(也找了一些资料验证)表明上表结果是不正确的,大家也可以算算看!!!】