[NMS非標的検出極大抑制のサンプルコード

1  インポートNPとしてnumpyの
 2  
3  DEF non_max_suppress(predicts_dict、閾値= 0.2 ):
 4      ""」
5      上の非最大抑圧を実装するバウンディングボックスを予測する。
 6      Argsは:
 7          predicts_dict:{ "スティック":[[X1、Y1、X2 、Y2、scores1]、[...]]}。
 8          threshhold:IOUしきい値
 9      リターン:
 10          非最大抑制によって処理predicts_dict
 11      ""」
12      のための OBJECT_NAME、バウンディングボックス predicts_dict.items(): 对每一个类别的目标分别进行NMS 
13         = np.array bbox_array(BBOX、DTYPE = np.float)
 14   
図15は、         #取得すべての矩形の現在のオブジェクトクラス座標と信頼(バウンディングボックスは、以下BBXをいう)、およびすべてのBBX面積計算
16          、Y1をX1をX2、Y2、スコア= bbox_array [:0]、bbox_array [:1]、bbox_array [:]、[2]、bbox_array [:3]、bbox_array [:4 ]
 。17の          エリア=(X2-X1 + 1) *(Y1-Y2 + 1 18は         ( "シェイプ=分野" areas.shape)プリント
。19   
20          すべてのカテゴリの#現在の信頼度がソート降順BBX(次ホールドインデックス情報)を行う
21で          順序= scores.argsort()[:: - 1 ]
 22は、         印刷" カテゴリ=%sの注文の"%のOBJECT_NAME、注文)
23は、          キープ= [] BBX最終保持インデクス情報を格納するために使用される
24          K. 1 = 
 25          BBXによってトラバース最低信頼に、IOUは、矩形枠の矩形枠のしきい値よりも大きいすべての値を削除する最高から順に#を
26          ながら order.size> 0:
 27              プリント' 第トラバーサル%D '(K))
 28は、              Iが= オーダー[0]
 29              keep.append(I) BBX対応する電流最大信頼指数保つ
30   
31である             。# 取得BBX現在の左右の角に対応する全ての交点座標は、およびIOU(これはまた、他のすべてのBBXのBBX IOUを算出することに注意してください)を算出
32              XX1 np.maximum =(X1 [I]、X1 [オーダー[1 :]]) order.size = 1、以下の結果が(] [)np.arrayある場合、最終結果に影響しない
33は              YY1 = np.maximum(Y1 [I]、Y1 [オーダー[1 :]])
 34が              XX2 = np.minimum(X2 [I]、X2 [オーダー[1 :]])
 35              YY2 np.minimum =(Y2 [I]、Y2 [オーダー[1 :]])
 36              インターnp.maximum =(0.0、xx2- + 1 XX1)* np.maximum(0.0、YY2 + -YY1 1。。 37              IOU =インター/(面積[I] +分野[オーダー[1:]] - インター)
 38は、             プリント" IOU = " 、IOU)
 39   
40              プリント(np.where(IOUが<=閾値)) 出力は除去されないBBXインデックス(ベクトルIOU相対指数)
41             = np.where indexs(IOU <=閾値)[0] + 1 (IOU自体のない計算がないため、1の屈折率差ので、追加する必要が)保持されたインデックスを取得し
42である             プリント" indexs = " 、indexs)
 43は、              注文=オーダー[indexs] 更新保持率、(配列([ 0、1、2 ]))
 44が             プリント" 注文= " オーダー)
 45              K + = 1
 46は          BBOX = bbox_array [キープ]
 47          predicts_dict 【OBJECT_NAME] = bbox.tolist()
 48          predicts_dict = predicts_dict
 49     戻りpredicts_dict
 50      
51  なら __name__ == " __main__ " 52      predicts_dict = { "カップ":[894、354、63、60、0.6477274894714355]、[648、386、72、59、0.9115888476371765]、[772、233 、30、43、0.6633416414260864]、[723、246、50、41、0.8980304598808289]]} 
53      predicts_dict = { " カップ":[647、385、789、501、0.6477274894714355]、[648、386、792、504 、0.9115888476371765 ]、
 54                              [772、233、832、319、0.6633416414260864]、[767、224、828、309、0.7833416414260864]、[723、246、823、328、0.8980304598808289 ]、
 55                     "":[647、385、789、501、0.6477274894714355]、[648、386、792、504、0.9115888476371765 ]、
 56                              [772、233、832、319、0.6633416414260864]、[767、224、828、309、 0.7833416414260864]、[723、246、823、328、0.8980304598808289 ]]}
 57      predicts_dict = non_max_suppress(predicts_dict、閾値= 0.2 58      プリント(predicts_dict)

結果:

1つのオーダーのカテゴリカップ= [ 1  4  3  2  0 ]
 2  1トラバーサル
 。3 IOU = [ 0000.94050474 ]
 。4(配列([ 012 ]))
 。5 indexs = [ 1  2  3 ]
 。6注文= [ 4  3  2 ]
 。7  第二のトラバース
 。8 IOU = 0.36237211  0.39097744 ]
 。9(配列([]、DTYPE =Int64の))
 10 indexs =   []
 。11注文=   []
 12である =人の順序にカテゴリー[ 1  。4  。3  2  0 ]
 13である 貫通初めて
 14 IOU = [ 0000.94050474 ]
 15(配列([ 012 ]))
 16 indexs = [ 1  2  3 ]
 。17注文= [ 4  3  2 ]
 図18は、ある 介して第2の時間
 19IOU = 0.36237211  0.39097744 ]
 20(配列([]、DTYPE = int64モード)、)
 21 indexs =   []
 22順番=   []
 23 { ' カップ':[[ 648.0386.0792.0504.00.9115888476371765 ]、[ 723.0246.0823.0328.00.8980304598808289 ]]、' ':[[ 648.0386.0792.0504.00.9115888476371765 ]、[ 723.0246.0823.0328.00.8980304598808289 ]]}

参考ブログ:

 

おすすめ

転載: www.cnblogs.com/DJames23/p/12508453.html