3

我计划使用 NYU depth 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"
}
4

2 回答 2

3

是的,上述模型应该按照您预期的方式工作。只要确保 blob 的尺寸与some_output_layer_nameblob 的尺寸相同label

于 2016-04-27T05:21:24.127 回答
1

显然我的上述模型是正确的开始方式,但有一些问题。如果您将标签作为图像,则可以使用ImageDatacaffe 中提供的图层。ImageData有 2 个顶层,第一个是实际的图像数据,第二个是它的“标签”,它是一个数字(用于简单的分类问题)。在您的源文件中,您可以提供标签数据的路径并放置一些任意“标签”并忽略这些。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
...

标签.txt 示例:

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

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

于 2016-11-28T10:51:17.543 回答