当前位置: 代码迷 >> 综合 >> CNN基础论文 精读+复现----GoogleNet InceptionV1 (一)
  详细解决方案

CNN基础论文 精读+复现----GoogleNet InceptionV1 (一)

热度:74   发布时间:2023-12-26 11:01:35.0

文章目录

  • 前言
  • 第1页
    • 摘要与引言
  • 第2页
    • 文献综述
  • 第3-4页
  • 第4-5页
    • inception模块细节
  • 第5-7页
    • GoogLeNet
  • 第8页
    • 训练细节
  • 第8-10页
    • ILSVRC 2014

inception系列:

  • inceptionV1 & GoogleNet 精读
  • inceptionV2 & BN 精读
  • inceptionV3 精读
  • inceptionV4 精读
  • xception 精读

前言

论文题目: Going Deeper with Convolutions

Googlenet论文原文地址:https://arxiv.org/pdf/1409.4842.pdf

之前看过VGG的论文(VGG精读直达)。当时VGG获得了 2014 ILSVRC 图像分类的第二名,今天来看一下第一名,也就是大名鼎鼎的 Googlenet,,并且这篇论文还是后续各种神经网络模型改版的基础,比如inception V2V3V4,inception-resnet,xception等等。

Googlenet的错误率都达到了人类的水平,5%-10%的错误率。

在查资料的时候,发现一个彩蛋,论文原名 GoogLeNet LN都是大写 最后是LeNet,据说是为了向LeNet致敬?
还有一个彩蛋就是 这篇论文的关键点 inception,其灵感来源于NiN网络 和 盗梦空间(inception) 并且引用了其中的台词,可以在参考文献的第一个条目中看到这个表情包:

在这里插入图片描述

第1页

摘要与引言

摘要提出了这篇论文的核心 inception,定义为一个特殊网络的代号。并说了一下主要特点是提高了网络内部计算资源的利用率,在增加了网络的深度和宽度的情况下使网络计算资源不变(或减少)。

GoogLeNet 是作者在 2014年ILSVRC 提交中应用的一个特例。

GoogLeNet 网络深度达到22层,加上池化有27层,算上inception内部 有100层。

虽然层数比VGG多了很多,但是参数量却变少了, GoogLeNet 500万个(5M),VGG16参数是138M,AlexNet参数大约60M。

摘要中有一句话 the architectural decisions were based on the Hebbian principle and the intuition of multi-scale processing.

这里的 Hebbian principle (赫布理论) :神经科学上的概念,简单讲就是 神经元突触的‘用进废退’,两个神经元,如果总是同时兴奋,就会形成一个组合,其中一个神经元的兴奋会出尽另一个的兴奋。反映在inception上就是把相关性强的特征汇聚的一起。

还有一个词: multi-scale processing (多尺度处理): 不同尺度卷积核并行处理。

引言的最后夸了夸自己,· on which it significantly outperforms the current state of the art. 我吊打你们

第2页

文献综述

作者简单的介绍了一下他设计出的inception的灵感来源,一个是从前人的研究内容(一系列固定的不同大小的卷积核来处理多尺度)。

还有一个灵感来源是 从NiN网络中的 1 * 1卷积核,这个卷积核之前在VGG里详细的理解了一下,在这作用是降维,增加网络深度,减少运算量(但是在VGG里没有升降维的作用,仅增加深度作用)。

第三个灵感是从R-CNN中,改进了R-CNN的两阶段方法(1.框出候选区域,2.每个区域卷积) 运用到自己的模型中了。

第3-4页

说了一下训练网络的问题,一个是数据不好准备(and 数据量过大造成的过拟合问题),还有一个是精度和计算效率之间的平衡问题。
解决这些问题的一个重要手段: 用稀疏连接代替密集连接
其中两点:

  • 第一点就是开头提到的那个赫布理论,开头已经说到过了,就是汇总同时或者强关联激活的各部分。在神经网络中,比如有只狗。当识别出来这是只狗的时候,一定是狗的腿啊眼睛啊身体啊这些部位一起组合识别的,也就是这些特征一起激活 融合判断。
  • 第二点就是 GPU和CPU都是密集计算优势,通过赫布学习法则用稀疏代替密集,如何又利用硬件的密集计算优势,又能设计稀疏的模型结构呢?

论文中给了一张图,用来说明数据标注是很麻烦的事:
就是这两狗。我一看,好家伙这不是俩二哈吗?哈哈

用知云翻译了一下, 左边:西伯利亚雪橇犬 。右边:爱斯基摩狗

在这里插入图片描述

这种图片一般人难以分辨,需要找对应领域专家的话,天天去标注这个玩意,确实是比较麻烦的事。

第4-5页

inception模块细节

inception的结构主要设计思想是: 用密集模块去近似局部稀疏结构 ,聚合高相关性的特征输入到下一层。这样既达到了稀疏连接 又可以一定程度上的利用硬件计算优势。

设计出了最初的inception版本:
在这里插入图片描述
可以看到,最初的版本由 11卷积,33卷积,55卷积,33最大池化组成,特征图先被复制成4份并分别被传至接下来的4个部分,然后利用大小不同的卷积核实现不同尺度的感知,最后进行融合。

在对上面这四个小块进行融合的时候,要保证输出的长和宽都是一样的,这样才方便融合,用padding就行了。

四个途径的池化结果合并后会导致特征通道数变大,数据量逐层大量增加。为了减少参数量,作者在NiN里受到启发,使用了 1 * 1的卷积核进行卷积,达到降维,减少参数的作用,于是有了后续版本。

使用 1 * 1 卷积核的思想 也称为Pointwise Conv,简称PW。

改进后的inception:
在这里插入图片描述
相比于最初的版本就是增加了一层 1 * 1卷积核,降低一波参数。

inception的位置: 网络开始使用普通卷积层,之后再堆叠inception模块,因为使用了改进版, 加入了 1 * 1卷积,所以并没有使参数爆炸,这样就达到了多尺度并行信息处理再融合的目的。

第5-7页

GoogLeNet

开头第一句就是呼应LeNet的那个彩蛋。

作者使用了inception的组合堆叠 开发出了一个新的网络,就叫Googlenet。

给出了Googlenet的详细图:
在这里插入图片描述

最左侧可以看到,Googlenet的结构:

卷积 -> 池化 ->卷积 ->池化 -> 9个inception堆叠 (中间两个池化) -> 池化 -> dropout -> 线性层 -> softamx

  • 其中所有的卷积和1 * 1 之后都使用Relu作为激活函数。

  • 将fully-connected layer用avg pooling layer代替后,top-1 accuracy 提高了大约0.6%,之前的VGG Alex等这里都是三个全连接层。

  • 最后一层依旧使用dropout防止过拟合。

  • 为了在浅层使特征更加有区分性,增加了两个辅助分类器 L=L(最后)+0.3xL(辅1)+0.3xL(辅2),测试阶段去掉辅助分类器。

整体结构图比较大我就不截图上来了,我选取了带辅助分类器的那一小部分:

左边枝干就是一个又一个的 inception,右边我框出来的那一块就是辅助分类器,会得到一个预先的分类,按照上面的公式加权获得最终结果。
在这里插入图片描述

第8页

训练细节

这里说了两段参数设置还有预处理的方法。

第六节部分,最后作者说 so we could not tell definitely whether the final results were affected positively by their use.

看过沐神的都知道,这一部分叫:玄学调参 哈哈。

他说的具体数到后面代码复现的时候再说把,这段略了略了。

第8-10页

ILSVRC 2014

这部分主要说了一下 ILSVRC 2014 的细节。

训练使用了7个模型融合。每个模型使用相同的初始化方法甚至相同的初始值,相同的学习率策略,仅在图像采样和输入顺序有区别。

数据增强方面,将一张图变成144张图进行训练。将原图缩放为短边长度256,288,320,352的四个尺度,每个尺度裁出左中右(或上中下)三张小图,每张小图取四个角和中央的五张224x224的patch以及每张小图缩放至224x224,一共是六个patch,同时取其镜像。综上一共4x3x6x2=144个。最后结果取平均。

然后给了一张结果图:
在这里插入图片描述
可以看到 模型集成越多,图片剪裁-数据增强的越多,计算量越大,准确率越高,不过作者也说了如此激进的方法在平常并不适用,只不过作者在比赛。。。

最后说了一下检测标准。

评判标准:如果算法给出的框分类正确且与正确标签框的交并比IOU(Jaccard相似度)>0.5,就认为这个框预测正确

使用map(所有ap求平均值)作为模型评估指标,每个类别不同阈值下precison-recall曲线围成的面积–AP(0-100,越高越好)

Jaccard相似度:

Jaccard相似系数 ( Jaccard similarity coefficient )又称 Jaccard系数 ( Jaccar Index )。 两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的Jaccard相似系数,用符号J (A,B)表示。

这里的集合就是检测的时候画的那个框框的重合度。

论文已经完了,明天没事的话代码复现一下吧,不过感觉这个网络的代码复现比之前的VGG或者ZF要麻烦一点(对于本菜来说),多了辅助分类器还有inception模块。

后续:CNN基础论文 精读+复现----GoolgeNet & InceptionV1 (二)

  相关解决方案