✔️ Project page : https://cotracker3.github.io/
✔️ Practice link : https://huggingface.co/spaces/facebook/cotracker
➡️ Abstract
이 논문은 현시점에서 SoTA를 달성하는 Point Tracking 모델들이 실제 비디오를 Annotation하기 어렵기 때문에 주로 Synthetic 데이터로 학습된다는 문제를 지적한다. Synthetic 데이터와 실제 비디오 간의 통계적 차이로 인해 성능 저하가 발생할 수 있다는 점을 강조하며, 이를 개선하기 위한 CoTracker3를 제안한다.
이 모델은 Self-Supervised Learning 방식으로, Annotation이 없는 실제 비디오를 Pseudo 레이블을 사용하여 학습에 활용한다. 또한, 기존 CoTracker 모델구조에서 불필요하거나 복잡한 구성 요소를 제거해 더 간단하고 작은 아키텍처를 구현하며, 1,000배 적은 데이터를 사용하면서도 더 나은 결과를 얻을 수 있다고 주장한다.
➡️ Introduction & Related Work
Point Tracking은 정밀한 재현력이 필요한 영상 편집이나 3D Reconstruction과 같은 같은 작업을 위한 주요 과정중 하나이다. 최근에는 PIPs의 영감을 받아 Transformer 네트워크 구조를 기반으로 급격히 발전하고 있다.
관련 선행 연구로는 Point Tracking 분야를 위한 벤치마킹을 만들고 제공한 TAP-Vid, PIPs의 구조를 개선하고 확장한 TAPIR, 동일 저자가 제안한 Transformer 구조 기반의 CoTracker가 있다. 하지만 위 모델들의 학습에 필요한 Annotation된 데이터를 구하기는 비용이 많이 들기에, BootsTAPIR과 같이 Semi-Supervised Learning으로 접근하는 방법론도 연구되었다.
CoTracker3의 저자는 이와 같은 여러 선행 연구 모델에서 제시한 서로 다른 각 구조 모듈들을 중 정말 필수적인 모듈을 골라내어 간단하면서 성능이 좋은 구조를 찾아내었다고 주장한다. 성능적으로도 CoTracker3는 BootsTAPIR 보다 TAP-Vid와 Dynamlc Replica 벤치마크에서 월등한 지표를 보인다고 한다.
본 논문에서는 새로운 Point Tracking 모델인 CoTracker3를 제안한다. 이는 더 최신의 새로운 아이디어를 적용해서 간단하고 데이터 효율적이게 개선한 모델이다.
➡️ Method
Notation 및 모델 입출력 내용 정리
- Video: \({ \texttt{$(I_t)_{t=1}^{T}$} }\)
- 연속한 \({T}\)개의 Frame들에 대해서 \({ \texttt{$I_t \in \mathbb{R}^{3 \times H \times W}$} }\)
- Query point: \({ \texttt{$Q = (t^q, x^q, y^q) \in \mathbb{R}^3$} }\)
- \(t^q\)는 query frame의 index를 나타내고, \((x^q, y^q)\)는 query point의 최초 위치 정보
- Model Output(point track): \(P_t = (x_t, y_t) \in \mathbb\{R\}^2\), \(t = 1, \ldots, T\)
- 추적된 point들 중 query point 시점에서는 \((x_{t_q}, y_{t_q}) = (x^q, y^q)\) 를 만족해야 함
- 또한 추가로 visibility와 confidence를 예측함
- visibility: \(\mathcal{V}_t \in [0, 1]\)
- 추적된 point가 visible( \(\mathcal{V}_t = 1\) ) 한지 occluded( \(\mathcal{V}_t = 0\) )한지 나타내는 출력 값
- confidence: \(\mathcal{C}_t \in [0, 1]\)
- 모델이 출력한 추적 point 위치에 대한 확신도
- visibility: \(\mathcal{V}_t \in [0, 1]\)
- 모델은 최초의 track을 모두 query point \(P_t := (x_{t_q}, y_{t_q}), t = 1, \ldots, T\) 로, confidence와 visibility는 0으로 초기화( \(\mathcal{C}_t := 0\) , \(\mathcal{V}_t := 0\) )하며, 이후에 iterative하게 update함
3.1 Training Using Unlabelled Videos
전체적으로 Teacher-Student 구조를 사용한다. Teacher로는 다양한 기존의 Tracker 모델들을 종합해서 실제 video의 label을 추론하도록 하고 이 결과를 Pseudo-label로 사용하게 된다. Student는 저자가 직접 synthetic video를 통해 pre-train한 모델을 기반으로 Pseudo-label을 통해 추가 학습을 진행한다.
여기서 중요한 점은 Teacher로 사용되는 여러 Tracker들도 결국에는 synthetic 데이터로만 학습이 되어있다는 점인데, 어떻게 위와 같은 Teacher-Student 구조를 통해 Student 모델이 개선될 수 있는지에 대해서 아래와 같이 근거를 제시한다.
- Student 모델의 입장에서 더 많은 양의 synthetic 데이터를 통해 학습하는 효과가 있음
- 실제 Video 를 통해 추가 학습하면 합성 데이터와 실제 데이터 간의 분포 변화가 완화됨
- Teacher 모델이 annotation을 하는 과정은 ensemble 및 voting 효과가 있어서, Pseudo-annotation Noise를 줄이는 효과가 있음
- Student 모델은 여러 Teacher Tracker의 다양한 강점을 물려받을 수 있어서 일반화의 관점에서 긍정적으로 작용함
Dataset.
위와 같은 학습 방식을 척용하기 위해서 주로 인간과 동물에 대한 움직임을 포함하는 다양한 장면이 담긴 Internet 상의 데이터셋을 수집했다(30초 정도의 길이를 갖는 약 100,000개의 영상). 결과 부분에서 학습 데이터셋의 양 변화에 따른 성능 변화를 함께 실험했다.
Teacher models.
철저한 Pseudo-annotation을 만들기 위해서 저자는 Kubric (synthetic) 데이터를 통해 학습된 다양한 Tracker 모델들 (CoTracker3 online, CoTracker3 offline, CoTracker, TAPIR)을 사용했다. 저자는 학습 과정 도중에 각 Batch 별로 랜덤하게 Frozen Tracker Teacher 모델 하나를 뽑아서 Pseudo-annotation을 추론하게 했다. 이는 곧 여러 Epoch을 거치면서 동일한 Batch 데이터가 서로 다른 Teacher이 만들어낸 Pseudo-annotation을 학습의 정답으로 사용하도록 해서 Student의 일반화 성능을 확보할 수 있게 했다.
Query point sampling.
Tracker는 영상 뿐만 아니라 추적할 Query point를 입력으로 받아야한다. 이를 위해 SIFT 알고리즘을 사용하는데, 영상에서 Random하게 한 Frame을 선택하고, 해당 Frame에서 SIFT를 적용해 Query point들을 생성하게 된다. 이 방식은 이미지에서 특징이 잘 나타나지 않는 애매한 경우에는 Query point를 찾지 못하는 특성이 있는데, 이를 통해 추적이 어려운 포인트 및 영상 자체를 제외하여 학습 안정성을 높아졌다고 주장한다.
Supervision.
Student 모델이 예측한 Point들의 경로는 Synthetic 데이터로 Pre-train된 모델과 동일한 Loss Function을 적용한다. 다만, Occlusion과 Confidence를 고려하기 위한 작은 수정이 적용된다. 이는 이후 Section 3.3에서 자세히 다룬다.
3.2 CoTracker3 Model
CoTracker3 모델은 총 2가지의 버전이 있음
- CoTracker3 Online
- sliding window 방식을 사용
- 입력 영상에 대해서 시간 순서대로 sequential하게 처리
- 정방향만 고려한 tracking points 가능
- 상대적으로 연산량이 적어서 Real-Time 처리 가능
- sliding window 방식을 사용
- CoTracker3 Offline
- 영상 전체를 하나의 window로 처리
- 정방향과 역방향 모두를 고려한 tracking points 가능
- Online 버전에 비해서 Occluded points를 더 잘 추적
- Online 버전에 비해서 더 장기적인 시점이 고려된 추적 가능
- 상대적으로 계산에 필요한 메모리의 양이 큼
- 영상 전체를 하나의 window로 처리
Feature maps.
먼저, CNN을 통해 Dense \({d}\)-차원 feature maps을 계산하는 것으로 시작한다 ( \(i.e.,\ \Phi_{t}\,=\,\Phi(\text{I}_{t}),t\,=\,1,\cdot\cdot\cdot\,,T.\) ). 이때 원본 영상은 계산의 효율성을 위해 \({k=4}\)를 통한 downsampling을 진행되어 있는 상태이다 ( \({\Phi_{t}\in\mathbb{R}^{d\times{\frac{H}{k}}\times{\frac{W}{k}}}}\) ). 또한, 해당 처리가 된 영상을 \({S=4}\) 단계의 서로 다른 해상도 변경해서 feature maps을 계산한다 ( \( i.e., \Phi_{t}^{s} \in \mathbb{R}^{ \left( d \times \frac{H}{k 2^{s-1}} \times \frac{W}{k 2^{s-1}} \right) }, \, s = 1, \cdots, S. \) )
4D correlation features.
Query point \({ Q = (t_q, x_q, y_q), \quad t = 1, \dots, T }\)가 영상의 다른 모든 프레임 \({ (t = 1, \dots, T) }\)에서 어디에 위치할지 예측하기 위해서 correlation을 계산한다. 다시 말해서, 시점 query frames \({t_q}\)의 query 좌표들 \({(\text{x}^q, \text{y}^q)}\)의 주변부에 위치한 feature maps \({ \Phi_{t^q}}\)와 전체 시점 frames의 현재 예측된 track위의 점 주변부 \( { \mathcal{P}_t = (\text{x}_t, \text{y}_t) } \)의 feature maps \({ \Phi_{t}, t = 1, \cdots, T }\) 사이의 correlation을 계산하게 된다.
구체적으로, 주변부를 어떻게 표현하는지 살펴보자. 모든 점 좌표 \( \mathcal{P}_t \)의 서로 다른 scale을 가지도록 추출된 feature vector 주변 정사각형 이웃을 다음과 같이 수식으로 표현 수 있다..
$ \phi_{t}^{s}=\left[\Phi_{t}^{s}\left(\frac{\text{x}}{k s}+\delta,\frac{\text{y}}{k s}+\delta\right):\,\delta\in\mathbb{Z},\;\|\delta\|_{\infty}\leq\Delta\right]\in\mathbb{R}^{d\times(2\Delta+1)^{2}},\quad s=1,\ldots,S, \tag{1} $
feature map \({\Phi_{t}^{s}}\)은 좌표 \({(\text{x}_t, \text{y}_t)}\) 주변을 bilinear interpolation해서 만들어진다. 따라서 각각의 scale \({s}\)에 대해서 \({\phi_{t}^{s}}\)는 \({(2\Delta + 1)^2}\)의 크기를 갖는 grid에 pointwise \({d}\)-차원 features를 갖게된다.
다음으로는, 모든 scale \({s = 1, \cdots, S}\)에 대해서 4D correlation를 \({\langle\phi_{\mathrm{t}^q}^{s},\phi_{t}^{s}\rangle=\mathrm{stack}((\phi_{\mathrm{t}^q}^{s})^{\mathsf{T}}\phi_{t}^{s})\in\mathbb{R}^{(2\Delta+1)^{4}}}\)와 같이 정의한다. 직관적으로 이 연산은 query point \({(\text{x}^q, \text{y}^q)}\) 근처의 feature vector와 track point \({(\text{x}_t, \text{y}_t)}\) 근처의 feature vector를 비교함으로써, track point 위치를 update하기 위한 예측을 하는 과정이다. 이 correlation들을 이후 Iterative update를 위해 transformer에 입력으로 사용하기 전에, MLP를 통해 차원을 줄여서 correlation feature로 가공하는데 이를 수식으로 나타내면 \({\mathrm{{Corr}}_{t}={\big(}{\mathrm{MLP}}(\langle\phi_{\mathrm{t}}^{1},\phi_{t}^{1}\rangle),\cdot\cdot\cdot,{\mathrm{MLP}}(\langle\phi_{\mathrm{t}}^{\mathrm{S}},\phi_{t}^{\mathrm{S}}\rangle))\in\mathbb{R}^{p S}}\)로 표현할 수 있다.
Iterative updates.
모든 시간 \({t=1, \cdots, T}\)에 대해서 Confidence \(\mathcal{C}_t\)와 Visibility \(\mathcal{V}_t\)는 0으로, tracks \(\mathcal{P}_t\)는 최초의 query point \(\mathcal{Q}\) 좌표로 초기화한다. 이후에 위와 같은 값들을 모두 Transformer에 입력으로 사용하는 iterative한 update 과정을 거친다.
또한, 매 Iteration마다 Frame별 displacement를 Fourier Encoding을 사용하여 트랙을 임베딩하는데 수식으로 \({\eta_{t\rightarrow t+1}\;=\;\eta(\cal{P}_{t+1}\;-\;{\cal P}_{t})}\)와 같이 표현할 수 있다. 그 이후에 양방향 track embedding(\( \eta_{t\rightarrow t+1} \) and \( \eta_{t-1\rightarrow t} \) ), Confidence \(\mathcal{C}_t\), Visibility \(\mathcal{V}_t\), 4D correlations \( \mathrm{{Corr}}_t \)를 모든 query point에 대해서 다 합쳐서 이후 transformer의 입력으로 사용한다. \(i\,=\,1,\cdot\cdot\cdot\,\cdot\,\cdot\,\cdot\,N : \mathcal{G}_{t}^{i}\,=\,\left(\eta_{t-1\to t}^{i},\eta_{t\to t+1}^{i},C_{t}^{i},\mathcal{V}_{t}^{i},\mathrm{Corr}_{t}^{i}\right)\) \(\mathcal{G}_t^i\)는 결국 전체 시간 \({T}\)와 모든 \({N}\) 개의 query point에 대한 차원으로 확장되는 grid 형식의 Transformer 입력 Token의 역할을 하게 된다. Transformer \(\Psi\) 는 이러한 grid를 입력으로 받고 Fourier time embedding과 Time attention, Group attention을 추가로 사용한다. 또한 계산의 효율성을 위해 Proxy attention을 추가로 사용한다. 이러한 Transformer의 출력으로 얻게되는 Delta 값( \({(\Delta\mathcal{P}, \Delta\mathcal{C}, \Delta\mathcal{V}) = \Psi(\mathcal{G})}\) )들을 통해 매 iteration마다 값들을 업데이트( \({\mathcal{P}^{(m+1)}=\mathcal{P}^{(m)}+\Delta\mathcal{P}^{(m+1)};\mathcal{C}^{(m+1)}=\mathcal{C}^{(m)}+\Delta\mathcal{C}^{(m+1)};\mathcal{V}^{(m+1)}=\mathcal{V}^{(m)}+\Delta\mathcal{V}^{(m+1)}}\) )하게 된다. 이때 업데이트를 진행할 때마다 업데이트 된 track point \(\mathcal{P}^{(m+1)}\) 근처의 point wise feature \({\phi}\)를 resample하고, correlation \(\mathrm{Corr}\)을 다시 계산하게 된다.
3.3 Model Training
본 모델은 6의 Threshold와 iteration 마다 exponential하게 증가하는 weight를 갖는 Huber Loss를 사용한다. Occluded point에 대해서는 더 작은 weight을 부여하도록 term을 설정한다.
$ {\mathcal{L}}_{\mathrm{track}}(P,P^{\star})=\sum_{m=1}^{M}\gamma^{M-m}(\mathbb{H}_{o c c}/5+\mathbb{H}_{v i s})\,\mathrm{Huber}(P^{(m)},P^{\star}) \tag{2} $
이때, \(\gamma = 0.8\)을 사용해서 최근의 iteration에 더 큰 weight을 부여해서, visible point에 대해 잘 tracking 할 수 있도록 우선순위를 부여하는 역할을 한다.
Confidence와 Visibility는 Binary Cross Entrophy Loss를 통해 매 iteration 마다 학습하게 되는데, Confidence의 GT의 경우 예측한 track point와 GT track point 사이의 거리가 12픽셀 보다 적은 경우 1로 간주하는 indication function을 사용한다. 또또한 Confidence와 Visibility 모두 Loss 계산 전에 sigmoid를 거치게 된다. 이 내용은 아래 수식으로 표현할 수 있다.
$ {\mathcal{L}}_{\mathrm{conf}}(\mathcal{C}, \mathcal{P}, \mathcal{P}^{\star})=\sum_{m=1}^{M}\gamma^{M-m}\,\mathrm{{CE}}(\sigma(\mathcal{C}^{(m)}), \unicode{x1D7D9}[\Vert \mathcal{P}^{(m)} - \mathcal{P}^{\star} \Vert_2 < 12] ) \tag{3} $
$ {\mathcal{L}}_{\mathrm{occl}}(\mathcal{V},\mathcal{V}^{\star})=\sum_{m=1}^{M}\gamma^{M-m}\,\mathrm{{CE}}(\sigma(\mathcal{V}^{(m)}),\mathcal{V}^{\star}) \tag{4} $
Online model.
Online과 Offline 모드 둘 다 동일한 모델 구조를 사용하지만, 학습 방식에 차이가 있다. Online의 경우 \({T}^{\prime}\)의 크기를 갖는 window를 사용해서 학습하는데, window 내에서 track point를 예측하고 \({T}^{\prime} / 2\) 프레임 만큼 정방향으로 이동해서 track point를 예측한다. 이러한 과정을 전체 영상에 대해서 반복하게 되고, 겹쳐지는 예측 부분에 대해서는 이전 window의 출력값이 현재 window의 초기화 값으로 사용된다.
학습이 진행되는 동안, (2)와 (4)에 해당하는 Loss 식은 모든 window마다 각각 사용하게 되고, 모든 window에서 나온 출력들의 평균을 취해서 최종 track point 결과를 산출한다