Googlenet 的 Inception结构理解笔记

来源:互联网 发布:centos软件包管理器 编辑:程序博客网 时间:2024/06/05 22:34

首先:源码链接:https://github.com/tensorflow/models/tree/master/research/slim/nets

首先简书上一篇很详细的介绍:

http://www.jianshu.com/p/544e2354b30a     解释下它里面的一句话:如果conv2d方法没有特别设定padding,则需要看一下arg_scope是否标明了padding。    因为:arg_scope()是slim模块的一个给函数、变量等初始化值的功能函数(我的一篇博客中有写),如果在conv2d中没有给出padding的设置,那么它就是默认使用arg_scope中的默认初始值,所以就得保证在arg_scope中有对padding的初始化设置!。

先上图:


1x1的卷机核在我看来主要是可以升降卷积前后的feature map 的 depth(在保证原图平面结构的同时,整合/线性叠加 输入的maps在不同depth上的信息,然后可自由改变输出的depth大小)

另外,其实关于左边的图,连接了不同尺寸的卷积核,增加了网络对不同尺度的适应性,特征表达能力增强(卷积核更多,网络更宽,提取到的信息更丰富多样),让网络自由的选择更好的特征。。。这也是Inception结构的一大优点!!!

 最右边的maxpooling的作用是,去掉上一层的卷积下来的冗余信息。。。


右图的结构,还起到减少参数的好处:

来自知乎的截图

主要看对二段的栗子,参数因为1x1卷积核在中间过程的操作,实现了先降(128 变 96)再升(96 变 128)。这种操作使得参数数量大大减少。



接着补充它的原理:(截图来自《tensorflow实战》)


通道不同指的是它们存在于不同的feature map上,它们的空间位置(即平面坐标(x,y))是一样的。




即在靠后的Inception结构中,1x1的卷积核的输出通道数将减少些,减少空间集中度,提取更大面积的特征。



 Inception的另一大特点:使用中间的某层进行(辅助)分类,起到模型融合的效果:



这里值得说一下,之前的网络没有这一步的。要实现这个中间层分类,需要把某个Inception Model存放至end_points中,(代码中有讲解)


栗子:。。。。






所以总结一下Inception的有点:

1. 提供更“宽”的网络结构(1x1 3x3 5x5 ),使网络可自由选择更好的特征,maxpooling则是去掉上一层卷积下来的冗余信息。

2. 通过1x1的卷积核,实现降维和升维,达到减少参数的目的,其中,降维是利用了1x1的卷积核可线性组合不同通道上的特征的特性。(这与稀疏网络结构也密切相关)

3. Inception还使用了中间节点辅助分类,给予小一点的权值,利用中间某一层的输出来作分类,起到模型融合的效果。并且增加反馈梯度信号及额外正则化。




然后是Inception v2:

1.



2.


Inception V2主要就是加了神奇的BN了!有了 BN,dropout可以不要,L2的系数也可以减小些,学习率可以设大点,学快点。




Inception V3:


给个手稿:。。。。。


还有Inception V4 ,据说借鉴了resnet。。。。





有新的理解了再来补充,欢迎大家指正!














阅读全文
1 0
原创粉丝点击