目录
1. VGG 的结构
2. VGG 的网络细节
3. VGG 的代码实现
1. VGG 的结构
牛津大学的视觉几何组(Visual Geometry Group)设计了 VGGNet(也称为 VGG),一种经典的卷积神经网络 (CNN) 架构。在 2014 年 ILSVRC 分类任务中,VGG 取得了第二名的成绩。现在过去多年,VGG 仍然被广泛应用在图像识别、语音识别、机器翻译、机器人等领域。
VGG 具有 16 层(VGG-16)和 19 层(VGG-19)的卷积神经网络,两者的结构类似,接下来详细解读 VGG-16 的结构,VGG-16 由 13 个卷积层和 3 个全连接层组成(层数是计算全连接层的卷积层个数),如下图所示,图中 conv 为卷积层,pool 为池化层,最后三个 fc 4096 为全连接层。
VGG16相比之前网络的改进是3个3*3卷积核来代替7x7卷积核,2个3*3卷积核来代替5*5卷积核,这样做的主要目的是在保证具有相同感知野的条件下,减少参数,提升了网络的深度。
比如,3个步长为1的卷积核(3*3)的层层叠加,其参数总量为 3*(9*C^2) ,如果直接使用7*7的卷积核,其参数总量为 49*C^2 ,这里 C 指的是输入和输出的通道数。很明显,27*C^2小于49*C^2,即减少了参数。
2. VGG 的网络细节
VGG-16 采用了五组卷积与三个全连接层,最后使用 Softmax 做分类。
VGG-16 有个显著的特点:每次经过池化层后特征图的尺寸减小一倍,而通道数则增加一倍(最后一个池化层除外)。每一层的卷积层的细节如表格所示:
回顾特征图的计算
O 是输出图像,I 是输入图像,
P 是 padding,K 是 kernel size,S 是步长。
输出特征图大小计算公式 O = (I + 2P – K) / S + 1
参数量:K*K* 输入的 channel * 输出的 channel
3. VGG 的代码实现
VGG-16 的五组卷积相似,在撰写代码的时候,可以建一个 Layer 类,通过循环添加每个层的顺序执行,请查看下面的代码 make_layers 函数。