SSD網絡模型之DetectionOutput算子


DetectionOutput算子

本文基本結構:首先介紹detection output 這一層的基本理解,之后給出ssd所有代碼的詳細注釋,最后給出caffe中該層各個參數的定義和默認值。

detection out layer是ssd網絡最后一層,用於選框整合預、預選框偏移以及得分三項結果,最終輸出滿足條件的目標檢測框、目標的label和得分。

輸入方面,mbox_priorbox是網絡各個priorbox層輸出concat后的結果(priorbox解析點這里),相當於把所有預選框放到一起;mbox_loc是在預選框的基礎上的偏移量;mbox_conf_flatten就是每個類別在各個框上的得分。

輸出大小為[1, 1, x, 7],其中x是最后保留的框的個數,最后一維存放的數據為: [image_id, label, confidence, xmin, ymin, xmax, ymax]

計算思路:

1)對bottom層的location、confidence和priorbox進行解析,放到vector中

2)對每個priorbox進行解碼。所謂解碼其實就是整合輸入層。前面說到過了,輸出需要給出每個目標的檢測框,但是輸入是預選框和偏移量,這里要做的就是計算出最終的檢測框。解碼需要考慮priorbox編碼方式,共三種情況。

假設檢測框用b表示(存儲內容:b_xmin, b_ymin, b_xmax, b_ymax),預選框用p表示(存儲內容:p_xmin, p_ymin, p_xmax, p_ymax),偏移量用t表示(存儲內容:t_x, t_y, t_height, t_width)。

b和p的寬高分別用x和y的最大最小值減一下得到,中心點的值用最大最小值相加除以2得到。

那么在每種類型中,編碼公式分別為:

 

  

解碼時求取b的各個值就可以。如果需要添加variance的值,將t與variance相乘即可。

以center_size解碼方式為例:

 

  

據此分別計算出b_xmin, b_ymin, b_xmax, b_ymax即可。詳細可參見代碼

 

3) Non-Maximum Suppression非極大值抑制

檢測算法給出的box往往有很多,如下圖所示,多個檢測框其實框出的是一個目標,nms就是一個目標保留一個最優框。抑制的過程是一個迭代-遍歷-消除的過程。

 

  

給定處理前的集合:預選結合,處理后的集合keep集合

首先,將預選集合所有框按照得分高低進行排序,選中得分最高的框,從預選集合移出放到keep集合中;

接下來進行迭代:

*從當前預選集合移出得分最高的框,用它與keep集合每個框計算交並比:

*超過閾值說明二者重復很多,框住的應該是同一個東西,不放到keep集合中;

*如果與keep集合中每個框交並比都小於閾值,說明當前框框住的是一個新目標,應該放到keep中。

迭代下去,直到預選集合為空,那么keep集合中留下的就是檢出的所有目標的檢測框。

jaccard overlap

這里補充介紹一下ssd網絡中的jaccard overlap。

jaccard overlap其實就是交並比,簡單說起來就是兩個檢測框重合的面積(相交的部分)除以兩個檢測框並在一起的面積(面積之和減去重合部分),用公式表示為

 

  

J為0說明兩個框一點沒有重合,為1說明完全重合

4)按照輸出大小要求輸出結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM