一、引言
本文主要讲解Caffe中的视觉层(Vision Layers)的参数,视觉层包含 Convolution,Pooling,Local Response Normalization(LRN),im2col等层。接下来将展开讲解:
二、 Convolution 层
Convolution层即卷积层,是神经网络(CNN)的核心层。
type | Convolution |
lr_mult | 学习率系数 |
num_output | 卷积核(filter)的个数 |
kernel_size | 卷积核的大小。如果卷积核长宽不等,用kernel_h 和kernel_w设定 |
stride | 卷积核的步长,默认为1。也可以用 stride_h 和 stride_w 来设定 如果设置stride为1,前后两次卷积部分存在重叠;如果设置pad=(kernel_size-1)/2,则运算后,宽度和高度不变。 |
pad | 扩充边缘,默认为0。也可以通过pad_h 和 pad_w 来设定 |
weight_filler | 权值初始化。默认为“constant”,值全为0。 经常用“xavier”算法初始化,也可设为“gaussion” |
bias_filler | 偏置项的初始化。一般设置为“constant”,值全为0 |
bias_term | 是否开启偏置项,默认为true,开启 |
group | 分组,默认为1组。如果根据图像的通道来分组,那么第i个输出分组只能与第i个输入分组进行连接 |
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"
}
}
}
三、Pooling层
Pooling层即池化层,为了减少运算量和数据维度而设置的一种层。
type | Pooling |
kernel_size | 池化核的大小;可以用kernel_h 和 kernel_w 设定 |
pool | 池化方法,默认为MAX。其他可用的方法由AVG,VALID 或 STOCHASTIC |
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
}
}
四、Local Response Normalization(LRN)层
此层是对一个输入的局部区域进行归一化,达到“侧抑制”的效果。AlexNet 和 GoogLennet 用到。
type | 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
}
}
五、im2col层
im2col的作用是先将一个大矩阵,重叠地划分为多个子矩阵,对每一个子矩阵序列化成向量,最后得到另外一个矩阵。如图:
在 Caffe 中卷积运算就是先对数据进行 im2col 操作,再进行内积运算(inner product),这样做比原始的卷积操作速度更快。