2016-09-12 79 views
2

我一直在使用卷積神經網絡進行物體檢測,並且遇到以下問題:Tensorflow:尺寸不一致的張量?

對於物體檢測任務,通常一個輸入圖像與未定數目的物體邊界框相關聯。每個邊界框可以用4個座標表示。因此,代表包圍盒爲張量,形狀爲:

[batch_size, variable_num_bbox(?), 4] 

注意,在這裏,它不只是variable_num_bbox不能圖施工前,即使在一個批次中指定,而且,輸入,不同的圖像可以有不同數量的邊界框。

作爲一個說明性實例,我想以下數組轉換成張量:

[[[1, 2, 3, 4], [2, 3, 4, 5]], [[3, 4, 5, 6]]] 

這裏,variable_num_bbox = 2用於第一圖像,但它是1所述的第二圖像。

我試過了,並且失敗了幾種將上面的嵌套列表轉換爲張量的方法,這導致了我們的問題,張量流是否支持具有不一致尺寸大小的張量?如果不是,是否有計劃支持它給開發者提供這種靈活性?如果它不會被支持,有沒有辦法繞過這個問題的對象檢測任務?一種解決方案是設置batch_size = 1,並且邊界框可以表示爲形狀爲[variable_num_bbox(?),4]的張量,所以是的,維度不一致性消失了,但這會損害效率顯著。

回答

0

我所做的處理這個問題的方法是在需要時生成一個邊界框列表。例如,如果你有四維張量中的所有邊界框(即每個圖像有相同數量的邊界框)並且想要執行非最大抑制(這通常會導致每個圖像的可變數量的框),你可以使用某些東西像這樣:

bbox_list = [] 
for i, bboxes in enumerate(tf.unpack(bboxes_batch, axis=0)): 
    idx = tf.image.non_max_suppression(bboxes, confidences[i], 20) 
    bbox_list.append(tf.gather(bboxes, idx)) 

這有幫助嗎?

+0

感謝您的鼓舞人心的答覆。但在我的情況下,我需要加載用於訓練的地面真值邊界框,並且將每個圖像的所有gtbox加載到一個張量並對其進行採樣可能不太實際。但是絕對地,將邊界框表示爲張量列表**是有意義的,這是更加靈活的。 – bichen

+0

是的,我建議您使用張量列表(邊界框)。從4D張量的轉換僅僅是在某些形式的對象檢測中出現的情況的例子,例如YOLO,SSD等。 – RobR