2016-04-26 26 views
3

我打算实施一个CNN,该CNN可以使用NYU深度v2数据集来估算单幅图像的深度。通过教程已经向我表明,实施一个处理Caffe分类问题的CNN是很容易的。我很好奇,如果Caffe适合于涉及多维地面真理(例如深度图像)和回归(深度估计)的任务。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" 
} 
+0

您是否完成了结果?我一直在尝试同样的事情。但我无法想出一个解决我的问题的网络。 – thigi

回答

1

显然我的上述模型是正确的方式来启动,但有一些问题。如果您将标签设为图片,则可以使用caffe中提供的ImageData图层。 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 
... 

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数据。

3

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