CNN 中的卷积层

Convolution layer in CNN

我们知道CNN中的卷积层使用过滤器,不同的过滤器会在输入图像中寻找不同的信息。

但是假设在这个 SSD 中,我们有 prototxt 文件并且它有卷积层的规范

layer {
  name: "conv2_1"
  type: "Convolution"
  bottom: "pool1"
  top: "conv2_1"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  param {
    lr_mult: 2.0
    decay_mult: 0.0
  }
  convolution_param {
    num_output: 128
    pad: 1
    kernel_size: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}

不同网络(如 GoogleNet、AlexNet、VGG 等)中的所有卷积层都或多或少相似。 看看那个,如何理解,这个卷积层中的过滤器试图提取输入图像的哪些信息?

编辑: 让我澄清一下我的问题。 我从 prototxt 文件中看到两个卷积层,如下所示。他们来自SSD。

layer {
  name: "conv1_1"
  type: "Convolution"
  bottom: "data"
  top: "conv1_1"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  param {
    lr_mult: 2.0
    decay_mult: 0.0
  }
  convolution_param {
    num_output: 64
    pad: 1
    kernel_size: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}

layer {
  name: "conv2_1"
  type: "Convolution"
  bottom: "pool1"
  top: "conv2_1"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  param {
    lr_mult: 2.0
    decay_mult: 0.0
  }
  convolution_param {
    num_output: 128
    pad: 1
    kernel_size: 3
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}

然后我在这里打印他们的输出

数据

conv1_1 和 conv2_1 图像是 here and here

所以我的问题是这两个转换层如何产生不同的输出。但是prototxt文件没有区别。

"Convolution" 层的不同之处不仅在于它们的参数(例如,kernel_sizestridepad 等),还在于它们的 权重: 卷积核的可训练参数。
您会看到不同的输出(又名 "responses"),因为过滤器的权重不同。

请参阅 了解 caffe 中 "data" blob 和 "parameter/weights" blob 之间的区别。

较早层的过滤器表示边缘等低级特征 (这些功能保留更高 使用类似于 Gabor 滤波器的响应图的低级视觉信息进行精确定位的空间分辨率)。另一方面,中间层的过滤器提取更复杂的角点或斑点等特征。

并且随着你的深入,你无法可视化和解释这些特征,因为中层和高层的过滤器并不直接连接到输入图像。例如,当您获得第一层的输出时,您实际上可以将其可视化并解释为边缘,但是当您更深入并将第二个卷积层应用于这些提取的边缘(第一层的输出)时,您会得到类似于边缘的东西边缘(或类似的东西)并捕获更多的语义信息和更少的细粒度空间细节。在 prototxt 文件中,所有卷积和其他类型的操作都可以彼此相似。但是由于具有不同的顺序和权重,它们提取了不同种类的特征。