2016-04-26 63 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的尺寸相同即可。