深度学习第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爱好者社区”。
相关文章
|
5月前
|
机器学习/深度学习 人工智能 运维
网管不再抓头发:深度学习教你提前发现网络事故
网管不再抓头发:深度学习教你提前发现网络事故
139 2
|
2月前
|
机器学习/深度学习 资源调度 算法框架/工具
AI-ANNE: 将神经网络迁移到微控制器的深度探索——论文阅读
AI-ANNE框架探索将深度学习模型迁移至微控制器的可行路径,基于MicroPython在Raspberry Pi Pico上实现神经网络核心组件,支持本地化推理,推动TinyML在边缘设备中的应用。
189 10
|
1月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
2月前
|
机器学习/深度学习 边缘计算 算法
SEENN: 迈向时间脉冲早退神经网络——论文阅读
SEENN提出一种时间脉冲早退神经网络,通过自适应调整每个样本的推理时间步数,有效平衡脉冲神经网络的准确率与计算效率。该方法基于置信度判断或强化学习策略,在保证高精度的同时显著降低能耗与延迟,适用于边缘计算与实时处理场景。
163 13
|
2月前
|
机器学习/深度学习 缓存 算法
2025年华为杯A题|通用神经网络处理器下的核内调度问题研究生数学建模|思路、代码、论文|持续更新中....
2025年华为杯A题|通用神经网络处理器下的核内调度问题研究生数学建模|思路、代码、论文|持续更新中....
388 1
|
4月前
|
机器学习/深度学习 人工智能 算法
Wi-Fi老是卡?不如试试让“深度学习”来当网络管家!
Wi-Fi老是卡?不如试试让“深度学习”来当网络管家!
272 68
|
3月前
|
机器学习/深度学习 算法 数据库
基于GoogleNet深度学习网络和GEI步态能量提取的步态识别算法matlab仿真,数据库采用CASIA库
本项目基于GoogleNet深度学习网络与GEI步态能量图提取技术,实现高精度步态识别。采用CASI库训练模型,结合Inception模块多尺度特征提取与GEI图像能量整合,提升识别稳定性与准确率,适用于智能安防、身份验证等领域。
|
6月前
|
人工智能 算法 异构计算
阿里云基础网络技术5篇论文入选全球网络顶会NSDI
近日,阿里云基础网络技术5篇论文被NSDI 2025主会录用。研究涵盖大模型训练网络故障诊断、仿真、容器网络性能诊断、CDN流控算法智能选择及GPU解耦推理优化等领域。其中,《Evolution of Aegis》提出增强现有体系+训练过程感知的两阶段演进路线,显著降低故障诊断耗时;《SimAI》实现高精度大模型集群训练模拟;《Learning Production-Optimized Congestion Control Selection》通过AliCCS优化CDN拥塞控制;《Prism》设计全新GPU解耦推理方案;《ScalaCN》解决容器化RDMA场景性能问题。
286 7
阿里云基础网络技术5篇论文入选全球网络顶会NSDI
|
6月前
|
canal 负载均衡 智能网卡
阿里云洛神云网络论文入选SIGCOMM'25主会,相关实习生岗位火热招聘中
阿里云飞天洛神云网络的两项核心技术Nezha和Hermes被SIGCOMM 2025主会录用。Nezha通过计算网络解耦实现vSwitch池化架构,大幅提升网络性能;Hermes则提出用户态引导I/O事件通知框架,优化L7负载均衡。这两项技术突破解决了云网络中的关键问题,展现了阿里云在网络领域的领先实力。
1079 2

热门文章

最新文章

下一篇
oss云网关配置