更快的 R-CNN 对象检测和深度排序跟踪算法集成
Faster R-CNN object detection and deep-sort tracking algorithm integration
我一直在尝试将 Faster R-CNN 对象检测模型与深度排序跟踪算法相结合。但是,由于某些原因,跟踪算法的性能不佳,这意味着同一个人的跟踪 ID 一直在增加。
我已经使用这个存储库来构建我自己的脚本。 (检查 demo.py)deep-sort yolov3
我做了什么:
每 30 帧检测 1 次
创建了检测分数列表
创建了检测边界框列表(考虑深度排序的输入格式)
调用追踪器!!!
# tracking and draw bounding boxes
for i in range(0, len(refine_person_detection)):
confidence_worker.append(refine_person_detection[i][4]) # scores
bboxes.append([refine_person_detection[i][0], refine_person_detection[i][2],
(refine_person_detection[i][1] - refine_person_detection[i][0]),
(refine_person_detection[i][3] - refine_person_detection[i][2])]) # bounding boxes
features = encoder(frame, bboxes)
detections = [Detection(bbox, confidence, feature) for bbox, confidence, feature in
zip(bboxes, confidence_worker, features)]
boxes = np.array([d.tlwh for d in detections])
scores = np.array([d.confidence for d in detections])
indices = preprocessing.non_max_suppression(boxes, nms_max_overlap, scores)
detections = [detections[i] for i in indices]
tracker.predict() # calling the tracker
tracker.update(detections)
for track in tracker.tracks:
k.append(track)
if not track.is_confirmed() or track.time_since_update > 1:
continue
bbox = track.to_tlbr()
cv2.rectangle(frame, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])),
(255, 255, 255), 2)
cv2.putText(frame, str(track.track_id), (int(bbox[0]), int(bbox[1])), 0, 5e-3 * 200,
(0, 255, 0), 2)
这是跟踪 ID 增加的不良结果示例。
提前感谢您的任何建议
我也在研究同样的东西,我也试着把它们结合起来。你做到了吗,有什么进展吗?
提供的代码是正确的。
然而,检测必须在每一帧进行。
由于深度排序使用边界框内的特征进行跟踪,因此检测框之间存在间隙会导致同一个人数量增加的问题
P.S:
@Mustafa 请在每次帧检测时检查上面的代码,应该可以。
如果没有,请随时发表评论
我一直在尝试将 Faster R-CNN 对象检测模型与深度排序跟踪算法相结合。但是,由于某些原因,跟踪算法的性能不佳,这意味着同一个人的跟踪 ID 一直在增加。
我已经使用这个存储库来构建我自己的脚本。 (检查 demo.py)deep-sort yolov3
我做了什么:
每 30 帧检测 1 次
创建了检测分数列表
创建了检测边界框列表(考虑深度排序的输入格式)
调用追踪器!!!
# tracking and draw bounding boxes for i in range(0, len(refine_person_detection)): confidence_worker.append(refine_person_detection[i][4]) # scores bboxes.append([refine_person_detection[i][0], refine_person_detection[i][2], (refine_person_detection[i][1] - refine_person_detection[i][0]), (refine_person_detection[i][3] - refine_person_detection[i][2])]) # bounding boxes features = encoder(frame, bboxes) detections = [Detection(bbox, confidence, feature) for bbox, confidence, feature in zip(bboxes, confidence_worker, features)] boxes = np.array([d.tlwh for d in detections]) scores = np.array([d.confidence for d in detections]) indices = preprocessing.non_max_suppression(boxes, nms_max_overlap, scores) detections = [detections[i] for i in indices] tracker.predict() # calling the tracker tracker.update(detections) for track in tracker.tracks: k.append(track) if not track.is_confirmed() or track.time_since_update > 1: continue bbox = track.to_tlbr() cv2.rectangle(frame, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])), (255, 255, 255), 2) cv2.putText(frame, str(track.track_id), (int(bbox[0]), int(bbox[1])), 0, 5e-3 * 200, (0, 255, 0), 2)
这是跟踪 ID 增加的不良结果示例。
提前感谢您的任何建议
我也在研究同样的东西,我也试着把它们结合起来。你做到了吗,有什么进展吗?
提供的代码是正确的。 然而,检测必须在每一帧进行。 由于深度排序使用边界框内的特征进行跟踪,因此检测框之间存在间隙会导致同一个人数量增加的问题
P.S: @Mustafa 请在每次帧检测时检查上面的代码,应该可以。 如果没有,请随时发表评论