深度学习第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爱好者社区”。

相关文章
|
1月前
|
机器学习/深度学习 数据采集 人工智能
m基于深度学习网络的手势识别系统matlab仿真,包含GUI界面
m基于深度学习网络的手势识别系统matlab仿真,包含GUI界面
41 0
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
15天前
|
机器学习/深度学习 算法 PyTorch
【动手学深度学习】深入浅出深度学习之线性神经网络
【动手学深度学习】深入浅出深度学习之线性神经网络
57 9
|
1天前
|
机器学习/深度学习 算法 计算机视觉
m基于Yolov2深度学习网络的人体喝水行为视频检测系统matlab仿真,带GUI界面
MATLAB 2022a中使用YOLOv2算法对avi视频进行人体喝水行为检测,结果显示成功检测到目标。该算法基于全卷积网络,通过特征提取、锚框和损失函数优化实现。程序首先打乱并分割数据集,利用预训练的ResNet-50和YOLOv2网络结构进行训练,最后保存模型。
11 5
|
4天前
|
机器学习/深度学习 传感器 数据可视化
MATLAB用深度学习长短期记忆 (LSTM) 神经网络对智能手机传感器时间序列数据进行分类
MATLAB用深度学习长短期记忆 (LSTM) 神经网络对智能手机传感器时间序列数据进行分类
19 1
MATLAB用深度学习长短期记忆 (LSTM) 神经网络对智能手机传感器时间序列数据进行分类
|
8天前
|
机器学习/深度学习 数据可视化 测试技术
深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据
深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据
21 0
|
9天前
|
机器学习/深度学习 API 算法框架/工具
R语言深度学习:用keras神经网络回归模型预测时间序列数据
R语言深度学习:用keras神经网络回归模型预测时间序列数据
17 0
|
9天前
|
机器学习/深度学习 数据采集 TensorFlow
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
29 0
|
15天前
|
机器学习/深度学习 自然语言处理 算法
|
1月前
|
机器学习/深度学习 运维 算法