티스토리 뷰

그림1. Multi-Camera People Tracking

이 논문은 AI City Challenge 23 Track 1에서 1등을 한 팀의 논문이다. Track 1은 Multi-Camera Peaple Tracking으로 여러 카메라에서 사람을 인식하고 같은 사람은 카메라에 상관없이 하나의 ID로 tracking하는 task이다. WILDTRACK이나 MMP-TRACK과 같은 다른 Multi-Camera tracking 데이터 셋 처럼 intrinsic과 extrinsic을 제공하지는 않고, 사람들이 움직이는 것을 위에서 바라본 bird-eye view map을 제공한다.
이미 전체 영상이 있는 챌린지여서 offline으로 작동하며, 고정된 카메라들로 이루어진 데이터셋을 다룬다.

Overall Pipeline

그림2. Pipeline

그림2에서 볼 수 있듯 크게 Single-camera Tracking과 Multi-Camera Tracking으로 나눌 수 있다. 하나의 카메라에서 tracking한 후, 각 카메라 정보를 합치는 방식이다.

Single-Camera Tracking

Single-Camera Tracking을 순서대로 따라가보자. 이 과정이 모든 카메라에서 이루어진다고 보면 된다.

  1. 영상에서 frame을 뽑은 후 Detector로 매 이미지에서 사람을 찾는다. 여기서 Detector는 yolov7를 사용했다.(깃헙 코드 기준)
  2. 인식된 사람을 크롭하여 Re-ID Feature Extractor에 넣는다. Re-ID Feature Extractor로 OSNet을 사용했다.
  3. Re-ID 모델에서 얻어진 feature를 사용해 Tracking Module에서 tracking한다. BoT-SORT를 사용했다. Re-ID model은 OSNet을 사용했다. (다른 논문에서도 OSNet을 사용하던데 코드가 활용하기 좋아서인지, 모델 구조상 이점이 있는 것인지 궁금하다. OSNet 이후에 나온 다른 성능 좋은 ReID 모델도 있는 것 같은데.)
  4. 크롭된 사람 이미지를 Pose Esimator에도 넣어 사람의 pose key point를 찾는다. 발 밑의 key point와 detection의 bbox를 사용해 사람의 위치를 찾을 기준점을 구한다.이 점으로 world coordinate에서 사람의 위치를 찾게 된다.
  5. $$ F_{g}(X_{t,id}^{k}) =
    \begin{cases}
    (\frac{x_{la} + x_{ra}}{2}, \frac{y_{la} + y_{ra}}{2}) & \quad \text{if } c_{la}, c_{ra} \geq \tau_{pose} \newline
    (x + w/2, y + h) & \quad \text{otherwise}
    \end{cases}
    $$
  6. Camera Self-calibration으로 각 카메라의 homography를 미리 구해두었다.
    여기서 self-calibration은 chessboard 같은 것 없이 카메라로만 진행해서 self-calibration이라고 하는 것 같다. WILDTRACK이나 MMP-Track 같은 multi-cam multi-object tracking의 경우 camera parameter를 제공한다. 하지만 AI Challenge 데이터는 제공해주지 않아서 카메라 별로 손으로 6-12개의 점을 찍어 homography를 바로 구했다고 한다.
  7. homography로 사람의 발 밑 점이 world coordinate에서 어느 위치인지 찾는다.
  8. $$F_{3D}(X_{t,id}^{k})=H^{k} \cdot F_{g}(X_{t,id}^{k})^{T}$$

Multi-Camera Tracking

Multi-Camera Tracking은 크게 Anchor Guided Clustering과 Spatio-Temporal Consistancy ID Reassignment의 두 가지 단계로 나뉜다.

Anchor Guided Clustering

그림3. Anchor Guided Clustering

이 논문은 offline tracking이므로 각 카메라별로 모든 프레임의 정보를 가지고 있다. 따라서 전체 영상에서 일부 프레임을 sampling할 수 있다. 모든 카메라에 대해 동일한 시점을 sampling하고, 이를 하나로 모아 clustering한다. 이때 Re-ID 모델에서 얻은 각 객체의 apperance feature로 Hierarchical Clustering을 한다. Clustering한 결과로 여러 anchor들을 얻을 수 있는데 이 anchor가 multi-camera tracking의 global ID가 된다. 이러한 방식을 사용하면 각 anchor에는 다양한 view rotation, 조도, 인식된 크기 등의 다양한 조건에서 얻어진 appearance feature가 존재하게 된다.

 

이후 모든 single camera tracking의 모든 tracklet의 각 프레임을 anchor와 비교하여 cost를 구하고, hungarian algorithm을 통해 각 anchor에 해당하는 global ID를 부여한다. 이때 하나의 tracklet에 할당된 global ID가 여러개 일 수 있다. 이를 sliding window내 ID에 대해 majority voting하여 하나의 global ID를 가지게 한다.

$$\textrm{cost}(d_{i,t}, a_{j}) = 1-\frac{1}{k} \sum_{l=1}^{k} \frac{d_{i,t} \cdot a_{j,l}}{|d_{i,t}||a_{j,l}|}$$

 

Spatio-Temporal Consistency ID Reassignment

Spatial consistency와 temporal consistency를 나누어 생각한다.

Spatial consistnecy는 Single tracking에서 5번, 6번을 통해 구해진 world coordinate position($\hat{X}^{k}_{t,id}$)을 사용한다. 동일한 시점(프레임)과 ID를 가지는 위치에 대해서 서로 다른 모든 카메라에 대해 평균 오차($D_{spatial}$)를 구하고, 이 오차로 confidence 값을 정의했다. (여기서 self-defined confidence라는 표현을 사용하는데 일반적으로 사용되는 건 아니지만 논문에서 정의해서 이렇게 쓰는 것인지 궁금하다.)

$$D_{spatial}(\hat{X}^{k}_{t,id}, t, id)=\frac{1}{N}\sum_{l \neq k}||\hat{X}^{l}_{t,id}-\hat{X}^{k}_{t,id}||$$

$$conf_{i \to j}(\hat{X}^{k}_{t,i})=1-\frac{D_{spatial}(\hat{X}^{k}_{t,i},t,j)}{D_{spatial}(\hat{X}^{k}_{t,i},t,i)}$$

 

Temporal consistency는 일종의 smothing을 의미하는 것으로 보인다. 위치가 갑작스럽게 변하면 이상하니 완화시키겠다는 것이다. 실제 움직임과는 차이가 있겠지만 안정적인 출력을 얻을 수 있다. 이 과정은 시간에 따른 sliding window를 만들고 관계도에 따라 weight를 할당해 weighted average를 사용한다.



댓글
최근에 올라온 글
Total
Today
Yesterday
최근에 달린 댓글
링크
공지사항
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함