【问题标题】:Convolution layer in CNNCNN中的卷积层
【发布时间】:2018-06-21 13:57:38
【问题描述】:

我们知道 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 图像是 herehere

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

【问题讨论】:

  • "看看那个,怎么理解,这个卷积层中的过滤器试图提取输入图像的哪些信息?"没找到你?
  • 我没有得到你的问题。您想知道每一层上的每个过滤器都在寻找什么吗?
  • 一般来说,第一层提取类似边缘的特征(适合精确定位),但随着您深入网络,过滤器主要适用于适合区分对象的斑点形状特征彼此。
  • @HosseinKa 是的。这就是我的意思。你怎么知道第一个卷积正在寻找边缘,而下面的卷积正在寻找 blob 形状? prototxt 文件中的那些,它们看起来都一样。你如何知道哪个卷积正在寻找哪个信息。
  • @FalconUA 我已在 EDIT 中更新。

标签: deep-learning caffe


【解决方案1】:

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

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

【讨论】:

  • 漂亮的可视化图像!
  • 顺便说一下,你如何为这些转换输出绘制图像。我自己策划那些斑点。有什么工具可以绘图吗?我绘制了那些斑点,我只有灰度。
  • 对于具有随机权重的新鲜网络,那么我们需要开始训练权重。在那种情况下,我们只知道最后一层的损失信息,我们计算梯度并逐层反向传播。然后根据损失更新每个卷积层的权重。权重根据 SGD 自行更新。然后他们自己变成这个conv层提取这个信息,那个conv层提取那个信息等等。我的理解是真的吗?
  • @batuman 这些图片不是我的,也许this 纸可以帮你画出来。我认为这是真的。
【解决方案2】:

"Convolution" 层的不同不仅在于它们的参数(例如,kernel_sizestridepad 等),还在于它们的权重:卷积核的可训练参数.
您会看到不同的输出(也称为“响应”),因为过滤器的权重不同。

请参阅this answer,了解 caffe 中“数据”blob 和“参数/权重”blob 之间的区别。

【讨论】:

  • 您在链接中的讨论非常清楚。谢谢。
  • 对于具有随机权重的新鲜网络,那么我们需要开始训练权重。在那种情况下,我们只知道最后一层的损失信息,我们计算梯度并逐层反向传播。然后根据损失更新每个卷积层的权重。权重根据 SGD 自行更新。然后他们自己变成这个conv层提取这个信息,那个conv层提取那个信息等等。我的理解是真的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 2017-01-12
  • 2016-07-08
  • 2019-07-10
  • 2020-11-22
  • 2017-09-27
相关资源
最近更新 更多