带你读论文系列之计算机视觉–GoogLeNet
0 闲谈
玩起手机,看着电视,所有的计划都被抛之脑后,此时的快乐是深夜不舍睡下的愧疚。我总是想着明天怎么,而有时不知珍惜当下;总想着那些离开的朋友,而对现在不满;总想着如果这样,而不是我做了会如何。这两天反思了一下,我太依赖有人给我一个学习路线,往往自己探索学习发现的能力和勇气被打磨掉了。
小可爱,今天的内容有点多,坚持✊,你是最棒哒!
1 背景及部分作者
论文名称来源
“We Need To Go Deeper”是电影《盗梦空间》中的一个表达,它经常出现在使用电影屏幕截图的图像宏和垂直多窗格中,其中角色多姆·科布(莱昂纳多·迪卡普里奥饰)与罗伯特·菲舍尔(西里安·墨菲饰)谈论在某人的脑海中植入一个想法。
GoogLeNet是2014年Christian Szegedy等人在2014年大规模视觉挑战赛(ILSVRC2014)上使用的一种全新卷积神经网络结构,于2015年在CVPR发表了论文《Going Deeper with Convolutions》。在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如overfitting、梯度消失、梯度爆炸等。Inception的提出则从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果。
Inception技术演进:
v1(GoogleNet)–>BN-Inception–>V2–>V3–>V4–>Inception-ResNet–>Xception
下面简单介绍其中两名作者:Christian Szegedy和贾扬清
Christian Szegedy是GoogLeNet的一作,也是对抗样本由Christian Szegedy提出者。对抗样本是指在数据集中通过故意添加细微的干扰所形成的输入样本,导致模型以高置信度给出一个错误的输出。在正则化背景下,通过对抗训练减少原有独立同分布的测试集的错误率——在对抗扰动的训练集样本上训练网络。
贾扬清,本科和研究生阶段就读于清华大学自动化专业,后赴加州大学伯克利分校攻读计算机科学博士。他在博士期间创立并开源了如今业内耳熟能详的深度学习框架Caffe,被微软、雅虎、英伟达、Adobe等公司采用。
2019年,阿里巴巴达摩院通过知乎账号宣布,原Facebook(脸书)人工智能科学家贾扬清已正式加入阿里巴巴,担任技术副总裁岗位,领导大数据计算平台的研发工作。
为什么要提出Inception?
一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,但一味地增加,会带来诸多问题:
1)参数太多,如果训练数据集有限,很容易产生过拟合;
2)网络越大、参数越多,计算复杂度越大,难以应用;
3)网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型。
我们希望在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。在这种需求和形势下,Google研究人员提出了Inception的方法。
2 论文
1、提出了一个代号为Inception的深度卷积神经网络架构;
2、架构增加网络的深度和宽度,同时保持计算预算不变,主要标志是提高了网络内部计算资源的利用率;
3、为了优化质量,架构决策基于Hebbian原则和多尺度处理的直觉。
4、为ILSVRC14提交的文件中使用的网络,叫做GoogLeNet,这是一个22 层(如果我们也计算池化,则有27层)的深度网络,其质量是在分类和检测的背景下评估的。
赫布理论(Hebbian theory)是一个神经科学理论,解释了在学习的过程中脑中的神经元所发生的变化。赫布理论描述了突触可塑性的基本原理,即突触前神经元向突触后神经元的持续重复的刺激,可以导致突触传递效能的增加。
神经元突触“用进废退”fire together, with together.
该架构的优势在ILSVRC 2014分类和检测挑战上得到了实验验证,在这方面它优于当前最先进的技术。(2014年)
从LeNet-5奠定的CNN基础架构:(卷积+normalization+最大池化)n+全连接层m。
从LeNet-5开始,卷积神经网络(CNN)通常具有标准结构-堆叠卷积层(可选后跟对比归一化和最大池化)后跟一个或多个全连接层。对于Imagenet等较大的数据集,最近的趋势是增加层数和层大小,同时使用dropout 来解决过拟合问题。
近年(2014年)加深,加宽,加dropout 解决大数据集中的过拟合。
1.尽管池化导致空间信息损失,但CNN在定位、物体检测和人体姿势估计多方面取得应用
2.从视觉皮层中借鉴,采用多尺寸滤波器解决
1×1卷积具有双重目的:
1、最关键的是,它们主要用作降维模块以消除计算瓶颈,否则会限制我们网络的大小。
2、这不仅可以增加深度,还可以增加我们网络的宽度,而不会显着降低性能。
Inception模块中1*1卷积作用:
- 降维;
- 减少参数量和运算量;
- 增加模型深度提高非线性表达能力。
目标检测以R-CNN为代表的两阶段方法:
1、找出候选区域(selectivesearch)
2、对每个候选区域运用CNN;
1.检测主要是RCNN
2.RCNN先给出候选,再用CNN定位和分类
3.有点利用了底层特征,也用了高级的CNN模型
4.本文也采用这个方式
改进:multi-box和模型集成
提高模型性能的传统方法:
1、增加深度(层数);2、增加宽度(卷积核个数)
提高深度神经网络性能最直接的方法是增加它们的大小。这包括增加网络的深度(层数)及其宽度:每层的单元数。这是训练更高质量模型的一种简单而安全的方法,特别是考虑到大量标记训练数据的可用性。然而,这个简单的解决方案有两个主要缺点:1、参数多,过拟合;2、标注困难,类似细粒度图像需要专业知识。
计算效率问题:
两个相连卷积层,两层同步增加卷积核个数,计算量将平方增长。如果很多权重训练后接近0,那么这部分计算就被浪费了。我们不能不考虑计算效率,不计成本追求精度。
**解决这些问题的基本方法是最终从全连接到稀疏连接的架构,甚至在卷积内部。**除了模拟生物系统外,还具有更牢固的理论基础的优势,如果数据集的概率分布可以用一个大的、非常稀疏的深度神经网络来表示,那么可以通过分析最后一层激活的相关统计数据并用高度相关的输出。
不利的一面是,当今(2014年)的计算基础设施在非均匀稀疏数据结构上进行数值计算时效率非常低。即使算术运算次数减少100倍,查找和缓存未命中的开销仍然占主导地位,切换到稀疏矩阵也不会得到回报。通过使用稳定改进、高度调整的数值库,允许极快的密集矩阵乘法,利用底层CPU或GPU 硬件的微小细节,差距进一步扩大。**非均匀稀疏模型需要更复杂的工程和计算基础设施。**ConvNets在特征维度上传统上使用随机和稀疏连接表,以打破对称性并改善学习,为更好地优化并行计算,又变回全连接。结构的一致性和大量过滤器以及更大的bitch size允许利用高效的密集计算。
能否利用现有硬件进行密集矩阵运算的条件下,改进模型结构,哪怕只在卷积层水平改进,从而能够利用额外的稀疏性呢?
提出:一种利用额外稀疏性的架构,通过利用密集矩阵上的计算来使用当前硬件。
**Inception的背后理论仍要继续研究。**尽管所提出的架构已成为计算机视觉的成功,但其质量是否可以归因于导致其构建的指导原则仍然值得怀疑。确保需要更彻底的分析和验证:例如,如果基于下述原则的自动化工具会为视觉网络找到相似但更好的拓扑。最有说服力的证据是,自动化系统是否会创建网络拓扑,从而使用相同的算法在其他域中产生类似的收益,但具有非常不同的全局架构。至少,Inception架构的初步成功为在这个方向上令人兴奋的未来工作产生了坚定的动力。
如果自动机器学习工具AutoML能在各种场景下设计出类似的网络,那么证明Inception思路是正确的。
Inception架构的主要思想是基于找出卷积视觉网络中的最优局部稀疏结构如何被现成的密集组件逼近和覆盖。请注意,假设平移不变性意味着我们的网络将由卷积构建块构建。我们所需要的只是找到最优的局部构造并在空间上重复它。
局部信息,由1*1卷积提取越靠前面的层越提取局部信息。大范围空间信息由大卷积核提取越靠后的层提取大范围空间信息。
人们可以预期,在更大的patch上卷积可以覆盖的集群数量会更少,并且在越来越大的区域上patch的数量会减少。为了避免patch对齐问题,Inception架构的当前版本仅限于过滤器尺寸1×1,3×3和5×5。这也意味着建议的架构是所有这些层的组合,它们的输出滤波器组连接成单个输出向量,形成下一阶段的输入。此外,由于池化操作对于卷积网络的成功至关重要,这表明在每个此类阶段添加替代并行池化路径也应该具有额外的有益效果。
由于这些"初始模块"是相互堆叠的,它们的输出相关统计数字必然会有所不同:随着更高的抽象特征被更高的层所捕获,它们的空间集中度预计会降低,这表明3×3和5×5的比例应该随着我们向更高的层移动而增加。
将池化层的输出与卷积层的输出合并将导致其输出数量增加。即使这种结构可能涵盖了最佳的稀疏结构,但它的效率非常低,导致计算量在几个阶段就会爆炸。
原生Inception模块的问题:通道数越来越多,计算量爆炸。
在33卷积之前用11降维,11的卷积是用长宽为1通道数为输入的数量。11卷积核即可升维和降维,也可跨通道信息融合在生成的feature map后面加一个非线性的激活函数层,实际上是增加了模型的深度,提高了模型非线性的表达能力。
太过密集压缩的嵌入向量,不便于模型处理。
33,55卷积层之前应于1*1卷积降维。
1*1卷积作用:
- 升维/降维
- 减少参数量/计算量
- 增加非线性,增加模型深度
在计算要求会增加太多的地方应用降维和投影。然而,嵌入以密集、压缩的形式表示信息,压缩信息更难建模。我们希望在大多数地方保持我们的表示稀疏,并且仅在信号必须集体聚合时才压缩信号。也就是说,在3×3和5×5卷积之前,使用1×1卷积来计算缩减。
一般来说,Inception网络是一个由模块相互堆叠而成的网络,偶尔有跨度为2的最大集合层,以减半网格的分辨率。由于技术上的原因(训练时的内存效率),似乎只在较高的层使用Inception模块,而在较低的层保持传统的卷积方式是有益的。
这种结构的主要好处之一是,它允许在每个阶段大大增加单元的数量,而不至于在计算复杂性方面出现不可控的暴涨。降维的使用允许将最后一个阶段的大量输入滤波器屏蔽到下一层,首先降低它们的维度,然后用一个大的匹配尺寸对它们进行卷积。这种设计的另一个实际有用的方面是,它符合视觉信息应该在不同尺度上进行处理,然后进行聚合,以便下一个阶段可以同时抽象出不同尺度的特征。
Inception结构优点
- 增加神经元,不增加计算量
- 可以提取不同尺度的特征
视觉信息多尺度并行分开处理,再融合汇总。
计算资源的改进使用允许增加每个阶段的宽度和数量,而不会陷入计算上的困难。另一种方法是创建稍差的、但计算上更便宜的初始架构。我们发现,包括所有的旋钮和杠杆都可以实现计算资源的可控平衡,从而使网络比非Inception 架构的类似性能的网络快2-3倍,然而这需要进行仔细的设计。
GoogLeNet名字致敬LeNet。
用了更深更广的Inception网络,其质量稍差,但将其添加到集成中似乎对结果略有改善。
512=192+208+48+64
权重和计算量均匀分配给各层
所有卷积适用ReLU激活函数
上表中描述了最成功的特定实例(名为GoogLeNet)。在我们组合的7个模型中,有6个使用了完全相同的拓扑结构(用不同的采样方法训练)。
Global Average Pooling --全局平均池化(GAP)
一个channel用一个平均值代表取代全连接层,减少参数量
用GAP代替全连接层:
1、便于fine-tune迁移学习
2、提升0.6%的TOP-1的准确率
该网络的设计考虑到了计算效率和实用性,可在个人设备上运行,甚至包括那些计算资源有限的设备,特别是在低内存占用方面。**如果只计算有参数的层,网络有22层深度(如果我们也计算池化,则有27层)。**用于构建网络的总层数(独立构建块)约为100,取决于所使用的机器学习基础设施系统。在分类器之前使用平均池,还用了一个额外的线性层。这使得我们可以很容易地对其他标签集的网络进行调整和微调。从全连接层到平均集合层的转变将top-1的准确性提高了大约0.6 %。即使在去除全连接层后,仍要使用dropout的使用。
对于网络有相对较大的深度,存在一个问题,即有效方式将梯度传播回所有层。一个有趣的见解是,相对较浅的网络在此任务上的强大性能表明,网络中间的层产生的特征应该具有很强的辨别力。通过添加连接到这些中间层的辅助分类器,我们希望在分类器的较低阶段鼓励区分,增加传播回来的梯度信号,并提供额外的正则化。这些分类器采用较小卷积网络的形式。在训练期间,它们的损失以折扣权重添加到网络的总损失中(辅助分类器的损失权重为0.3)。
注:浅层的辅助分类器后面被证实没太大用处。作者在InceptionV2/V3 的论文里去掉了浅层辅助分类器。
浅层特征对分类已经有足够的区分性
在4a和4d模块后面加辅助分类层
训练时的损失函数:
L=L最后+0.3L辅1+0.3L辅2
测试阶段:去掉辅助分类器
上图说明如下:
- GoogLeNet采用了模块化的结构(Inception结构),方便增添和修改;
- 网络最后采用了average pooling(平均池化)来代替全连接层,该想法来自NIN(Network in Network),事实证明这样可以将准确率提高0.6%。
- 虽然移除了全连接,但是网络中依然使用了Dropout ;
- 为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度(辅助分类器)
训练:
训练过程复杂,所以没办法告诉我们怎么训练的。调参玄学!
结论:训练过程复杂
1、会基于训练好的模型,再调整超参,样本大小进行训练;
2、最佳的是8%-100%尺⼨,⻓宽⽐是[3/4,4/3]之间;
3、光度畸变可减轻过拟合;
在比赛后被证明效果很好的方法包括对图像的各种大小块进行采样,大小均匀分布在图像区域的8%和100%之间,其纵横比在3/4和4/3之间随机选择。此外,我们发现Andrew Howard的光度失真在一定程度上有助于对抗过度拟合。此外,我们开始使用随机插值方法(双线性,面积,最近邻和三次,等概率)调整大小相对较晚并结合其他超参数变化,因此我们无法确定最终结果是否受到它们的积极影响。
说不清这些调参和图像增强技巧对最后结果有没有用。
ILSVRC 2014分类任务
1、没有使用额外的数据
2、采用七个模型集成,其中六个模型的网络结构、初始化方式、学习率调整策略完全相同,仅仅是采样方式不同
3、和VGGNet一样,要解决AlexNet尺度单一的问题:在预测时,将图片resize到四个尺度,短边分别为256、288、320、352,再取三个正方形(上中下或左中右),每个正方形再取四个角落和中心和原图片直接resize到224 x 224,还有这些图片的镜像(水平翻转),这时候的图片就是224 x 224 x 3了,可以直接输入到网络中(总图片数:4 x 3 x 6 x 2)
4、在多个裁剪和多个分类器的softmax概率结果求平均得到最终的预测结果(作者尝试了在多个裁剪上最大池化 + 多个分类器求平均发现效果并不如简单的求平均
ILSVRC 2014检测任务
检测任务的目标是bounding box与Ground Truth重叠率要在50%以上,且需要对提取出的bounding box分类正确。作者采用的方法和R-CNN很类似,只是使用上面的Inception堆叠出的网络结构来对bounding box分类,同时,在区域提取那一步将Selective Search和multi-box方法结合起来,增大两倍超像素以此提高假阳率,因为时间紧缺没有使用bounding box regression。作者没有使用定位任务的数据进行预训练。