"""# 對每乙個類別的目標分別進行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)
('areas shape = '
, areas.shape)
# 對當前類別下所有的bbox的confidence進行從高到低排序, order儲存索引資訊.
order = scores.argsort()[
::-1
('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)
('iou ='
, iou)
# 輸出沒有被移除的bbox索引, 即相對於iou向量的索引
(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...