Inception网络

本文来自于网易云课堂

Inception网络简介

当构建卷积层时需要考虑过滤器的大小究竟是1×3,3×3还是5×5,要不要添加池化层而inception网络的作用就是代替你来做决定。虽然网络架构因此变得更加复杂,但网络表现却非常好。
这里写图片描述
对于一个28*28*192的输入,inception网络或inception层的作用就是代替人工来确定卷积层中的过滤器类型或者确定是否需要卷积层或者池化层。一个inception模块会将所有的可能叠加起来,这就是inception模块的核心内容。
这里写图片描述
这里写图片描述
在第二张图中,通常称中间的层为瓶颈层,也就是最小网络层。我们先缩小网络,然后在扩大 它。通过两张图的对比可以明显看到,采用了1*1的层的计算成本下降了10倍。那么仅仅大幅缩小表示层规模会不会影响神经网络的性能?事实证明,只要合理构建瓶颈层,那么既可以缩小规模,又不会降低性能,从而大量节省了运算。

Inception网络

一个完整的Inception模块如图所示。
这里写图片描述
通过将这些模块组合起来就得到了完整的inception网络,由于它是由google的研究员提出的,所以也叫做goolenet,是为了向lenet致敬。
这里写图片描述
那么inception这个名字是怎么来的呢?因为里面说到”我们需要走的更深”,如果看过盗梦空间(inception)这个电影应该会懂得这个梗。—-可惜我没看过:)。作者其实是想用它来表达建立更深的网络的决心。

使用开源的实现方案

事实证明很多神经网络复杂细致,因而难以复制。因为一些参数调整的细节问题会影响性能。而有许多研究者将源代码开源道GitHub上,如果作为应用者,我们可以直接将其下载下来并运用。

迁移学习

如果你要做一个计算机视觉应用,相比于从头训练网络,如果你下载别人已经训练好的网络结构的权重,你通常能够进展的非常快。用这个作为预训练,然后转换到你感兴趣的任务上。计算机视觉的研究社区非常喜欢把许多数据集上传到网上,比如ImageNet,MSCoCo,或Pascal类型的数据集,这些都是上传上去并且已经有很多研究者利用他们训练过他们的算法了,有时候这些训练过程需要花费好几周,并且需要很多GPU,其他人已经做过并且经历了非常痛苦的找最优的过程,这就意味着你可以下载花费了别人好几周甚至几个月而做出来的开源的权重参数并把它当做一个很好的初始化用在你的神经网络上,用迁移学习把公共的数据集的知识迁移到你自己的问题上。
现在假设你有2种猫,tigger和misty,如果你想识别你的猫,这就构成了一个三分类问题:tigger,misty 和neither。但你的数据量很小,这时你就可以利用迁移学习。你可以从网上下载一些神经网络开源的实现,不仅把代码下载下来,还要把权重下载下来。有很多训练好的网络你都可以下载,比如说ImageNet数据集,它有1000个不同的类别,因此这个网络会有一个softmax单元。你可以去掉这个softmax层,然后重新添加你自己的softmax层。就网络而言,Andrew Ng建议把其它层看做是冻结的,也就是你冻结所有的参数只训练和你的softmax层有关的参数。通过使用他人的权重你很可能得到较好的效果,即使只有一个很小的数据集。幸运的是,大部分神经网络框架都支持这些操作。这里有个经验法则就是你的数据越大,那么你要冻结的层应该越少,你能够训练的层数就越大。如果你有很大的数据集,你要做的就是把下载的权重当做初始化参数然后在进行训练。

数据扩充

大部分的计算机视觉任务使用很多的数据,所以数据增强是经常使用的一种技巧来提高计算机视觉的表现。在当下,计算机视觉的主要问题是没有办法得到充足的数据,对大部分机器学习问题来说这并不是问题,但是对计算机视觉数据就远远不够。所以,这就意味着数据增强会起到一定的作用。
这里写图片描述
数据增强的常用技巧包括镜像,随机裁剪,这两个是经常使用的。当然理论上你也可以使用旋转,扭曲,局部变换等,但是因为比较复杂,应用的不多。第二种经常使用的是色彩变换,实践中对 RGB三种通道的色彩变换是基于某种分布的。这样会使得对照片的颜色的鲁棒性更好。
这里写图片描述
执行过程可能是这样的;
这里写图片描述

计算机视觉现状

你可以把大量的机器学习问题看成是处于小部分数据和大量数据之间的部分。所以如果你能跨越整个范围来看机器学习问题的话,如果有很多数据,你会发现人们更倾向于使用更简单的算法和更少的手工工程,因此我们不需要为这个问题精心设置,相反,如果你没有那么多的数据,你会发现人们更多从事的是手工工程。所以,当看待机器学习问题时,Andrew Ng通常认为学习算法有2种知识来源,标记的数据和手工工程。手工工程可以是精心设计的特性或者网络组建等。所以如果你没有更多的数据时,你可以更多的考虑手工工程。Andrew Ng认为计算机视觉是在试图学习一个非常复杂的功能,通常没有足够的数据来满足需要。这就是为什么计算机视觉从历史上甚至现在都更多的依赖于手工工程,而他也认为这是计算机视觉领域发展相当复杂的架构的原因,因为在缺乏相当多的数据的情况下获得更好的数据的方式还是花更多的时间进行架构设计。
这里写图片描述
最后分享一篇计算机视觉历史的文章

猜你喜欢

转载自blog.csdn.net/u010132497/article/details/80060303