深度学习---之Convolution层

转载:http://www.cnblogs.com/lutingting/p/5240629.html

注:卷积层默认stride为1

 

在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层、卷积操作层、pooling层、非线性变换层、内积运算层、归一化层、损失计算层等;本篇主要介绍卷积层

参考

1. 卷积层总述

下面首先给出卷积层的结构设置的一个小例子(定义在.prototxt文件中) 

复制代码

layer {

  name: "conv1" // 该层的名字
  type: "Convolution" // 该层的类型,具体地,可选的类型有:Convolution、
  bottom: "data" // 该层的输入数据Blob的名字
  top: "conv1" // 该层的输出数据Blob的名字

  // 该层的权值和偏置相关参数
  param { 
    lr_mult: 1  //weight的学习率
  }
  param {
    lr_mult: 2  // bias的学习率
  }

  // 该层(卷积层)的卷积运算相关的参数
  convolution_param {
    num_output: 20
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"  // weights初始化方法
    }
    bias_filler {
      type: "constant" // bias初始化方法
    }
  }

}

复制代码

 

注:在caffe的原始proto文件中,关于卷积层的参数ConvolutionPraram定义如下:

复制代码

message ConvolutionParameter {
  optional uint32 num_output = 1; // The number of outputs for the layer
  optional bool bias_term = 2 [default = true]; // whether to have bias terms

  // Pad, kernel size, and stride are all given as a single value for equal dimensions in all spatial dimensions, or once per spatial dimension.
  repeated uint32 pad = 3; // The padding size; defaults to 0
  repeated uint32 kernel_size = 4; // The kernel size
  repeated uint32 stride = 6; // The stride; defaults to 1
  // Factor used to dilate the kernel, (implicitly) zero-filling the resulting holes. (Kernel dilation is sometimes referred to by its use in the algorithme à trous from Holschneider et al. 1987.)
  repeated uint32 dilation = 18; // The dilation; defaults to 1

  // For 2D convolution only, the *_h and *_w versions may also be used to specify both spatial dimensions.
  optional uint32 pad_h = 9 [default = 0]; // The padding height (2D only)
  optional uint32 pad_w = 10 [default = 0]; // The padding width (2D only)
  optional uint32 kernel_h = 11; // The kernel height (2D only)
  optional uint32 kernel_w = 12; // The kernel width (2D only)
  optional uint32 stride_h = 13; // The stride height (2D only)
  optional uint32 stride_w = 14; // The stride width (2D only)

  optional uint32 group = 5 [default = 1]; // The group size for group conv

  optional FillerParameter weight_filler = 7; // The filler for the weight
  optional FillerParameter bias_filler = 8; // The filler for the bias
  enum Engine {
    DEFAULT = 0;
    CAFFE = 1;
    CUDNN = 2;
  }
  optional Engine engine = 15 [default = DEFAULT];

  // The axis to interpret as "channels" when performing convolution.
  // Preceding dimensions are treated as independent inputs;
  // succeeding dimensions are treated as "spatial".
  // With (N, C, H, W) inputs, and axis == 1 (the default), we perform
  // N independent 2D convolutions, sliding C-channel (or (C/g)-channels, for
  // groups g>1) filters across the spatial axes (H, W) of the input.
  // With (N, C, D, H, W) inputs, and axis == 1, we perform
  // N independent 3D convolutions, sliding (C/g)-channels
  // filters across the spatial axes (D, H, W) of the input.
  optional int32 axis = 16 [default = 1];

  // Whether to force use of the general ND convolution, even if a specific
  // implementation for blobs of the appropriate number of spatial dimensions
  // is available. (Currently, there is only a 2D-specific convolution
  // implementation; for input blobs with num_axes != 2, this option is
  // ignored and the ND implementation will be used.)
  optional bool force_nd_im2col = 17 [default = false];
}

复制代码

2. 卷积层相关参数 

接下来,分别对卷积层的相关参数进行说明

(根据卷积层的定义,它的学习参数应该为filter的取值和bias的取值,其他的相关参数都为hyper-paramers,在定义模型时是要给出的)

lr_mult:学习率系数

放置在param{}中

该系数用来控制学习率,在进行训练过程中,该层参数以该系数乘solver.prototxt配置文件中的base_lr的值为学习率

即学习率=lr_mult*base_lr

如果该层在结构配置文件中有两个lr_mult,则第一个表示fitler的权值学习率系数,第二个表示偏执项的学习率系数(一般情况下,偏执项的学习率系数是权值学习率系数的两倍)

convolution_praram:卷积层的其他参数

放置在convoluytion_param{}中

该部分对卷积层的其他参数进行设置,有些参数为必须设置,有些参数为可选(因为可以直接使用默认值)

  • 必须设置的参数

  1. num_output:该卷积层的filter个数

  2. kernel_size:卷积层的filter的大小(直接用该参数时,是filter的长宽相等,2D情况时,也可以设置为不能,此时,利用kernel_h和kernel_w两个参数设定)
  • 其他可选的设置参数

  1. stride:filter的步长,默认值为1。也可以通过stride_h和stride_w来单独设定。

  2. pad:是否对输入的image进行padding,默认值为0,即不填充(注意,进行padding可能会带来一些无用信息,输入image较小时,似乎不太合适)。如果设置为2, 则上下左右都分别扩充两个像素(在卷积核为5*5的情况下,图像大小不必拿),也可以通过pad_h和pad_w来单独设定。
  3. weight_filter:权值初始化方法,使用方法如下
    weight_filter{
          type:"xavier"  //这里的xavier是一冲初始化算法,也可以是“gaussian”;默认值为“constant”,即全部为0
    }
  4. bias_filter:偏执项初始化方法
    bias_filter{
          type:"xavier"  //这里的xavier是一冲初始化算法,也可以是“gaussian”;默认值为“constant”,即全部为0
    }
  5. bias_term:是否使用偏执项,默认值为Ture
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Channel-wise Topology Refinement Graph Convolution for Skeleton-Based Action Recognition" 是一篇关于基于骨架的动作识别的论文。如果要提出改进方法,可以考虑以下几个方向: 1. 模型结构改进:可以尝试改进论文中提出的Channel-wise Topology Refinement Graph Convolution模块。例如,可以探索更复杂的图卷积模型结构,引入更多的注意力机制或者跨连接,以提高模型对骨架数据的建模能力。 2. 数据增强和预处理:骨架数据可能存在缺失或者噪声,可以尝试使用数据增强技术(如旋转、平移、缩放)来增加数据的多样性和鲁棒性,或者使用预处理技术(如滤波、插值)来处理数据中的噪声和缺失。 3. 图结构优化:可以尝试优化骨架数据的图结构表示。例如,可以使用图剪枝算法来去除冗余的边或节点,或者使用图生成算法来自动构建更准确的图结构。 4. 跨模态信息融合:可以考虑将骨架数据与其他传感器数据(如深度图像或RGB图像)进行融合。通过融合不同模态的信息,可以提高对动作的理解和识别能力。 5. 模型训练优化:可以探索更有效的模型训练方法,例如引入更合适的损失函数或者优化算法。此外,可以尝试使用迁移学习或领域自适应的方法,将从其他相关任务或领域中学到的知识迁移到骨架动作识别任务中。 以上是一些可能的改进方向,具体的改进方法需要根据具体问题和实验结果来确定。同时,也可以参考相关领域的最新研究和技术进展,以获取更多的启发和创新点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值