Paper link : https://particle-video-revisited.github.io/
Particle Video Revisited: Tracking Through Occlusions Using Point Trajectories
Particle Video Revisited: Tracking Through Occlusions Using Point Trajectories ECCV 2022 (Oral) --> --> --> --> Sorry, your browser doesn't support embedded videos. --> --> --> --> --> Sorry, your browser doesn't support embedded videos. Sorry, your browse
particle-video-revisited.github.io
➡️ Abstract
기존 optical flow의 단점인 장기간의 motion 추정이 불가능하다는 점을 "particle video" 방법론을 응용해서 해결한 새로운 object tracking 방법론 제시
➡️ Introduction
2006년에 Sand와 Teller가 제안한 "particle video"는 장기간의 여러 frame 사이에서 영상 내 특정 particle의 motion을 추정하는 featuer matching과 optical flow의 중간다리와 같은 방법론이었다. 해당 논문 이후로 feature tracking과 optical flow 분야는 비약적인 발전을 했지만, 대부분은 몇개의 frame 쌍 사이에서의 추정을 하고 장기간 데이터에 대해서는 거의 연구가 이뤄지지 않았고 가려진 물체에 대해서는 잘 추정하지 못하는 단점이 있었다. 본 논문의 저자가 제안하는 Persistent Independetn Particles(PIPs)는 가려진 물체(occlusions)와 여러 frame (multi-frame)에 대해 잘 추정할 수 있다. 또한 첫 번째 frame에서 지정하는 query point의 개수나 위치도 자유롭게 설정할 수 있다.
➡️ Persistent Independent Particles (PIPs)
PIPs 모델의 입/출력과 구조에 대한 간단한 설명은 아래와 같다
- 입력
- \({T}\)개의 frame을 갖는 RGB 영상 데이터
- 첫 번째 frame에서 track을 진행하고자 하는 query point 좌표 \((x_1, y_1)\)
- 입력되는 query point의 개수 \({N}\)는 여러 개가 될 수 있으며, 이 경우 병렬적으로 계산될 수 있음
- 출력
- 모든 frame에 대해서 각각
- tracking된 point 좌표 \((x_t, y_t)\)
- 가려짐 여부 occlusion \({v}_t \in [0, 1]\)
- 모든 frame에 대해서 각각
- 구조
- 총 4개의 stage로 구성 ( optical flow 방법론인 RAFT의 구조와 유사 )
- Feature extraction
- Feature and tracking point initialization
- Local similarity measuring
- Positions and features updating
- 총 4개의 stage로 구성 ( optical flow 방법론인 RAFT의 구조와 유사 )
✔️ Extracting Features
입력 영상 데이터의 모든 frame에 대한 feature 추출을 진행한다. 이때 각 frame은 독립적으로 CNN를 통과하게 되며 feature로 변환되고, 해상도는 1/8 크기로 줄어들게 된다.
+ 구현에 대한 Details와 구현 코드를 찾아보면, 여기서 말한 CNN(2D Conv)은 RAFT에서 feature 추출에 사용한 "BasicEncoder"와 동일한 구조를 사용한다.
✔️ Initializing Each Target
영상 데이터의 각 frame 마다 feature를 뽑고 나서, tracking을 할 target point에 대한 feature vector를 추가로 계산한다. 이때 첫 번째 feature map에서 bilinear하게 samping해서 채널 수 \({C}\) 를 갖는 feature vector \({f}_1\) 을 구하게 된다. 이후에 있을 iterative한 update에 앞서서, \({f}_1\) 을 모든 시간에 대해 단순히 복사해 쌓은 행렬 \( \mathbf {F}^0\) 는 \({T} \times {C}\) 의 shape을 갖게 된다. 비슷한 방식으로 update를 반복하면서 예측될 position들에 대한 행렬 \( \mathbf {X}^0\) 도 최초에 설정한 track point를 모든 시간에 대해 복사해 쌓아서 만들어지고 \({T} \times 2\)의 shape을 갖는다. 이후의 update 횟수를 \({k}\)라고 했을 때, 위 두 행렬은 각각 \( \mathbf {X}^k\) 와 \( \mathbf {F}^k\) 로 표현된다.
✔️ Measuring Local Appearance Similarity
Iterative한 update 과정 도중에 현재 iteration에서 갖는 trajectory에 대한 feature나 position을 Initialization 때 계산한 feature map과의 비교를 통해 visual similarity를 구한다. 즉, \( \mathbf {F}^k\) 와 feature map를 시간 축에 대해서 내적함으로써 correlation을 계산하는 것이다. 이후에는 \((x_t, y_t)\) 에 대응되는 \({f}_k\) 위의 좌표 주변부에 대해서 crop을 함으로써 "local" score를 얻게된다.
위 과정을 통해서 정규화 되지 않은 유사도를 얻을 수 있고, 높은 값을 가질 수록 target의 feature와 convolutional한 feature이 서로 유사함을 의미한다. 이 유사도는 시간에 따라서 계산되어 \({T} \times {P \cdot P}\) 의 shape을 가지게 되는데, 이때 \({P}\) 는 local한 영역을 얼만큼의 크기로 볼 것인지에 대한 숫자이다. 추가로 RAFT의 pyramid 구조를 차용해서 feature map을 여러 scale로 변환해 동일한 과정을 반복하게 되어, 최종적으로 \({L}\) 만큼의 pyramid 층을 사용한 경우 multi-scale score crops \( \mathbf {C}^k\) 는\({T} \times {P \cdot P \cdot L}\) 의 shape을 갖게 된다.
✔️ Iterative Updates
매 iteration에서 앞서 계산된 여러 정보들을 묶어서 update할 delta 값을 계산하게 된다. \({k}\) 번째 iteration에 대해서 feature 행렬 \({ \mathbf F}^k\)와 correlation 행렬 \( \mathbf {C}^k\), 위치 값의 displacement 행렬을 묶어서 사용하게 되는데, 이때 displacemen 행렬은 \( \mathbf {X}^k\)의 모든 원소에 대해서 \((x_1, y_1)\)을 각각 빼서 계산하는데 이는 모든 trajectory의 시작점을 \((0,0)\)으로 통일하는 역할을 하기 때문이다. 또한 transformer에서 성공적으로 적용되었던 sinusoidal encoding을 추가로 적용한 정보도 함께 사용한다.
이와 같은 정보들을 모두 합쳐서 \({T} \times {D}\) 의 shape을 갖는 새로운 행렬을 12개의 block을 갖는 MLP-Mixer에 입력으로 전달하여 update를 위한 \(\Delta{ \mathbf {X}}\) 와 \(\Delta{ \mathbf {F}}\) 가 출력된다. 이 값들은 각각 \(\mathbf{F}^{k+1} = \mathbf{F}^k + \Delta{F} \) 와 (\mathbf{X}^{k+1} = \mathbf{X}^k + \Delta{X} \) 로 사용된다.
총 \({K}\) 번의 update가 이뤄졌다고 했을 때, 마지막 update 이후에 계산 될 수 있는 \({X}^K\), \({F}^K\)를 linear layer와 sigmoid를 통해 모든 시간에 대해서 해당 point가 가려졌는지 예측하는 행렬 \({V}^K\)가 계산된다.
✔️ Supervision
저자는 \({L}_1\) 거리를 통해 ground-truth trajectory와 추정된 trajectory의 loss를 계산했는데, RAFT와 비슷하게 exponential weight \({\gamma}=0.8\) 을 사용해서 후반부의 update에서 잘못 예측하는 것에 더 큰 패널티를 부여했다.
$ \mathcal{L}_{\mathrm{main}}=\sum_{k}^{K}\gamma^{K-k}||\mathbf{X}^{k}-\mathbf{X}^{*}||_{1} \tag{1} $
위 loss 식은 target이 가려진 경우나 화면 밖으로 사라진 경우들은 고려하지 못하지만 학습할 때 사용되었고, 생성된 데이터를 기반으로써 ground truth가 존재하기 때문에 사용할 수 있는 loss 식이다.
$ {\mathcal{L}}_{\mathrm{ce}}=\mathbf{V}^{*}\log\mathbf{V}+(\mathbf{1}-\mathbf{V}^{*})\log(\mathbf{1}-\mathbf{V}) \tag{2} $
또한 모델의 visibility 분류 예측에 대해서는 위와 같은 BCE loss를 사용했다.
$ \mathcal{L}_{\mathrm{score}}=-\,\mathrm{log}(\mathrm{exp}(c_{i})\big/\sum_{j}\mathrm{exp}(c_{j}))\mathrm{l}\,\{{\bf V}^{*}\not=0\} \tag{3} $
추가로 저자는 update 과정의 일부인 score map 자체를 비교하는 위와 같은 loss 식을 실험적으로 사용해봤는데, 식 \({(1)}\) 을 사용하는 것 보다 더 빠르게 수렴했다고 한다.