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

您所在的位置:网站首页 vgg16各层参数个数 人工智能 深度学习第18讲:CNN经典论文研读之VGG网络及其tensorflow实现

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

2023-07-05 01:57| 来源: 网络整理| 查看: 265

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

 

 

VGG的网络结构

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

 

 

 

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

 

 

      其中 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 老师的演示图:

 

 

 

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

 

VGG16 的简单实现

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

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

 

 

 

GitHub 上大佬的开源实现:

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

 

 

 

 

 

 

 

 

 

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3