1、總體的體系結構
訓練階段,輸入為固定的224x224的RGB圖像。唯一做的預處理是對每個像素減去訓練集中的RGB均值。卷積核使用3x3,在我們的一種配置中也有使用1x1的情況,這可以看作是對輸入通道的一個線性變換(其後面接一個非線性變換)。步長固定為一像素。padding用來保持卷積後圖像的原來大小分辨率。空間池化包含五個最大池化層,它們接在部分卷積層的後面,(并不是所有卷積層都接有最大池化層)。最大池化層為2x2的滑動視窗,滑動步長為2。在一整堆卷積層後接了三個全連接配接層,前兩個全連接配接層各有4096個通道,第三個在用來做1000類的ILSVRC分類,是以包含1000個通道(每個通道代表一類)。最後一層是一個soft-max層。全連接配接層的配置在所有的網絡中一緻。 所有隐層都是使用非線性修正(ReLu)。
padding用來保持卷積後圖像的原來大小分辨率,為什麼需要保持卷積後圖像和原圖像大小一緻??
卷積操作存在兩個問題:
1、圖像越來越小;
2、圖像邊界資訊丢失,即有些圖像角落和邊界的資訊發揮作用較少。
是以需要padding
2、網絡具體配置
接下來我們将按網站名稱(A-E)來提及網絡。所有配置都遵循剛才提出的通用設計,并且僅是深度不同:從網絡A中的11個權重層(8個卷積層和3個FC層)到網絡E中的19個權重層(16個卷積層和3個FC層)。卷積層的寬度(通道數)相當小,從第一層中的64開始,然後在每個最大池化層之後增加2倍,直到達到512。
具體如圖:

不同結構
VGG一共提供了6個網絡版本,一次探究不同網絡的效果對比。下面簡要分析一下各個版本的網絡配置細節:
結構 A:與 AlexNet 類似,卷積層分為5個stage,3個全連接配接層,不同的是,卷積層用的都是3x3大小的卷積核;
結構 A-LRN:保留 AlexNet 中的 LRN 操作,其他結構與A相同;
結構 B:在 A 的 stage2 和 stage3 分别增加一個3x3的卷積層,共有10個卷積層了;
結構C:在 B 的基礎上,stage3,stage4,stage5 分别增加一個1x1的卷積層,有13個卷積層,總計16層;
結構D:在 C 的基礎上,stage3,stage4,stage5 分别增加一個3x3的卷積層,有13個卷積層,總計16層;
結構E:在 D 的基礎上,stage3,stage4,stage5 分别再增加一個3x3的卷積層,有16個卷積層,總計19層。
全連接配接層
特征圖的寬高從512後開始進入全連接配接層,因為全連接配接層相比卷積層更考慮全局資訊,将原本有局部資訊的特征圖(既有width,height還有channel)全部映射到4096次元。也就是說全連接配接層前是7x7x512次元的特征圖,估算大概是25000,這個全連接配接過程要将25000映射到4096,大概是5000,換句話說全連接配接要将資訊壓縮到原來的五分之一。VGGNet有三個全連接配接,【我】的了解是作者認為這個映射過程的學習要慢點來,太快不易于捕捉特征映射來去之間的細微變化,讓backprop學的更慢更細一些(更逐漸)。
換句話說,次元在最後一個卷積後達到7x7x512,即大概25000,緊接着壓縮到4096維,可能是作者認為這個過程太急,又接一個fc4096作為緩沖,同時兩個fc4096後的relu又接dropout0.5去過渡這個過程,因為最後即将給1k-way softmax,是以又接了一個fc1000去降低softmax的學習壓力。
feature map次元的整體變化過程是:先将local資訊壓縮,并分攤到channel層級,然後無視channel和local,通過fc這個變換再進一步壓縮為稠密的feature map,這樣對于分類器而言有好處也有壞處,好處是将local資訊隐藏于/壓縮到feature map中,壞處是資訊壓縮都是有損失的,相當于local資訊被破壞了(分類器沒有考慮到,其實對于圖像任務而言,單張feature map上的local資訊還是有用的)。
softmax層(最後一層用于分類)
https://www.cnblogs.com/alexanderkun/p/8098781.html
3、訓練和測試:
名額:
ImageNet 圖像分類大賽評價标準采用 top-5 錯誤率,或者top-1錯誤率,即對一張圖像預測5個類别,隻要有一個和人工标注類别相同就算對,否則算錯。
Top-1 = (正确标記 與 模型輸出的最佳标記不同的樣本數)/ 總樣本數;
Top-5 = (正确标記 不在 模型輸出的前5個最佳标記中的樣本數)/ 總樣本數;
top1-----就是你預測的label取最後機率向量裡面最大的那一個作為預測結果,如過你的預測結果中機率最大的那個分類正确,則預測正确。否則預測錯誤
top5-----就是最後機率向量最大的前五名中,隻要出現了正确機率即為預測正确。否則預測錯誤。
訓練使用的是帶有動量的mini-batch梯度下降的方法,batch大小為256,動量設定為0.9,訓練正則項所乘的參數設定為5*10-4(10的-4次方),dropout率設定為0.5,learning rate設定為10的-2次方。實驗訓練了370k次(74個epochs)。
論文提到網絡權重的初始化很重要,初始化不好了可能會讓學習停止。論文是這樣做的,先對A網絡進行随機初始化參數進行訓練,然後,将訓練好的A網絡的參數去初始化後邊深層網絡的前4層以及全連接配接層,剩下的層是用均值為0,方差為0.01的正态分布去随機初始化的,并且biases初始化為0。并且論文裡提到,可能存在不需要預訓練參數直接進行初始化參數的方法,需要進一步探索。
為了獲得224x224的輸入圖像,論文裡是對原圖進行各向同性的放縮後,采取随機裁剪的方式獲得的,使用S代表放縮後的圖像的最短邊,是以S>=224,為了擴充資料集,裁剪後的圖像進行了随機的水準翻轉以及随機的RGB顔色轉換。
同時呢,論文的還采用了多種尺度的訓練方式,就是将原始圖檔采用不同的S放縮後進行裁剪訓練,比如讓S=256,S=384分别訓練,還有一種動态改變S的方式,就是給定S的範圍[Smin,Smax],讓每張訓練圖檔随機選取S進行訓練,這樣相當于通過尺度抖動來增強資料。
訓練圖像尺寸選擇
S是訓練圖像的最小邊。訓練尺度
Q是測試圖像的最小邊。測試尺度
對原始圖檔進行等比例縮放,使得S大于224,然後在圖檔上随機提取224x224視窗,進行訓練。
單一尺度訓練:固定 S 的大小,對應了單一尺度的訓練,訓練多個分類器。訓練S=256和S=384兩個分類器,其中S=384的分類器用S=256的權重進行初始化;
多尺度(Multi-scale)訓練(尺度抖動):直接訓練一個分類器,每次資料輸入的時候,每張圖檔被重新縮放,縮放的短邊S随機從[256,512]中選擇一個,也可以認為通過尺度抖動(scale jittering)進行訓練集增強。圖像中的目标可能具有不同的大小,是以訓練時認為這是有用的。
3.1 、單尺度評估
首先将訓練圖像縮放到最小邊長度的方形,設縮放後的訓練圖像的尺寸為S×S。網絡訓練時對訓練圖像進行随機裁剪,裁剪尺寸為網絡的輸入尺寸224×224。如果S=224,則輸入網絡的圖像就是整個訓練圖像;如果S>224,則随機裁剪訓練圖像包含目标的部分。
各結構效果對比分析:
A 與 A-LRN 比較:A-LRN 結果沒有 A 好,說明 LRN 作用不大;
A 與 B, C, D, E 比較:A 是這當中層數最少的,相比之下 A 效果不如 B,C,D,E,說明層數越深越好;
B 與 C 比較:增加 1x1 卷積核,增加了額外的非線性提升效果;
C與D比較:3x3 的卷積核(結構D)比 1x1(結構C)的效果好。盡管深度相同,配置C(包含三個1×1卷積層)比在整個網絡層中使用3×3卷積的配置D更差。這表明,雖然額外的非線性确實有幫助(C優于B),但也可以通過使用具有非平凡感受野(D比C好)的卷積濾波器來捕獲空間上下文。1x1的卷積也是很有效的,但是沒有3x3的卷積好,大一些的卷積核可以學習更大的空間特征。
我們還将網絡B與具有5×5卷積層的淺層網絡進行了比較,淺層網絡可以通過用單個5×5卷積層替換B中每對3×3卷積層得到。測量的淺層網絡top-1錯誤率比網絡B的top-1錯誤率(在中心裁剪圖像上)高7%,這證明了具有小濾波器的深層網絡優于具有較大濾波器的淺層網絡。
訓練時的尺寸抖動(訓練圖像大小S∈[256,512]S∈[256,512])得到的結果好于固定尺寸,這證明了通過尺度抖動進行的訓練集增強确實有助于捕獲多尺度圖像統計。
3.2、多尺度評估
對同一張測試圖像,将其縮放到不同的尺寸進行測試,然後取這幾個測試結果的平均值,作為最終的結果(有點像內建學習,所不同的是,這裡是測試圖像的尺寸不同)。使用了三種尺寸的測試圖像:Q表示測試圖像,S表示訓練是圖像尺寸:Q=S−32;Q=S+32,前面兩種是針對訓練圖像是固定大小的,對于訓練時圖像尺寸在一定範圍内抖動的,則可以使用更大的測試圖像尺寸。Q={Smin,0.5(Smin+Smax),Smax}Q={Smin,0.5(Smin+Smax),Smax}.
效果分析:
訓練圖像尺度抖動優于使用固定最小邊S
最後,訓練時的尺度抖動得到了與固定最小邊(或)的圖像訓練相比更好的結果,即使在測試時使用單尺度。這證明了通過尺度抖動進行的訓練集增強确實有助于捕獲多尺度圖像統計。
在訓練時,可以使用多尺度抖動的訓練圖像,其精度好于固定尺寸的訓練集。
3.3、稠密和多裁剪圖像評估
Dense(密集評估),即指全連接配接層替換為卷積層(第一FC層轉換到7×7卷積層,最後兩個FC層轉換到1×1卷積層)
最後得出一個預測的score map,再對結果求平均。
測試方法首先将網絡轉化為全卷積網絡,第一個全連接配接層轉為7×7的卷積層,後兩個全連接配接層轉化為1×1的卷積層。
結果得到的是一個N×N×M的結果,稱其為類别分數圖,其中M等于類别個數,N的大小取決于輸入圖像尺寸Q,
計算每個類别的最終得分時,将N×N上的值求平均,此時得到1×1×M的結果,此結果即為最終類别分數,這種方法文中稱為密集評估。
全卷積層後面仔細介紹
multi-crop,即對圖像進行多樣本的随機裁剪,将得到多張裁剪得到的圖像輸入到網絡中,最終對所有結果平均。
這種測試方法,和訓練過程類似,不用将網絡轉化為全卷積網絡,是從Q×Q大小的圖中随機裁剪224×224的圖作為輸入,
文中裁剪了50個圖像,而每個圖像之前縮放為三個尺寸,是以每個圖像的測試圖像數目變為150個,最終結果就是在150個結果中取平均。
但是作者指出,該方法效率低下,并且不能證明比第一種方法效果好。
ConvNet評估技術比較。在所有的實驗中訓練尺度S從[256;512]采樣,三個測試适度Q考慮:{256, 384, 512}
在上表中,我們将稠密ConvNet評估與多裁剪圖像評估進行比較。我們還通過平均其softmax輸出來評估兩種評估技術的互補性。可以看出,使用多裁剪圖像表現比密集評估略好,而且這兩種方法确實是互補的,因為它們的組合優于其中的每一種。
multi-crops(随機裁剪)相當于對于dense evaluatio(稠密)的補充,原因在于,兩者在邊界的處理方式不同:multi-crop相當于padding補充0值,而dense evaluation相當于padding補充了相鄰的像素值,并且增大了感受野,是以捕獲了更多的圖像内容資訊。
multi-crop存在重複計算帶來的效率的問題
由于不同的卷積邊界條件,多裁剪圖像評估是密集評估的補充:當将ConvNet應用于裁剪圖像時,卷積特征圖用零填充,而在密集評估的情況下,相同裁剪圖像的填充自然會來自于圖像的相鄰部分(由于卷積和空間池化),這大大增加了整個網絡的感受野,是以捕獲了更多的圖像内容資訊。multi-crop存在重複計算帶來的效率的問題
雖然我們認為在實踐中,多裁剪圖像的計算時間增加并不足以證明準确性的潛在收益。但使用大量的裁剪圖像可以提高準确度,因為與全卷積網絡相比,它使輸入圖像的采樣更精細。
除此之外,本文還采取了全卷機網絡和随機裁剪相結合的方法,即兩者結果取平均。其能大大增加網絡的感受野,是以捕獲更多的上下文資訊,實驗中也發現這種方法表現最好。
在訓練時,可以使用多尺度抖動的訓練圖像,其精度好于固定尺寸的訓練集。
測試時,使用多裁剪和密集評估(卷積層替換全連接配接層)像結合的方法
4、VGG優勢
(1)使用了更小的3*3卷積核,和更深的網絡。
兩個3x3卷積核的堆疊相對于5x5卷積核的視野,三個3x3卷積核的堆疊相當于7x7卷積核的視野。這樣一方面可以有更少的參數(3個堆疊的3x3結構隻有7x7結構參數數量的(3x3x3)/(7x7)=55%);另一方面擁有更多的非線性變換,增加了CNN對特征的學習能力。
小卷積核
說到網絡深度,這裡就不得不提到卷積,雖然AlexNet有使用了11x11和5x5的大卷積,但大多數還是3x3卷積,對于stride=4的11x11的大卷積核,我認為在于一開始原圖的尺寸很大因而備援,最為原始的紋理細節的特征變化用大卷積核盡早捕捉到,後面的更深的層數害怕會丢失掉較大局部範圍内的特征相關性,後面轉而使用更多3x3的小卷積核(和一個5x5卷積)去捕捉細節變化。
而VGGNet則清一色使用3x3卷積。因為卷積不僅涉及到計算量,還影響到感受野。前者關系到是否友善部署到移動端、是否能滿足實時處理、是否易于訓練等,後者關系到參數更新、特征圖的大小、特征是否提取的足夠多、模型的複雜度和參數量等等。
計算量
在計算量這裡,為了突出小卷積核的優勢,我拿同樣conv3x3、conv5x5、conv7x7、conv9x9和conv11x11,在224x224x3的RGB圖上(設定pad=1,stride=4,output_channel=96)做卷積,卷積層的參數規模和得到的feature map的大小如下:
從上表可以看出,大卷積核帶來的特征圖和卷積核得參數量并不大,無論是單獨去看卷積核參數或者特征圖參數,不同kernel大小下這二者加和的結構都是30萬的參數量,也就是說,無論大的卷積核還是小的,對參數量來說影響不大甚至持平。
增大的反而是卷積的計算量,在表格中列出了計算量的公式,最後要乘以2,代表乘加操作。為了盡可能證一緻,這裡所有卷積核使用的stride均為4,可以看到,conv3x3、conv5x5、conv7x7、conv9x9、conv11x11的計算規模依次為:1600萬,4500萬,1.4億、2億,這種規模下的卷積,雖然參數量增長不大,但是計算量是驚人的。
總結一下,我們可以得出兩個結論:
同樣stride下,不同卷積核大小的特征圖和卷積參數差别不大;
越大的卷積核計算量越大。
但一個關鍵的點——多個小卷積核的堆疊比單一大卷積核帶來了精度提升,這也是最重要的一點。
感受野
https://blog.csdn.net/weixin_43384257/article/details/90664965
兩個3x3的卷積堆疊獲得的感受野大小,相當一個5x5的卷積;而3個3x3卷積的堆疊擷取到的感受野相當于一個7x7的卷積。
小池化核
這裡的“小”是相對于AlexNet的3x3的池化核來說的。2012年的AlexNet,其pooling的kernel size全是奇數,裡面所有池化采用kernel size為3x3,stride為2的max-pooling。而VGGNet所使用的max-pooling的kernel size均為2x2,stride為2的max-pooling。pooling kernel size從奇數變為偶數。小kernel帶來的是更細節的資訊捕獲。
在當時也有average pooling,但是在圖像任務上max-pooling的效果更勝一籌,是以圖像大多使用max-pooling。在這裡我認為max-pooling更容易捕捉圖像上的變化,梯度的變化,帶來更大的局部資訊差異性,更好地描述邊緣、紋理等構成語義的細節資訊,這點尤其展現在網絡可視化上。
(2)在VGGNet的卷積結構中,引入1*1的卷積核,在不影響輸入輸出次元的情況下,引入非線性變換,增加網絡的表達能力,降低計算量。
B 與 C 比較:增加 1x1 卷積核,增加了額外的非線性提升效果;
(3)全卷積層
這也是VGG的一個特點,在網絡測試階段将訓練階段的三個全連接配接替換為三個卷積,使得測試得到的全卷積網絡因為沒有全連接配接的限制,因而可以接收任意寬或高為的輸入,這在測試階段很重要。
首先需要了解的是改fc層為conv層實際上的計算方式沒有發生任何變化。但是其結果全卷積網絡可以接收任意大小的圖檔輸入,得到一個score map,對其做一個average就可以得到最終結果(one-hot label)。之是以需要這樣設計,因為他們train與test的圖檔大小是不一樣的。
首先解釋友善,對于384384的圖檔,不修改AlexNet的結構使之适應384384(依然使用原來224x224輸入的結構),直到經過彙聚層得到[12x12x512]的數組時,網絡運作沒有任何問題,按照原來的架構,接下來要将特征圖平鋪和4096個神經元全連接配接,這時候就出問題了,因為原架構平鋪後是7x7,現在是12x12,無法使用之前的參數矩陣了,但是将全連接配接層轉化為卷積層後可繼續進行,并最終得到6x6的正确輸出,僅僅将網絡的全連接配接層等價轉化為卷積層,就能接收更大的圖檔,這顯然友善了很多。
比如VGGNet[1]中, 第一個全連接配接層的輸入是7x7x512, 輸出是4096. 這可以用一個卷積核大小7x7, 步長(stride)為1, 沒有填補(padding), 輸出通道數4096的卷積層等效表示, 其輸出為1x1x4096, 和全連接配接層等價. 後續的全連接配接層可以用1x1卷積等效替代.
比如訓練時對224x224大小的圖像得到7x7x512的特征, 而對于384x384大小的測試圖像, 将得到12x12x512的特征,== 原來訓練時==第一個全連接配接層的參數個數是:7x7x512展開 再乘以4096個節點個權重,現在利用卷積核7x7x512x4096還是原來哪些參數,隻不過變成了卷積核,大小為7x7x512一共4096個,這樣會的到大小為(12-7)/1+1=6,6x6大小的特征值矩陣,一共4096個,再通過過濾器大小為1x1x4096的過濾器4096個,得到6x6大小的過濾器4096個,在通過1x1x4096的過濾器1000個。通過後面3個從全連接配接層等效過來的卷積層, 輸出大小是6x6大小,再對結果求平均,一共1000個
(4)訓練時,先訓練級别簡單(層數較淺)的VGGNet的A級網絡,然後使用A網絡的權重來初始化後面的複雜模型,加快訓練的收斂速度。
(5)采用了Multi-Scale的方法來訓練和預測。可以增加訓練的資料量,防止模型過拟合,提升預測準确率 。
參考:
論文解讀
VGG優勢
計算量、小卷積核、小池化層、感受野、全連接配接
ABCDE不同結構對比
訓練
全卷積、訓練、測試
VGG網絡中測試時為什麼全連結層改成卷積層