2016-04-20 51 views
3

我目前正試圖在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,它對我很有用。

+0

2.)Caffe中的裁剪層似乎將輸入張量裁剪成與第二輸入張量相同的大小。我想這是爲了確保Elewise總和會起作用。我在tensorflow實現中忽略了這一層。 3.)將預測重塑爲[batch_size,h x w x class_num],然後繼續計算損失值。我建議'sparse_softmax_cross_entropy_with_logits' – 24hours

+0

@ 24小時2.)我認爲這樣做是行不通的,因爲如果你要計算反捲積輸出形狀(與在caffe中實現的方式相同),那麼你將得到解卷積層>標籤的數量。您可能已經完成的解決方法是將'tf.nn.conv2d_transpose'的輸出設置爲與輸入圖像相同的形狀?你在實施過程中是否做到了這一點? – ziky90

+0

的確,我使用來自pooling層的輸入將'output_shape'設置爲相同的大小。我應該提到我將輸入圖像的大小調整爲224 x 224。這在Caffe實現中似乎不是這種情況。它似乎對可變圖像大小進行操作。我無法理解caffe實現中'pad size = 100'的含義。作者聲明它是以感知區域爲中心。由於tensorflow conv不支持它,我將不得不使用填充。 – 24hours

回答

5

感謝@ 24小時的建議,我找到了所有3個問題的答案。不幸的是,在張量流中任意大小的FCN比caffe更復雜一點,但希望我能很快解決。

1)tf.nn.conv2d_transpose可以使用。

2)作物層不需要,tf.nn.conv2d_transpose層的output_size可以用來代替。

3)在端我已經使用tf.nn.sparse_softmax_cross_entropy_with_logits

+1

TensorFlow slim現在提供了[resnet_v2](https://github.com/tensorflow/models/blob/master/slim/nets/resnet_v2.py)的fcn實現。 –

0

我發現在tensorflow解決任意大小的圖像,通過實施作物層的方式。現在只要傳送單張圖像,就可以使用任意大小的圖像。有關我的解決方案的更多信息,請參閱: https://stackoverflow.com/a/45632285/3134418