深度学习模型之CNN(五)VGG网络详解及感受野的计算
VGG在2014年由牛津大学著名研究组VGG(Visual GeometryGroup)提出,斩获该年ImageNet竞赛中 Localization Task(定位任务)第一名和 classification Task(分类任务)第二名。
VGG原论文:VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION
VGG知识介绍
下图中显示了6个VGG网络的配置,6个配置中作者尝试了不同深度、是否使用LRN,以及卷积核大小为1为3的效果。实际使用过程中,我们常常使用D配置:一共有16层,其中包括13个卷积层,3个全连接层。
网络的亮点
- 通过堆叠多个3×3的卷积核来替代大尺度卷积核(为了减少所需的参数)
论文内提到,可以通过堆叠两个3×3的卷积核替代一个5×5的卷积核,堆叠三个3×3的卷积核替代一个7×7的卷积核(拥有相同的感受野)
什么是感受野
在卷积神经网络中,决定某一层输出结果中一个元素所对应的输入层的区域大小,被称作感受野(receptive filed)。通俗解释是:输出feature map上的一个单元对应输入层上的区域大小
例子如图所示,最下面是一个9 × 9 × 1的特征矩阵,首先通过卷积层Conv1(卷积核大小3 × 3,步距为2),通过下方的计算公式:( 9 - 3 + 0 )/ 2 + 1 = 4,因此得到第二层的特征矩阵大小为4 × 4 × 1;再通过最大池化下采样层MaxPool1(池化核大小2 × 2,步距为2),通过下方计算公式:( 4 - 3 + 1 )/ 2 + 1 = 2,因此得到第三层的特征矩阵大小为2 × 2 × 1。
\begin{flalign}
out_{size} = (in_{size} - F_{size} + 2P)/S + 1
\end{flalign}
那么,在第三层特征层当中的一个单元,在第二层中对应的一个感受野是2 × 2的区域,在第三层图中显示是一个5 × 5的感受野大小。
如何计算感受野?
- F( i ):第 i 层感受野;
- Stride:第 i 层的步距;
- Ksize:卷积核或采样核尺寸
论文内提到,可以通过堆叠两个3×3的卷积核替代一个5×5的卷积核,堆叠三个3×3的卷积核替代一个7×7的卷积核
注意:在VGG网络中,卷积层的步距默认为1
假设:一个特征矩阵通过3 × 3 × 3的卷积层后,所得到的Feature map,Feature map上的一个单位对应上一层的感受野为( 1 - 1 )× 1 + 3 = 3;如果再计算上上一层的感受野为( 3 - 1 )× 1 + 3 = 5;如果再计算上上上层的感受野为( 5 - 1 )× 1 + 3 = 7
也就是说,我们通过3 × 3 × 3的卷积核卷积之后所得到的的特征矩阵上的一个单位在原图上对应的感受野相当于是一个7 × 7的大小,那么也就与采用一个7 × 7的卷积核的大小所得到的的感受野是相同的
因此,当我们使用多个小的卷积核去堆叠就可以去替代一个大的卷积核,目的是为了节省网络训练参数的个数
7 × 7卷积核和3 × 3 × 3所需参数对比
假设输入输出channel为C,下方两个C分别表示卷积核的深度和组数
7 × 7卷积核所需参数 :7 × 7 × C × C = 49CC
3 × 3 × 3卷积核所需参数 :3 × 3 × C × C + 3 × 3 × C × C + 3 × 3 × C × C = 27CC
VGG网络架构
- input:224*224的RGB图片
- 通过2层3 × 3的卷积层、1层最大下采样池化层
- 再通过2层3 × 3的卷积层、1层最大下采样池化层
- 再通过3层3 × 3的卷积层、1层最大下采样池化层
- 再通过3层3 × 3的卷积层、1层最大下采样池化层
- 再通过3层3 × 3的卷积层、1层最大下采样池化层
- 连接3个全连接层
- 经过soft-max处理得到概率分布
补充参数:
- 表中的卷积核:默认stride为1、padding为1**(这样通过一个3 × 3的卷积核进行卷积之后,其输入输出的特征矩阵的高度和宽度不变)**。公式计算得证:( 3 - 3 + 2 )/ 1 + 1 = 3
- 最大下采样池化核:默认size为2、stride为2**(相当于将特征矩阵的高宽缩小为原来的一半)**
对照左边的图,进行更直观的理解
左边的图形,是根据右表中D模型进行绘制。图中黑色框代表:卷积层+激活函数;红色框代表:最大下采样操作;蓝色框代表:全连接层+激活函数;橙色框代表:softmax处理
- 首先,输入224×224×3的RGB彩色图像;
- 通过两层3×3的卷积核之后,得到224×224×64特征矩阵大小(stride为1、padding为1——长宽不变;表中标注conv3-64——采用卷积核个数为64,因此输出深度也为64);
- 紧接着进入到最大下采样操作, 将特征矩阵缩减为原来的一半,得到112×112×64特征矩阵大小;
- 通过两层3×3的卷积核之后(采用卷积核个数为128),得到112×112×128特征矩阵大小;
- 进入到最大下采样操作, 将特征矩阵缩减为原来的一半,得到56×56×128特征矩阵大小;
- 通过三层3×3的卷积核之后(采用卷积核个数为256),得到56×56×256特征矩阵大小;
- 进入到最大下采样操作, 将特征矩阵缩减为原来的一半,得到28×28×256特征矩阵大小;
- 通过三层3×3的卷积核之后(采用卷积核个数为512),得到28×28×512特征矩阵大小;
- 进入到最大下采样操作, 将特征矩阵缩减为原来的一半,得到14×14×512特征矩阵大小;
- 通过三层3×3的卷积核之后(采用卷积核个数为512),得到14×14×512特征矩阵大小;
- 进入到最大下采样操作, 将特征矩阵缩减为原来的一半,得到7×7×512特征矩阵大小;
- 进入全连接层,全连接层1和全连接层2所采用的节点个数都是4096,全连接层3有1000各节点,因为ImageNet的分类任务有1000个类别**(注意:最后一个全连接层不需要加ReLU激活函数,因为最后需要用到softmax函数来激活)**。
- 最后是一个softmax激活函数,将预测结果转化为概率分布
总结
本节课主要讲解CGG16的网络结构,以及拓展感受野的知识点,下节课将会使用Pytorch去搭建VGG16网络。