Caffe層系列:Pooling Layer
阿新 • • 發佈:2019-01-11
Pooling Layer 的作用是將bottom進行下采樣,一般特點是:一個輸入一個輸出
首先我們先看一下 PoolingParameter
message PoolingParameter { enum PoolMethod { //下采樣方式 MAX = 0; //最大值 AVE = 1; //平均 STOCHASTIC = 2; //隨機 } optional PoolMethod pool = 1 [default = MAX]; // The pooling method 預設最大值方式 // Pad, kernel size, and stride are all given as a single value for equal // dimensions in height and width or as Y, X pairs. optional uint32 pad = 4 [default = 0]; // The padding size (equal in Y, X) //填充大小,同時控制x,y填充,預設0 optional uint32 pad_h = 9 [default = 0]; // The padding height //高度方向填充大小 ,預設0 optional uint32 pad_w = 10 [default = 0]; // The padding width //寬度方向填充大小,預設0 optional uint32 kernel_size = 2; // The kernel size (square) //核大小 同時控制高度 、寬度方向 optional uint32 kernel_h = 5; // The kernel height //高度方向 核大小 optional uint32 kernel_w = 6; // The kernel width //寬度方向 核大小 optional uint32 stride = 3 [default = 1]; // The stride (equal in Y, X) //步幅大小 同時控制高度、寬度方向 optional uint32 stride_h = 7; // The stride height //高度方向 步幅大小 optional uint32 stride_w = 8; // The stride width //寬度方向 步幅大小 enum Engine { //引擎方式,說白就是呼叫 哪裡實現的該函式 DEFAULT = 0; //預設 也會指向caffe engine (個人沒有驗證) CAFFE = 1; //caffe CUDNN = 2; //cudnn } optional Engine engine = 11 [default = DEFAULT]; // If global_pooling then it will pool over the size of the bottom by doing // kernel_h = bottom->height and kernel_w = bottom->width optional bool global_pooling = 12 [default = false]; //全域性取樣 預設false,在某些分類網路中 常常用到,如mobilenet }
Pooling layer 在prototxt裡面的書寫:
layer { name: "pool1" //該層的名稱 type: "Pooling" //該層的型別 bottom: "norm1" //該層的輸入資料blob top: "pool1" //該層的輸出資料blob // 該層的相關引數設定 pooling_param { pool: MAX //pooling型別,預設值為MAX,也可以設定為AVE,STOCHASTIC kernel_size: 3 //pooling核大小,為必設引數 stride: 2 //pooling核步長,預設值為1(即重疊),但通常設定為2; } }
例如MobileNet中的全域性Pooling
layer {
name: "pool6"
type: "Pooling"
bottom: "conv6/sep" #N*1024*7*7
top: "pool6" #N*1024*1*1
pooling_param {
pool: AVE
global_pooling: true
}
}