tf.image.non_max_suppression()
在吳恩達老師深度學習yolo算法實現自動駕駛的編程題中出現了這個函數,這個函數的功能是在檢測算法中我們的一個目標被檢測了多次,如何排除掉多余的邊界框。比如下面的圖,來自於編程題中的圖片,下面的這個車被多次檢測到,存在多個邊界框,保留概率最大的那個,去除掉與這個概率最大的邊界框的IoU大於一個闕值的其余邊界框。這個過程就成為非最大值抑制=NMS
函數原型:
tf.image.non_max_suppression(
boxes,
scores,
max_output_size,
iou_threshold=0.5,
score_threshold=float('-inf'),
name=None
)
按照參數scores的降序貪婪的選擇邊界框的子集。
刪除掉那些與之前的選擇的邊框具有很高的IOU的邊框。邊框是以[y1,x1,y2,x2],(y1,x1)和(y2,x2)是邊框的對角坐標,當然也可以提供被歸一化的坐標。返回的是被選中的那些留下來的邊框在參數boxes里面的下標位置。那么你可以使用tf.gather的操作或者利用keras.backend的gather函數來從參數boxes來獲取選中的邊框。
例如:
selected_indices=tf.image.non_max_suppression(boxes,scores,max_output_size,iou_thresholde)
selected_boxes=tf.gather(boxes,selected_indices)
參數:boxes:2-D的float類型的,大小為[num_boxes,4]的張量;
scores:1-D的float類型的大小為[num_boxes]代表上面boxes的每一行,對應的每一個box的一個score;
max_output_size:一個整數張量,代表我最多可以利用NMS選中多少個邊框;
iou_threshold:一個浮點數,IOU闕值展示的是否與選中的那個邊框具有較大的重疊度;
score_threshold:一個浮點數,來決定上面時候刪除這個邊框
name:可選
返回的是selected_indices:表示的是一個1-D的整數張量,大小為[M],代表的是選出來的留下來的邊框下標,M小於等於max_outpuy_size.
例子: