Caffe 初學拾遺(七) Layer Catalogue (Vision Layer)

{承接CNN學習入門,筆者在這裏對Caffe官方網站上的相關介紹進行了翻譯總結,歡迎大家交流指正}

本文基於此刻最新的release,Caffe-rc3


Layers:

建立Caffe模型需要在protocol buffer的definition file即.prototxt文件中創建網絡模型。

.prototxt文件中,層及層參數的解釋方法又被定義在caffe.proto(src/caffe/proto)文件中。


1. Vision Layer:

頭文件:./include/caffe/vision_layers.hpp

Vision Layer通常將images作爲input並將生成其他images作爲output。

現實生活中,images通常含有一個顏色通道(C = 1),所謂的灰度圖像,或者三個通道(C = 3),所謂的RGB(Red Green Blue)圖像。但在此文中,圖像區別性的特徵體現在它的空間結構上:一般的一張圖片Height > 1同時Width > 1。這些2維的幾何學特徵將會自然而然的引出如何處理輸入數據。

特別地,大多數的vision layer都將一些特殊操作應用於輸入的一些特定區域,來產生對應位置的輸出。

與之相反,其他層(幾乎沒有例外)忽略了輸入的空間特徵,將其視爲"超大的一維向量(one big vector)",維度是Channel x Height x Width。


Convolution:

1.網絡類型:Convolution

2.CPU版本實現:./src/caffe/layers/convolution_layer.cpp

3.GPU版本實現:./src/caffe/layers/convolution_layer.cu

4.參數(ConvolutionParameter convolution_param):

4.1 Required:

4.1.1 num_output(c_o):filters的數目或者說是卷積kernel的數目

4.1.2 kernel_size(Or kernel_h and kernel_w):每個卷積核的height和width

4.2 Strongly Recommended

4.2.1 weight_filler[default type:'constant' value 0]

4.3 Optional

4.3.1 bias_term[default true]:卷積輸出是否加偏置 Wx + bias 中的 bias

4.3.2 pad(Or pad_h and pad_w)[default 0]:對上下左右四側padding zero的行列數目 默認不padding

4.3.3 stride(Or stride_h and stride_w)[default 1]:指定filter的作用間隔 默認間隔1個像素

4.3.4 group(g)[default 1]:if g > 1:我們將限制每個filter只能連接到input的子集,即input和output的channels都被分到g個group,第i個output group的channels只能和第i個input group的channels相連接。

5.輸入:n * c_i * h_i * w_i

6.輸出:n * c_o * h_o * w_o, h_o = (h_i + 2*pad_h - kernel_h) / stride_h , w_o算法類似。

7.示例:

layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  # learning rate and decay multipliers for the filters
  param { lr_mult: 1 decay_mult: 1 }
  # learning rate and decay multipliers for the biases
  param { lr_mult: 2 decay_mult: 0 }
  convolution_param {
    num_output: 96     # learn 96 filters
    kernel_size: 11    # each filter is 11x11
    stride: 4          # step 4 pixels between each filter application
    weight_filler {
      type: "gaussian" # initialize the filters from a Gaussian
      std: 0.01        # distribution with stdev 0.01 (default mean: 0)
    }
    bias_filler {
      type: "constant" # initialize the biases to zero (0)
      value: 0
    }
  }
}
Convolution layer將input image用一組權值可通過反傳調整的filter(即卷積核)進行卷積,每個卷積核都將生成一個feature map,多個feature map堆疊形成ouput。


Pooling:

1.網絡類型:Pooling

2.CPU版本實現:./src/caffe/layers/pooling_layer.cpp

3.GPU版本實現:./src/caffe/layers/pooling_layer.cu

4.參數(PoolingParameter pooling_param):

4.1 Required:

4.1.1 kernel_size(Or kernel_h and kernel_w):每個卷積核的height和width

4.2 Optional

4.2.1 pool[default MAX]:pooling的方法,當前有MAX,AVE,or STOCHASTIC

4.2.2 pad(Or pad_h and pad_w)[default 0]:對上下左右四側padding zero的行列數目 默認不padding

4.2.3 stride(Or stride_h and stride_w)[default 1]:指定filter的作用間隔 默認間隔1個像素

5.輸入:n * c * h_i * w_i

6.輸出:n * c * h_o * w_o, h_o = (h_i + 2*pad_h - kernel_h) / stride_h , w_o算法類似。

7.示例:

layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_size: 3 # pool over a 3x3 region
    stride: 2      # step two pixels (in the bottom blob) between pooling regions
  }
}


Local Response Normalization(LRN):

1.網絡類型:LRN

2.CPU版本實現:./src/caffe/layers/lrn_layer.cpp

3.GPU版本實現:./src/caffe/layers/lrn_layer.cu

4.參數(LRNParameter lrn_param):

4.1 Optional

4.1.1 local_size[default 5]:用於求和的channel的數目(對應於cross channel LRN)

或用於求和的方形區域的邊界長度(對應於within channel LRN)

4.1.2 alpha[default 1]:縮放係數

4.1.3 beta[default 5]:指數

4.1.4 norm_region[default ACROSS_CHANNELS]:是對相鄰channels求和(ACROSS_CHANNELS)還是在空間上對相鄰位置求和(WITHIN_CHANNEL)

LRN層起到一種側抑制的作用,通過對局部input區域的標準化。在ACROSS_CHANNELS mode,local region跨過相鄰的channels,但是在空間維度保持不變(舉例而言,維度爲local_size x 1 x 1)。在WITHIN_CHANNEL mode,local region在空間維度進行擴展,但是channel仍保持獨立(舉例而言,維度爲1 x local_size x local_size)。每一個input value都被除以(1+(alpha/n)*sum(x_i.^2))^beta,這裏的n代表每個local region的大小,sum是對以該input value爲中心的region進行求和(如果有需要的話需要進行zero padding)。


im2col:

Im2col是爲了方便進行image-to-column變形的,具體細節無需瞭解。它被用在Caffe原始的convolution的矩陣乘法操作中,將patches轉化成矩陣。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章