GoogLeNet

GoogLeNet

CNN卷积网络的发展史

1. LetNet5(1998)
2. AlexNet(2012)
3. ZFNet(2013)
4. VGGNet(2014)
5. GoogLeNet(2014)
6. ResNet(2015)
7. DenseNet(2017)
8. EfficientNet(2019)
9. Vision Transformers(2020)
10. 自适应卷积网络(2021)

上面列出了发展到现在CNN的一些经典的网络模型,我将持续不断更新学习上述神经网络的笔记。共勉!

原论文地址GoogleNet

主要知识点

1. 传统连接的两个问题:

    1. 计算效率过低
    1. 非均匀稀疏模型需要更复杂的工程和计算基础设施

2. Inception主要思想:

  • 用密集模块去近似出局部最优稀疏结构
  • 聚合高相关性的特征到下一层

3. 1*1Conv的作用:

  • 降维/升维
  • 减少参数量/计算量
  • 增加非线性,增加模型深度

Abstract(摘要)

在这里插入图片描述

我们提出了一个代号为Inception的深度卷积神经网络架构,它用于ImageNet挑战赛上的分类和检测任务。该架构的主要特点是在增加网络深度和宽度的同时减少参数量和计算量,为了优化质量架构决策是基于赫布理论和多尺度信息处理。在我们提交的ILSVRC14中使用的一个特定化身称为GoogLeNet,这是一个22层的深度网络,关于该网络的分类和检测在网络中有提到。

  • 分类:输入一张图片输出它为每一类的概率。
  • 检测:有可能一张图片上有好几种物体,需要用画框把物体框出来。
  • 赫布理论:神经元之间存在强关联,强关联的神经元之间会相互影响(不同神经元提取了猫的胡须,眼睛,嘴巴等特征,如果图片中有一只猫那么这些神经元就会高度相关将这些进行融合)。
  • 多尺度信息处理:使用不同尺度的卷积核来提取不同尺度的特征,然后将这些特征进行融合。

1. Introduction(介绍)

在这里插入图片描述

在过去的三年里由于深度学习的进步,更具体的说由于卷积神经网络的发展图像识别和目标检测有了很大的进步。这一进步不仅得益于硬件数据集和更庞大复杂的模型更得益于新的模型思路和改进结构。在不适用新数据集的情况下我们的GoogLeNet模型在ILSVRC14挑战赛上比AlexNet少12倍参数数量但更加准确。目标检测的最大收获并不是来自于deep的使用单独的网络或更大的模型,而是来自深度架构和经典计算机的协同作用如Girshick等人[6]的R-CNN算法。
另一个值得注意的因素是随着移动和嵌入式技术的不断发展我们算法的效率尤其是它们的功率和内存的使用变得越来越重要。值得注意的是,本文中提出的深层架构设计的考虑因素包括了这个因素,而不是纯粹地关注精度数字。在保证模型测试阶段乘加运算次数少于15亿次不仅仅是实验学术成果更能应用于实际应用甚至更大规模数据集。

在这里插入图片描述

在本篇文章中我们将专注于计算机视觉的高效深度神经网络架构代号为:Inception。受两个启发一个是使用1 * 1卷积降维-升维Global Averge Pooling层取代全连接层另一个是电影盗梦空间中“we need to go deeper”。在我们的例子中,deep有两个含义:第一增加网络深度,第二使用稀疏,分散的网络取代以前庞大臃肿的网络。

2. Realated Work(相关工作)

在这里插入图片描述

LeNet-5奠定的卷积基础结构:(卷积+Normalization+最大池化)* n + 全连接层 * m。依据此结构提出的变体AlexNet和ZFNet都在MNIST和CIFAR数据集上取得了很好的结果。对于更大的数据集ImageNet我们使用dropout来解决参数过拟合的问题。
尽管池化层丢失了空间像素精确信息,但我们依然能用CNN进行定位和目标检测。受到灵长类动物视觉皮层神经科学模型的启发,我们提出使用多尺度信息融合
Network-in-Network(NIN)是Lin等人为了提高神经网路表现能力的一种方法。1 * 1卷积可以随意插在网络层中并且我们的网络中经常要用到这个卷积。Inception模块中使用1 * 1卷积用于:

  • 降维
  • 减少参数数量
  • 增加模型深度提高非线性表达能力

目前主要的目标检测方法是R-CNN:

  • 找出候选区域(selective search)
  • 对每个区域运用CNN
    GoogLeNet在目标检测竞赛也用到了相同的工作办法,但有些不一样主要使用了multi-box prediction这个方法能够减少一些不是目标的候选框相当于增加真框的recall。

3. Motivation and High Level Considerations(动机和深层考虑)

这部分很重要是Inception结构的思想来源!

接下来我们一起看看论文来一步步理解是如何构思出这种架构的.

在这里插入图片描述

提高模型的传统方式:

    1. 增加深度(层数)
    1. 增加宽度(卷积核个数)

这种方式适用于大规模数据集,但是也暴露了三个问题:

    1. 参数越多越容易过拟合,尤其是对小数据集并且对于获取标注成本大的数据集也不适用(这一点将在下面解释)
    1. 计算效率过低
    1. 网络越深越容易出现梯度消失,难以优化模型

在这里插入图片描述

如上图所示我们普通人很难分辨这两只狗具体的物种只知道是二哈,这时候就需要专家进行人为标注但这样子做的成本太高。这就导致如果我们需要一个大的数据集将付出昂贵的成本,如果数据集太小网络又容易造成过拟合。

在这里插入图片描述

并且如果一直增加网络模型的大小会引发计算效率问题:两个卷积层,两层同步增加卷积核个数计算量持平方增加。并且如果很多权重训练后接近0那么这部分计算资源不就被浪费了吗?所以我们不能不考虑计算效率不计成本的追求精度。
接下来为了解决上述问题我们就考虑用稀疏连接结构取代密集连接甚至卷积层内部也采用稀疏结构。这种思想是源于神经科学,这里用通俗的语言解释一下:当我们判定一只狗的时候我们通过它的嘴巴,眼睛,毛发等特征来进行判断我们知道这些特征是相关的都是狗,所以我们激活神经元是不是可以不用全部激活而只激活强相关性的神经元。这里就提到了了Hebbian principle(赫布学习法则):神经元之间的突触用进废退

在这里插入图片描述

从负面来说现在的gpu和cpu都是为密集计算而设计的,即使你参数数量减少了100倍但是查找和缓存丢失的开销仍占主导地位。当前的硬件适用于计算密集矩阵这种而非均匀的数据或模型需要更复杂的工程和计算基础设施。当前计算机视觉的稀疏性都是体现在卷积上,例如LeNet-5中将上一层一部分通道组合传入下一层而AlexNet又回到了全连接,将上一层所有通道一起参与卷积实现更好的并行运算加速。

我们就猜想能否在仍旧利用硬件进行密集矩阵运算的条件下改进模型结构哪怕只是在卷积层水平改进从而利用额外的稀疏性呢?

传统连接的两个问题:

    1. 计算效率过低
    1. 非均匀稀疏模型需要更复杂的工程和计算基础设施

解决方法:

引入稀疏性,用稀疏连接代替全连接层,甚至一般的卷积

原理:如果数据集的概率分布可以由大型的,非常稀疏的深度神经网络表示,可以通过如下方式逐层构建:分析上一层的激活输出的统计特性,并将具有高度相关性输出的神经元进行聚类,来获得一个稀疏的表示。

稀疏连接两种方法:
1.空间(spatial) 维度上的稀疏连接,也就是 CNN 。其只对输入图像的局部进行卷积,而不是对整个图像进行卷积,同时参数共享降低了总参数的数目并减少了计算量。
2.在特征(feature)维度上的稀疏连接进行处理,也就是在通道的维度上进行处理。(Inception 结构的灵感来源)

来源于文献1从稀疏矩阵理解稀疏性:稀疏矩阵的定义:矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素的分布没有规律,则称该矩阵为稀疏矩阵。由于稀疏矩阵的特殊性质,在对稀疏矩阵进行卷积运算时往往会产生很多不必要的计算(在0值密集的区域进行卷积),这时候为了提升运算效率就可以考虑忽略矩阵中0值聚集的区域而选取出非零值聚集的区域直接卷积。

接下来我们就提出了Inception结构用来近似实现这种架构。即使这种架构在计算机视觉领域取得了成功但Inception背后原理需要进一步探索,如果自动机器学习工具Auto-ML能在各种场景下设计出类似结构的网络那么证明Inception思路是正确的。

4. Architectural Details(架构细节)

在这里插入图片描述

Inception主要思想:

  • 用密集模块去近似出局部最优稀疏结构
  • 聚合高相关性的特征到下一层

原生Inception结构:11Conv,33Conv,55Conv,33MaxPooling
看到这就会有问题:为什么这样搭建

  1. 为什么分三个卷积核

根据上一篇VGG中介绍感受野的例子,我们可以知道卷积核大的,感受野就越大。如果这个区域越大,说明我们获得的越是一个偏向全体的特征;而区域越小,说明我们获得的是一个偏向局部的特征。这样一来就可以获得不同尺度的特征。

  1. 为什么有池化层

引用论文原话:由于池化操作对于目前卷积网络的成功至关重要,因此建议在每个这样的阶段添加一个替代的并行池化路径应该具有额外的有益效果。

  1. 四条路过后为什么要合一块

举个例子:有一个Inception结构的块,它的输入是16个通道的,输出是256个通道的。而有另外一个卷积层,设它的卷积核是5×5的,它的输入和输出也是16和256个通道。那么其实卷积层的这个输出是256个5×5尺度的信息,这样就造成了大量的冗余。但Inception输出同样是256个通道,但是它有四个尺度的信息,可能每个尺度占据64个通道,冗余信息就更少,这个输出信息也更加丰富

但是原生Inception结构通道数越来越多计算量爆炸,所以我们采用1*1卷积进行改进。下图将原始Inception结构和改进的Inception结构进行对比:

在这里插入图片描述

通过图片我们可以看到改进后的Inception结构使用1*1Conv进行降维将大大减少参数量,计算量,增加模型深度

在这里插入图片描述

1*1Conv的作用:

  • 降维/升维

  • 减少参数量/计算量

  • 增加非线性,增加模型深度

  • 既然5 * 5卷积核那么大为什么不全用1 * 1Conv

虽然1x1可以解决参数量的问题,但是它同时局限了感受野的范围,所以要做到感受野和参数量的权衡,虽然5x5和3x3的参数量大,但是他们卷积效果也好,我们只在某些时候引入1x1卷积,起到降维/通道聚合等作用。

5. GoogLeNet

在这里插入图片描述

可以看到上表对应的GoogleNet的网络架构如下图所示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 所有卷积都使用Relu激活函数
  • 使用GAP(Global Average Pooling)代替全连接层
  • 为了在浅层使特征更加有区分性,帮助反向传播,解决梯度消失,使用辅助分类器 L = L 最后 + 0.3 ∗ L 辅助 1 + 0.3 ∗ L 辅助 2 L = L_{最后} + 0.3 * L_{辅助1} + 0.3 * L_{辅助2} L=L最后+0.3L辅助1+0.3L辅助2

6. Training Methodology(训练方法)

在这里插入图片描述

  • 使用了DistBelief分布式机器学习系统,并伴随着标准数量的模型以及数据并行对GoogLeNet网络进行训练。
  • 使用基于CPU的实现,但使用GPU会更快。
  • 训练过程使用异步随机梯度下降,动量参数为0.9,固定的学习率计划(每8次遍历下降学习率4%)。
  • 赛后发现一个调参玄学,包括各种尺寸的图像块的采样,它的尺寸均匀分布在图像区域的8%—100%之间,方向角限制为[3/4, 4/3] 之间。(但谁都说不清这些玄学是否真的有用)
  • 我们发现Andrew Howard的光度扭曲对于克服训练数据成像条件的过拟合是有用的。

7. ILSVRC 2014 Classification Challenge Setup and Results(ILSVRC 2014分类挑战赛设置和结果)

在这里插入图片描述

提升性能的技术
训练策略: 7个模型集成,每个模型使用相同的初始化方法甚至相同的初始值,相同的学习策略,仅在图像采样和输入顺序有区别。

裁剪策略: 图片分别缩放到四种尺寸:256、288、320、352,取左、中、右(或上、中、下)3张小图,每张小图取四个角和中央的五张224224的patch以及每张小图缩放至224224共六个patch同时取其镜像。共4x3x6x2个裁剪区。(4种尺寸、3个范围、6=(5+1)、镜像翻倍)。

将softmax概率在多个区域和所有单个分类器上取平均,以获得最终预测。

在这里插入图片描述

通过上表我们发现GoogLeNet再ILSVRC 2014分类挑战赛上取得了最好的成绩。并且采用上面的介绍裁剪策略可以达到最好的效果,但是这种激进的augmentation在真实应用中并不需要。

8. ILSVRC 2014 Object Detection Challenge Setup and Results(ILSVRC 2014目标检测挑战赛设置和结果)

在这里插入图片描述

在这里插入图片描述

GoogLeNet检测采用的方法类似于R-CNN,但用Inception模块作为区域分类器进行了增强。
为了更高的box recall(目标边界框召回率),通过结合Selective Search方法与multi-box预测方法改进了区域生成步骤。
为了减少false positive的数量,超像素的尺寸增加了2倍。这将Selective Search算法的区域生成减少了一半。
减少区域生成的数量,增加覆盖率的整体影响是对于单个模型的情况平均精度均值增加了1%
最后,等分类单个区域时,我们使用了6个GoogLeNets的组合。这导致准确率从40%提高到43.9%。注意,与R-CNN相反,由于缺少时间我们没有使用bbox回归。

9. Conclusion(总结)

通过随时可用的密集构造块来近似预期的最佳稀疏结构,是改善计算机视觉神经网络的可行方法。 与较浅和较窄的体系结构相比,此方法的主要优点是在计算需求适度增加的情况下可显着提高质量。

未来的工作:以自动方式创建稀疏和更精细的结构,以及将Inception体系结构的见解应用于其他领域。

下面的参考文献1

论文十问

Q1:论文试图解决什么问题?

  • 为了在使用更深更宽的网络的同时减少过拟合、降低参数量、提高计算资源利用率,本文提出了一种结合了稀疏性和密集计算的网络结构(Inception),巧妙地使用了1ⅹ1卷积来实现数据降维,并且在这基础上搭建了GoogLeNet的Inception v1版本。

Q2:这是否是一个新的问题?

  • 不是新的问题,在原来对神经网络更宽更深的探究下,提出了新的网络架构方法

Q3:这篇文章要验证一个什么科学假设?

  • 在卷积构建块中寻找最优局部结构(Inception结构),利用它可以实现在增加网络的宽度和深度的同时减少参数,高性能计算。

Q4:有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?

  • 稀疏矩阵运算,数学方面。Hebbian原则],生物神经方面

Q5:论文中提到的解决方案之关键是什么?

  • 1.使用更宽更深的网络,提升网络性能;
  • 2.用稀疏连接代替密集连接,减少计算资源需求;
  • 3.既利用稀疏性又使用稠密计算(1ⅹ1卷积的应用),提高计算资源利用率;
  • 4.引入了Inception,重复叠加,找到最优结构。

Q6:论文中的实验是如何设计的?

  • 1.使用了一种结合了稀疏性和密集计算的网络结构(Inception),并不断重复。
  • 2.利用1×1卷积,3×3卷积,5×5卷积,3×3最大池化搭建网络,一共7个模块,22个层。
  • 3.使用了1ⅹ1卷积来实现数据降维。
  • 4.添加两个辅助分类器帮助训练

Q7:用于定量评估的数据集是什么?代码有没有开源?

  • ImageNet2014,有开源

Q8:论文中的实验及结果有没有很好地支持需要验证的科学假设?

  • 证明了,两次第一呢

Q9:这篇论文到底有什么贡献?

  • 1.引入Inception结构(融合不同的特征信息)
  • 2.使用1×1的卷积核进行降维以及映射处理
  • 3.添加两个辅助分类器帮助训练
  • 4.丢弃全连接层,使用平均池化层(大大减少模型参数)

Q10:下一步呢?有什么工作可以继续深入?

  • 以自动方式创建稀疏和更精细的结构,以及将Inception体系结构的见解应用于其他领域。

参考播客经典神经网络论文超详细解读(三)——GoogLeNet InceptionV1学习笔记(翻译+精读+代码复现)
参考视频【精读AI论文】GoogLeNet(Inception V1)深度学习图像分类算法

论文超详细解读(三)——GoogLeNet InceptionV1学习笔记(翻译+精读+代码复现)](https://blog.csdn.net/weixin_43334693/article/details/128267380)
参考视频【精读AI论文】GoogLeNet(Inception V1)深度学习图像分类算法

昭昭若日月之明,离离如星辰之行!

相关推荐

  1. <span style='color:red;'>GoogLeNet</span>

    GoogLeNet

    2024-06-10 11:36:01      9 阅读
  2. GoogLenet网络结构及代码实现

    2024-06-10 11:36:01       16 阅读
  3. 008.googleNet-FashionMNIST-正确率90.510

    2024-06-10 11:36:01       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-10 11:36:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-10 11:36:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-10 11:36:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-10 11:36:01       18 阅读

热门阅读

  1. MySQL和Oracle区别

    2024-06-10 11:36:01       8 阅读
  2. LeetCode 239. 滑动窗口最大值

    2024-06-10 11:36:01       9 阅读
  3. B树、B+树与索引、联合索引

    2024-06-10 11:36:01       10 阅读
  4. 家族企业如何找到合适的人才

    2024-06-10 11:36:01       10 阅读
  5. 捡贝壳问题

    2024-06-10 11:36:01       9 阅读
  6. C#.net MassTransit和DotNetCore.CAP区别

    2024-06-10 11:36:01       13 阅读
  7. 动态规划路径问题(C++)

    2024-06-10 11:36:01       13 阅读
  8. Spring (48)Feign

    2024-06-10 11:36:01       9 阅读
  9. Git常用命令

    2024-06-10 11:36:01       9 阅读
  10. python-win10跑通chattts笔记(亲测可跑)0.8.010

    2024-06-10 11:36:01       9 阅读