深度学习第20讲:CNN经典论文研读之GoogLeNet Inception网络

简介:

在 2014 年 ILSVRC 比赛中,VGGNet 获得了当时的第二名的成绩,那么第一名是谁呢?当时的 VGGNet 就已经很厉害了,难得同届选手还有更厉害的?很不巧,还真有。当年度取得冠军的方案网络由谷歌团队研发,并且为了致敬 Yann Lecun 的 LeNet-5,将其命名为 GoogLeNet。GoogLeNet 在借鉴 1x1 卷积思想的基础上,通过滤波器组合构建 Inception 模块,使得网络可以走向更深且表达能力更强。从 2014 年获得当届 ILSVRC 冠军的 Inception v1 到现在,光 Inception 网络就已经更新到 v4 了,而后基于 Inception 模块和其他网络结构的组合而成的网络就更多了,比如说 Inception Resnet。

1x1 卷积

通过前面的学习大家都知道卷积操作是卷积神经网络的核心操作了,在之前我们通常会用到各种尺寸的卷积核,比如说 3x3 卷积、5x5 卷积、7x7 卷积等等。但今天我们需要提一下 1x1 卷积。这似乎有些蠢,直观上理解 1x1 卷积好像没什么用,就是简单的数字相乘而已,对于通道数较小的图片确实如此,但如果我们考虑一个 6x6x32 的图片呢?

考虑用一个 1x1x32 的卷积核对 6x6x32 的图片进行卷积。如下图所示,具体而言就是计算左图中 32 个数字和卷积核中 32 个数字对应元素乘积之和,然后进行激活操作。

2a8a038ef71c08fe5a5139079edb5637473269bd

滤波器中的通道数 32 可以这么理解:一个神经元的输入是 32 个数字,对输入图像做一个切片的话,即相同高度和宽度上某一切片上的 32 个数字具有不同的通道数,乘以滤波器的 32 个数字权重,然后应用激活函数得到 1x1 卷积结果。所以从这个角度看我们可以将 1x1 卷积理解为对这个不同通道上的 32 个数字应用一个全连接层,这个全连接层输入 32 个数字,输入为 6x6x滤波器个数。

所以 1x1 卷积的一个重要作用就是缩减通道数,对于一个 28x28x192 的输入,我们如何将其压缩成 28x28x32 的大小呢?利用 1x1 卷积的话就是使用 32 个大小为 1x1x192 的卷积核进行卷积,卷积结果大小为 28x28x32。这样就起到了压缩通道的作用了,这种压缩或保持通道数不变的方法在接下来我们要讲的 GoogLeNet 中的 Inception 模块中很有用,我们接着往下看。

Inception 模块

通常在构建卷积结构时,我们需要考虑是使用 1x1 卷积、3x3 卷积还是 5x5 卷积及其是否需要添加池化操作。而 GoogLeNet 的 Inception 模块就是帮你决定采用什么样的卷积结构。简单而言,Inception 模块就是分别采用了 1x1 卷积、3x3 卷积和 5x5 卷积构建了一个卷积组合然后输出也是一个卷积组合后的输出。如下图所示:

ab98c2b4bb84aaa6e96b9be885d448e55bf211af

对于 28x28x192 的像素输入,我们分别采用 1x1 卷积、3x3 卷积和 5x5 卷积以及最大池化四个滤波器对输入进行操作,将对应的输出进行堆积,即 32+32+128+64=256,最后的输出大小为 28x28x256。所以总的而言,Inception 网络的基本思想就是不需要人为的去决定使用哪个卷积结构或者池化,而是由网络自己决定这些参数,决定有哪些滤波器组合。

Inception 模块有两种形式,一种是原始模块,另一种是带有维度削减的模块。其结构如下图所示:

55de83da1934809b9fd37e9ce1cb0c609e404773

第二个版本的 Inception 模块采用了大量的 1x1 卷积,目的就是起到通道压缩作用。 Inception 网络

构建好 Inception 模块后,将多个类似结构的Inception模块组合起来便是一个Inception 网络,类似下图:

ef1680974c5c2bffc985e440768613179bc0df8c

一个完整的 Inception 网络结构如下所示:

b769a82354fe5fa59560e7bc5d94ba435ffd8ec3

以上便是 Inception 网络的基本构造。这是当年获得冠军的 Inception V1 版本,可以看到模型层数很深了,网络更深提取各种层级的特征更加充分。除此之外,Inception V1 在最后两个全连接层中采取了一个全局平均池化层来代替全连接层。因为全连接层的参数数量庞大,通常是导致过拟合的直接原因,这里用全局平均池化来代替,可以很大程度上缓解过拟合的情况。完整的 Inception V1 的结构信息如下表所示:

65e9a93f43088a6a2e9e39b5ca720adcef7f98ba

至于 Inception V1 的效果,当然是收割各种冠军和头名啦。

0b1926ac10990080414feadb978eeba404f01f71

Inception V1 之后,又在其基础上出现了 V2 V3 和 V4 版本以及 Xception,总之以 Inception 网络为主体的 GoogLeNet 不断优化和改进,称为深度卷积网络的一大重要分支。至于如何使用 Tensorflow 实现 Inception V1网络,GitHub 上有众多开源,笔者就不在此写了。


原文发布时间为:2018-10-16

本文作者:louwill

本文来自云栖社区合作伙伴“Python爱好者社区”,了解相关信息可以关注“Python爱好者社区”。

相关文章
|
2月前
|
机器学习/深度学习 编解码 PyTorch
Pytorch实现手写数字识别 | MNIST数据集(CNN卷积神经网络)
Pytorch实现手写数字识别 | MNIST数据集(CNN卷积神经网络)
|
1月前
|
机器学习/深度学习 算法 数据库
基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱
基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱
|
2月前
|
机器学习/深度学习 测试技术 Ruby
YOLOv5改进 | 主干篇 | 反向残差块网络EMO一种轻量级的CNN架构(附完整代码 + 修改教程)
YOLOv5改进 | 主干篇 | 反向残差块网络EMO一种轻量级的CNN架构(附完整代码 + 修改教程)
126 2
|
2天前
|
机器学习/深度学习 数据采集 TensorFlow
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
22 0
|
1月前
|
机器学习/深度学习 算法
基于CNN+LSTM深度学习网络的时间序列预测matlab仿真
基于CNN+LSTM深度学习网络的时间序列预测matlab仿真
|
1月前
|
机器学习/深度学习 编解码 人工智能
一篇文章搞懂CNN(卷积神经网络)及其所含概念
一篇文章搞懂CNN(卷积神经网络)及其所含概念
68 0
一篇文章搞懂CNN(卷积神经网络)及其所含概念
|
2月前
|
机器学习/深度学习 自然语言处理 大数据
深度学习中的卷积神经网络优化技术探析
【2月更文挑战第4天】在深度学习领域,卷积神经网络(CNN)一直扮演着重要角色,但其训练和推理过程中存在许多挑战。本文将从优化角度出发,探讨卷积神经网络中的权重初始化、损失函数设计、学习率调整等优化技术,旨在为深度学习爱好者提供一些实用的技术感悟和分享。
22 3
|
2月前
|
机器学习/深度学习 数据采集 算法
基于googlenet深度学习网络的中药材种类识别算法matlab仿真
基于googlenet深度学习网络的中药材种类识别算法matlab仿真
|
2月前
|
算法
m基于Faster-RCNN网络的人员摔倒检测系统matlab仿真,带GUI操作界面
m基于Faster-RCNN网络的人员摔倒检测系统matlab仿真,带GUI操作界面
31 9
|
2月前
|
机器学习/深度学习 算法 TensorFlow
基于 Python中的深度学习:神经网络与卷积神经网络
基于 Python中的深度学习:神经网络与卷积神经网络