深度学习第18讲:CNN经典论文研读之VGG网络及其tensorflow实现

简介:

在前两期的论文研读中,笔者和大家一起学习了 LeNet-5 和 AlexNet 这两个经典的卷积神经网络结构和基本实现方式。今天我们继续 CNN 经典论文研读之路——VGGNet。VGGNet 是牛津大学计算机视觉组(Visual Geometry Group)和谷歌 DeepMind 一起研究出来的深度卷积神经网络,因而冠名为 VGG。在2014年的 ILSVRC 中取得了第二名的成绩,可能你会问这么厉害的网络为什么不是第一名,因为当年实际提交 VGG 版本时作者并未作进一步的优化,而当年的第一名则是我们后面要继续研读的 Google Inception Net。

82d180939ef8b4723b17e3715b8c9db06afb6eda

相较于之前的 LeNet-5 和 AlexNet,VGGNet 结构中大量使用 3x3 的卷积核和 2x2 的池化核,首次将卷积神经网络的卷积深度推向更深,最为典型的 VGGNet 是 VGG16 和 VGG19,其中的 16 的含义即网络中包含16个卷积层和全连接层, 19即即网络中包含19个卷积层和全连接层。VGGNet 的网络虽然开始加深但其结构并不复杂,但作者的实践却证明了卷积网络深度的重要性。深度卷积网络能够提取图像低层次、中层次和高层次的特征,因而网络结构需要的一定的深度来提取图像不同层次的特征。

VGG的网络结构

在论文中,作者使用了 A-E 五个不同深度水平的卷积网络进行试验,从A到E网络深度不断加深:

91779bbf57ca1a9638f5588d5c295abdbbad309b

各结构网络所含训练参数:

c3b11a664ed7e15ce5b3e9d588f7b33025191520

其中 D 和 E 即我们常说的 VGG16 和 VGG19。可以看到 VGG16 网络需要训练的参数数量达到了 1.38 亿个,这个数量是巨大的。我们以 VGG16 为例简单探究一下它的网络结构。

VGG16 各层的结构和参数如下:
C1-1层是个卷积层,其输入输出结构如下:
输入: 224 x 224 x 3 滤波器大小: 3 x 3 x 3 滤波器个数:64
输出: 224 x 224 x 64

C1-2层是个卷积层,其输入输出结构如下:
输入: 224 x 224 x 3 滤波器大小: 3 x 3 x 3 滤波器个数:64
输出: 224 x 224 x 64

P1层是C1-2后面的池化层,其输入输出结构如下:
输入: 224 x 224 x 64 滤波器大小: 2 x 2 滤波器个数:64
输出: 112 x 112 x 64

C2-1层是个卷积层,其输入输出结构如下:
输入: 112 x 112 x 64 滤波器大小: 3 x 3 x 64 滤波器个数:128
输出: 112 x 112 x 128

C2-2层是个卷积层,其输入输出结构如下:
输入: 112 x 112 x 64 滤波器大小: 3 x 3 x 64 滤波器个数:128
输出: 112 x 112 x 128

P2层是C2-2后面的池化层,其输入输出结构如下:
输入: 112 x 112 x 128 滤波器大小: 2 x 2 滤波器个数:128
输出: 56 x 56 x 128

C3-1层是个卷积层,其输入输出结构如下:
输入: 56 x 56 x 128 滤波器大小: 3 x 3 x 128 滤波器个数:256
输出: 56 x 56 x 256

C3-2层是个卷积层,其输入输出结构如下:
输入: 56 x 56 x 256 滤波器大小: 3 x 3 x 256 滤波器个数:256
输出: 56 x 56 x 256

C3-3层是个卷积层,其输入输出结构如下:
输入: 56 x 56 x 256 滤波器大小: 3 x 3 x 256 滤波器个数:256
输出: 56 x 56 x 256

P3层是C3-3后面的池化层,其输入输出结构如下:
输入: 56 x 56 x 256 滤波器大小: 2 x 2 滤波器个数:256
输出: 28 x 28 x 256

C4-1层是个卷积层,其输入输出结构如下:
输入: 28 x 28 x 256 滤波器大小: 3 x 3 x 256 滤波器个数:512
输出: 28 x 28 x 512

C4-2层是个卷积层,其输入输出结构如下:
输入: 28 x 28 x 512 滤波器大小: 3 x 3 x 256 滤波器个数:512
输出: 28 x 28 x 512

C4-3层是个卷积层,其输入输出结构如下:
输入: 28 x 28 x 512 滤波器大小: 3 x 3 x 256 滤波器个数:512
输出: 28 x 28 x 512

P4层是C4-3后面的池化层,其输入输出结构如下:
输入: 28 x 28 x 512 滤波器大小: 2 x 2 滤波器个数:512
输出: 14 x 14 x 512

C5-1层是个卷积层,其输入输出结构如下:
输入: 14 x 14 x 512 滤波器大小: 3 x 3 x 512 滤波器个数:512
输出: 14 x 14 x 512

C5-2层是个卷积层,其输入输出结构如下:
输入: 14 x 14 x 512 滤波器大小: 3 x 3 x 512 滤波器个数:512
输出: 14 x 14 x 512

C5-3层是个卷积层,其输入输出结构如下:
输入: 14 x 14 x 512 滤波器大小: 3 x 3 x 512 滤波器个数:512
输出: 14 x 14 x 512

P5层是C5-3后面的池化层,其输入输出结构如下:
输入: 14 x 14 x 512 滤波器大小: 2 x 2 滤波器个数:512
输出: 7 x 7 x 512

F6层是个全连接层,其输入输出结构如下:
输入:4096
输出:4096

F7层是个全连接层,其输入输出结构如下:
输入:4096
输出:4096

F8层也是个全连接层,即输出层,其输入输出结构如下:
输入:4096
输出:1000

大致过程如 NG 老师的演示图:

396b0e4884e909469804ebe0da13baeb4a4078fb

从上述的 VGG 结构分析中,我们可以看到这种网络结构非常规整,2-2-3-3-3的卷积结构也非常利于编程实现。卷积层的滤波器数量的变化也存在明显的规律,由64到128再到256和512,每一次卷积都是像素成规律的减少和通道数成规律的增加。

VGG16 的简单实现

原本自己利用 Tensoflow 简单写了个 VGG16 的网络结构,但去谷歌一搜发现别人的代码写的实在太好了,以至于这里就不用自己代码展示 VGG16 了。编写的思路无非就是定义卷积过程、池化过程和全连接过程,然后将其封装到 VGG16 的模型函数中去,其中注意一些编写细节即可。

笔者自己写的部分代码截图:

cfb1dd51a732bdee6f5e7d5c0d5697c1e69407b2

GitHub 上大佬的开源实现:

https://gist.github.com/ksimonyan/211839e770f7b538e2d8#file-readme-md

5ced29c9f3f6823b8c5331ffbf45fcc4a7758a6f


原文发布时间为:2018-10-10本文作者:louwill本文来自云栖社区合作伙伴“ Python爱好者社区”,了解相关信息可以关注“ Python爱好者社区”。
相关文章
|
2月前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-LSTM-SAM网络时间序列预测算法。使用Matlab2022a开发,完整代码含中文注释及操作视频。算法结合卷积层提取局部特征、LSTM处理长期依赖、自注意力机制捕捉全局特征,通过粒子群优化提升预测精度。适用于金融市场、气象预报等领域,提供高效准确的预测结果。
|
3月前
|
机器学习/深度学习 数据采集 算法
基于WOA鲸鱼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB 2022a实现时间序列预测,采用CNN-GRU-SAM网络结构,结合鲸鱼优化算法(WOA)优化网络参数。核心代码含操作视频,运行效果无水印。算法通过卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征,全连接层整合输出。数据预处理后,使用WOA迭代优化,最终输出最优预测结果。
|
3月前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目使用MATLAB 2022a实现时间序列预测算法,完整程序无水印。核心代码包含详细中文注释和操作视频。算法基于CNN-LSTM-SAM网络,融合卷积层、LSTM层与自注意力机制,适用于金融市场、气象预报等领域。通过数据归一化、种群初始化、适应度计算及参数优化等步骤,有效处理非线性时间序列,输出精准预测结果。
|
2月前
|
机器学习/深度学习 数据采集 算法
基于WOA鲸鱼优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本内容介绍了一种基于CNN-LSTM-SAM网络与鲸鱼优化算法(WOA)的时间序列预测方法。算法运行于Matlab2022a,完整程序无水印并附带中文注释及操作视频。核心流程包括数据归一化、种群初始化、适应度计算及参数更新,最终输出最优网络参数完成预测。CNN层提取局部特征,LSTM层捕捉长期依赖关系,自注意力机制聚焦全局特性,全连接层整合特征输出结果,适用于复杂非线性时间序列预测任务。
|
3月前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a,展示了时间序列预测算法的运行效果(无水印)。核心程序包含详细中文注释和操作视频。算法采用CNN-GRU-SAM网络,结合灰狼优化(GWO),通过卷积层提取局部特征、GRU处理长期依赖、自注意力机制捕捉全局特征,最终实现复杂非线性时间序列的高效预测。
|
4月前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
4月前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
260 10
|
5月前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习中的卷积神经网络(CNN)
深入理解深度学习中的卷积神经网络(CNN)
298 10
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
深入理解深度学习中的卷积神经网络(CNN)##
在当今的人工智能领域,深度学习已成为推动技术革新的核心力量之一。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,因其在图像和视频处理方面的卓越性能而备受关注。本文旨在深入探讨CNN的基本原理、结构及其在实际应用中的表现,为读者提供一个全面了解CNN的窗口。 ##