文章目录
- 前言
- 第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 (二)