CNN 各layer匯總


Flattening:類型為:Flatten

基於某個axis進行偏平的意思,如 axis = 1 ,fattens an input of shape n * c * h * w to a simple vector output of shape n * (c*h*w))

Reshape:(重新調整維度),類型為:Reshape

在不改變數據的情況下,改變輸入的維度

layer {  
    name: "reshape"  
    type: "Reshape"  
    bottom: "input"  
    top: "output"  
    reshape_param {  
      shape {  
        dim: 0  # copy the dimension from below  
        dim: 2  
        dim: 3  
        dim: -1 # infer it from the other dimensions  
      }  
    }  
  }  

有一個可選的參數組shape,用於指定blob數據的各維的值(bolb是一個四維的數據:n*c*w*h)。

dim:0  表示維度不變,即輸入和輸出是相同的維度。

dim:2 或 dim:3 將原來的維度變成2或3

dim:-1 表示由系統自動計算維度。數據的總量不變,系統會根據blob數據的其它三維來自動計算當前維的維度值 。

假設原數據為:64*3*28*28, 表示64張3通道的28*28的彩色圖片

經過reshape變換:

復制代碼
reshape_param {  
      shape {  
        dim: 0   
        dim: 0  
        dim: 14  
        dim: -1   
      }  
    }  
復制代碼

輸出數據為:64*3*14*56,系統自己算的。blob里面的數據量不變,知道三個維度,另外一個就知道了

Cocatenation(把多個輸入可以串聯起來):類型為:Concat

在某個維度,將輸入的layer組合起來,是slice的逆過程

Slicing(可以對輸入進行切片)類型為:Slice

Slice layer 的作用是將bottom按照需要分解成多個tops。(與split layer的不一樣在於spliit的作用是將bottom復制多份,輸出到tops)
首先我們先看一下slice layer 在prototxt里面的書寫

layer {
  name: "slice"
  type: "Slice"
  bottom: "input"
  top: "output1"
  top: "output2"
  top: "output3"
  top: "output4"
  slice_param {
    axis: 1
    slice_point: 1
    slice_point: 3
    slice_point: 4
  }
}

這里假設input的維度是N*5*H*W,tops輸出的維度分別為N*1*H*W N*2*H*WN*1*H*WN*1*H*W 。
這里需要注意的是,如果有slice_point,slice_point的個數一定要等於top的個數減一。 
axis表示要進行分解的維度。 
slice_point的作用是將axis按照slic_point 進行分解。 
slice_point沒有設置的時候則對axis進行均勻分解。

Elementwise Operations(類型為Eltwise), Argmax(類型為ArgMax), Softmax(類型為Softmax),

Mean-Variance Normalization(類型為MVN)

 

Dropout(防止過擬合的trick):類型為Dropout

可以隨機讓網絡某些隱含層節點的權重不工作

layer {  
  name: "drop7"  
  type: "Dropout"  
  bottom: "fc7-conv"  
  top: "fc7-conv"  
  dropout_param {  
    dropout_ratio: 0.5  
  }  
}layer {  
  name: "drop7"  
  type: "Dropout"  
  bottom: "fc7-conv"  
  top: "fc7-conv"  
  dropout_param {  
    dropout_ratio: 0.5  
  }  
}  

只需要設置一個dropout_ratio就可以了。 

Pooling

1.  一般池化(General Pooling)

池化作用於圖像中不重合的區域(這與卷積操作不同),我們定義池化窗口的大小為sizeX,即下圖中紅色正方形的邊長,定義兩個相鄰池化窗口的水平位移/豎直位移為stride。一般池化由於每一池化窗口都是不重復的,所以sizeX=stride,最常見的池化操作為平均池化mean pooling和最大池化max pooling:

平均池化:計算圖像區域的平均值作為該區域池化后的值。

最大池化:選圖像區域的最大值作為該區域池化后的值。參考圖[2]。

2,重疊池化(OverlappingPooling)

重疊池化正如其名字所說的,相鄰池化窗口之間會有重疊區域,此時sizeX>stride。

論文中,作者使用了重疊池化,其他的設置都不變的情況下, top-1和top-5 的錯誤率分別減少了0.4% 和0.3%。[“Imagenet classification with deep convolutional neural networks,”in NIPS,2012]。

3. 空金字塔池化(Spatial Pyramid Pooling) 

空間金字塔池化可以把任何尺度的圖像的卷積特征轉化成相同維度,這不僅可以讓CNN處理任意尺度的圖像,還能避免cropping和warping操作,導致一些信息的丟失,具有非常重要的意義。

一般的CNN都需要輸入圖像的大小是固定的,這是因為全連接層的輸入需要固定輸入維度,但在卷積操作是沒有對圖像尺度有限制,所有作者提出了空間金字塔池化,先讓圖像進行卷積操作,然后轉化成維度相同的特征輸入到全連接層,這個可以把CNN擴展到任意大小的圖像。

空間金字塔池化的思想來自於Spatial Pyramid Model,它一個pooling變成了多個scale的pooling。用不同大小池化窗口作用於卷積特征,我們可以得到1X1,2X2,4X4的池化結果,由於conv5中共有256個過濾器,所以得到1個256維的特征,4個256個特征,以及16個256維的特征,然后把這21個256維特征鏈接起來輸入全連接層,通過這種方式把不同大小的圖像轉化成相同維度的特征,后面通常接FC。

對於不同的圖像要得到相同大小的pooling結果,就需要根據圖像的大小動態的計算池化窗口的大小和步長。假設conv5輸出的大小為a*a,需要得到n*n大小的池化結果,可以讓窗口大小sizeX為,步長為 。具體示意圖參考博客[2]

SPP其實就是一種多個scale的pooling,可以獲取圖像中的多尺度信息;在CNN中加入SPP后,可以讓CNN處理任意大小的輸入,這讓模型變得更加的flexible。

參考Kaiming  He:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition,2014

4,Global average Pooling

global average pooling 這個概念出自於 network in network ,主要是用來解決全連接的問題,其主要是是將最后一層的特征圖進行整張圖的一個均值池化,形成一個特征點,將這些特征點組成最后的特征向量進行softmax中進行計算。舉個例子:

假如,最后的一層的數據是10個6*6的特征圖,global average pooling是將每一張特征圖計算所有像素點的均值,輸出一個數據值,

這樣10 個特征圖就會輸出10個數據點,將這些數據點組成一個1*10的向量的話,就成為一個特征向量,就可以送入到softmax的分類中計算了。

原文中介紹這樣做主要是進行全連接的替換,減少參數的數量,這樣計算的話,global average pooling層是沒有數據參數的,這也與network in network 有關,其文章中提出了一種非線性的 類似卷積核的mlpconv的感知器的方法,計算圖像的分塊的值可以得到空間的效果,這樣就取代了pooling的作用,但是會引入一些參數,但是為了平衡,作者提出了使用global average pooling。

 

參考:

1,http://m.blog.csdn.net/m0_37407756/article/details/72235667

2,https://blog.csdn.net/mao_kun/article/details/50507376

3,https://blog.csdn.net/losteng/article/details/51520555

 

 

LED照明:依古齊尼(深圳)照明科技有限公司

      13723451660 劉先生


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM