검출 목록을 물체의 이력으로 연결한다
검출은 한 프레임의 물체 후보를 출력한다. tracking은 시간에 따라 어떤 후보가 이전의 어느 물체와 이어지는지 판단한다. 같은 클래스의 상자 두 개에 번호를 붙였다고 그 번호가 다음 프레임의 같은 실제 물체를 가리킨다는 보장은 없다. 한 프레임의 instance 번호, 현재 tracker의 ID, 물리적으로 같은 물체라는 정체성은 구별한다. 재시작/장면 전환/추적 종료 뒤 새 ID가 생길 수 있고 다른 실행의 ID1을 같은 개체라고 합치지 않는다.
상태에는 위치/속도 추정과 마지막 관측 시각, 예측/관측 여부 및 활성/가림/종료 같은 관리 정보가 들어갈 수 있다. 검출되지 않았지만 모형이 잠시 예측한 점은 새로운 센서 관측이 아니다. 화면에 상자가 계속 그려진다고 매 프레임 물체를 실제 검출했다는 뜻으로 보고하지 않는다. 검출 score·연관 신뢰와 원본 시각/출처를 따로 보존한다.
프레임 번호 대신 경과 시간을 쓴다
원리를 볼 1차원 일정속도 모형을 명시한다. x는 영상 가로 위치(pixel), v는 속도(pixel/s), Δt는 같은 시계의 관측 간격(s)이다. 예측은 x_pred=x+vΔt다. 이는 이미지 평면의 운동 예측이며 3차원 실제 속도나 카메라 자기운동을 분리한 추정이 아니다. 아래는 어떤 tracker의 Kalman 구현을 그대로 재현한 식이 아니다.
그림 M12.05-1. 각 칸은 서로 다른 역할/근거다. 아래 방향은 자료/처리의 연결이며 실제 성공을 자동으로 보장하지 않는다. 직접 제작한 개념도이며 본문의 조건과 함께 읽는다.
가상 시각 t=1 s에서 A는 x=14/v=+4, B는 x=16/v=−4라고 하자. t=2 s의 예측은 A18/B12 pixel이다. 새 검출이[12,18]로 왔다면 번호 순서가 바뀌었다는 이유로 A를 첫 검출 12에 붙이지 않는다. t=2.25 s처럼 간격이 0.25 s면 그 직전 t=2에서 A18/v+4의 예측은 19다. 언제나 한 프레임을 1초라고 가정하면 22가 되어 시간 간격 오류가 생긴다.
누락 프레임·변동 FPS·지연 수신이 있을수록 실제 stamp 간격이 중요하다. 카메라 시각과 컴퓨터 수신 시각을 섞거나 뒤늦게 도착한 프레임을 현재 순서에 그냥 끼워 넣지 않는다. 재정렬/폐기/과거 상태 갱신 정책을 기록한다. 일정속도 가정은 급가속·회전·카메라 운동에서 틀릴 수 있으므로 예측만으로 identity를 확정하지 않는다.
최소 비용에도 틀린 대응이 남을 수 있다
이번 연관 비용은 예측 위치와 검출 위치 차이의 절댓값(pixel)이다. 각 검출/track을 한 번만 쓰는 일대일 배정과 거리 3 pixel 이하만 허용하는 gate를 정의한다. gate는 너무 먼 후보를 제외하는 조건이다. 실제 tracker의 IoU/외형/운동 공분산 비용이나 기본 threshold와 같다고 주장하지 않는다.
검출 순서[12,18]에서 예측 A18의 비용은[6,0], B12는[0,6]이다. A→18/B→12의 합은 0, 반대 합은 12여서 첫 배정을 택한다. gate도 0인 두 후보만 통과시킨다. 가상 참값표가 A18/B12라고 별도로 주어졌다면 이 예에서는 맞는 연관이다. 반대로 이전 관측 14/16에 가장 가까운 검출을 붙이면 A→12/B→18로 서로 바뀐다. 검출 위치가 정확해도 시간 ID 오류가 생길 수 있다.
만약 두 예측이 모두 15이고 검출도[14,16]이면 각 비용은[1,1]이라 두 배정이 동률이다. 일대일 제약과 작은 비용만으로 물리 정체성을 구분할 수 없다. 외형 특징/추가 프레임·센서 또는 모호함을 유지하는 정책이 필요하다. 임의 tie-break로 하나를 골랐다면 그 결정을 확실한 관측처럼 표시하지 않는다. 급가속으로 실제 물체가 뒤돌았다면 앞의 일정속도 배정도 틀릴 수 있다.
가림은 낮은 점수와 누락을 모두 만든다
가림/흐림/작은 크기는 검출 score를 낮추거나 검출 자체를 없앨 수 있다. 모든 낮은 score를 버리면 같은 물체의 이력이 끊길 수 있지만 전부 이어 붙이면 배경 오검출이 살아남을 수 있다. ByteTrack 저자 자료는 낮은 점수 후보도 기존 track과의 일관성을 이용해 연관하는 접근을 설명한다. 모든 낮은 score가 진짜 물체라는 뜻은 아니다. SORT 원논문은 검출 품질과 연관이 추적 결과에 영향을 준다는 출발점을 제공한다.
가상 수명 정책은 마지막 검출 후 0.5 s까지 예측 유지, 그보다 오래되면 활성 track을 종료한다고 정하자. A의 마지막 관측이 t=2/x18이고 이후 검출이 없으면 t=2.25의 19는 ‘나이 0.25 s의 예측’이다. t=2.75의 등속 위치 계산은 21이지만 나이 0.75 s라 활성 관측/track으로 승인하지 않는다. 나중에 근처에서 검출됐다고 이전 ID와 무조건 같다고 하지 않는다. 실제 tracker가 frame 수로 buffer를 정한다면 영상 주기와 시간 환산도 확인한다.
Ultralytics 공식 Track 문서의 persist는 연속 프레임 사이 상태 유지에 관한 옵션이며 개체 정체성의 영구 보증이 아니다. track_buffer/연관 threshold·사용 tracker/패키지·모델 개정을 명시한다. 문서의 현재 기본 tracker를 모든 과거 버전의 기본값으로 쓰지 않는다. 이 단위는 실제 .track 호출이나 영상 추적 성능을 실행한 것이 아니다.
장비 없는 프로젝트도 실패를 측정할 수 있다
프로젝트 질문을 ‘같은 상자를 가림/교차 뒤에도 올바른 ID로 연결하는가’로 정하면 자료와 판정이 구체화된다. 원본 시퀀스/시각과 참값 ID·가림 구간을 제공하고, 실제/가상 데이터와 알려지지 않은 identity를 구분한다. 같은 영상의 인접 구간을 train/test에 섞지 않고 scene/물체·조건 단위로 분리한다. 새 조건의 가림 길이/조명·카메라 운동도 별도로 보고한다.
평가에는 검출 FP/FN뿐 아니라 ID 교체·이력 단절/복구, 예측만 지속한 기간·잘못 살아남은 track, 원본 관측부터의 지연을 포함한다. 예측 상자가 많이 남았다는 이유로 재현율이 높다고 계산하지 않는다. 정답과의 프레임별 대응/ID 규칙, 수명·미응답/모호함 처리와 집계 단위를 먼저 정한다. IoU가 좋아도 A/B가 교체되면 ‘같은 물체 이력’ 질문에는 실패일 수 있다.
성공적인 연관만 편집해 보여 주지 말고 실패 프레임과 후보 비용/선택·gate 탈락·최종 관측 시각을 남긴다. 이력의 위치는 영상 pixel이며 깊이·프레임/시간 보정 없이 실제 로봇의 목표점으로 옮기지 않는다. 기존 4.7 무결성 검사의 시각/프레임 기록을 이 프로젝트의 증거와 연결한다. 아래는 모든 참값과 정책이 주어진 합성 사례다.