2017-04-06 133 views
0

我有一個groundtruth對象(藍色; 1-4)和預測對象(紅色; a-d)列表的列表。要計算評估預測性能的指標,我需要將預測對象分配給groundtruth對象。不應該使用兩次對象!將預測對象/區域唯一地分配給groundtruth對象/區域

圖形右側顯示了問題的一些可能解決方案(X,Y,Z),其中紫色區域表示匹配對象之間的重疊。

enter image description here

爲了實現這一點,我將創建包含一個交叉點的交集矩陣(具有重疊率[交叉口/聯盟])中的所有對象。對於可視化例如它看起來像某物下面(例如意obj_2重疊0.3與OBJ_A,0.1與obj_b,0.3與obj_c,等等...):

intersection_matrix 

     | a b c d 
    --|----------------- 
    1 | 0.1 - - - 
    2 | 0.3 0.1 0.3 
    3 | - - 0.8 - 
    4 | - - - 0.5 

每個對象使用的約束只有一次轉換爲每行最多有一個條目。我首先認爲這很簡單,但讓它有一些思考,我覺得這很難以最佳方式解決。

作爲一個直截了當的實現,我開始使用一個算法迭代groundtruth對象,並指定最大「分數」的算法。

for i = 1:length(groundtruth_objects) 
    highest_overlap = max(intersect_matrix(i,:)); 
    % take prediction_object with highest overlap as match 
    match = find(intersect_matrix_iou(i,:) == highest_overlap); 

    % remove matched objects from intersect_matrix (to avoid further matches) 
    intersect_matrix(i,:) = 0;  % remove groundtruth_object 
    intersect_matrix(:,match) = 0; % remove prediction_object 

    % save matched pair as entry in match matrix (which is the solution) 
    match_matrix(i,match) = highest_overlap; 
end 

這導致瞭解決方案X,如示例中所示,這可能非常糟糕。迭代預測對象反而會導致解決方案Y,這在這裏相當不錯,但同樣不好。

Solution X    Solution Y    Solution Z 

     | a b c d   | a b c d   | a b c d 
    --|----------------- --|----------------- --|----------------- 
    1 | 0.1 - - -  1 | - - - -  1 | 0.1 - - - 
    2 | - - 0.3 -  2 | 0.3 - - -  2 | - 0.1 - - 
    3 | - - - 0.1  3 | - - 0.8 -  3 | - - 0.8 - 
    4 | - - - -  4 | - - - 0.5  4 | - - - 0.5 

問題是,以確定是否匹配真正適合的對象,是有意義的檢查相同的候選人是否將不匹配較好的另一個對象(其中有一個更高的分數或否則可能根本沒有被覆蓋)。但它很快變得複雜,如圖所示的圖形左:

  • 以判斷是否匹配obj_1 - > OBJ_A,我們需要檢查OBJ_A,這也可以匹配obj_2。
  • 爲此判斷,我們需要檢查obj_b和obj_c,其中後者也可以obj_3。
  • 要判斷上,我們需要檢查obj_d,這也符合obj_4 ...

我認爲最佳的解決方案,需要反覆的進度,如在圖形表示。

的可能(和有意義)的規則,說明最優會

  1. 比賽預測OBJ與最高得分。
  2. ......只要這並不妨礙其他物體上更高匹配
  3. 由閾值可能保護,以避免像

到目前爲止,我對這個想法糟糕的比賽。我現在的問題是:

  • 這是否對應一個已知的(並且很好描述和解決的)算法問題?
  • 是否已有算法/實現 此問題?
  • 還是有沒有人有一個想法如何實現這個在 有限的和有效的方式?

回答

0
  1. 這是否對應於已知的(和充分描述的和解決)算法的問題?

是的,這是一個Assignment problem

  1. 這個問題已經有算法/實現嗎?

Hungarian method是一種設計用於解決分配問題的算法。它允許涉及某個得分/優先級,這可以通過重疊來表示。

  1. 還是有沒有人有一個想法如何以有限和有效的方式實現這一點?

在各種語言中有幾種實現。在這種情況下可能適用的MATLAB實現是this one