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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Git-命令行-删除本地和远程分支

    Git-命令行-删除本地和远程分支

    2021年10月22日
    65
  • c++ vector下标_vectorat

    c++ vector下标_vectoratC语言(加了层语法糖的汇编)为了性能并不支持数组的越界检查,每次检查会多付出2-3倍的时间。而vector以at的形式支持越界检查,但也支持C语言风格的[]高效访问,没错C++提供了足够的自由。当要获取std::vector的第n个元素,下面几种方式都可以:  std::vector<int>vec; size_tn=1; in…

    2022年9月27日
    3
  • PhpStorm中报 “Cannot run program git.exe, 系统找不到指定的文件”

    PhpStorm中报 “Cannot run program git.exe, 系统找不到指定的文件”

    2021年10月10日
    43
  • Oracle删除表空间的同时删除数据文件[通俗易懂]

    临时表空间主要用途是在数据库进行排序运算[如创建索引、orderby及groupby、distinct、union/intersect/minus/、sort-merge及join、analyze命令]、管理索引[如创建索引、IMP进行数据导入]、访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理。当临时表空间不足时,表现为运算速度异常的慢,并且临时表空间迅速增长到最大空

    2022年4月18日
    159
  • 一致性哈希算法实现(一致性哈希与哈希的异同)

    1、使用哈希算法有什么问题?假设有一个由A、B、C三个节点组成的KV服务,每个节点存放不同的KV数据。通过哈希算法,每个key都可以寻址到对应的服务器,比如,查询key是key-01,计算公式为hash(key-01)%3,经过计算寻址到了编号为1的服务器节点A但如果服务器数量发生变化,基于新的服务器数量来执行哈希算法的时候,就会出现路由寻址失败的情况,Proxy无法找到之前寻址到的那个服务器节点假如3个节点不能满足业务需求了,这时增加了一个节点,节点的数量从3变化为4,那么之前的hash(key

    2022年4月14日
    46
  • What Are You Talking About HDU1075[通俗易懂]

    What Are You Talking About HDU1075[通俗易懂]一开始我也想用map但是处理不好其他字符。。看了题解多多学习!很巧妙就是粗暴的一个字符一个字符的来分为小写字母和非小写字母两个部分一但单词结束的时候就开始判断。#include<

    2022年7月4日
    26

发表回复

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

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