论文阅读 || 图像分类系列 —— inceptionv1、v2、v3、v4

Inception v1算法实战与解析 本章学习了Inception v1模型,通过引入多分支结构和巧妙的降维、升维操作,在降低计算复杂度和参数量的同时,有效捕捉了多尺度特征,改善了传统深度 CNN 单纯堆叠层数所带来的训练困难。 阅读详情

目录

一 Inception v1

1 网络性能优化

2 inception结构

3 inception 模块参数

4 googLenet 优点和网络特点

5 googLenet 网络结构

6 GoogLeNet数据预处理

二 Inception V2 v3

1 模型设计规则

2 优化方法

3 网络结构

三 Inception v4、Inception-Resnet-v1、Inception-Resnet-v2

1 Inception v4

2 Inception-Resnet-v1

3 Inception-Resnet-v2

4 实验结果

 补充            

 


论文地址:

Going deeper with convolutions
Batch Normalization
Rethinking the Inception Architecture for Computer Vision
Inception-v4, Inception-ResNet

 

一 Inception v1

1 网络性能优化

网络提升性能的一般方法:增加网路结构的深度和宽度。(深度:网络层数;宽度:神经元数)。
但存在的问题:

  1. 参数的增多,更容易过拟合
  2. 网络增大,计算量变大,需要更多的计算资源
  3. 网络变深,容易梯度消失,优化困难(此时还没有提出BN)

所以我们想要,在增加深度和宽度的同时,降低参数的使用。

  • 解决办法:把全连接改成系数连接(卷积层就是稀疏连接),但是不对称的稀疏连接数值计算效率低下(硬件基本上是针对密集矩阵优化)。稀疏矩阵虽然参数量少,但计算时间却很难减少。所以需要既能保持网络结构的稀疏性,又能利用密集矩阵的高性能。有论文表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,GoogLeNet团队提出了Inception网络结构

 

2 inception结构

通过设计一个稀疏网络结构,同时能产生稠密的数据。(既能增加神经网络表现,又能保证计算资源的使用效率)

  • 该结构将CNN中常用的卷积(1x1,3x3,5x5)、池化(3x3)并联在一起,输出进行concat。一方面增加了网络的宽度,另一方面,使用不同大小的卷积核,增加了网络对尺度的适应性。
  • 下图使用了1*1的卷积:
    1. 降低特征图的channel,减小参数,解决计算瓶颈
    2. 增加非线性,增强表达能力

 

3 inception 模块参数

(上图红色数字为举例的channel数)

左图:
参数:(1*1*192*64) + (3*3*192*128) + (5*5*192*32) = 387072
feature map 的channel:64+128+32+192 = 416

右图:
参数:(1*1*192*64) + (1*1*192*96 + 3*3*96*128) + (1*1*192*16 + 5*5*16*32) + (1*1*192*32) = 163328
feature map 的channel:64+128+32+32 = 256

另外: AlexNet(60M)、VGG(144M ),GoogLeNet(5M)

 

4 googLenet 优点和网络特点

优点

  1. 此网络架构的主要特点就是提升了对网络内部计算资源的利用。
  2. 增加了网络的深度和宽度,网络深度达到22层(不包括池化层和输入层),但没有增加计算代价。
  3. 参数比2012年冠军队的网络少了12倍,但是更加准确。

网络特点

  1. 在低层仍然使用传统他的方式,高层用inception块叠加(论文中表述原因:训练阶段的内存效率问题)
  2. 网络最后采用了average pooling来代替全连接层,该想法来自NIN(Network in Network),事实证明这样可以将准确率提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便对输出进行灵活调整
  3. 虽然移除了全连接,但是网络中依然使用了Dropout 
  4. 为了解决梯度弥散的问题,在4a和4d的后面添加辅助loss(相当于中继监督),该loss仅在训练的时候以一定的weight(0.3)参与梯度传递。而在test的时候不使用。

5 googLenet 网络结构

1.在inception模块中,通常1*1的卷积比例(输出通道占比)最高,3*3和5*5的卷积占比稍低
2.在整个网络中,存在多个叠加的inception模块,希望后面的网络可以捕获更高阶的抽象特征,因此靠后的inception中,打卷机的占比应增多
3.网络输入的大小为224*224*3,图片做了归一化预处理(除以256)

注:上表中的“#3x3 reduce”,“#5x5 reduce”表示在3x3,5x5卷积操作之前使用了1x1卷积的数量

 

6 GoogLeNet数据预处理

训练数据

  1. 采样时,样本尺寸缩放从8%到100%,宽高比随机选取3/4或4/3(多尺度)
  2. 数据增强:随机更改图像的对比度,亮度和颜色。这样可以增加网络对这些属性的不变性
  3. 使用随机插值方法重置图像尺寸(因为网络输入层的大小是固定的),使用到的随机插值方法:双线性插值,区域插值,最近邻插值,三次方插值,这些插值方法等概率的被选择使用。图像放大时,像素也相应地增加 ,增加的过程就是“插值”程序自动选择信息较好的像素作为增加的像素,而并非只使用临近的像素,所以在放大图像时,图像看上去会比较平滑、干净
  4. 改变超参数(反向传播若干次之后改变超参数,或者误差达到某阈值时改变超参数)

预测数据

(实际应用中不必要这样操作)

  1. 将图片缩放到不同的4种尺寸(纵横比不变,GoogleLeNet使用的4种尺寸为:缩放后的最短边长度分别为:256,288,320和352)。
  2. 对于得到的每个尺寸的图像,取左、中、右三个位置的正方形图像(边长就是最短边的长度。对于纵向图像来说,则取上、中、下三个位置),因此每个尺寸的图像得到3个正方形图像;
  3. 然后再在每个正方形图像的4个crop顶点和中心位置处crop处224*224的图像,此外再加上将这个正方形图像缩放到224*224大小的图像,因此每个正方形图像得到6个224*224的图像;
  4. 最后,再将所有得到的224*224的图像水平翻转。因此,每个图像可以得到4*3*6*2=144个224*224大小的图像。
  5. 将这些图像分别输入神经网络进行分类,最后取平均,作为这个图像最终的分类结果。

二 Inception V2 v3

inception v2和inception v3出自同一篇论文Rethinking the Inception Architecture for Computer Vision。
从google的V2的源码,可以看出改进主要有:
(1)使用了batch normalization(深度学习之 Batch Normalization)     (2)使用了两个conv3*3代替一个5*5

1 模型设计规则

(1) 防止出现特征描述的瓶颈

指输入输出维度差距较大的层,就像瓶颈一样。对特征在空间维度进行较大比例的压缩,导致很多特征丢失。

  • bottleneck layer的使用。不要一下子使用1x1 conv缩减过多的feature maps的channels数目,尤其在低层。一定要用也要在靠后使用
  • Pooling的使用。Pooling是CNN结构中必须的功能,但我们可以通过一些优化方法来减少Pooling造成的损失。

(2) 适当的宽度是必要的

相互独立的特征越多,输入的信息被分解的越彻底,分解的子特征间相关性低,子特征内部相关性高。这样信息更加丰富全面,更容易收敛。

(3) 更高成可以进行较大幅压缩

在网络的后端,可以使用bottleneck对其channels进行压缩,然后再进行3*3conv这样较大的计算。这种操作不仅不会影响模型精度,反而能加快收敛速度。论文猜想性解释,后期较小size的feature maps的相邻channels至今具有更多的相关性(更多的冗余信息),因此可以较大幅压缩channels。

(4) 平衡网络的深度和宽度

等比例的增大深度和维度才能最大限度的提升网络的性能。瘦高或矮胖的CNN网络都不如一个匀称的网络效果好。

2 优化方法

 

              

方法1:大尺度的卷积分解成多个小尺度的卷积。

  • 比如:1*(5*5) conv === 2*(3*3) conv。两种方式具有相同的感受野。参数比(3*3+3*3) / (5*5) =18/25

方法2:使用非对称卷积。作者通过测试发现,非对称卷积在网络中靠中间的层级才有较好的效果(特别是feature map的大小再12*12~20*20之间时)

  • n*n conv === 1*n conv + n*1 conv。例如如图n=3,分解后就能节省33%的计算量。

方法3:使用并行结构来优化Pooling。

深度神经网络中会使用Pool层来减少feature maps size。这意味着传递的信息不断丢失。一般为了减少信息过度丢失:

  • 在传入Pool层减少feature maps size之前,同比扩大它的channels数目(之后的网络基本采用这种)。相当于提供了冗余信息然后再Pooling掉。不过其中1*1conv的计算会有非常大的计算开销。
  • 先使用Pooling,然后再使用1*1conv增大channels。不过这种方式的conv只能补偿少量Pooling损失的信息。

所以针对上面的问题,作者提出了并行结构:一路卷积、一路Pooling,两路并行再concat。这种方式既有很好的效果,有没有增大计算量。

方法4:使用Label Smoothing来对网络输出进行正则化

softmax层的输出公式和交叉熵损失公式如图:

         

 

假设分类的标签是onehot形式。理想情况下从softmax的输出,正确类别的数值为1,其他为0。这样就会造成overfit(overfit:能对所有的输入进行理想的分类,鲁棒性很差)。所以为了克服overfit,防止最终出来的正确的分类p(k)=1, 在输出p(k)时加入个参数delta,生成新的q'(k)

3 网络结构

将上述的方法结合,构成下图结构Inception v2。如果在辅助分类器上添加BN,即Inception v3。

                                                

                                                figure 5                       figure 6                   figure 7

 

三 Inception v4、Inception-Resnet-v1、Inception-Resnet-v2

题目三种结构皆出自一篇论文Inception-v4, inception-resnet and the impact of residual connections on learning,这里着重描述一下每个版本的网络结构。

再次说明下,在inception网络设计中,最开始的几层不建议使用inception等模块来获得特征节省计算.

1 Inception v4


                                   Inception-A                                        Inception-B                                       Inception-C

               

 Reduction-A  35->17 (V4、InReV1、InReV2都使用)              Reduction-B 17->8

 

           Inception V4                                     Stem (V4/InReV2都使用)

2 Inception-Resnet-v1

             

                      Inception-ResNet-A                                           Inception-ResNet-B                    

              

                   Inception-ResNet-C                                               Reduction-B 17->8    

              

                Stem                                    Inception-Resnet-v1

3 Inception-Resnet-v2

整体的网络结构与 Inception-Resnet-v1一致,stem与Inception V4一致,其余内部模块有所变化。

 

           

            Inception-ResNet-A                                             Inception-ResNet-B                  

         

          Inception-ResNet-C                                           Reduction-B 17->8   

4 实验结果

下图为inception v3/v4与inception-resnet v1/v2模型的收敛速度对比图。我们可以看到,有残差的模块,收敛的速度更快,但最终的精度基本相同。


                                         Top-5 error                                                                      Top-1 error

精度对比

 补充            

inception系列,预测效果表现优异,同时计算和训练参数占的内存开销都不算大。为什么后来的网络并没有大幅采用inception模块?
与VGG和resnet相比,inception的连接过于复杂,对于实际在低层做优化执行的工程师而言,过于复杂的网络结构意味着更多的工程设计与思考才能使运算得到优良的并行加速和执行。因此当下为止Resnet系列的分类网络还是主流所用的视觉分类网络。

 

 

Inception v1~v4和Inception-ResNet v1~v2总结 阅读详情

相关推荐

TensorFlow利用InceptionV3训练新的图像分类模型

1. tensorflow编译 、安装 #CPU bazel build -c opt //tensorflow/tools/pip_package:build_pip_package #GPU bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package bazel-bin/tensor...

daydayup_668819的博客 9018

InceptionV1网络

个人笔记 感谢指正 InceptionV1 参考来源:https://zhuanlan.zhihu.com/p/73828787 https://zhuanlan.zhihu.com/p/42124583 InceptionV1简介 InceptionV1 是GooLeNet另一个称呼,GooLeNet深度只有22层,但大小却比AlexNet和VGG小很多,GooLeNet的参数为500万个,Al...

gzy_wyu的博客 3200

利用InceptionV3实现图像分类

最近在做一个机审的项目,初步希望实现图像的四分类,即:正常(neutral)、涉政(political)、涉黄(porn)、涉恐(terrorism)。有朋友给推荐了个github上面的文章,浏览量还挺大的。地址如下: https://github.com/xqtbox/generalImageClassification 我导入试了一下,发现博主没有放他训练的模型文件my_model.h5,所以代码trainMyDataWithKerasModel.py不能直接运行。必须先自己训练个模型才行,所以只好自己

ziele_008的博客 2101

Inception-V1(Going deeper with convolutions)

GoogleNet 模型 随着神经网络层数的加深,有不可避免的带来过拟合和计算量增大的困扰,谷歌团队为了减少计算量和避免过拟合,提出了Inception模型,也叫作 GoogLeNet。并在2014年,ImageNet挑战赛(ILSVRC14)中,GoogLeNet获得了第一名。GoogLeNet模型结构的特点是网络层数更深了。随着谷歌团队的研究,Inception历经了V1、V2、V3、V4等多个版本的发展 1. 思想 Inception 以降低参数量为目的,设计了一个稀疏网络结构,但是能够产生稠密的数据

chairon的博客 1443

使用Inception v3进行图像分类

Google Inception模型简介 Inception为Google开源的CNN模型,至今已经公开四个版本,每一个版本都是基于大型图像数据库ImageNet中的数据训练而成。因此我们可以直接利用Google的Inception模型来实现图像分类。本篇文章主要以Inception_v3模型为基础。Inception v3模型大约有2500万个参数,分类一张图像就用了50亿的乘加指令。在一台没有...

qq_41106162的博客 3164

图像分类(ResNet、ResNetxt、InceptionV4)

1、ResNet(残差网络) 残差网络就是加一个直连,在两个卷积操作中加入一个直连,这样操作优点在于求导操的时候,阻止了梯度消失(怎么加?注意这里的直连不是拼接,卷积操作后要保证与原始输入通道一致,然后对应位置相加)。 残差网络是基于vgg19,vgg19=2conv+2conv+4conv+4conv+4conv+3fcl, 34层的残差网络=1conv+6conv+8conv+12...

风轻云淡 7659

Tensorflow-slim——InceptionV3、InceptionV4图像分类训练与比较

前段时间做了一个简单的图像分类功能,采用Tensorflow-slim下的InceptionV3、InceptionV4网络模型,现在记录下两者在训练过程中的准确率、训练时间等进行一些比较。 项目地址:https://github.com/MrZhousf/tf-slim-inception 硬件配置如下: 系统:Ubuntu16.04TSL 显卡:GTX1080ti(11GB) x...

嘿,你好! 9956

第43步 深度学习图像识别:InceptionResnetV2建模(Tensorflow)

第43步 深度学习图像识别:InceptionResnetV2建模(Tensorflow)

Jet4505的博客 3980

InceptionV2-V3论文精读及代码

Inception V2-V3算法 前景介绍 算法网络模型结构,相较V1去掉了底层的辅助分类器(因为作者发现辅助分离器对网络的加速和增强精度并没有作用),变成了一个更宽、更深、表达能力更好的网络模型 V1种的Inception模块,V1的整体结构由九个这种模块堆叠而成,每个模块负责将5x5、1x1、3x3卷积和3x3最大池化叠加在一起输出(长宽相同,厚度不同),因为堆叠越来越厚,计算量激增。 引入1x1卷积降维对比,堆叠的层数减少 注:1x1卷积的作用参考V1论文笔记 V2-V3

charles_zhang_的博客 6288

labview的TDMS文件读写

本文先介绍TDMS概念和文件结构,然后介绍VI如何使用,最后分析一个labview的自带范例

观则明的博客 1万+

大麦APP抢票协议分析:从‘掌密网络’代码看移动端API安全防护

本文深度解析了大麦APP抢票协议的安全防护体系,重点分析了'掌密网络'代码中体现的动态签名、设备指纹和人机验证等关键技术。文章详细介绍了大麦APP如何通过多层次API安全防护应对抢票压力,包括参数加密、请求头部设计和异常处理机制,为移动应用开发者提供了安全实践建议。

weixin_28740299的博客 292

InceptionV3实战:tensorflow2.X版本,InceptionV3图像分类任务(大数据集)

InceptionV3实战:tensorflow2.X版本,InceptionV3图像分类任务(大数据集) 摘要 本例提取了猫狗大战数据集中的部分数据做数据集,演示tensorflow2.X版本如何使用Keras实现图像分类,分类的模型使用InceptionV3。本文实现的算法有一下几个特点: 1、自定义了图片加载方式,更加灵活高效,不用将图片一次性加载到内存中,节省内存,适合大规模数据集。 2、加载模型的预训练权重,训练时间更短。 3、数据增强选用albumentations。 关于InceptionV3

AI浩 1718

单细胞实战之亚细胞分群从T/NK至CD4+T细胞——从入门到进阶(中级篇1)

亚细胞分群从T/NK至CD4+T细胞

zfyyzhys的博客 6392

InceptionV1_V2

梯度消失的原因在于,如果不使用 BN,每一层的输入分布可能会随着训练发生变化,导致激活函数的输入值落入饱和区(如 Sigmoid 函数的两端),使得梯度在反向传播过程中逐渐变小,最终导致梯度消失。inception网络里比较多的用交替训练或者total_loss,上面的流程是total_loss,而交替训练:先走input - loss0,再input - loss1..,最后input - loss_last,分块训练,使得前面的input(靠近输入层的数据)被更多的拟合。

yuange1666的博客 1552

昆仑通态屏幕制作(连载1)---接触篇

写在开始 背景:最近出了做QT、LORA和4G,还做了一个屏幕。以前做了一个迪文的串口屏幕,发现网上的教程很多,所以连载就不更新了,并且迪文屏幕的设置什么的比较简单,应该从网上都能找到对应的教程。而现在用的昆仑通态的屏幕属于嵌入式屏幕,至于为啥叫嵌入式,也不是很明白,反正就是需要用这个屏幕,嵌入式不嵌入式不重要了。重要的是能用,并且能实现串口屏幕不能实现的功能。所以选定昆仑通态的一款屏幕。 文章语言:我比较习惯用比较糙的语言介绍做的东西,有时候不太准备,但是为了方便理解,还请大家谅解。用...

weixin_45426095的博客 6737

Cesium 模拟飞机坠毁功能

Cesium 模拟飞机坠毁功能,粒子模拟

QQhelphelp的博客 1068

Inception v1,v2,v3,v4论文汇总。

【时间】2019.08.08 【题目】Inception v1,v2,v3,v4论文汇总。 [v1] Going Deeper with Convolutions, 6.67% test error, http://arxiv.org/abs/1409.4842 [v2] Batch Normalization: Accelerating Deep Network Training by R...

小C的博客 1262

树莓派 Raspberry Pi 使用 YOLOv8 YOLOv10 YOLOv11进行目标检测及推理加速,Run YOLOv8 YOLOv10 YOLOv11 on Raspberry Pi

libcamera 是 linux 新增加用于访问 camera 的 API。树莓派参与了 libcamera 的开发,并且在新的摄像头软件中开始从依赖于固件的摄像头图像处理管道(Image processing pipeline, ISP)迁移到更加开放的 libcamera。当然这块用USB 摄像头应该也是可以的。

shiter编写程序的艺术 5570

图像分类(四) 全面解读复现GoogleNet_InceptionV1-V4

摘要提出了这篇论文的核心 inception,定义为一个特殊网络的代号。并说了一下主要特点是提高了网络内部计算资源的利用率,在增加了网络的深度和宽度的情况下使网络计算资源不变(或减少)。GoogLeNet 是作者在 2014年ILSVRC 提交中应用的一个特例。GoogLeNet 网络深度达到22层,加上池化有27层,算上inception内部 有100层。虽然层数比VGG多了很多,但是参数量却变少了, GoogLeNet 500万个(5M),VGG16参数是138M,AlexNet参数大约60M。

专注于人工智能学习,总结 1074

【35】软考软件设计师——设计模式代码填空(C++版)满分精讲|第5/6题二选一必考

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第35篇,聚焦下午选做题**第5/6题C++版设计模式代码填空**,与上一篇Java版形成双子配套,单题分值稳定12~15分。全文超4000字深度拆解C++独有核心考点:虚函数/纯虚函数、构造与析构函数规范、继承权限、模板类编程在设计模式中的应用;精讲单例、工厂、策略、观察者、适配器五大高频模式的C++专属代码写法,标注所有填空核心点位、语法陷阱、内存安全规范

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 545

RK35X8调试YT8531单网口千兆以太网PHY芯片,修复ping不通或者IP地址丢失的问题

RK35X8上调试YT8531以太网PHY

荻夜的博客 3976

inceptionv3 /v4迁移学习图像分类

研究一个图像分类的任务,现在的问题是对6类图像数据做分类任务,数据的特征是每一类都只有非常少的数据,并且存在类别不平均,在这种情况下我们的实验结果存在准确率的问题,对于少量数据,采用端到端从头开始训练的方法,模型学习到的特征很少,泛化能力不够,采用从ImageNet数据集训练得到的结果,我们可以采用预训练权重初始化特定的深度网络,如这里的Inception网路,采用slim轻量库构建模型,模型在三...

Synioe的博客 2593

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

PaddleHub 图像分类模块 inception_v4_imagenet 使用指南:InceptionV4 架构解析与预测实践

本篇技术指南围绕 PaddleFormers 仓库中 [inception_v4_imagenet 模块文档](https://link.gitcode.com/i/1e7650f7c8c7da3256b7cf26d9e9013b) 展开,系统讲解基于 ImageNet-2012 预训练的 InceptionV4 图像分类模块:从环境安装、命令行与 Python API 预测,到网络结构源码剖析与

gitblog_00278的博客 852

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV3)模型算法详解

【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV3)模型算法详解

yangyu0515的博客 6779

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【深度学习经典网络架构—4】:GoogLeNet(Incepetion系列V1、V2、V3)

之前我们说VGG拿到了ImageNet挑战赛(ILSVRC2014)分类项目的亚军,冠军就是谷歌提出的GoogLeNet,而**Inception模型是GoogLeNet的核心**。 要想提高网络性能,常用方法就是提高神经网络的深度与宽度,但这也会带来两个问题

王乐予的博客 6782

【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV4)模型算法详解

【图像分类】【深度学习】【Pytorch版本】GoogLeNet(InceptionV4)模型算法详解

yangyu0515的博客 2867
上一篇: tensorflow || tensorboard相关内容
下一篇: 论文阅读 || 深度学习之空洞卷积
magic_ll
博客等级 码龄9年 3万+粉丝 158原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值