了解更快的RCNN处理

问题描述 投票:0回答:1

我通过更快的RCNN的code来更好地理解实现。

我使用gdb来调试python接口后面的C ++代码,我可以逐行查看到C ++代码。

This paper(第4页,第一段)提到将卷积图分成2k分和4k坐标。

这是使用this prototxt实现的

   layer {
      name: "rpn_conv/3x3"
      type: "Convolution"
      bottom: "conv5_3"
      top: "rpn/output"
      param { lr_mult: 1.0 }
      param { lr_mult: 2.0 }
      convolution_param {
      num_output: 512
      kernel_size: 3 pad: 1 stride: 1
      weight_filler { type: "gaussian" std: 0.01 }
      bias_filler { type: "constant" value: 0 }
     }
   }

    layer {
      name: "rpn_cls_score"
      type: "Convolution"
      bottom: "rpn/output"
      top: "rpn_cls_score"
      param { lr_mult: 1.0 }
      param { lr_mult: 2.0 }
      convolution_param {
        num_output: 18   # 2(bg/fg) * 9(anchors)
        kernel_size: 1 pad: 0 stride: 1
        weight_filler { type: "gaussian" std: 0.01 }
        bias_filler { type: "constant" value: 0 }
      }
    }
    layer {
      name: "rpn_bbox_pred"
      type: "Convolution"
      bottom: "rpn/output"
      top: "rpn_bbox_pred"
      param { lr_mult: 1.0 }
      param { lr_mult: 2.0 }
      convolution_param {
        num_output: 36   # 4 * 9(anchors)
        kernel_size: 1 pad: 0 stride: 1
        weight_filler { type: "gaussian" std: 0.01 }
        bias_filler { type: "constant" value: 0 }
      }
    }

但我通过代码,这实际上是在cudnn_conv_layer.cpp and cudnn_conv_layer.cu下实现的。

通过这些rpn_cls_score and rpn_bbox_pred层后,我可以看到输出blob形状是容量4 = {1,18,36,49}容量4 = {1,36,36,49},所以它分割得分和方框。

(1)我如何理解它经历的过程,以便256或512维分为{1,18,36,49}和{1,36,36,49}。有lr_mult,但我甚至找不到如何使用lr_mult

(2)然后讨论了关于Loss实现的第一列,我找不到源代码中如何实现SGD损失最小化的来源?

deep-learning caffe
1个回答
0
投票

最好先尝试CNN和Caffe的一些基础教程。在不了解背景理论的情况下直接跳入Caffe实施可能会导致更多混乱。

无论你展示的prototxt的哪个区域只有3层卷积。

  1. 512平面输入要素图与18个滤波器进行卷积,以获得层“rpn_cls_score”中的18平面输出要素图。相同的512平面输入要素图与36个滤波器进行卷积,以获得层“rpn_bbox_pred”中的36平面输出要素图。

这两层都是卷积层。

请参阅CPU实现:https://github.com/BVLC/caffe/blob/master/src/caffe/layers/conv_layer.cpp

lr_mult是学习率倍增因子。在你的solver.prototxt中,会有一个base_lr。它与每层的lr_mult相乘,以获得该层的有效学习率。它是参数更新的一部分,对用户隐藏。 (那就是机器学习框架之美)

  1. 再次,整个向后传递和参数更新由Caffe在后台完成。用户无需担心。由于您正在寻找实施,请参见SGD:https://github.com/BVLC/caffe/blob/master/src/caffe/solvers/sgd_solver.cpp
© www.soinside.com 2019 - 2024. All rights reserved.