Deep learning Caffe棋盘工艺品,如何修复?

Deep learning Caffe棋盘工艺品,如何修复?,deep-learning,caffe,Deep Learning,Caffe,我使用的是Caffe,我使用的反褶积层如下: layer { name: "name" type: "Deconvolution" bottom: "bottom top: "top" param { lr_mult: 0 decay_mult: 0 } convolution_param { num_output: 256 bias_term: false pad: 0 kernel_size: 2 group

我使用的是Caffe,我使用的反褶积层如下:

layer {
  name: "name"
  type: "Deconvolution"
  bottom: "bottom
  top: "top"
  param {
    lr_mult: 0
    decay_mult: 0
  }
  convolution_param {
    num_output: 256
    bias_term: false
    pad: 0
    kernel_size: 2
    group: 256
    stride: 2
    weight_filler {
      type: "bilinear"
    }
  }
}

当完成培训并验证我的网络时,我会收到奇怪的棋盘艺术品。我找不到任何关于如何在Caffe中修复此问题的信息,因此我在这里询问是否有人对此有解决方案?

此问题不是Caffe特有的,它的发生是因为反褶积。提供了一个非常好的分析和解决方案。有几种简单的方法可以防止此问题:

  • 用一个步幅
  • 减少在网络中使用反褶积,就像只在最后一层一样
  • 在应用反褶积(本文中提到的调整卷积大小)之前,对特征图进行上采样

    • 答案很简单:

      layer {
        name: "name"
        type: "Deconvolution"
        bottom: "bottom
        top: "top"
        param {
          lr_mult: 0
          decay_mult: 0
        }
        convolution_param {
          num_output: 256
          bias_term: false
          pad: 1
          kernel_size: 4   # <-- changing kernel size fixed the problem.
          group: 256
          stride: 2
          weight_filler {
            type: "bilinear"
          }
        }
      }
      
      层{
      姓名:“姓名”
      类型:“反褶积”
      底部:“底部
      顶部:“顶部”
      param{
      lr_mult:0
      衰减倍数:0
      }
      卷积参数{
      输出数量:256
      偏倚术语:假
      pad:1
      
      kernel_size:4#为了通过某些已知因子执行双线性上采样,仅使用双线性权重填充创建反褶积层是不够的。您还需要正确设置步长、填充和内核大小。
      如果我们把整个过程想象成绘画,那么内核就是我们的画笔,步幅描述了我们触摸画布的频率。选择太小的内核,步幅太大,输出结果看起来就像我们把颜料的微小斑点分开。太大的内核会导致过度模糊。当内核没有初始化时,会出现棋盘格正确-目前(),caffe包含一个双线性过滤器生成的错误,对于某些大小,它实际上不是双线性的(在PR中建议的修复)


      中给出了选择正确尺寸/步幅/填充的公式。

      好的,你的第一步在caffe中很容易完成,但是第二步对我来说不可能,第三步在caffe中也不可能,你能帮我完成第三步吗?实际上,使用一步步幅,也不是很容易!!在我的情况下,你会怎么做?@thigi你觉得呢意思是这不是很容易?首先,在你的文章中,他们谈到了重叠,但在我的实现中:stride:2内核大小:2没有重叠。其次,你能给我一个例子,使用stride:1我可以用来替换我的代码(->我认为这是不可能的)对于第三个要点,我的问题是:这在caffe中可能吗?是的,因为我使用了:kernel\u size:2和stride:2,我的问题仍然没有得到回答,因为我认为你的答案只适用于重叠的内核,这对我来说不是。这里的答案是什么?你刚刚更改了
      kernel\u size
      ?你能详细说明一下吗是的,这是答案!这是正确的答案,你还需要什么?@ShaiSee在我的答案之上,你可以找到一个链接@Shai@Shai这一层不会“学习”"我说得对吗?它只是做双线性上采样?如果你的
      lr\u mult
      decation\u mult
      为零,权重不会更新。不,不是。我知道你的答案是你如何解决你的特定问题-将比例提高2倍-但我的答案提供了关于这一问题的一般性解释,而不仅仅是一个原始代码片段。是的,这是真的,你想把这两种解决方案结合起来吗?