VGGNet解析:VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION
按照Andrew Ng推荐的顺序,精读了第二篇深度学习的经典论文,下面记录一些文章中的关键点。
以VGG16为例, 输入是224x224x3的图像,下面是每一层的大小:
conv1_1 [32, 224, 224, 64]
conv1_2 [32, 224, 224, 64]
pool1 [32, 112, 112, 64]
conv2_1 [32, 112, 112, 128]
conv2_2 [32, 112, 112, 128]
pool2 [32, 56, 56, 128]
conv3_1 [32, 56, 56, 256]
conv3_2 [32, 56, 56, 256]
conv3_3 [32, 56, 56, 256]
pool3 [32, 28, 28, 256]
conv4_1 [32, 28, 28, 512]
conv4_2 [32, 28, 28, 512]
conv4_3 [32, 28, 28, 512]
pool4 [32, 14, 14, 512]
conv5_1 [32, 14, 14, 512]
conv5_2 [32, 14, 14, 512]
conv5_3 [32, 14, 14, 512]
pool5 [32, 7, 7, 512]
fc6 [32, 4096]
fc7 [32, 4096]
fc8 [32, 1000]
有一些关键点:
- 1x1的卷积的主要作用是线性变换。
- VGGNet中多个完全一样的3x3的卷积层堆叠,可以产生和大卷积核一样的效果但是参数量更少,但是却有更多的非线性变换,所以学习能力更强。
- 使用Mutlti-Scale的方法做数据增强,防止过拟合。
- 在预测时使用滑动窗口,并且取多尺度上的平均值作为最终预测值。
下面算一下参数数量:
输入:224*224*3
第一组:
conv3 - 64(卷积核的数量):kernel size:3 stride:1 pad:1
参数: (3*3*3)*64 =1728
conv3 - 64:kernel size:3 stride:1 pad:1
参数: (3*3*64)*64 =36864
pool2 kernel size:2 stride:2 pad:0
参数: 0
第二组:
conv3-128:kernel size:3 stride:1 pad:1
参数: (3*3*64)*128 =73728
conv3-128:kernel size:3 stride:1 pad:1
参数: (3*3*128)*128 =147456
pool2: kernel size:2 stride:2 pad:0
参数:0
第三组:
conv3-256: kernel size:3 stride:1 pad:1
参数:(3*3*128)*256=294912
conv3-256: kernel size:3 stride:1 pad:1
参数:(3*3*256)*256=589824
conv3-256: kernel size:3 stride:1 pad:1
参数:(3*3*256)*256=589824
pool2: kernel size:2 stride:2 pad:0
参数:0
第四组:
conv3-512:kernel size:3 stride:1 pad:1
参数:(3*3*256)*512 = 1179648
conv3-512:kernel size:3 stride:1 pad:1
参数:(3*3*512)*512 = 2359296
conv3-512:kernel size:3 stride:1 pad:1
参数:(3*3*512)*512 = 2359296
pool2: kernel size:2 stride:2 pad:0
参数: 0
第五组:
conv3-512:kernel size:3 stride:1 pad:1
参数:(3*3*512)*512 = 2359296
conv3-512:kernel size:3 stride:1 pad:1
参数:(3*3*512)*512 = 2359296
conv3-512:kernel size:3 stride:1 pad:1
参数:(3*3*512)*512 = 2359296
pool2:kernel size:2 stride:2 pad:0
参数:0
第六组:
FC: 4096 neurons
参数:7*7*512*4096 = 102760448
FC: 4096 neurons
参数:4096*4096 = 16777216
FC:1000 neurons
参数:4096*1000=4096000