前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3. 经典卷积网络之GooleInceptionNet

3. 经典卷积网络之GooleInceptionNet

作者头像
和蔼的zhxing
发布2018-09-04 11:15:41
8220
发布2018-09-04 11:15:41
举报
文章被收录于专栏:和蔼的张星的图像处理专栏

这篇文章参考《Tensorflow实战-黄文坚》,加上自己的一点理解。

网络结构简介

GooleInceptionNet首次出现是在2014年的ILSVRC的比赛中,当时是第一名,最大的特点就是控制计算量的同时获得了比较好的分类性能--top-5错误率为6.67%。这个模型被称作为Inception V1,参数总量只有AlexNet的一半不到,有22层深,只有500万参数量,降低参数量的显然是非常有用的,模型越大的话肯定就需要比较大的数据量支持,同时耗费的计算资源也就越大。

Inception V1参数少效果好出了模型层数更深意外,还有两点原因:一个是去除了全连接层(全连接层的产数量是很大的比如4096-1024的全连接层就需要4096乘1024个参数(上百万)),采用全局平均池化层(将图片尺寸变为1*1)来取代它。二是其精心设计了Inception Module来提高参数的利用效率,这也是其为什么叫做Inception的原因。其典型模型如下:

Inception model

这个模型可以理解为是大模型中的一个小模型,其结构可以反复叠加,允许通道之间组合信息(1_1卷积,其中1_1卷积的效率是非常高的,参数可以下降很多,而且可以组合通道之间的信息,实质上是做了一个特征变换和非线性化)。这个Module中采用了不同卷积大小,和multi_scale思想类似。Inception V1中指出,这种结构可以有效增加网络的深度和宽度,提升准确率且不至于过拟合。

人的神经元的连接是比较稀疏的,所以研究者认为大型神经网络的合理连接方式也应该是稀疏的。尤其是对于非常大型,非常深的神经网络来说更是如此,Inception Net的主要目标就是找到最优的稀疏结构单元(Inception Module)。论文中提到其稀疏结构源自于Hebbian原理:通俗的来讲就是一起发射的神经元会连在一起。受此启发,一个好的稀疏结构应该是符合Hebbian原理的,我们应该把相关性高的一簇神经元链接在一起,普通的数据集中,可能需要对神经元节点进行聚类,然而在图像中,天然的就是临近区域的数据相关性要高,所以卷积就是这么个聚类的过程,1_1的卷积就可以很自然的吧不同维度但是同一位置的特征连接在一起。稍大一点的卷积无非是一个区域的不同维度的特征连接。所以在这个模型中使用了这几种方式,目的就是训练出这么一个符合Hebbian原理的稀疏结构。

Inception Module中,通常1_1卷积的比例(输出通道数)最高,而3,5尺寸的卷积核稍低,而在整个网络中,有多个叠加的Inception Module,我们希望后面的Model可以捕捉到更高阶的抽象特征,所以在越靠后的Inception Module中,大卷积核的占比应该更多。

Inception Net一共有22层深,出了最后一层,中间节点的分类效果也比较好,所以其中还采用了辅助分类节点,即把这一部分的分类结果和最终的输出加权来输出,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个Inception Net的训练也有好处。

Inception Net是一个大家族,包括从2014-2016的四篇文章,Inception V2借鉴了VGGnet,用两个3-3的卷积来代替5-5的卷积,还提出了BN方法(Batch-Normalization),BN是一种非常有用的正则化方法,可以让大型卷积网络的训练速度加速,同时收敛后的分类准确率也可提高,BN层用于神经网络的某层时,会对每一个MINI-batch数据内部进行标准化,使输出规范化到N(0,1)的正太分布,减少了内部神经元分布的改变,BN的论文指出,传统的深度神经网络在训练的时候,每一层的分布都在变化,会使得训练变得困难,只能使用比较小的学习率来解决这个问题,而对每一层使用BN之后,就可以有效解决这个问题,BN层在某种意义上起到了正则化的作用,所以在使用BN层的基础上可以减少或取消Dropout,简化网络结构。

Inception V3则主要进行了两方面的改造:

  1. 将卷积拆分成两个一维卷积。 比如7-7的拆分为7-1,1-7的两个卷积,这个其实节约了大量参数,比如7-7的的需要49的参数,而拆分之后只需要7+7=14个参数,这样可以一定程度上减少过拟合(参数量减少模型复杂度降低)。同时还增加了一层非线性扩展模型表达能力。
  2. 优化了Inception Module。 有35-35,17-17,8-8三种不同的结构(输入尺寸),这些结构只在网络的后部出现,前部分还是普通的卷积层,而且其还在分支中使用了分支。如下图。

分支中使用分支

Inception V3相比V3主要是结合了微软的RESnet。等写到RESnet的时候再说,这里要实现的是V3。

Inception V3的tensorflow实现。

首先来看模型结构:

一开始是准备在这里写的,后来发现实在是太长了,整整敲了一下午,不过总算有点理解slim这个模块了。最后放在git上吧。地址

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.05.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 网络结构简介
  • Inception V3的tensorflow实现。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档