如何在caffe中同时输入图像和蒙版?

时间:2016-09-21 13:42:36

标签: caffe

使用caffe中的掩码预处理输入数据的最优雅方法是什么? 目前我的输入只是一个根据原型文件转换的图像。有人可以提供一个代码片段,如何修改原型文件文件,以便它采取两个输入(图像和掩码)并将它们相乘?

这是我到目前为止所尝试的内容:

layer {
  name: "data"
  type: "ImageSegData"
  top: "data"
  top: "label"
  top: "data_dim"
  include {
    phase: TRAIN
  }
  transform_param {
    mirror: true
    crop_size: 321
    mean_value: 104
    mean_value: 116
    mean_value: 122
  }
  image_data_param {
    root_folder: "/home/myUsername/datasets/myDataset"
    source: "myDataset/list/trainFiles.txt"
    batch_size: 10
    shuffle: true
    label_type: PIXEL
  }
}

layer {
  name: "mask"
  type: "ImageData"
  top: "mask"
  include {
    phase: TRAIN
  }
  image_data_param {
    root_folder: "/home/myUsername/datasets/myDataset"
    source: "myDataset/list/trainMaskFiles.txt"
    batch_size: 10
    shuffle: true
    label_type: PIXEL
  }
}


########## Product ############
layer {
  name: "product"
  type: "Eltwise"
  bottom: "data"
  bottom: "mask"
  top: "product"
  eltwise_param { operation: PROD }
}

问题是:

  1. 如何确保caffe保持图像和相应蒙版的顺序?由于两个输入图层都有选项' shuffle'我想他们可能会独立受阻。
  2. 同样的问题适用于选项" crop_size:321"我还需要在每个图像及其面具的同一位置执行
  3. 我的原始图片大小为513 x 513.不幸的是,当我增加图像的裁剪尺寸并遮住~160像素时,会出现分段错误。因为低于160像素一切正常,我不认为原型文件存在问题。然而,从记忆的角度来看,这不应该发生。我有一个12 GB的Titan GPU,没有模板的模型在内存上大约3GB。所以我不认为只是添加一个面具会增加内存。
  4. 现在我将面具存储为3个通道的png文件,这会将我限制在0到255之间的整数值。

1 个答案:

答案 0 :(得分:1)

哪里,我还不确定,但我认为你可以尝试修改caffe的源代码,它实现 ReadImageToCVMat 功能。在这个函数中,它调用opencv函数 cv :: imread ,让第二个参数为 -1 而不是其他标志。在修改它并重建caffe之后,opencv应该读取一个'png'文件及其放置掩码的alpha通道。我认为这应该有效。试试吧。