GoogLeNet网络结构详解与模型的搭建[通俗易懂]

GoogLeNet网络结构详解与模型的搭建[通俗易懂]首先给出三个链接:1.GoogLeNet网络结构详解视频2.使用pytorch搭建GoogLeNet网络并训练3.使用tensorflow搭建GoogLeNet网络并训练GoogLeNet在2014年由Google团队提出(与VGG网络同年,注意GoogLeNet中的L大写是为了致敬LeNet),斩获当年ImageNet竞赛中ClassificationTask(分…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

首先给出三个链接:

1. GoogLeNet网络结构详解视频

2. 使用pytorch搭建GoogLeNet网络并训练

3. 使用tensorflow搭建GoogLeNet网络并训练

 

GoogLeNet在2014年由Google团队提出(与VGG网络同年,注意GoogLeNet中的L大写是为了致敬LeNet),斩获当年ImageNet竞赛中Classification Task (分类任务) 第一名。原论文名称是《Going deeper with convolutions》,下面是该网络的缩略图,由于原论文提供的图太大,我将原图放在博文的最后。

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

首先说说该网络中的亮点:

(1)引入了Inception结构(融合不同尺度的特征信息)

(2)使用1×1的卷积核进行降维以及映射处理 (虽然VGG网络中也有,但该论文介绍的更详细)

(3)添加两个辅助分类器帮助训练

(4)丢弃全连接层,使用平均池化层(大大减少模型参数,除去两个辅助分类器,网络大小只有vgg的1/20)

 

接着我们来分析一下Inception结构:

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

左图呢,是论文中提出的inception原始结构,右图是inception加上降维功能的结构。

先看左图,inception结构一共有4个分支,也就是说我们的输入的特征矩阵并行的通过这四个分支得到四个输出,然后在在将这四个输出在深度维度(channel维度)进行拼接得到我们的最终输出(注意,为了让四个分支的输出能够在深度方向进行拼接,必须保证四个分支输出的特征矩阵高度和宽度都相同)。

分支1是卷积核大小为1×1的卷积层,stride=1,

分支2是卷积核大小为3×3的卷积层,stride=1,padding=1(保证输出特征矩阵的高和宽和输入特征矩阵相等),

分支3是卷积核大小为5×5的卷积层,stride=1,padding=2(保证输出特征矩阵的高和宽和输入特征矩阵相等),

分支4是池化核大小为3×3的最大池化下采样,stride=1,padding=1(保证输出特征矩阵的高和宽和输入特征矩阵相等)。

 

再看右图,对比左图,就是在分支2,3,4上加入了卷积核大小为1×1的卷积层,目的是为了降维,减少模型训练参数,减少计算量,下面我们看看1×1的卷积核是如何减少训练模型参数的。同样是对一个深度为512的特征矩阵使用64个大小为5×5的卷积核进行卷积,不使用1×1卷积核进行降维话一共需要819200个参数,如果使用1×1卷积核进行降维一共需要50688个参数,明显少了很多。

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

 

每个卷积层的卷积核个数如何确定呢,下面是原论文中给出的参数列表,对于我们搭建的Inception模块,所需要使用到参数有#1×1, #3x3reduce, #3×3, #5x5reduce, #5×5, poolproj,这6个参数,分别对应着所使用的卷积核个数。

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

下面这幅图是我将Inception模块所使用到的参数信息标注在每个分支上,其中#1×1对应着分支1上1×1的卷积核个数,#3x3reduce对应着分支2上1×1的卷积核个数,#3×3对应着分支2上3×3的卷积核个数,#5x5reduce对应着分支3上1×1的卷积核个数,#5×5对应着分支3上5×5的卷积核个数,poolproj对应着分支4上1×1的卷积核个数。

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

 

接着下来在看看辅助分类器结构,网络中的两个辅助分类器结构是一模一样的,如下图所示:

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

着两个辅助分类器的输入分别来自Inception(4a)和Inception(4d)。

辅助分类器的第一层是一个平均池化下采样层,池化核大小为5×5,stride=3

第二层是卷积层,卷积核大小为1×1,stride=1,卷积核个数是128

第三层是全连接层,节点个数是1024

第四层是全连接层,节点个数是1000(对应分类的类别个数)

 

关于模型的搭建与训练代码放在我的github中,大家可自行下载使用:

https://github.com/WZMIAOMIAO/deep-learning-for-image-processing

pytorch版本在pytorch_learning文件夹中,tensorflow版本在tensorflow_learning文件夹中.
 

最后给出我标注了部分信息的GoogLeNet网络结构图:

GoogLeNet网络结构详解与模型的搭建[通俗易懂]

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170451.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托

    C#泛型入门泛型类、泛型集合、泛型方法、泛型约束、泛型委托泛型集合和ArrayList的装箱拆箱、常见的泛型类型、泛型类和泛型方法、泛型约束、泛型委托泛型很难理解?不然在接触的一个新的概念的时候,总会感觉难以理解,当你掌握并能熟练地使用的时候,发现这个概念其实简单的,我相信大多数码农都会有这种似曾相识的感觉。可能大多数人刚学习泛型的时候觉得很难理解,当然我也是这样的,所以便写下这篇文章加深一下对泛型的印象。

    2022年7月11日
    14
  • 用npm安装yarn(买电脑主要看哪些配置)

    写在前面:前端开发常需要配合后台同时进行,在没有后台的情况下,服务器通信和获取数据进行页面渲染就无法进行。使用Javascript编写的Node.js服务器,对于前端开发人员来说,可以免去对学习服务器脚本语言的学习成本,能够在短时间构建一套完整的、高效的Web服务。NPM(NodePackageManager)作为Node.js的依赖包管理器便应运而生,而YARN则是针对NPM的一些不太优…

    2022年4月10日
    39
  • java Calendar日期相减问题

    java Calendar日期相减问题两个日期相减,必须是Date型变量使用其getTime()后相减,所以如果是从Calendar获得时间,则需:Calendardate1=Calendar.getInstance();Calendardate2=Calendar.getInstance();date1.getTime().getTime()-date2.getTime().getTime();结果为

    2022年6月3日
    63
  • 新学C#线程使用总结建议收藏

    这两天在项目上需要使用多线程技术,研究了半天,碰到了一些问题,现在简要总结下。线程的使用其实很简单,和JAVA里面差不多,但是还是有很多特别的地方,在C#中的线程,如果要对非线程创建的控件进行操作的话

    2021年12月20日
    45
  • pytest的使用_实例调用和类调用

    pytest的使用_实例调用和类调用Pytest执行用例规则Pytest在命令行中支持多种方式来运行和选择测试用例1.对某个目录下所有的用例pytest2.对模块中进行测试pytesttest_mod.py3.对文件夹进行

    2022年7月31日
    3
  • quick-cocos 3.5 lua banding c++

    quick-cocos 3.5 lua banding c++在tools\tolua目录下有个README,里面详述了在各个平台下怎么使用,这里只是稍微记述下windows下面的使用和遇到的问题。1.首先下载AndroidNDK,版本r9b以上,自己网上找下,然后配置下环境,系统–高级系统设置–高级–环境变量,在自己用户的环境变量中新建,变量名从genbindings.py中可以看到是NDK_ROOT,变量值就是你AndroidNDK的路径。

    2022年10月9日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号