2 min read

Sort 실시간 트래킹 처리 알고리즘

GitHub - abewley/sort: Simple, online, and realtime tracking of multiple objects in a video sequence.
Simple, online, and realtime tracking of multiple objects in a video sequence. - GitHub - abewley/sort: Simple, online, and realtime tracking of multiple objects in a video sequence.

Sort 알고리즘은 실시간 추적을 위한 알고리즘이다. 최근에 이를 C++로 변경하는 프로젝트를 진행하였다.

이 알고리즘이 꽤 재미있는거는 예측된 Kalman를 이용해서 Bbox를 구한뒤 매칭되었으면 칼만필터를 지금 시점의 Detect된 Bbox로 Update를 하면서 정확도를 유지한다는점이다.

아래는 칼만 필터의 마우스 트래킹의 예제인데 어느정도의 정확도를 유지할수 있는걸 확인할수 있다.

앞선 오픈소스에서 중요한 부분만 줄여서 만든 코드는 다음과 같다.

for t, trk in enumerate(trks):
  pos = self.trackers[t].predict()[0]
  trk[:] = [pos[0], pos[1], pos[2], pos[3], 0]
    to_del.append(t)

# 트래커와 현재 Detect된 BBox의 IOU를 구한다.
matched, unmatched_dets, unmatched_trks = associate_detections_to_trackers(dets,trks, self.iou_threshold)

# Detect와 트래커와 매칭된 Bbox Update
for m in matched:
  self.trackers[m[1]].update(dets[m[0], :])

# Detect와 트래커와 매칭된 안된 Bbox면 새로운 KalmanBoxTracker를 만든다.
for i in unmatched_dets:
    trk = KalmanBoxTracker(dets[i,:])
    self.trackers.append(trk)