0
点赞
收藏
分享

微信扫一扫

【卷积神经网络】04-1VGG网络结构详解与原理分析



戳一戳!和我一起走进深度学习的世界

导读

之前,我们学习了LeNet和AlexNet,我想大家应该还是有比较深刻印象的,今天我们要来学习的是VGG,一个为卷积神经网络发展开辟的新领域的网络。


今天要分享这篇文章带我们一起了解VGG的概念和特点,VGG网络结构,VGG的优缺点以及VGG和Alex的对比


如果你想深入了解VGG对应的论文翻译,可以看这篇文章:



​​

【卷积神经网络】04-1VGG网络结构详解与原理分析_卷积核

​​

论文 | VGG:用于大规模图像识别的超深度卷积网络


如果你想更加深入了解技术讲解,那就让我们走进这篇文章,一起来了解一下吧!如果你有什么问题,或者有什么想法,欢迎评论与我一起沟通交流。





1 说在前面的话

1 VGG简述

1、VGG由来


VGG模型的名称来源于牛津大学的Oxford Visual Geometry Group,该小组隶属于1985年成立的Robotics Research Group,该Group研究范围包括了机器学习到移动机器人。


2、VGG 与 GoogLeNet


VGG和GoogLeNet是2014年ILSVRC竞赛的双雄,VGG模型是2014年ILSVRC竞赛的第二名,GoogLeNet是第一名。但是VGG模型在多个迁移学习任务中的表现要优于googLeNet。而且,从图像中提取CNN特征,VGG模型是首选算法。它的缺点在于,参数量有140M之多,需要更大的存储空间,而GoogLeNet远小得多。


后面我们会通过一幅图,让大家更清晰看到两个模型的差别。

2 相关文章

卷积神经网络系列文章兜兜转转,也更新了一些了。大家可以从这里更快速阅读相关的文章。


【深度学习基础系列】

  ​​一篇文章解决卷积运算中的尺寸问题​​

  ​​盘天盘地盘“直男”,激活函数不简单​​


【卷积神经网络系列】

▶  ​​01 卷积神经网络简介​​

▶  ​​02 LeNet-5原理及代码详解​​

▶  ​​03-1 AlexNet网络结构与原理分析​​

▶  ​​03-2 AlexNet网络搭建与输出​​


【相关论文】

▶  ​​AlexNet:ImageNet Classification with Deep CNN​​

▶  ​​Large Scale Distributed Deep Networks​​

▶  ​​Cooperative Initialization based DNN Training​​

▶  ​​VGG:用于大规模图像识别的超深度卷积网络​​


【目标检测系列】

▶  ​​YOLO v1 论文笔记 01​​

▶  ​​YOLO v1 论文笔记 02​​

▶  ​​YOLO v4 论文翻译​​

▶  ​​重磅!!!OpenCV4.4.0新鲜出炉!支持YOLO v4,SIFT免费使用​​

▶  ​​尝鲜!Windows下实现YOLOv4物体检测​​

▶  ​​Python+OpenCV4实现YOLO v4物体检测​​

▶  ​​视频教程:基于OpenCV4.4的YOLO4实战教程​​


接下来,让我们一起走进今天的内容吧!

2 VGG特点

VGG虽然只取得了第二名,但是它提出了很多有意义的概念。总结一下就是:小核深网络。

1 小卷积核

VGG将所有的卷积核都换成了3×3,极个别使用1×1。


我们要考虑这三个问题:


能不能换?
怎么换?
为什么要换?


1、首先我们来看第一个问题,能不能换?


我们看最初的两个卷积神经网络LeNet和AlexNet,他们都是将一个n×n×c的图像最终变成了1×1×k的矩阵。其中n表示的是输入图像的尺寸(行与列),c表示图像的通道数(深度),取值为1或3,k表示的是最终分类的个数。


也就是说我们可以把卷积神经网络的操作理解为:通过一系列操作,将一个图像的像素数据经过运算得到不同类别的分数(置信度)。我们只要能得到正确的分类分数即可,具体的操作细节,可以有所调整。所以说,我们是可以更换卷积核的大小的。


2、知道可以换,怎么换呢?


既然要达到上面的要求,我们就可以改动参数层,即卷积层和全连接层,卷积层的主要目的是提取特征,全连接层的主要目的是特征融合。卷积层一般都会跟着激活层,使得模型可以非线性分类;几个卷积层后面会跟着池化层,为了降低算法的运算量。


所有我们可以基于上面的去进行改动参数层,然后要保证,卷积操作要能够遍历到所有的像素,运算不能越界。这样我们就可以对网络进行修改。


3、那为什么要换呢?


既然要换,肯定是因为换完之后,能够带来好处。


首先好处就是小卷积核参数量更少,论文中提到,两个3×3的卷积核就可以替换一个5×5的卷积核,两个3×3的卷积核,如果深度为d,那么参数的个数就为2*3*3*d = 18d,但一个5×5的卷积核的参数为5*5*d = 25d,参数减少了将近1/3。我们也可以推导出,按照这种替换方式,越小的卷积核,卷积参数数量就越少,卷积运算就越少。1×1无法获取上下文像素的联系,也就没法很好地提取特征,所以就几乎全方面使用3×3代替。在配置C中,采用了一些1×1的卷积核,后面我们会专门讲1×1卷积核的作用。


其次,使用小卷积核代替大卷积核,可以引入更多非线性,分类效果更好。比如一个5×5的卷积核,只进行一次非线性变换,而两个3×3的卷积核,则经过两次非线性变换。


其次一个好处,大家看后面的内容会发现,VGGNet的结构非常简洁,整个网络都使用了同样大小的卷积核尺寸,这样我们就可以让定义的模型更加规范化,也可以将卷积神经网络更加模块化。这在我们以后的代码中也会体现出来。




2 小池化核

VGG全部使用2×2的卷积核,卷机步长为1。可以使池化后的特征图行列缩小为原来的1/2。


小池化核是将四个数据变为一个数据,每个数据最多访问两遍,相比于之前的3×3,也极大的提升了算法效率。

3 全连接转卷积

全连接转卷积的操作主要是在测试的时候,目的是为了提升效率。使用卷积也会增加整体网络的感受野,捕获更多上下文。具体的内容,大家可以深入阅读我前面对原论文的翻译:



​​

【卷积神经网络】04-1VGG网络结构详解与原理分析_卷积核

​​

​​论文 | VGG:用于大规模图像识别的超深度卷积网络​​


2 VGG结构层次

学习VGG的时候,我们经常会看到这三幅图。


第一幅图是针对于卷积参数的表格描述:


【卷积神经网络】04-1VGG网络结构详解与原理分析_卷积_03


第二幅图是图像化的VGG结构(立体图,以VGG-16为例)


【卷积神经网络】04-1VGG网络结构详解与原理分析_卷积核_04


第三幅图是图像化的VGG参数(平面图)


【卷积神经网络】04-1VGG网络结构详解与原理分析_卷积_05


不管是哪种表示方法,其结构都是一致的,考虑到VGG模型比较多,我们使用VGG-16来做讲解。


首先要说明,VGG-16不是有16层,而是16个权重层。VGG-16的全部层数如下:


13个卷积层,也就是表中的conv3-XXX。


3个全连接层,也就是表中的FC-XXXX。


1个输入层,5个池化层(最大池化),一个soft-max激活层。


其中,卷积层和全连接层是有权重参数的,也就是一共有16个带权重的层,这就是16的由来。为了方便大家对结构有更好的理解,我们将VGG分为不同的块,每一块包含多层,分不同的块的原则是:将卷积(线性整流)-池化为模块进行分层。


VGG-16的模型分块如下:




第一块:包括输入层、两个卷积层(卷积后需要ReLU激活)、一个池化层。


第二块:包括两个卷积层(卷积后需要ReLU激活)、一个池化层。


第三块:包括三个卷积层(卷积后需要ReLU激活)、一个池化层。


第四块包括三个卷积层(卷积后需要ReLU激活)、一个池化层。


第五块:包括三个卷积层(卷积后需要ReLU激活)、一个池化层。


第六块:包括三个全连接层(需要ReLU激活)、一个softmax层。




后面,我们会更加细致讲解其具体的参数,因为每次卷积操作之后会有ReLU激活,所以我们在标题中就不再强调。


1 第一块:输入+2*卷积+池化

第一块是VGG的开头,包括下面红色框中的四层:


【卷积神经网络】04-1VGG网络结构详解与原理分析_卷积_06


输入图像的尺寸为224×224×3。


1、两次卷积层的卷积操作


首先要在四边做一个像素的边缘填充,一像素边缘填充是每个卷积操作前所必要的,这是为了卷积后的图像长和宽和卷积前是一致的。后面也是这样,我们就不再过多说明。使用64个3×3×3的卷积核对图像进行卷积,卷积的步长为1。这样得到的特征图的大小为224×224×64。得到特征图后,使用ReLU对特征图进行激活。


做一像素边缘填充后,再使用64个3×3×64的卷积核对图像进行卷积,卷积的步长为1。这样得到的特征图的大小为224×224×64。得到特征图后,使用ReLU对特征图进行激活。


2、池化层的池化操作


使用2×2的最大池化,池化的步长为2,得到的特征图的大小为112×112×64。


总结


总结一下,在这一块中:




输入图片尺寸:224×224×3


第一次卷积核与步长:3×3×3*64 / 1


卷积后特征图大小:224×224×64


第二次卷积核与步长3×3×64*64 / 1


卷积后特征图大小224×224×64


池化大小与步长:2×2 / 2


池化后特征图大小:112×112×64




2 第二块:2*卷积+池化

第二块包括下面红色框中的三层(完整在框里的三层):


【卷积神经网络】04-1VGG网络结构详解与原理分析_池化_07


上一层得到的特征图的尺寸为112×112×64。


1、两次卷积层的卷积操作


做一像素边缘填充后,使用128个3×3×64的卷积核对图像进行卷积,卷积的步长为1。这样得到的特征图的大小为112×112×128。得到特征图后,使用ReLU对特征图进行激活。


做一像素边缘填充后,再使用128个3×3×128的卷积核对图像进行卷积,卷积的步长为1。这样得到的特征图的大小为112×112×128。得到特征图后,使用ReLU对特征图进行激活。


2、池化层的池化操作


使用2×2的最大池化,池化的步长为2,得到的特征图的大小为56×56×128。


总结


总结一下,在这一块中:




上一层得到的特征图尺寸:112×112×64


第一次卷积核与步长:3×3×64*128 / 1


卷积后特征图大小:112×112×128


第二次卷积核与步长:3×3×128*128 / 1


卷积后特征图大小112×112×128


池化大小与步长:2×2 / 2


池化后特征图大小:56×56×128




3 第三块:3*卷积+池化

第三块包括下面红色框中的四层(完整在框里的四层):


【卷积神经网络】04-1VGG网络结构详解与原理分析_卷积_08


上一层得到的特征图的尺寸为56×56×128。


1、三次卷积层的卷积操作


做一像素边缘填充后,使用256个3×3×128的卷积核对图像进行卷积,卷积的步长为1。这样得到的特征图的大小为56×56×256。得到特征图后,使用ReLU对特征图进行激活。


做一像素边缘填充后,再使用256个3×3×256的卷积核对图像进行卷积,卷积的步长为1。这样得到的特征图的大小为56×56×256。得到特征图后,使用ReLU对特征图进行激活。


做一像素边缘填充后,再使用256个3×3×256的卷积核对图像进行卷积,卷积的步长为1。这样得到的特征图的大小为56×56×256得到特征图后,使用ReLU对特征图进行激活。


2、池化层的池化操作


使用2×2的最大池化,池化的步长为2,得到的特征图的大小为28×28×256。


总结


总结一下,在这一块中:




上一层得到的特征图尺寸:56×56×128


第一次卷积核与步长:3×3×128*256 / 1


卷积后特征图大小:56×56×256


第二次卷积核与步长:3×3×256*256 / 1


卷积后特征图大小56×56×256


第三次卷积核与步长:3×3×256*256 / 1


卷积后特征图大小:56×56×256


池化大小与步长:2×2 / 2


池化后特征图大小:28×28×256




4 第四块:3*卷积+池化

第四块包括下面红色框中的四层(完整在框里的四层):


【卷积神经网络】04-1VGG网络结构详解与原理分析_卷积核_09


上一层得到的特征图的尺寸为28×28×256


1、三次卷积层的卷积操作


做一像素边缘填充后,使用512个3×3×256的卷积核对图像进行卷积,卷积的步长为1。这样得到的特征图的大小为28×28×512。得到特征图后,使用ReLU对特征图进行激活。


做一像素边缘填充后,再使用512个3×3×512的卷积核对图像进行卷积,卷积的步长为1。这样得到的特征图的大小为28×28×512。得到特征图后,使用ReLU对特征图进行激活。


做一像素边缘填充后,再使用512个3×3×512的卷积核对图像进行卷积,卷积的步长为1。这样得到的特征图的大小为28×28×512。得到特征图后,使用ReLU对特征图进行激活。


2、池化层的池化操作


使用2×2的最大池化,池化的步长为2,得到的特征图的大小为14×14×512。


总结


总结一下,在这一块中:




上一层得到的特征图尺寸:28×28×256


第一次卷积核与步长:3×3×256*512 / 1


卷积后特征图大小:28×28×512


第二次卷积核与步长:3×3×512*512 / 1


卷积后特征图大小:28×28×512


第三次卷积核与步长3×3×512*512 / 1


卷积后特征图大小:28×28×512


池化大小与步长:2×2 / 2


池化后特征图大小:14×14×512




5 第五块:3*卷积+池化

第五块包括下面红色框中的四层(完整在框里的四层):



【卷积神经网络】04-1VGG网络结构详解与原理分析_卷积_10


上一层得到的特征图的尺寸为14×14×512


1、三次卷积层的卷积操作


做一像素边缘填充后,使用512个3×3×512的卷积核对图像进行卷积,卷积的步长为1。这样得到的特征图的大小为14×14×512。得到特征图后,使用ReLU对特征图进行激活。


做一像素边缘填充后,再使用512个3×3×512的卷积核对图像进行卷积,卷积的步长为1。这样得到的特征图的大小为14×14×512。得到特征图后,使用ReLU对特征图进行激活。


做一像素边缘填充后,再使用512个3×3×512的卷积核对图像进行卷积,卷积的步长为1。这样得到的特征图的大小为14×14×512。得到特征图后,使用ReLU对特征图进行激活。


2、池化层的池化操作


使用2×2的最大池化,池化的步长为2,得到的特征图的大小为7×7×512。


总结


总结一下,在这一块中:




上一层得到的特征图尺寸:14×14×512


第一次卷积核与步长:3×3×512*512 / 1


卷积后特征图大小:14×14×512


第二次卷积核与步长:3×3×512*512 / 1


卷积后特征图大小:14×14×512


第三次卷积核与步长:3×3×512*512 / 1


卷积后特征图大小:14×14×512


池化大小与步长:2×2 / 2


池化后特征图大小:7×7×512




6 第六块:3*全连接+softmax

第六块包括下面的四层(前两层为1×1×4096,后两层为1×1×1000):


【卷积神经网络】04-1VGG网络结构详解与原理分析_池化_11


上一层得到的特征图的尺寸为7×7×512


1、两次全连接层的全连接操作


首先使用4096个7×7×512的全连接矩阵对特征图像进行全连接,每个全连接矩阵和特征图运算会得到一个像素的数据,4096个全连接矩阵就会得到4096个像素的数据。这4096个像素的数据排成一行,这样得到的特征图的大小为1×1×4096。得到特征图后,使用ReLU对特征图进行激活。


然后使用4096个1×1×4096的全连接矩阵对特征图像进行全连接,也同样会得到4096个像素的数据。这4096个像素的数据排成一行,这样得到的特征图的大小为1×1×4096。得到特征图后,使用ReLU对特征图进行激活。


这两次全连接操作还有一个共同点,在原论文中有提到,每一个全连接层在计算过程中都使用了dropout归一化,dropout比例设为0.5


2、一次全连接层的分类操作


这一次的全连接的目的就是为了分类了,一共有1000类,所以使用1000个1×1×4096的全连接矩阵对特征图像进行全连接,会得到1000个像素的数据。这1000个像素的数据排成一行,这样得到的特征图的大小为1×1×1000。得到特征图后,使用ReLU对特征图进行激活。


2、softmax


softmax是用来做回归的,会得到所属分类的置信度。


总结


总结一下,在这一块中:




上一层得到的特征图尺寸:7×7×512


第一次全连接矩阵:7×7×512*4096


全连接后特征图大小:1×1×4096


第二次全连接矩阵:1×1×4096*4096


全连接后特征图大小1×1×4096


第三次全连接矩阵1×1×4096*1000


全连接后特征图大小1×1×1000


softmax后1×1×1000




3 VGG分析

讲完了VGG的特点及其结构,我们来对VGG做更加深入的分析,以及VGG与AlexNet的对比。

1 优点

前面说的VGG的特点,基本上就是它的优点了。我们在这里系统总结一下:


1、结构更加统一、整洁,方便代码实现
2、使用小卷积核,卷积参数数量少,卷积运算少,效果优于大卷积核
3、提供了卷积神经网络的一个方向:加深网络能够提升性能
4、通过实验验证了LRN层作用不大


对于第三条,网络也不是能无限加深,在后面,何恺明大神等人的ResNet发现,加深到一定程度不仅不会提升精度,还会导致退化。


当然,那个是后续,我们后面再说,在此之后,提出更多更深、更复杂的网络。

2 缺点

VGG也是有缺点的,下面这幅图一些同学可能见过:


【卷积神经网络】04-1VGG网络结构详解与原理分析_池化_12


大家明显感觉到了,VGG的圆半径明显很大,几乎远大于前面绝大多数的模型。


VGG模型大,主要是来源于其全连接层,其中第一个全连接层直接对7×7×512的特征图做全连接,用到了4096个全连接矩阵,单是这一步的操作,就用到了7×7×512×4096 = 102760448 = 98M (其中1M = 1024K,1K = 1024)个参数。


所以VGG的第一个缺点就是模型大,虽然卷机参数少,单是全连接引入了大量参数。


具体模型大小如何计算,我们在这里不做过多讲述,后面我们会专门讲解。


3 VGG与AlexNet

VGG是AlexNet后的经典之作,VGG开辟了卷积神经网络的一个新的方向:深网络+小卷积核。VGG可以说是在AlexNet上的更进一步,也进一步确定了卷积神经网络的基本结构。


VGG也对GoogLeNet的后续版本提供了经验,个人感觉,GoogLeNet是在第一个版本的基础上,借鉴了VGG和ResNet的思想不断优化得到的。


所以,VGG和AlexNet都是卷积神经网络发展里程碑的重要部分。VGG和GoogLeNet也再一次向世人证明,深度学习和卷积神经网络在视觉的应用带给世界的伟大变革!

4 敲黑板

VGG是卷积神经网络发展的重要成员,是每一个学习卷积神经网络的人必须要掌握的。


希望大家能够通过今天这篇文章,了解VGG的结构,了解VGG的特点以及优缺点,在未来的学习中,对自己搭建合适的网络提供一定的启发。


后续,我们会专门再用一篇文章来讲解代码实战。也感谢大家一直以来的支持,我会一直努力,为大家带来好的文章,让我们一起努力,共同营造一个好的学习和科研氛围吧!



AI与区块链技术

【卷积神经网络】04-1VGG网络结构详解与原理分析_卷积核_13

长按二维码关注













举报

相关推荐

0 条评论