1. 程式人生 > >caffe學習筆記21-VggNet論文筆記

caffe學習筆記21-VggNet論文筆記

AlexNet 輸入要求256(影象大小),均值是256的,減均值後再crop到227(輸入影象大小)
VGGNet 輸入要求256(影象大小),均值是256的,減均值後再crop到224(輸入影象大小)

Vgg-Net:筆記
CNN improvement:

    有很多對其提出的CNN結構進行改進的方法。例如:
    1. Use smaller receptive window size and smaller stride of the first convolutional layer.

    2. Training and testing the networks densely over the whole image and over multiple scales.

CNN Configuration Principals:

    1. CNN的輸入都是224×224×3的圖片。
    2. 輸入前唯一的預處理是減去均值。
    3. 1×1的核可以被看成是輸入通道的線性變換。
    4. 使用較多的卷積核大小為3×3。
    5. Max-Pooling 一般在2×2的畫素視窗上做,with stride 2。
    6. 除了最後一層全連線的分類層外,其他層都需要使用rectification non-linearity(RELU)。

    7. 不需要新增Local Response Normalization(LRN),因為它不提升效果反而會帶來計算花費和記憶體花費,增加計算時間。(現在流行用BatchSize)

CNN Configuration
    卷積層的通道數目(寬度)從64,每過一個max-pooling層翻倍,到512為止。
    Use filters with 3×3 size throughout the whole net, because a stack of two 3×3 conv layers (without spatial pooling in between) 
    has an effective receptive of 5×5, and three a stack of 3×3 conv layers has a receptive of 7×7, and so on.
    為甚麼使用三層3×3代替一層7×7?
        第一,三層比一層更具有判別性;
        第二,假設同樣的通道數C,那麼三層3×3的引數數目為3×(3×3)C×C=27C×C,一層7×7引數數目為7×7×C×C=49C×C。大大減少了引數數目。
        使用1*1的卷積核可以在不影響視野域的情況下增加判別函式的非線性。該核可以用於“Network in Network”網路結構,可以參考論文。

Training

    論文推測,本文的網路比原來的網路要更容易收斂,原因有二:
    1. Implicit regularization imposed by greater depth and smaller conv filter sizes(卷積尺寸變小,引數會減少)
    2. Pre-initialisation of certain layers.(某些層的預初始化)
    如圖中的A網路,得到引數後,當訓練更深的網如E時,使用A中得到的引數初始化對應的層,新層的引數則隨機初始化。使用這樣的方式進行初始化,不改變步長。
    224×224輸入的獲得,將原始圖片等比例縮放,保證短邊大於224,然後隨機選擇224×224的視窗,還要考慮隨機的水平仿射和RGB通道切換(.m或者用caffe自帶的讀)。

Multi-scale Training(多尺度訓練)

        多尺度的意義在於圖片中的物體的尺度有變化,多尺度可以更好的識別物體。有兩種方法進行多尺度訓練。
        在不同的尺度下,訓練多個分類器,引數為S,引數的意義就是在做原始圖片上的縮放時的短邊長度。
        論文中訓練了S=256和S=384兩個分類器,其中S=384的分類器的引數使用S=256的引數進行初始化,且將步長調為10e-3。由0.01->0.001
        另一種方法是直接訓練一個分類器,每次資料輸入時,每張圖片被重新縮放,縮放的短邊S隨機從[min, max]中選擇,
        本文中使用區間[256,384],網路引數初始化時使用S=384時的引數。

Testing

    測試使用如下步驟:
    首先進行等比例縮放,短邊長度Q大於224,Q的意義與S相同,不過S是訓練集中的,Q是測試集中的引數。Q不必等於S,相反的,對於一個S,使用多個Q值進行測試,然後去平均會使效果變好。
    然後,對測試資料進行測試。(重要)
    1.將全連線層轉換為卷積層,第一個全連線轉換為7×7的卷積,第二個轉換為1×1的卷積。
    2.Resulting net is applied to the whole image by convolving the filters in each layer with the full-size input. The resulting output feature map is a class score map with the number channels equal to the number of classes, and the variable spatial resolution, dependent on the input image size.
    3.Finally, class score map is spatially averaged(sum-pooled) to obtain a fixed-size vector of class scores of the image.

Implementation

       使用C++ Caffe toolbox實現
       支援單系統多GPU
       多GPU把batch分為多個GPU-batch,在每個GPU上進行計算,得到子batch的梯度後,以平均值作為整個batch的梯度。
       論文的參考文獻中提出了很多加速訓練的方法。論文實驗表明,在4-GPU的系統上,可以加速3.75倍。

Convnet Fusion

    模型融合,方法是取其後驗概率估計的均值。train(top1,top5) = model1(24.8,7.5)融合 model2(24.8,7.5)-> test top5(24.0,7.1) 

    融合兩個最好的model可以達到更好的值