VGG16网络结构
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
總結
- 上一篇: 求1到20的阶乘之和
- 下一篇: WPS文字教你制作米字本即用于临摹练字的