首页 文章

Caffe上的多维标签数据

提问于
浏览
3

我计划通过使用NYU深度v2数据集实现可以从单个图像估计深度的CNN . 通过本教程向我展示了实现一个处理Caffe分类问题的CNN很容易 . 我很好奇,如果Caffe适合涉及多维地面真相(例如深度图像)和回归(深度估计)的任务 .

我想要实现的是使用深度图像作为基础事实来训练可以估计深度图像的CNN . 我需要将标签加载为单通道图像数据 .

我只能找到Shelhamer的这个与我的问题相关的答案https://groups.google.com/d/msg/caffe-users/JXmZrz4cCMU/mBTU1__ohg4J

我知道我应该定义两个顶层,一个用于输入,另一个用于深度数据作为基础事实 . 然后我可以使用损失层(如EucledianLoss)来计算损失 . 我在下面添加了一个模型 .

这个模型是否按预期工作?如果没有,还有其他方法在Caffe上做吗?

layer {
  name: "data"
  type: "ImageData"
  top: "data" 
  image_data_param {
    source: "input_set.txt"
    batch_size: 50
  }
}

layer {
  name: "label"
  type: "ImageData"
  top: "label"
  image_data_param {
    source: "depth_set.txt"
    batch_size: 50
  }
  is_color: false
}

layer {
 name: "loss"
 type: "EuclideanLoss"
 bottom: "some_output_layer_name"
 bottom: "label"
 top: "loss"
}

2 回答

  • 1

    是的,上面的模型应该按照您期望的方式工作 . 只需确保 some_output_layer_name blob的尺寸与 label blob的尺寸相同 .

  • 3

    显然我的上述模型是正确的开始方式,但有一些问题 . 如果您将标签作为图像,则可以使用caffe中提供的 ImageData 图层 . ImageData 有2个顶层,第一个是实际图像数据,第二个是"label",这是一个数字(用于简单的分类问题) . 在源文件中,您可以提供标签数据的路径,并放置一些任意的"label"并忽略它们 . 下面的 ignored1ignored2 对应于这些被忽略的标签 .

    layer {
      name: "data"
      type: "ImageData"
      top: "data"
      top: "ignored1"
      image_data_param {
        source: "path/to/data/data.txt"
        batch_size: 32
        new_height: 228
        new_width: 304
      }
    }
    
    # Label data
    layer {
      name: "depth"
      type: "ImageData"
      top: "depth"
      top: "ignored2"
      image_data_param {
        is_color: false
        source: "path/to/data/labels.txt"
        batch_size: 32
        new_height: 55
        new_width: 74
      }
    }
    

    data.txt示例:

    /path/to/your/data/1.png 0
    /path/to/your/data/2.png 0
    /path/to/your/data/3.png 0
    ...
    

    labels.txt示例:

    /path/to/your/labels/1.png 0
    /path/to/your/labels/2.png 0
    /path/to/your/labels/3.png 0
    ...
    

    或者,您可以编写自己的Python图层来读取图像和标签数据 . 这是一个example layer来读取NYUDv2数据 .

相关问题