1. 程式人生 > >[轉] caffe視覺層Vision Layers 及參數

[轉] caffe視覺層Vision Layers 及參數

左右 solver base html 上下 配置文件 inner output bar

視覺層包括Convolution, Pooling, Local Response Normalization (LRN), im2col等層。

1、Convolution層:

就是卷積層,是卷積神經網絡(CNN)的核心層。

層類型:Convolution

  lr_mult: 學習率的系數,最終的學習率是這個數乘以solver.prototxt配置文件中的base_lr。如果有兩個lr_mult, 則第一個表示權值的學習率,第二個表示偏置項的學習率。一般偏置項的學習率是權值學習率的兩倍。

在後面的convolution_param中,我們可以設定卷積層的特有參數。

必須設置的參數:

  num_output: 卷積核(filter)的個數

  kernel_size: 卷積核的大小。如果卷積核的長和寬不等,需要用kernel_h和kernel_w分別設定

其它參數:

   stride: 卷積核的步長,默認為1。也可以用stride_h和stride_w來設置。

   pad: 擴充邊緣,默認為0,不擴充。 擴充的時候是左右、上下對稱的,比如卷積核的大小為5*5,那麽pad設置為2,則四個邊緣都擴充2個像素,即寬度和高度都擴充了4個像素,這樣卷積運算之後的特征圖就不會變小。也可以通過pad_h和pad_w來分別設定。

  weight_filler: 權值初始化。 默認為“constant",值全為0,很多時候我們用"xavier"算法來進行初始化,也可以設置為”gaussian"   bias_filler: 偏置項的初始化。一般設置為"constant",值全為0。    bias_term: 是否開啟偏置項,默認為true, 開啟    group: 分組,默認為1組。如果大於1,我們限制卷積的連接操作在一個子集內。如果我們根據圖像的通道來分組,那麽第i個輸出分組只能與第i個輸入分組進行連接。 輸入:n*c0
*w0*h0 輸出:n*c1*w1*h1 其中,c1就是參數中的num_output,生成的特征圖個數 w1=(w0+2*pad-kernel_size)/stride+1; h1=(h0+2*pad-kernel_size)/stride+1; 如果設置stride為1,前後兩次卷積部分存在重疊。如果設置pad=(kernel_size-1)/2,則運算後,寬度和高度不變。 示例:
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  convolution_param {
    num_output: 20
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
2、Pooling層 也叫池化層,為了減少運算量和數據維度而設置的一種層。 層類型:Pooling 必須設置的參數:    kernel_size: 池化的核大小。也可以用kernel_h和kernel_w分別設定。 其它參數:  pool: 池化方法,默認為MAX。目前可用的方法有MAX, AVE, 或STOCHASTIC   pad: 和卷積層的pad的一樣,進行邊緣擴充。默認為0   stride: 池化的步長,默認為1。一般我們設置為2,即不重疊。也可以用stride_h和stride_w來設置。 示例:
layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}

pooling層的運算方法基本是和卷積層是一樣的。

輸入:n*c*w0*h0 輸出:n*c*w1*h1 和卷積層的區別就是其中的c保持不變 w1=(w0+2*pad-kernel_size)/stride+1; h1=(h0+2*pad-kernel_size)/stride+1; 如果設置stride為2,前後兩次卷積部分不重疊。100*100的特征圖池化後,變成50*50. 3、Local Response Normalization (LRN)層 此層是對一個輸入的局部區域進行歸一化,達到“側抑制”的效果。可去搜索AlexNet或GoogLenet,裏面就用到了這個功能 層類型:LRN 參數:全部為可選,沒有必須   local_size: 默認為5。如果是跨通道LRN,則表示求和的通道數;如果是在通道內LRN,則表示求和的正方形區域長度。   alpha: 默認為1,歸一化公式中的參數。   beta: 默認為5,歸一化公式中的參數。   norm_region: 默認為ACROSS_CHANNELS。有兩個選擇,ACROSS_CHANNELS表示在相鄰的通道間求和歸一化。WITHIN_CHANNEL表示在一個通道內部特定的區域內進行求和歸一化。與前面的local_size參數對應。 歸一化公式:對於每一個輸入, 去除以技術分享,得到歸一化後的輸出 示例:
layers {
  name: "norm1"
  type: LRN
  bottom: "pool1"
  top: "norm1"
  lrn_param {
    local_size: 5
    alpha: 0.0001
    beta: 0.75
  }
}

4、im2col層

如果對matlab比較熟悉的話,就應該知道im2col是什麽意思。它先將一個大矩陣,重疊地劃分為多個子矩陣,對每個子矩陣序列化成向量,最後得到另外一個矩陣。

看一看圖就知道了:

技術分享

在caffe中,卷積運算就是先對數據進行im2col操作,再進行內積運算(inner product)。這樣做,比原始的卷積操作速度更快。

看看兩種卷積操作的異同:

視覺層包括Convolution, Pooling, Local Response Normalization (LRN), im2col等層。

1、Convolution層:

就是卷積層,是卷積神經網絡(CNN)的核心層。

層類型:Convolution

  lr_mult: 學習率的系數,最終的學習率是這個數乘以solver.prototxt配置文件中的base_lr。如果有兩個lr_mult, 則第一個表示權值的學習率,第二個表示偏置項的學習率。一般偏置項的學習率是權值學習率的兩倍。

在後面的convolution_param中,我們可以設定卷積層的特有參數。

必須設置的參數:

  num_output: 卷積核(filter)的個數

  kernel_size: 卷積核的大小。如果卷積核的長和寬不等,需要用kernel_h和kernel_w分別設定

其它參數:

   stride: 卷積核的步長,默認為1。也可以用stride_h和stride_w來設置。

   pad: 擴充邊緣,默認為0,不擴充。 擴充的時候是左右、上下對稱的,比如卷積核的大小為5*5,那麽pad設置為2,則四個邊緣都擴充2個像素,即寬度和高度都擴充了4個像素,這樣卷積運算之後的特征圖就不會變小。也可以通過pad_h和pad_w來分別設定。

  weight_filler: 權值初始化。 默認為“constant",值全為0,很多時候我們用"xavier"算法來進行初始化,也可以設置為”gaussian"   bias_filler: 偏置項的初始化。一般設置為"constant",值全為0。    bias_term: 是否開啟偏置項,默認為true, 開啟    group: 分組,默認為1組。如果大於1,我們限制卷積的連接操作在一個子集內。如果我們根據圖像的通道來分組,那麽第i個輸出分組只能與第i個輸入分組進行連接。 輸入:n*c0*w0*h0 輸出:n*c1*w1*h1 其中,c1就是參數中的num_output,生成的特征圖個數 w1=(w0+2*pad-kernel_size)/stride+1; h1=(h0+2*pad-kernel_size)/stride+1; 如果設置stride為1,前後兩次卷積部分存在重疊。如果設置pad=(kernel_size-1)/2,則運算後,寬度和高度不變。 示例:
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  convolution_param {
    num_output: 20
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
2、Pooling層 也叫池化層,為了減少運算量和數據維度而設置的一種層。 層類型:Pooling 必須設置的參數:    kernel_size: 池化的核大小。也可以用kernel_h和kernel_w分別設定。 其它參數:  pool: 池化方法,默認為MAX。目前可用的方法有MAX, AVE, 或STOCHASTIC   pad: 和卷積層的pad的一樣,進行邊緣擴充。默認為0   stride: 池化的步長,默認為1。一般我們設置為2,即不重疊。也可以用stride_h和stride_w來設置。 示例:
layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX
    kernel_size: 3
    stride: 2
  }
}

pooling層的運算方法基本是和卷積層是一樣的。

輸入:n*c*w0*h0 輸出:n*c*w1*h1 和卷積層的區別就是其中的c保持不變 w1=(w0+2*pad-kernel_size)/stride+1; h1=(h0+2*pad-kernel_size)/stride+1; 如果設置stride為2,前後兩次卷積部分不重疊。100*100的特征圖池化後,變成50*50. 3、Local Response Normalization (LRN)層 此層是對一個輸入的局部區域進行歸一化,達到“側抑制”的效果。可去搜索AlexNet或GoogLenet,裏面就用到了這個功能 層類型:LRN 參數:全部為可選,沒有必須   local_size: 默認為5。如果是跨通道LRN,則表示求和的通道數;如果是在通道內LRN,則表示求和的正方形區域長度。   alpha: 默認為1,歸一化公式中的參數。   beta: 默認為5,歸一化公式中的參數。   norm_region: 默認為ACROSS_CHANNELS。有兩個選擇,ACROSS_CHANNELS表示在相鄰的通道間求和歸一化。WITHIN_CHANNEL表示在一個通道內部特定的區域內進行求和歸一化。與前面的local_size參數對應。 歸一化公式:對於每一個輸入, 去除以技術分享,得到歸一化後的輸出 示例:
layers {
  name: "norm1"
  type: LRN
  bottom: "pool1"
  top: "norm1"
  lrn_param {
    local_size: 5
    alpha: 0.0001
    beta: 0.75
  }
}

4、im2col層

如果對matlab比較熟悉的話,就應該知道im2col是什麽意思。它先將一個大矩陣,重疊地劃分為多個子矩陣,對每個子矩陣序列化成向量,最後得到另外一個矩陣。

看一看圖就知道了:

技術分享

在caffe中,卷積運算就是先對數據進行im2col操作,再進行內積運算(inner product)。這樣做,比原始的卷積操作速度更快。

看看兩種卷積操作的異同:

技術分享

原文:http://www.cnblogs.com/denny402/p/5071126.html

[轉] caffe視覺層Vision Layers 及參數