1:文字回答:用自己的理解,总结GoogLeNet-V1到GoogLeNet-V4,这四篇论文的发展
答:Inception历经了V1、V2、V3、V4多个版本的发展,不断趋于完善,下面一一进行介绍。
一、Inception V1
通过设计一个稀疏网络结构,但是能够产生稠密的数据,技能增加神经网络表现,又能保证计算资源的使用效率。谷歌提出了最原始的Inception的基本结构:
该结构将CNN中常见的卷积(11,33,55)、池化操作(33)堆叠在一起(卷积、池化后的尺寸相同,将通道相加),一方面增加了网络的宽度,另一方面也增加了网络对尺度的适应性。
网络卷积层中的网络能够提取输入的每个细节信息,同时55的滤波器也能够覆盖大部分接受层的输入。还可以进行一个池化操作,以减少空间大小,降低过度拟合。在这些层上,在每一个卷积层后都要做一个ReLU操作,以增加网络的非线性特征。然而这个Inception原始版本,所有的卷积核都在上一层的输出上来做,而那个55的卷积核所需的计算量就太大了,造成了特征图的厚度很大,为了避免这种情况,在33前、55前、max pooling后分别加上了11的卷积核,以起到了降低特征图厚度的作用,这也就形成了Inception V1的网络结构,如下图所示:
11的卷积核有什么用呢?
11卷积的主要目的是为了减少维度,还用于修正线性激活(ReLU)。比如,上一层的输出为100100128,经过具有256个通道55卷积层之后(stride=1,pad=2),输出数据为100100256,其中卷积层的参数为12855256=819200。而假如上一层输出先经过具有32个通道的11卷积层,再经过具有256个输出的55卷积层,那么输出数据仍为100100256,但卷积参数量已减少为1281132+3255256=204800,大约减少了4倍。
基于Inception构建了GoogLeNet的网络结构如下(共22层):
对上图说明如下:
(1)GoogLeNet采用了模块化的结构(Inception结构),方便增添和修改。
(2)网络最后采用了average pooling(平均池化)来代替全连接层,该想法来自NIN(Network in Network),事实证明这样可以将准确率提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便对输出进行灵活调整。
(3)虽然移除了全连接,但是网络中依然使用了Dropout;
(4)为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度(辅助分类器)。辅助分类器是将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中,这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个网络的训练很有裨益。而在实际测试的时候,这两个额外的softmax会被去掉。
GoogLeNet的网络结构图细节如下:
注:上表中的“#33 reduce”,“55 reduce”表示在33,55卷积操作之前使用了11卷积的数量。
二、Inception V2
GoogLeNet凭借其优秀的表现,得到了很多研究人员的学习和使用,因此GoogLeNet团队又对其进行了进一步地发掘改进,产生了升级版本的GoogLeNet。
GoogLeNet设计的初衷就是要又快又准,而如果只是单纯的堆叠网络虽然可以提高准确率,但是会导致计算效率有明显的下降,所以如何在不增加过多计算量的同时提高网络的表达能力就成为了一个问题。
Inception V2版本的解决方案就是修改Inception的内部计算逻辑,提出了比较特殊的“卷积”计算结构。
1.卷积分解(Factorizing Convolutions)
大尺寸的卷积核可以带来更大的感受野,但也意味着会产生更多的参数,比如55卷积核的参数有25个,33卷积层的参数有9个,前者是后者的25/9=2.78倍。因此,GoogLeNet团队提出可以用2个连续的33卷积层组成的小网络来代替单个的55卷积层,即在保证感受野范围的同时又减少了参数量,如下图:
注:上表中的“#33 reduce”,“55 reduce”表示在33,55卷积操作之前使用了11卷积的数量。
那么这种替代方案会造成表达能力的下降吗?通过大量实验表明,并不会造成表达缺失。
可以看到,大卷积核完全可以由一系列的33卷积核来替代,那能不能再分解得更小一点呢?GoogLeNet团队考虑了n1的卷积核,如下图所示,用一个3个31取代33卷积:
因此,任何nn的卷积都可以通过1n卷积后接n1卷积来替代。GoogLeNet团队发现在网络的前期使用这种分解效果并不好,在中度大小的特征图上使用效果才会更好(特征图大小建议在12到20之间)。
2.降低特征图的大小
一般情况下,如果想让图像缩小,可以有如下两种方式:
先池化再作Inception卷积,或者先作Inception卷积再作池化。但是方法一(”左图)先作pooling”(池化)会导致特征表示遇到瓶颈(特征缺失),方法二(右图)是正常的缩小,但计算量很大。为了同时保持特征表示且降低计算量,将网络结构改为下图,使用两个并行化的模块来降低计算量(卷积、池化并行执行,再进行合并)
使用Inception V2作改进版的GoogLeNet,网络结构图如下:
注:上表中的Figure 5指没有进化的Inception,Figure 6是指小卷积版的Inception(用33卷积核代替55卷积核),Figure 7是指不对称版的Inception(用1n、n1卷积核代替nn卷积核)。
经实验,模型结果与旧的GoogLeNet相比有较大提升,如下表所示:
三、Inception V3
Inception V3一个最重要的改进是分解(Factoriztion),将77分解为两个一维的卷积(17,71),33卷积也是一样(13,31),这样的好处既可以加速计算,又可以将1个卷积拆成2个卷积,使网络深度进一步增加,增加了网络的非线性(每增加一层都要进行ReLU)。
另外,网络输入从224224变为了299*299。
四、Inception V4
Inception V4研究了Inception模块与残差连接的结合。ResNet结构大大加深了网络深度,还极大地提升了训练速度,同时性能也有提升。
Inception V4主要利用残差连接(Residual Connection)来改进V3结构,得到Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4网络。
ResNet的残差结构如下:
将该结构与Inception相结合,变成下图:
通过20个类似的模块组合,Inception-ResNet构建如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200811195920548.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1Y2t5MTUwMjA1MTMzNjA=,size_16,color_FFFFFF,t_70
2:文字回答:读完该论文,对你的启发点有哪些?
答:1.本文提出的Inception-ResNet结构依旧是在大量实验中得出的模型结构,这一点与Inception-V3论文一样,这也是Inception再也难以发展的原因,缺乏亮点。
2.图像识别任务中,没有残差连接也可以训练深度卷积网络。但本论文中最深的网络仅95层(Inception-ResNet-V2),这一句还是欠数据支撑的。
3.做了大量的实验仅展示两个版本,这两个版本的计算量分别与Inception-v3和v4差不多,这也是实验部分为什么用Inception-ResNet-v1与Inception-v3比较,用Inception-ResNet-v2与Inception-v4比较的原因。