“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第2篇文章,点击查看活动详情”
GoogLeNet
我们还使用了一个更深更广的Inception网络,其质量略胜一筹,但将其加入到合集中,似乎只对结果有微小的改善。我们省略了该网络的细节,因为实验结果表明,确切的架构参数的影响相对较小。下表显示了比赛中最常用的Inception实例。这个网络(用不同的图像斑块采样方法训练)被用于我们组合的7个模型中的6个。
所有的包括Inception架构内的卷积都使用修正线性激活。我们的网络的感受野尺寸是224224的RGB色彩通道。“#3×3 reduce”和 “#5×5 reduce” 代表33和55卷积之前的降维层的11滤波器的数量。在“pool proj”这一列可以看到内置最大池化层后的投影层的1*1滤波器的数量。所有的这些降维/投影层也都采用修正线性激活。
该网络基于计算效率和实用性来设计,所以可以在个人设备或者那些有计算资源限制的设备上运行测试,特别是那些内存很小的设备。只算有参数的层的话,网络有22层(如果算上池化层的话那么有27层)。再加上一些独立模块的话,该网络总的大概有100层。但是这个数字取决于机器学习的设备系统的使用。分类之前,平均池化的使用是基于Network-in-Network的,虽然我们在具体实现的时候,和它有所不同,我们使用了一个额外的线性层。这使得我们在遇到其他标签集的时候可以很容易地改变和精细调整我们的网络来适应。它主要是为了方便,我们也不指望它能发挥什么大作用。结果表明,从全连接层到平均池化层的转变,Top-1的准确率提高了0.6%,但是dropout仍然是必不可少的。
鉴于网络比较深,所有层以一个有效的方式传播梯度回来的能力成为了一个问题。一个有趣的见解是,这个项目中浅层的网络的强大性能表明,从网络中间层产生的的特征应该是非常有识别性的(discriminative)。通过添加连接中间层的附加分类器,我们将能在分类中较早的步骤就增强识别性,增强获得的反向传播的梯度信号,并给予额外的正规化。这些分类器把更小的卷积网络添加到Inception(4a)和(4d)模块的输出之上。在训练的时候,它们造成的损失按照折算出来的权重被添加到网络的总损失里面(附加分类器所占的权重为0.3)。在测试阶段这些辅助网络就会被丢弃。后来的控制实验表明,辅助网络的影响相对较小(约0.5%),只需要其中一个网络就能达到同样的效果。
包括辅助分类器在内的边上的额外网络的具体结构如下:
1、一个拥有尺寸为5*5的滤波器而且步长为3的平均池化层,在(4a)输出4*4*512,在(4d)步骤输出4*4*528
2、一个拥有128个滤波器的1*1的卷积来降维和修正线性激活
3、一个有1024个神经元和修正线性激活的全连接层
4、一个70%比例下降输出的dropout层
5、一个拥有用softmax损失来作为分类器的线性层(作为主要分类器来预测1000个类,但是在测试的时候移除)
训练方法
我们的网络用DistBelief[4]分布式机器学习系统和数据并行(一个batch均分k份,让不同节点前向和反向传播,再由中央参数服务器优化更新权重。)进行训练。虽然我们只用CPU实现,但是可以粗略地估计到用数个高端GPU训练GoogLeNet网络的话在一周内就可以收敛,其中主要的限制因素是内存。我们训练的时候采用0.9动力(momentum)[17]的异步随机梯度下降,固定学习速率表(设定学习速率每8个周期下降4%)。测试的时候用Polyak平均来建立最终模型。
在过去的几个月里,为了竞赛我们的图像采样方法发生了很大的变化,模型训练的时候结合其他选项,有时候是变化的超参数,比如dropout和学习速率,所以很难给出一个明确的指导说哪个才是训练这些网络的最有效的方法。详细地说,模型的训练效果不一[8]。但是,如果采样的图像块面积均匀地分布在图像的8%到100%,同时纵横比随机选择3/4或者4/3,那么将会得到很好的效果,这个是在比赛之后就已经被证明了的。同时呢,我们发现Andrew Howard[8]的亮度失真可以在一定程度上防止过拟合。此外,我们开始使用随机插值方法是哪一个在起积极作用。
ILSVRC 2014 分类竞赛的设置和结果
ILSVRC 2014分类竞赛的任务是将图像归在ImageNet的1000个类里。训练用图像大致有120万个,验证用图像有5万个,测试图像有十万个。分类器的性能是用它预测的最高分来衡量的。有两个数字经常报告出来:Top-1的准确率,Top-5的错误率。比赛以Top-5的错误率排名。
我们没有使用比赛以外的数据进行训练。除了上述训练技巧,我们在测试的时候也使用了一系列的精心设计的方法来得到更好的效果。
1、我们用GoogLeNet模型各自训练了7个版本(包括一个宽版本),得到了他们的预测结果并取综合值。这些模型初始设定都是相同的(连初始权重也是相同的,这主要是作为监督),不同的只是采样方法和随机的输入图像的顺序。
2、测试过程中,我们采用了比Krizhevsky更积极的方法。具体而言,我们把图像大小调整到4个尺寸,短边(高度或者宽度)的尺寸分别为256、288、320和352,取这些调整后的图像左侧、中间和右侧方块(在肖像图中,我们则取上方、中间、下方方块)。对于每个方块,我们取四个角和中间的224224大小的采样点,并把方块放缩到224224,同时复制出它们的镜像版本。这样每个图像的的采样个数就是436*2=144。早些年Andrew Howard也用了类似的方法,他使用的方法比我们给出的方法效果差一点点。我们注意到这样积极的采样在实际应用中可能是不必要的,因为在得到一个合理的采样数之后,再多的采样点发挥的作用就很小了。
3、softmax概率平均到各个采样点和所有的独立分类器,从而得到最后的预测。在我们的试验中,我们分析了验证数据的可选方法,例如在采样点最大池化和在分类器平均,但是性能都不如简单地取平均。
下表中我们还分析并报告了多个测试选择的性能,包括不同的模块数和预测时不同的采样数。我们会选择验证数据时Top-1错误率最低的那一个模块来使用。验证数据集报告出数字来让我们可以防止在测试数据统计的时候过拟合。
由上图可见模型集成的越多,图像裁决的越多,那么它的准确率越高,错误率越低。
ILSVRC 2014 检测竞赛的设置和结果
ILSVRC 2014检测竞赛是要我们在属于200个可能的类的图像的物体周围产生包围盒。如果他们,如果检测出来的符合物体所属类别的真实属性,同时包围盒重叠部分至少有50%的话(使用Jaccard相似性指数),那么就可以认为正确检测到了目标。无关的错误识别会被惩罚。和分类不同,这里每个图像都可能包括多个目标或者根本没有目标,而且目标的尺寸可能很大也可能很小。得到的结果用平均精确度度表示(mAP)。
用GoogLeNet来识别的方法和R-CNN方法相似,相比之下GoogLeNet增加了Inception模块来作为区域分类器。此外,通过与多盒预测的Selective Search方法结合,来提高包围盒的召回率。为了减少错误识别,超像素的尺寸提高了两倍。这使得选择搜索算法得到的减半。我们又从多盒的结果里面加回200个结果,总的来说,我们大概采用了60%的R-CNN方法的结果,将覆盖率从92%提升到93%。可以看到,在单一模型上的效果是把平均精确度提高了1%。最后,在分类区域的时候,我们一同使用6个卷积网络,把结果精确度从40%提升到了43.9%。注意,和R-CNN不同,因为时间不够所以我们没有使用包围盒回归。
我们报告最好的检测结果和逐个检测版本以来的改进。和2013年的结果对比起来,准确度几乎是翻了一番,检测器性能最好的团队都使用了卷积网络。表4是官方给出的分数,以及这些团队的共同点:使用外部数据、集合模型或者联系模型。外部数据通常是ILSVRC12精确分类的分类数据,用以预训练模型。一些团队也提到了本地数据的使用。因为局部任务包围盒的良好分配不包括检测数据,所以可以用这些数据预训练总体包围盒回归量。而GoogLeNet没有使用本地数据来预处理。
我们的GoogLeNet只用了单模型,然而Deep Insight团队设计出来的模型性能最好,也意外地只比我们提高了0.3%,但是他那个用了三模型哦,GoogLeNet集合起来用的时候获得的结果会显著增强的。
结论
我们的研究结果得到了这样的一个可靠的证据:将最佳稀疏结构稠密化是提高计算机视觉神经网络的有效方法。这种方法的主要优点在于,相比于又浅又窄的网络而言,只需要适度增加计算量,性能就能显著提升。
同时还注意到,我们的检测工作没有利用上下文,也没用执行包围盒回归,但是依然很有竞争力。这个事实进一步证明Inception架构是很强大的。
尽管用更复杂的拥有相同深度和宽度的网络也可以实现差不多的性能,但是我们已经确切证明了在通常情况下用稀疏架构师有效而且实用的。这表明,未来工作可以向基于《用稀疏分散的网络取代庞大臃肿的网络》通过自动的方式建立更加稀疏和设计更加精细的结构来发展。