VGGNet模型有A-E五种结构网络,深度分别为11,11,13,16,19,其中VGG16和VGG19较为典型。VGG网络结构如下图所示。
VGG16介绍:
在卷积层1(conv3_64),卷积层2(conv3_128),卷积层3(conv3_256),卷积层4(conv3_512)
分别有64个,128个,256个,512个3X3卷积核,在每两层之间有池化层stride为2的2X2池化矩阵(maxpool)。在卷积层5(conv3_512)后有全连接层,再之后是soft-max预测层。
(1)conv3-64 :是指第三层卷积后维度变成64,同样地,conv3-128指的是第三层卷积后 维度变成128;
(2)input(224X224 RGB image)指的是输入图像大小为224X224的彩色图像,通道为3, 即224X224X3
(3)maxpool 是指最大池化,在VGG16中,pooling采用的是2x2的最大池化方法;
(4)FC-4096 指的是全连接层中有4096个节点,同样地,FC-1000为该层全连接层有1000 个节点;
(5)padding指的是对矩阵在外边填充n圈,padding=1即外边缘填充1圈,5x5大小的矩 阵,填充一圈后变成7x7大小; 在进行卷积操作的过程中,处于中间位置的数值容易 被进行多次的提取,但是边界数值的特征提取次数相对较少,为了能更好的把边界数 值也利用上,所以给原始数据矩阵的四周都补上一层0,这就是padding操作。
(6)vgg16每层卷积的滑动步长stride=1,padding=1。
从上图可以看出VGG16由13个卷积层+3个全连接层=16层构成,过程为:
(1)输入224*224*3的图片
(2)conv1_1+conv1_2+pool1:经过64个3*3卷积核的两次卷积后,采用一次max pooling。 经过第一次卷积后有3*3*3*64=1728个训练参数;第二次卷积后有3*3*64*64=36864 个训练参数,大小变为112*112*64 (池化层采用尺寸为2X2,stride=2,max的池化方 式,使得池化后的层尺寸长宽为未池化前的1/2)
(3)conv2_1+conv2_2+pool2:经过两次128个3*3卷积核卷积后,采用一次max pooling, 有3*3*128*128=147456个训练参数,大小变为56*56*128
(4)conv3_1+conv3_2+conv3_3+pool3:经过三次256个3*3卷积核卷积后,采用一次max pooling,有3*3*256*256=589824个训练参数,大小变为28*28*256
(5)conv4_1+conv4_2+conv4_3+pool4:经过三次512个3*3卷积核卷积后,采用一次max
pooling,有3*3*512*512=2359296个训练参数,大小变为14*14*512
(6)conv5_1+conv5_2+conv5_3+pool5:经过三次512个3*3卷积核卷积后,采用一次max
pooling,有3*3*512*512=2359296个训练参数,大小变为7*7*512
(7)利用卷积的方式模拟全连接层,效果等同,输出net为(1,1,4096)。共进行两次。
(8)利用卷积的方式模拟全连接层,效果等同,输出net为(1,1,1000)。
最后输出的就是每个类的预测。
数据与训练
1.输入处理
如果要使用224x224的图作为训练的输入,用S表示图片最小边的值,当S=224时这个图就直接使用,直接将多余的部分减掉;对于S远大于224的,模型将对图像进行单尺度和多尺度的剪裁,通过剪切这个图片中包含object的子图作为训练数据。
2.训练方式
采用带动量的小批量梯度下降法,来优化目标函数,并且当学习效果较为满意时,最初加入的学习率权重衰减系数会起作用,会减小学习率,缓慢达到最优解。
3.初始化
若为浅层,则先随机初始化后训练,深层采用浅层训练后的数据作为初始化数据,中间层则随机初始化。
特色
1、卷积层均采用相同的卷积核参数,这样就能够使得每一个卷积层(张量)与前一层(张 量)保持相同的宽和高;
2、池化层均采用相同的池化核参数,池化层采用尺寸为2X2,stride=2,max的池化方式, 使得池化后的层尺寸长宽为未池化前的1/2;
3、利用小尺寸卷积核等效大尺寸卷积核,2个3X3卷积核的感受野与1个5X5卷积核相当,3 个3X3卷积核与1个7X7卷积核相当,故在特征提取效果相当时,多个小卷核与大卷积核 相比,学习参数更少,计算量较小,训练更加快速,还能增加网络的深度,提升模型性 能。
卷积后的feature map大小为N:
N=(W-F+2P)/S+1
W:输入图片的大小W*W
F:Filter(滤波器)大小F*F ->=卷积核大小
S:步长
P:padding的像素数
假设feature map是28×28的,假设卷记的步长step=1,padding=0:
使用一层5X5卷积核
由(28−5)/1+1=24可得,输出的feature map为24X24
使用两层3X3卷积核
第一层,由(28−3)/1+1=26可得,输出的feature map为26X26
第二层,由(26−3)/1+1=24可得,输出的feature map为24X24
故最终尺寸结果相等,用3X3卷积核代替7X7卷积核同理。
VGG网络搭建
VGG网络可以分为两个部分:提取特征网络结构和分类网络结构
不同网络结构配置
#cfgs字典文件,字典的每个key代表每个模型的配置文件
cfgs = {'vgg11': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'], #列表中的数字代表卷积层卷积核的个数,M代表池化层的结构(maxpool)'vgg13': [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'],'vgg16': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'],'vgg19': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M'],
}
特征提取网络
def make_features(cfg: list): #生成提取特征网络(list类型)layers = [] #定义一个空列表用来盛放定义的每一层结构in_channels = 3 #输入的图片是RGB图像for v in cfg: #for循环来遍历配置列表if v == "M": #如果配置元素是M,那么说明该层为最大池化层,那么就创建一个最大池化下采样层layers += [nn.MaxPool2d(kernel_size=2, stride=2)]else: #否则该层为卷积层,则创建卷积操作conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1)layers += [conv2d, nn.ReLU(True)] #将定义的卷积层和ReLU激活函数拼接并添加到layers列表中in_channels = v #当特征矩阵通过该层卷积后其输出变成vreturn nn.Sequential(*layers) #将列表通过非关键字参数的形式传入(*代表通过非关键字形式,sequential要求)
分类网络
self.classifier = nn.Sequential( #生成分类网络结构nn.Linear(512*7*7, 4096), #展平处理nn.ReLU(True),nn.Dropout(p=0.5),nn.Linear(4096, 4096),nn.ReLU(True),nn.Dropout(p=0.5),nn.Linear(4096, num_classes))
参考:
(1条消息) VGG预训练模型网络结构详解——以VGG16为例_飞天长虹的博客-CSDN博客_vgg16预训练模型https://blog.csdn.net/fan_weiqiang/article/details/116545559?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165061995916782248580763%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165061995916782248580763&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-116545559.142%5Ev9%5Epc_search_result_control_group,157%5Ev4%5Econtrol&utm_term=vgg16%E7%BD%91%E7%BB%9C%E7%BB%93%E6%9E%84%E8%AF%A6%E8%A7%A3&spm=1018.2226.3001.4187
(1条消息) VGG-16网络结构详解_20Xx太空漫游的博客-CSDN博客_vgg16网络结构https://blog.csdn.net/qq_45998041/article/details/114626473?ops_request_misc=&request_id=&biz_id=102&utm_term=vgg16%E7%BD%91%E7%BB%9C%E7%BB%93%E6%9E%84%E8%AF%A6%E8%A7%A3&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-114626473.142%5Ev9%5Epc_search_result_control_group,157%5Ev4%5Econtrol&spm=1018.2226.3001.4187