您的位置:首页 > 其它

keras搬砖系列-inception v2与v3

2018-03-13 01:00 399 查看

keras搬砖系列-inception v2与v3与v4

inception v2的基础上在v1的基础上,进行了改进,一方面加了BN层,减少了Internal Convariate Shift,每一层的输出都规范化到一个高斯,另外一个方面学习VGG用2个conv替代inception模块中的5*5模块,降低了参数的数量,也进行了加速计算;一个5*5的网络等于两个3*3的网络:
再修正后的inception module在输出到下一层卷积之前,会对数据进行一次降维,怎么降维,采用1*1的卷积核实现,输入原理有



这种inception module既能大大提升卷积的提取特征能力,又不会使得计算量提升很多。



inception v3一、设计出发点:
1,避免达到瓶颈,所以特征图大小的下降应该要比较缓慢,特征在处理网络比较靠前的时候,信息流前向传播过程中显然不能进行高度压缩级表达瓶颈。从input到output,feature map的宽和高基本都会逐渐变小,但是不能一下子就来一个kernel=7,stride=5这样会造成瓶颈表达。输出的维度一般来说会逐渐增多,否则网络会很难训练特征维度并不代表信息的多少,只是作为一种估计的手段。
2,高维表示可以用网络替代高维特征更易处理,会加快训练
3,可以在低维嵌入上进行空间汇聚而无需担心丢失更多的信息。比如在进行3*3卷积之前,可以对输入进行降维而不会产生严重的后果。假设信息可以被简单的压缩,那么训练则会进行加快。
使用大尺度滤波器卷积分解:5*5的卷积可以使用两个3*3卷积代替,对于一个5*5卷积核卷积的区域可以先使用一个3*3对5*5的区域进行卷积,然后再使用一个3*3核对刚刚的卷积结果再进行卷积一次,最终也是这个数据,在效果上和5*5卷积是等效的。这样减少了一次卷积计算的次数,一次5*5卷积需要25,而两次3*3则只需要18次运算,如果卷积更加大,则减小的计算量也更加大。
为什么要做这种分解:我们可以看到分解导致卷积核的参数变小,也就说明原理5*5的卷积核是有部分参数冗余的,其实并不需要25个参数提取特征,可能需要18个就行了,由于提取区域像素是相邻的,像素之间的关联性比较强,可以对参数进一步压缩,大卷积分解成小的卷积核,v3还提出了另一种分解方式可以看书3*3的卷积可以用一个1*3的卷积,紧接着跟着一个3*1的卷积也是可以实现相同的输出的,对于5*5和7*7也是可以这样处理的,这样能够降低卷积核参数和计算量。



3*3的卷积使用3*1的卷积核1*3卷积
4000
代替,
这种结构在前几层效果不好,对于特征图大小为12-20的中间层效果比较明显
附加分类器
附加分类器用batch norm层效果比较好,常规网络都是在最后一层计算loss,但本质上最后一层loss其实在每一个子网络中都有计算的,在第一代googlenet使用了多余的底层分类器,实践中有两条:
1,多余的分类器在训练开始的时候并不能起到作用,在快训练结束的时候,使用它能够有所提升。
2,最底层的那个多余分类器去掉后也不会有损失。
以多余的分类器起到的是梯度传播下去的重要作用,但是通过实验认为实际上起到的是regularizer的作用,因为在多余的分类器前添加dropout或者batch normalization效果会更加好。
降低特征图大小
通过池化来降低特征图大小,为了避免表示瓶颈,更有效的保存图像信息,在池化之前加滤波器数目,以前的网络都是在卷积层后面加一个Pooling来降低特征图的尺寸,但是这种降低会损失信息。





右图是正常的缩小,计算量比较大。左图是先pooling会导致特征遇到瓶颈,违反上图的一个规则,为了同时能够到达不违反规则且能够降低计算量的作用,将网络改为下图:



这种方法同时进行步长为2的卷积和池化,然后串联,从图中可以看出降低尺寸是用卷积加上合适的步长实现,当初有一个支路通过pooling的方式来实现,这种方式可以有效避免信息的损失。

实验结果:

实验结果与GoogleNet相比提升比较大:



五、inception v4模型



模型图。 http://blog.csdn.net/numeria/article/details/73611456
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: