Inception —— 计算机视觉架构再思考

来源:互联网 发布:淘宝店冻结资金 编辑:程序博客网 时间:2024/06/06 06:31

自从2012年Krizhevsky等赢了ImageNet竞赛后,他们的AlexNet被成功应用在大量的计算机视觉任务,例如物体检测,分割,人体姿势估计,视频分类,物体追踪和图像超分辨。

这些成功激发了对于找到更好执行卷积神经网络的的研究。从2014年起,使用更深、更宽的网络大幅提高了网络结构的质量。VGGNet和GoogleNet在2014ILSVRC分类大赛中取得了相似的突出成绩。一个有意思的现象是在分类中表现突出的模型在很多领域都有广泛应用。这意味着深度视觉结构的提升可以用于提升大部分依赖高质量视觉特征的其它计算机视觉任务。同样,网络质量的提高引发了新的卷积网络应用,比如此前AlexNet特征还无法比拟的手工分辨率调整。

虽然VGGNet有吸引人的简单结构,相应的评估网络需要大量计算。另一方面GoogleNet的Inception结构也是设计用于在严格的内存和计算条件下执行。GoogleNet只使用500万个参数,是AlexNet的1/12,它使用了6000万个参数。VGGNet使用了比AlexNet3倍多的参数。

Inception的计算成本也低于VGGNet,这使它能够应用于大数据场景,或是在有限的内存和计算能力的情况下以相对合理的成本处理较大的数据,如移动端。当然我们可以通过计算技巧来优化一些特定的操作来解决该问题。但是这些方法加大了复杂性。另外,这些优化的方法也可以应用了Inception结构,扩大了效率差。

Inception结构的复杂性使它依然存在修改困难的问题。如果只是简单的扩大结构规模,计算的优势会马上消失。并且不能清楚的描述GoogLeNet结构不同设计的考虑因素。这使它难以在维持效率的同时依据新情况更新。例如,如果需要提高一些Inception风格模型的能力,简单的加倍过滤器大小会导致4倍增加计算成本和参数。这在很多实际场景中并不现实。这里,我们提出一些能够有效提高卷积网络规模的原则和优化建议。虽然我们的原则不仅限于Inception风格网络,他们更适应于Inception风格的灵活可兼容性。这通过大量使用Inception模块的降低维度和平行结构实现,减轻了结构变动对周边组件的影响。使用此种方式时依然要保持谨慎,不断观察以维持模型的高质量。

设计原则

这里我们介绍一些基于大规模不同卷积网络结构选择的实验确定的一些设计原则。目前一些原则还在推测阶段,需要更多的实验证据来评估它们的准确性和使用范围。严重的偏离这些原则会导致网络质量的恶化,当监测到偏离对其进行修正一般会改善结构。

1、避免表征瓶颈,特别是在网络早期。前向传播网络可以从输入层到分类器或回归器的无环图来体现。这定义了清晰的信息流。从每一个分割输入和输出的切入,能够获得通过这个切入的信息流量。应该避免使用极端压缩导致的瓶颈。一般讲表征规模应平缓的从输入向输出递减知道最终任务。理论上,信息内容无法仅通过表征的维度来评估,因为它舍弃了一些重要因素相关性结构;维度仅提供了信息内容的粗略估计。

2、更高维度的表征更容易在一个网络内本地化处理。在卷积网络中加大每层的激活能获得更多的非纠缠特征,可使网络训练更快速。

3、可以在更低维度嵌入上进行空间聚合,不会损失或损失太多的体现能力。例如在进行3*3卷积之前,可以在空间聚合之前降低输入表征,不会有严重问题。我们假设它是因为在空间聚合情况下使用输出,相邻单元结果的强相关性在降低维度时损失较小。基于此这些信号可便利的被压缩,并且维度降低能使学习更快。

4、平衡网络的宽度和深度。网络的优化表现可以通过平衡每阶段的过滤器数量和网络深度实现。同时提高宽度和深度可以提高网络质量,但是只有并行提高时才能对计算常量优化提升,因此要在网路的深度和宽度合理平衡分配计算能力。

这些原则并不能直接提高网络质量,在复杂情况下合理使用它们能取得较好效果。

使用大过滤器因子化卷积

GoogLeNet大部分的效益来自于大规模使用降低维度。这可以看作以有效方式计算来因子化卷积的一个特殊情况。例如考虑1*1卷积,然后3*3卷积。在视觉网络,邻近激活的输出高度相关。因此我们认为激活可以在聚合前减少并取得类似的本地表征。

这里我们尝试其他方式在不同设定因子化卷积,特别是提高计算有效性。考虑到Inception网络是全卷积,每个权重对应每个激活的乘积。因此,任何计算成本的降低导致参数数量减少。这意味着有适合的因子化,我们能够获得更多的非纠缠参数从而训练更快速。同时,我们可以使用节约的计算和内存来提高我们网络的过滤器规模并同时保持在单一计算机上训练每个模型的能力。

因子化到更小的卷积

使用大空间过滤器卷积(例如5*5或者7*7)计算成本昂贵。例如一个n过滤器的5*5卷积在m各上的计算成本是25/9=2.78倍高于3*3卷积。当然5*5过滤器可以捕捉更早层的单元激活信号依赖,所以降低过滤器规模同时降低了表现力。但是,我们可以考虑5*5卷积是否可以用具有相同输入规模和输出深度,但更少参数的多层网络替代。如果我们仔细观察5*5卷积的计算图,我们发现每个输出像一个小的全连接网络在输入上以5*5的块滑动。


既然我们在构建一个视觉网络,自然的我们试图再次转化,使用两层卷积结构来体化全连接,第一层3*3卷积,第二层是第一层3*3输出上的全连接。


空间因子化至非对称卷积

上述结果表明大于3×3的过滤器不是很有用因为他们总可以分解成一组3×3的卷积层。我们可以进一步尝试将他们分解成更小的例如2×2的卷积。其实使用非对称卷积如n×1可以取得更好的效果。例如,使用3×1卷积加上1×3卷积相当于用3×3卷积在两层网络上滑动的接收域。


如果输入和输出过滤器相同,对于相同数量的输出过滤器,这个两层的方案成本要少33%。相比,因子化3×3卷积为两个2×2卷积只节约了11%的计算量。
理论上我们可以更进一步,用1×n卷积和n*1卷积来替代任何n×n卷积并节约计算成本。


实践中我们发现这种因子化在早期的层变现并不好,但在中等规模的格大小时表现优异(在m×m特征图,当m在12到20之间)。在这个程度,使用1×7和7×1卷积能取得非常好的效果。

使用辅助分类器

辅助分类器的概念被引入来提高非常深度网络的收敛。基本思想是将非常有用的梯度推到下层以使他们迅速被使用并通过克服在非常深度网络中梯度消失问题来帮助训练收敛。Lee等认为辅助分类器帮助实现更稳定的学习和更好的收敛。有趣的是,我们发现在训练早期,辅助分类器没有提升收敛,只有在末期,有辅助分支的网络在精确度上开始超过没有辅助分支的网络,并到达略高的平台。

有效降低格大小

传统的卷积网络通过池化操作来降低特征图格的规模。为了避免表征瓶颈,在执行最大或平均池化前,网络过滤器的激活维度应扩大。例如在一个d×d的格使用k过滤器,如果我们要达到d/2×d/2格和2k过滤器,我们首先要计算2k过滤器步长为1的卷积,然后使用池化步骤。这意味着总体计算成本由昂贵的较大格的卷积决定,进行2d方k方操作。一种可行的方式是将卷积和池化对换,减少1/4的计算成本。但是这造成了一个表征瓶颈,因为总体维度降低到了(d/2)方k,使得网络表现力降低。


我们建议另一种方式解决这个问题,既能进一步降低计算成本又能取出表征瓶颈。


我们使用两个并行的步长2的块,P和C。P是一个池化层(平均或最大池化),两者都步长为2,过滤器通过上图方式结合起来。

Inception-V2

将上述内容结合起来,我们提出一个新的结构。网络布局如下表:

注意,我们将传统的7×7卷积分解成3个3×3卷积。网络的Inception部分,我们有3个传统的Inception模块,每个35×35,有288个过滤器。使用降低格技巧降为17×17,有768个过滤器。然后进一步分解成5个如图5的Inception模块,格降为8×8×1280。在8×8程度,我们有两个如图6的Inception模块,结合的过滤器输出组每块大小为2048。我们观察到只要遵循此前提到的网络设计原则,该网络相对稳定。虽然网络深达42层,但计算成本仅是GoogLeNet的2.5倍,并优于VGGNet。

通过标签平滑对模型正则化

我们通过估计训练时舍弃标签的边际效用来正则化分类器层。

原创粉丝点击