CV基石 對目標檢測原始邊框進行NMS

2021-09-20 14:16:23 字數 4246 閱讀 9419

"""# 對每乙個類別的目標分別進行nms

for object_name, bbox in predicts_dict.items():

bbox_array = np.array(bbox, dtype=np.

float

)# 獲取當前目標類別下所有bounding box的座標和confidence, 並計算所有bbox的面積

x1, y1, x2, y2, scores = bbox_array[:,

0], bbox_array[:,

1], bbox_array[:,

2], bbox_array[:,

3], bbox_array[:,

4]areas =

(x2 - x1 +1)

*(y2 - y1 +1)

print

('areas shape = '

, areas.shape)

# 對當前類別下所有的bbox的confidence進行從高到低排序, order儲存索引資訊.

order = scores.argsort()[

::-1

]print

('order = '

, order)

# 存放最終保留的bbox的索引資訊

keep =

# 依次按confidence從高到低遍歷bbox,移除所有與該矩形框的iou值大於threshold的矩形框

while order.size >0:

i = order[0]

# 保留當前最大confidence對應的bbox索引

# 獲取所有與當前bbox的交集對應的頂點座標, 並計算iou

# 這裡是同時計算當前confidence最大的bbox與剩餘其他所有bbox的iou

# 當order.size=1時, 下面的計算結果都為np.array(), 不影響最終結果

xx1 = np.maximum(x1[i]

, x1[order[1:

]]) yy1 = np.maximum(y1[i]

, y1[order[1:

]]) xx2 = np.minimum(x2[i]

, x2[order[1:

]]) yy2 = np.minimum(y2[i]

, y2[order[1:

]]) inter = np.maximum(

0.0, xx2 - xx1 +1)

* np.maximum(

0.0, yy2 - yy1 +1)

iou = inter /

(areas[i]

+ areas[order[1:

]]- inter)

print

('iou ='

, iou)

# 輸出沒有被移除的bbox索引, 即相對於iou向量的索引

print

(np.where(iou<=threshold)

)# 獲取保留下來的索引, 因為沒有計算與自身的iou, 所以索引相差1, 需要加上

indexs = np.where(iou<=threshold)[0

]+1print

('indexs = '

,type

(indexs)

)# 更新保留下來的索引

目標檢測 目標檢測通用框架總結

目標檢測框架個人總結 以下是筆記中包含的內容 目標檢測網路框架總結 yolov4中有圖 從最開始的神經網路到現在深度更深,模組更多的目標檢測深度學習神經網路,如今大致可以分為two stage detector 典型的為rcnn系列 和 one stage detector 典型為yolo系列 每個...

CV《物體識別與檢測2 多目標識別基本演算法》

一 多object的識別與檢測 現在我們來個複雜一些的,在一副影象中我們存在多個不同的檢測目標體,比如在自動駕駛中,在一幅影象中存在行人,汽車,電單車各個若干,如下圖所示。這時候,單object檢測的演算法就失去了作用,必須得做出一些改變出來。思路如下 我們通過一大堆的的樣本訓練出乙個分類模型con...

cv2多目標追蹤

本文主要介紹通過cv2的multitracker create 方法建立幾種不同的 用於實現多目標跟蹤,並給出跟蹤效果。import sys import cv2 from random import randint trackertypes boosting mil kcf tld medianf...