深度神经网络中的Inception模块介绍
深度神经网络(Deep Neural Networks, DNN)或深度卷积网络中的Inception模块是由Google的Christian Szegedy等人提出,包括Inception-v1、Inception-v2、Inception-v3、Inception-v4及Inception-ResNet系列。每个版本均是对其前一个版本的迭代改进。另外,依赖于你的数据,低版本可能实际上效果更好。这里是整理的Inception的v1、v2、v3、v4内容。
对于深度神经网络来说,提升网络性能最直接的办法就是增加网络深度和宽度(网络的深度指的是网络的层数,宽度指的是每层的通道数),这就意味着网络的参数数量会非常庞大。但是,海量的参数很容易产生过拟合,同时也会大大增加计算量。2014年,受Network in Network和稀疏网络的启发,Google公司提出了一个深度卷积神经网络来解决这些问题。这个名叫GoogLeNet的网络获得了ILSVRC2014的冠军。这个模型的设计理念认为解决上述两个缺点的根本方法是将全连接甚至一般的卷积结构都转化为稀疏连接。这样做的理由是在现实中生物神经系统的连接也是稀疏的,另外一方面也有许多研究证明了对于大规模的稀疏神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类来逐层构建出一个最优网络。以上这些表明了庞大臃肿的稀疏网络可以被简化并且性能不会受到太多影响。在早期深度学习的一些研究中,为了使打破网络对称性和提高学习能力,很多网络都采用了随机稀疏连接的做法。但是,计算机对非均匀稀疏数据的计算效率很差。于是现在需要一种方法,既能保持网络结构的稀疏性,又能使网络利用到密集矩阵的高计算性能。许多研究已经表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,据此GoogLeNet网络采用了Inception-v1模块来实现此目的。GoogLeNet网络有时又称为Inception-v1网络,即GoogLeNet网络中使用的是Inception-v1模块。
Inception模块的核心思想就是将不同的卷积层通过并联的方式结合在一起,经过不同卷积层处理的结果矩阵在深度这个维度拼接起来,形成一个更深的矩阵。Inception模块可以反复叠堆形成更大的网络,它可以对网络的深度和宽度进行高效的扩充,在提升深度学习网络准确率的同时防止过拟合现象的发生。Inception模块的优点是可以对尺寸较大的矩阵先进行降维处理的同时,在不同尺寸上对视觉信息进行聚合,方便从不同尺度对特征进行提取。
Inception-v1论文名为《Going deeper with convolutions》,论文见:https://arxiv.org/pdf/1409.4842.pdf 。此模块使用了3种不同尺寸的卷积核(1*1、3*3、5*5)和1个最大池化核(3*3),增加了网络对不同尺度的适应性,论文截图如下所示:当感兴趣区域分布更全局时,倾向选择一个较大的核;当感兴趣区域分布的更局部时,倾向选择一个较小的核。
上图为Inception模块的原始版本:Inception模块中包含卷积操作,但是不同于传统卷积神经网络,此模块中可以设置多个通路,每个通路可以是不同的操作,相同的操作也可以设置不同的kernel size和stride。不同的卷积尺寸提供了不同的感受野,可以做不同级别上的特征提取,池化操作本身有提取特征的作用,而且因为没有参数不会产生过拟合,所以池化操作也作为此模块的一个通路。
此模块采取了几个措施来使密集的成分能够近似最优的稀疏结构。首先,在同一层中采用了不同大小的卷积核来提取上一层的特征,并在最后进行拼接。这样意味着在同一层中网络就能从感受不同大小的图像局部区域,并对不同尺度的特征进行融合。卷积核大小普遍采用1、3和5,再设定卷积步长为1,只要图像的填充值(padding)分别设置为0、1、2,那么卷积之后便可以得到相同维度的特征,之后便可以将这些特征值直接拼接在一起。此外,由于池化层在很多网络中都起到相当大的作用,因此在Inception模块中也嵌入了这一操作。最后由于神经网络随着深度的增加所提取的特征也逐渐抽象,每个特征涉及到更大的感受区域,因此在网络的深层应该逐渐增加大尺寸卷积核的比例。
上图为降维(dimension reductions)后的最终Inception-v1版本:优点:(1).同时使用不同尺寸的卷积核可以提取到种类更加丰富的特征;(2).使用稀疏矩阵分解为密集矩阵计算的原理,增加了收敛速度。
由于5*5的卷积核仍然会带来巨大的计算量,考虑到这一点,此模块加入了1*1卷积核来进行降维即限制输入通道数量。
Inception-v1中使用了多个1*1卷积核,其作用:(1).在大小相同的感受野上叠加更多的卷积核,可以让模型学习到更加丰富的特征。传统的卷积层的输入数据只和一种尺寸的卷积核进行运算,而Inception-v1结构是Network in Network(NIN),就是先进行一次普通的卷积运算(比如5*5),经过激活函数(比如ReLU)输出之后,然后再进行一次1*1的卷积运算,这个后面也跟着一个激活函数。1*1的卷积操作可以理解为feature maps个神经元都进行了一个全连接运算。(2).使用1*1的卷积核可以对模型进行降维,减少运算量。当一个卷积层输入了很多feature maps的时候,这个时候进行卷积运算计算量会非常大,如果先对输入进行降维操作,feature maps减少之后再进行卷积运算,运算量会大幅减少。
Inception模块中,1*1、3*3、5*5的卷积核并不是固定的,可以根据实验进行调整。
下图来自于https://blog.csdn.net/fengbingchun/article/details/80786455 ,可以形象地说明Inception-v1模块内是如何能够拼接在一起的:
Inception-v2、Inception-v3论文名为《Rethinking the inception architecture for computer vision》,论文见:https://arxiv.org/pdf/1512.00567.pdf 。 此模块在Inception-v1的基础上进行了改进。
Inception-v2:有三种形式,论文截图如下所示:
Figure 5:参考VGG,用两个3*3的卷积核代替5*5的大卷积核,这样在保持相同感受野的同时减少了参数,而且加强了非线性表达能力,还可以提升速度。
Figure 6:引入了factorization into asymmetric convolutions的思想,就是用两个1*n和n*1的卷积核替换一个较大的n*n卷积核。这种分解方法减少了大量参数,并且可以提高运算速度,减轻过拟合,同时给模型增加了一层非线性结构,提升了模型的表达能力,让模型可以处理更丰富的空间特征,增加了特征的多样性。但经过试验发现,在网络的前期用这种分解效果并不好,而且这种分解在中等大小的特征图上使用效果最好,如n=7。
Figure 7:模块中的滤波器组(filter banks)被扩展(使得更宽而不是更深),以消除representational bottleneck(降低representational bottleneck:其思路是,当卷积不会大幅改变输入尺寸,神经网络的性能会更好。减少维度会造成信息大量损失,也就是所说的 representational bottleneck)。如果模块变得更深,尺度将会过度缩小,从而导致信息的丢失。较适合于高维特征。
Inception-v2还提出了Batch Normalization(BN)方法。深度神经网络的训练过程十分复杂,如果前面几层发生微小的变化,这个微小的变化经过后面几层的传递会被放大。神经网络在训练的时候参数会不断更新,前面层训练参数的变化会导致后面层的输入数据分布发生改变。网络中间层在训练过程中数据分布发生改变,这种现象称之为”Internal Covariate Shift”。BN算法就是为了解决这个现象被提出来的。BN算法的核心原理就是:在网络的每一层的前面,插入一个归一化层,也就是上一层的输出数据先经过归一化处理,然后再输入到下一层,但是这个归一化层不是简单的归一化层,而是可以学习并且有参数的归一化层。如果只是使用简单的归一化,就是对网络某一层的输出数据进行归一化处理,然后输入到下一层神经网络,这样会对这一层神经网络学习到的特征造成影响。BN算法对每一个经过激活函数的值都引入了可以学习的参数γ、β,这两个参数可以对经过归一化处理后的输入进行缩放和平移。
Inception-v3:针对Inception-v2的升级,增加了以下内容:(1).RMSProp优化器。(2).分解为7*7卷积。(3).辅助分类BatchNorm。(4).标签平滑(Label Smoothing,添加到损失公式中的正则化组件类型,防止网络过于准确,防止过度拟合)。
Inception-v4、Inception-ResNet论文名为《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》,论文见:https://arxiv.org/pdf/1602.07261.pdf。
Inception-v4:将原来卷积、池化的顺次连接(网络的前几层)替换为stem模块,即Inception模块之前执行的最初一组操作,来获得更深的网络结构,论文截图如下所示为stem模块结构:
Inception-v4有三个主要的Inception模块,分别为A、B、C,论文截图如下所示:依次为Inception-A、Inception-B、Inception-C
Inception-v4采用专门的Reduction Blocks用于更改网络的宽度和高度。论文截图如下所示:
上图为Reduction Block A,将35*35尺寸缩小至17*17。
上图为Reduction Block B,将17*17尺寸缩小至8*8。
Inception-v4的整个网络布局,论文截图如下所示:
注:以上所有的内容的整理均来自网络,除参考原始论文外,还主要参考:
1. https://medium.com/m/global-identity?redirectUrl=https%3A%2F%2Ftowardsdatascience.com%2Fa-simple-guide-to-the-versions-of-the-inception-network-7fc52b863202
2. https://cloud.tencent.com/developer/article/1166837
3. 《基于卷积神经网络的多目标定位研究》,2019,硕论,长安大学
4. 《基于深度学习的细粒度图像识别研究》,2018,硕论,北京邮电大学
GitHub:https://github.com/fengbingchun/NN_Test
相关文章:

iOS隐藏导航栏的方法
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:animated]; }

NEW关键字的三种用法
声明:本文最初是本人从他出转载到51CTO上的一篇文章,但现在记不清最初从出处了,原文作者看到还请原来,现在发表在这里只为学习,本人在51CTO的该文章的地址为:http://kestrelsaga.blog.51cto.com/3015222/75…
论文解读 | 微信看一看实时Look-alike推荐算法
作者丨gongyouliu编辑丨lily来源 | 授权转载自大数据与人工智能(ID:ai-big-data)微信看一看的精选文章推荐(见下面图1)大家应该都用过,微信团队在今年发表了一篇文章来专门介绍精选推荐的算法实现细节(Real-time Attention based Look-alike Model,简称R…

经典网络GoogLeNet介绍
经典网络GoogLeNet由Christian Szegedy等于2014年提出,论文名为《Going deeper with convolutions》,论文见:https://arxiv.org/pdf/1409.4842v1.pdf GoogLeNet网络用到了Inception-v1模块,关于Inception模块的介绍可以参考&…

iOS webview 点击按钮返回上一页面或者返回首页
- (void)floatBtn:(UIButton *)sender { NSLog("点击"); if ([self.webView canGoBack]) { [self.webView goBack]; } else{ [self.view resignFirstResponder]; [self.navigationController popViewControllerAnimate…

centos6.6 Kickstart无人值守安装(一):原理篇
为什么80%的码农都做不了架构师?>>> #为什么要自动化无人值守安装? 偷懒……nb……zb……geekno no no 瞬间完成大规模机器部署,提高生产力,节省时间精力,为公司谋取更多利益,实现社会和谐!#怎…
拿来就能用!如何用 AI 算法提高安全运维效率?
作者 | 黄龙责编 | 伍杏玲来源 | CSDN(ID:CSDNnews) 在整个安全工作中,安全运维是不可或缺的一环,其目的是保证各项安全工作持续有效地运作。除了对外的沟通和业务对接相关工作,大部分安全运维的日常工作相…

深度神经网络中Inception-ResNet模块介绍
之前在https://blog.csdn.net/fengbingchun/article/details/113482036 介绍了Inception,在https://blog.csdn.net/fengbingchun/article/details/114167581 介绍了ResNet,这里介绍下深度神经网络中的Inception-ResNet模块。 介绍Inception-ResNet的论文…

iOS 让UIView的左上角和右上角为圆角
-(UIView *)platFormBGV{ if (!_platFormBGV) { _platFormBGV [[UIView alloc] init]; _platFormBGV.backgroundColor [UIColor whiteColor]; _platFormBGV.frame CGRectMake(0, self.view.frame.size.height, APP_WIDTH, 220); // 左上和右上为圆角 UIBezierPath *cornerRa…

HttpUnit学习笔记
HttpUnit 能模拟浏览器的动作,如提交表单、JavaScript执行、基本HTTP认证、cookies建立以及自己主动页面重定向,通过编写代码能够处理取回来的文本、XML DOM或表单、表、链接。当与Junit等框架结合时,就能很easy地进行一个站点的功能測试了。…

C++11中头文件type_traits介绍
C11中的头文件type_traits定义了一系列模板类,在编译期获得某一参数、某一变量、某一个类等等类型信息,主要做静态检查。 此头文件包含三部分: (1).Helper类:帮助创建编译时常量的标准模板类。介绍见以下测试代码: …
反季大清仓,最低仅需34.9元
不知不觉已经12月份了还有一个月就要过年啦很多地方已经进入了寒冬的季节有的地方已经开启了下雪模式纷纷开始买冬天的商品棉衣、羽绒服、取暖器......但是.......今天我是来搞反季清仓的快来看看今天的反季清仓有啥商品~●反季清仓商品—程序员专属定制T ●专属定制T_shirt&am…

iOS 预览word pdf 文件
此类用于改变QLPreviewController 导航栏title #import <QuickLook/QuickLook.h> NS_ASSUME_NONNULL_BEGIN interface QLPreviewController (title) property (nonatomic, strong) NSString *qlpTitle; end NS_ASSUME_NONNULL_END #import "QLPreviewControllertitl…

Java过滤器模式
//创建一个类,在该类上应用标准 public class Person { private String name; private String gender; private String maritalStatus; public Person(String name, String gender, String maritalStatus) { this.name name; …

C++中指向类成员指针的用法
C中,指向类的成员指针包含两种: (1).指向类的成员函数的指针: 类型 (类名::* 函数成员指针名)(参数表); 函数成员指针名 &类名::函数成员名; 也可将以上两条语句调整为一条语句: 类型 (类名::* 函数成员指针名)(参数表) &…
多模态人物识别技术及其在爱奇艺视频场景中的应用 | 公开课笔记
【12月公开课预告】,入群直接获取报名地址12月11日晚8点直播主题:人工智能消化道病理辅助诊断平台——从方法到落地12月12日晚8点直播:利用容器技术打造AI公司技术中台12月17日晚8点直播主题:可重构计算:能效比、通用性…

JsonObject json字符串转换成JSonObject对象
字符串:{"code":"1004","msg":"请先添加系统靠勤人员信息!","userRegistInfo":{"acc":"小谷","id":0,"phoneMac":"","phoneNum":"…
基于人脸关键点修复人脸,腾讯等提出优于SOTA的LaFIn生成网络
作者 | Yang Yang、Xiaojie Guo、Jiayi Ma、Lin Ma、Haibin Ling译者 | 刘畅编辑 | Jane出品 | AI科技大本营(ID:rgznai100)【导语】现实场景中,人脸的变化是很大的,例如不同的姿势、表情和遮挡等,因此在现…

在Ubuntu上编译opencv 2.4.13源码支持android平台操作步骤
之前在https://blog.csdn.net/fengbingchun/article/details/96430706中编译过opencv源码用于海思平台,这里通过修改脚本编译opencv 2.4.13.6源码,使其支持android平台。 1. 从https://github.com/opencv/opencv/releases下载opencv 2.4.13.6源码&#…

Java组合模式
组合模式:适用于把一组相似的对象当作一个单一的对象,组合迷失一句树形结构来组合对象,用来表示部分以及整体层次。这种类的设计模式属于结构型模式,他创建了对象组的树形结构 这种模式创建了一个包含自己对象组的的类。给类提供了…

SQL故障转移集群操作方法
SQL故障转移集群操作方法1 给SQL服务器配置IP地址,每台服务器需要两个IP,一个通讯用,一个作为心跳线,修改计算机的名称,关闭服务器的防火墙,开启远程桌面.2心跳网卡配置去掉ipv6,并去掉下列几项进行验证3域控制器服务器管理器 添加角色 AD域服务启动AD域服务加入到域中打开DNS服…

Windows/Linux上使用fopen相关函数读取大文件
在介绍读取大文件之前,先了解下<cstdint>文件,标准头文件,存放固定宽度整数类型,如int32_t, uint32_t,不管在32位上还是64位上,长度都为4个字节;int64_t, uint64_t,不管在32位…
蚂蚁金服提新概率图模型GLN,正确率提升8.2%,具备可解释性 | NeurIPS 2019
作者 | 蚂蚁金服编辑 | Jane出品 | AI科技大本营(ID;rgznai100)【导读】一年一度的国际顶级学术会议NeurIPS 2019将于12月8日至14日在加拿大温哥华举行。作为人工智能和机器学习领域最顶级的盛会之一,每年都会吸引来自全世界的AI大…

Java外观模式
外观模式:隐藏系统的复杂性,并向客户提供了一个客户端可以访问系统的接口,这种类型的设计模式属于结构型模式,他向现有的系统添加一个接口,来隐藏系统的复杂性 这种模式设计到一个单一的类,该类提供了客户请…

【spring框架】spring整合hibernate初步
spring与hibernate做整合的时候,首先我们要获得sessionFactory。我们一般只需要操作一个sessionFactory,也就是一个"单例",这一点很适合交给spring来管理。下面的代码演示如何创建一个JDBC DataSource 和Hibernate SessionFactory:…

PyTorch简介
PyTorch是一个针对深度学习,并且使用GPU和CPU来优化的tensor library(张量库)。最新发布的稳定版本为1.9,源码在https://github.com/pytorch/pytorch 。它支持在Linux、Mac和Windows上编译和运行。调用Python接口可以通过Anaconda或Pip的方式安装&#x…

Java 责任链模式
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者…
2019嵌入式智能国际大会圆满落幕,7大专场精彩瞬间释出!
全球第二大市场研究机构MarketsandMarkets报告称,2019年全球AIoT市场规模为51亿美元,到2024年,这一数字将增长至162亿美元。5G元年,人工智能开始更多地转向应用智能。基于此,12月6-7日,由哈尔滨工业大学&am…

ubuntu12.04 alternate win7 双系统安装
ubuntu alternate的安装比desktop复杂一点,因为alternate的安装过程有个步骤是检测cd-rom,如果你是刻盘安装,自然没问题,但是,现在的安装一般是将系统刻到U盘里,或者在硬盘中划出一个分区,将其制作成启动盘. 这里我是用U盘安装的... 安装前的准备: 1)在硬盘上分出一个空闲分区:…

C/C++包管理工具Conan简介
Conan是一个开源的、跨平台的、去中心化的C和C包管理器,它的源码在https://github.com/conan-io/conan ,License为MIT,最新发布版本为1.38.0,由Python实现。版本更新较频繁,但保持向前兼容。 Conan特点: (1…