Caffe层系列:Pooling Layer

版权声明:未经博主允许,不得转载! https://blog.csdn.net/u011681952/article/details/86157390

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
	  }
}

猜你喜欢

转载自blog.csdn.net/u011681952/article/details/86157390