【问题标题】:Is there a layer in Caffe that can get an arbitrary sub block in a blob?Caffe 中是否有一个层可以在 blob 中获取任意子块?
【发布时间】:2017-09-10 09:43:37
【问题描述】:

Caffe 中是否有层可以获取 blob 中的任意子块?

【问题讨论】:

  • 哈哈...经常问

标签: machine-learning neural-network computer-vision deep-learning caffe


【解决方案1】:

AFAIK 在 caffe 中没有一个完全通用的切片层。
如果要提取作为 blob 特定通道的子块,可以使用"Slice" 层。
根据您的要求,您可能会发现"Crop" 层足以满足您的需求。
如果您需要更灵活地访问子块,您可能需要考虑使用"Python" 层。


使用"Crop" 层的示例
正如您 pointed out "Crop" 层需要两个“底部”,但由于第二个仅用于参考形状,您可以使用 "DummyData" 层生成它。
假设你要选择x[:,:,3:20,5:40],这是一个17x35的裁剪

layer {
  name: "ref_shape_17x35"
  type: "DummyData"
  top: "ref_shape_17x35"
  dummy_data_param { shape { dim: 1 dim: 1 dim: 17 dim: 35 } }
}
layer {
   name: "crop_x"
   type: "Crop"
   bottom: "x"
   bottom: "ref_shape_17x35"
   top: "crop_x"
   crop_param {
     axis: 2  # do not crop the first two dimensions
     offset: 3
     offset: 5
   }
 }

我自己没有尝试过,但它应该可以工作(如果没有,请告诉我)。

【讨论】:

  • 但是裁剪层必须有两个输入,不是吗?
最近更新 更多