我目前正試圖在TensorFlow中實施FCN for semantic segmentation,因爲它之前在Caffe here中完成。TensorFlow中的FCN缺失作物層
1)如何映射 「解卷積」 層由來自Caffe到TensorFlow:
不幸的是,我有以下3件事掙扎?這是否正確tf.nn.conv2d_transpose
?
2)如何將Caffe的「Crop」圖層映射到TensorFlow?不幸的是我在TensorFlow中看不到任何替代品。在TensorFlow中有這個等價物嗎?
3)Caffe SoftmaxWithLoss
是否對應TensorFlow softmax_cross_entropy_with_logits?
非常感謝您提供任何建議,提示和幫助。
編輯2016年5月9日:
1)我已經發現了tf.nn.conv2_transpose
真正對應於反褶積層。
2)現在的作物層似乎確實是一個問題。我發現實際上存在tf.image.resize_image_with_crop_or_pad
,但是這似乎不可能用於此目的,因爲它不能用於動態創建的張量,也不能用於tf.nn.conv2_transpose
層之後需要使用的4D張量。
一些更多的信息,可能會在:https://github.com/tensorflow/tensorflow/issues/2049
編輯2016年5月17日:
我都遵循@24小時諮詢和tensorflow建立FCN,雖然我不能使它訓練數據的任意大小。
2)作物層真的不需要。
3)我在最後使用了tf.nn.sparse_softmax_cross_entropy_with_logits
,它對我很有用。
2.)Caffe中的裁剪層似乎將輸入張量裁剪成與第二輸入張量相同的大小。我想這是爲了確保Elewise總和會起作用。我在tensorflow實現中忽略了這一層。 3.)將預測重塑爲[batch_size,h x w x class_num],然後繼續計算損失值。我建議'sparse_softmax_cross_entropy_with_logits' – 24hours
@ 24小時2.)我認爲這樣做是行不通的,因爲如果你要計算反捲積輸出形狀(與在caffe中實現的方式相同),那麼你將得到解卷積層>標籤的數量。您可能已經完成的解決方法是將'tf.nn.conv2d_transpose'的輸出設置爲與輸入圖像相同的形狀?你在實施過程中是否做到了這一點? – ziky90
的確,我使用來自pooling層的輸入將'output_shape'設置爲相同的大小。我應該提到我將輸入圖像的大小調整爲224 x 224。這在Caffe實現中似乎不是這種情況。它似乎對可變圖像大小進行操作。我無法理解caffe實現中'pad size = 100'的含義。作者聲明它是以感知區域爲中心。由於tensorflow conv不支持它,我將不得不使用填充。 – 24hours