(MemTrack) Learning Dynamic Memory Networks for Object Tracking

tracking
2018

#1

요약

  • Object tracking에서 SiamFC 등과 같은 “Template-matching methods”는 나쁘지 않은 성능과 빠른 속도를 가지고 있지만, target object의 외형 변화에 성능이 강인(robust)하지 못함

  • MemTrack (본 연구)는 이를 해결하기 위해 external memory를 활용하였고, tracking 중 발생하는 target의 외형 변화를 극복함.

  • LSTM을 컨트롤러를 이용하여 external memory에 접근하며 read/write를 진행함 (기존 Memory Net과 동일)

  • 최근 프레임의 template에만 의존하며 tracking하는 과적합을 피하기위해 ‘gated residual template learning’을 제안

  • 50 fps 속도의 real-time에서 sota와 비교할 때 괜찮은 성능

연구 내용

Visual object tracking은 비디오의 첫 프레임에 주어진 단일 타겟 (single target)을 놓치지 않고 쫒아가는 것을 말합니다. 이를 해결하기 위한 방법으로 크게 tracking-by-detection, template matching 방식이 존재합니다.

  1. tracking-by-detection
    : 매 프레임마다 target object를 검출(detection)하고, 검출 결과를 바탕으로 target의 외형 변화를 끊임없이 학습 (online training)

  2. template matching
    : 첫 프레임이나 이전 프레임의 target patch (template)을 저장한 후, 현재 프레임에서 target과 가장 잘맞은 부분을 찾음

서로 다른 두 방식은 각각 장단점을 가지고 있습니다.

tracking-by-detection 은 매번 변화하는 target의 모습에 적응(adaptation)하며, 그 정보를 딥러닝 모델의 weights에 반영합니다. 따라서 시간이 지나 target의 모습이 변하더라도 잘 적응하고 쫒아갈 수 있습니다. 하지만 template matching 방식은 online training이 없기 때문에 모델이 target의 변화에 적응하지 못합니다.

한편, tracking-by-detection 방식에서 online training을 요구하기 때문에, 속도가 느리고 (1~2 fps) 불안정하다는 단점이 있습니다. 반면 template matching 방식은 online training이 없기 때문에 속도가 실시간 수준으로 빠릅니다. (real-time tracker)

본 연구에서는 NTM (Neural Turing Maching), MemNN (Memory Neural Networks), MemN2N 등에서 사용되는 “dynamic memory networks”를 template matching 방식의 대표 모델인 SiamFC 와 결합하였습니다.

Memory network를 이용하면 target의 정보를 external memory에 저장하고 불러올 수 있습니다.

이를 통해, target object의 정보와 시간에 따른 변화를 external memory를 활용하며, 외형 변화에 유연하게 대응합니다.

시간에 따라 변화하는 target의 정보를 수용한다는 점은 tracking-by-detection 방식과 같지만, tracking-by-detection 은 그 정보를 모델 파라미터로 반영하는 반면 MemTrack은 그 정보를 external memory에 수용한다는 차이가 있습니다.

전반적인 모델의 구조는 아래와 같습니다.

MemTrack의 전반적인 프로세스는 크게 4단계로 생각할 수 있습니다. 1) Search Image의 feature map을 계산하고, 2) LSTM Controller를 통해 메모리에서 적절한 template을 얻어온 후, 3) SiamFC 등과 같은 template-matching을 통해 target의 위치와 크기를 얻고, 4) 얻은 결과를 메모리에 업데이트하는 단계로 진행됩니다. 이 때, 메모리를 읽고 업데이트 하는 데 Neural Turing Machine에서 제안된 LSTM controller가 사용됩니다.

아래는 MemTrack의 구성 요소에 대한 개별 설명입니다.

Feature Extraction

이전 프레임 target 위치를 바탕으로 현재 프레임의 search area, {S}_{t} 를 얻습니다.
얻어진 Search Image는 ConvNet을 통해 feature map f(S_t) 을 추출할 수 있는데, 이 때 ConvNet 구조는 SiamFC에서 사용했던 구조입니다.
즉, AlexNet 구조에서 local response normalization이 batch normalization으로 대체된 구조입니다.
앞으로 AlexNet을 통해 추출된 search image의 feature maps이 메모리 네트워크에서 활용되며, target의 위치와 크기가 찾아진 후 메모리를 업데이트 할 때도 feature map이 메모리에 쓰여집니다.

Attention Scheme

기존 Template-matching 방법에서는 t 시간의 프레임에서 search image {S}_{t} 가 주어졌을 때
첫 프레임 또는 이전 프레임의 target template과 search image의 각 부분을 비교해가며 target 위치를 파악합니다.
즉, template matching 방식에서는 비교의 기준이 되는 template이 반드시 필요합니다.

본 연구에서 "external memory"를 사용하는 이유 역시, 비교하기 적합한 template을 관리하기 위합입니다.
하지만 여기서 딜레마는 지금 search image {S}_t 가 주어졌을 때, 어떤 template을 사용해야할 지 모른다는 것입니다.
더군다나, 현재 search image에서 target이 어디에 위치해 있는지 알지 못합니다. (맞춰야할 내용)

정리해보면, 현재 search image 안에 있는 target의 모습과 가장 유사한 template을 메모리에서 가져오고 싶은데, search image 안 어디에 target이 위치해 있는지 모르고, 그래서 적절한 template을 가져오는데 어려움이 있습니다.
여기에서는 이를 해결하기 위해 attention을 사용합니다.

Search image의 어떤 부분을 보고 메모리에서 template을 가져와야할 지 모르기 때문에,
각 부분을 어느 정도로 주의 깊게 고려해야되는지의 값을 얻는 것이 attention의 목적입니다.

{S}_{t} 를 n x n 크기의 square patch로 나누었을 때, i 번째 patch를 {f}_{t,i} \in {\mathbb{R}}^{n \times n \times c} 라고 합시다.
nxn 크기의 average pooling을 통해 각 patch의 채널별 평균값을 얻을 수 있습니다.

f^{*} (S_t) = {AngPooling}_{n \times n}{(f(S_t))}

이 후, 각 patch별로 적절하게 attention하여 가중치 합을 구하면, search image에서 target이 대략 어떤 부분에 있을 지에 대한 결과를 얻을 수 있습니다.

\mathbf{a}_t = {\sum_{i=1}^{L}{\alpha_{t,i}f^{*}_{t,i}}}

attention은 controller의 이전 hidden state {h}_{t-1} 과 각 square patch의 n x n average pool 결과를 바탕으로 (4), (3) 순서로 구할 수 있습니다.

LSTM Memory Controller

위에서 구한 Search Image의 attention과 이전 시간의 LSTM controller의 hidden state 값을 입력으로, t 시간의 hidden state를 계산합니다. Controller 내부는 LSTM 구조가 사용됩니다. 본 연구에서는 성능 향상을 위해 layer normalization과 dropout regularization을 함께 사용했다고 합니다.
계산된 hidden state {h}_{t} 는 추후 external memory의 read key, read strength, bias gates, decay rate 등을 계산하는데 사용됩니다.

Memory network의 전반적인 구조는 아래와 같습니다. 대부분의 내용은 NTM (Neural Turing Machine)에서 사용되는 모델과 같습니다.

Memory Reading

메모리에 저장된 정보를 가져오기 위해 메모리 네트워크에서는 read weight vector를 이용합니다.
Read weight vector \mathbf{w}_t^r 을 통해 각 메모리 슬롯의 정보를 가중치합으로 가져오게 됩니다.
적절한 read weight vector를 계산하는 것이 관건인데, 메모리 컨트롤러에서 계산한 \mathbf{h}_t 를 이용하 read key \mathbf{k}_t 를 아래와 같이 계산합니다.

image

여기에서 W^k, W^{\beta}, b^k, b^\beta 는 모두 학습가능한 파라미터입니다.

read key 값이 계산되면, 각 메모리 슬롯의 키 값과 현재 read key 사이의 유사도 C 를 바탕으로 read weight를 결정합니다.
유사도 C 는 cosine similarity를 사용합니다.

image

read weight는 각 메모리 슬롯의 key와 read key사이의 유사도를 계산한 후, softmax 함수를 통해 0~1 사이의 값으로 각각 배정되는 것을 알 수 있습니다.
이 때, read weight가 평평해지는 것을 방지하기 위해서 일반적으로 1보다 큰 read strength \beta_t 를 사용합니다.
1보다 큰 strength를 위의 식과 같이 적용할 경우, 보다 read weight가 특정 값에 샤프하게 쏠리도록 만들 수 있습니다. (sharpening)

read key 값을 바탕으로 read weight가 결정되면, 메모리에서 최종적으로 불러오는 template은 다음과 같습니다.

image

Residual Template Learning

얻어진 템플릿을 그대로 사용하게 될 경우, 최근 프레임에 overfitting 되는 현상이 종종 일어납니다.
MemTrack은 메모리에서 얻어진 템플릿을 그대로 template-matching에 사용하지 않고 "residual gate"를 이용해서 residual template을 학습합니다. 즉, 첫 프레임의 template \mathbf{T}_0 가 있을 때, 최종 template \mathbf{T}_t^{final} 은 아래와 같습니다.

\mathbf{T}_t^{final} = \mathbf{T}_0 + \mathbf{r}_t \odot \mathbf{T}_t^{retr}

여기서 \odot 은 channel-wise multiplication, \mathbf{r}_t \in \mathbb{R}^c 은 LSTM controller에서 얻어지는 residual gate 입니다. 즉, \mathbf{r}_t = \sigma(W^r \mathbf{h}_t + b^r) 으로 계산할 수 있습니다.

residual template을 학습하게 되면, 처음 template에서 각 채널별로 외형 변화를 포착하여 더해주는 방식으로 작동하게 됩니다. 실제로 논문에서는 각 채널별로 타겟의 다른 부분에 초점을 맞추고 있다는 것을 보여주기도 합니다.

Memory Writing

위에서 구한 residual template을 통해 search image에서 target의 위치와 크기를 SiamFC와 같은 방법으로 얻어낼 수 있습니다.
현재 프레임에서 새로운 target template, \mathbf{T}^{new} 를 구한 후에는, 이 결과를 바탕으로 다시 메모리를 업데이트해주어야 합니다.
메모리 업데이트는 RGB 채널에서의 \mathbf{T}^{new} 가 아닌, ConvNet을 통해 추출된 \mathbf{T}^{new} 의 feature maps을 바탕으로 진행됩니다.

메모리를 쓰는 경우에는 크게 세가지 경우가 있습니다.

  • (1) 새로운 template의 결과를 믿을 수 없어, 메모리에 새로운 정보를 쓸 필요가 없는 경우 (예를 들어, 템플릿에 너무 많은 배경이 포함)

  • (2) 이전 프레임과 크게 변화가 없어, 이 전에 읽은 메모리 슬롯을 업데이트하는 경우

  • (3) 이전과 외형적으로 큰 변화가 있어, 새로운 메모리 슬롯에 업데이트해야 하는 경우

이 세가지를 한 번에 다루기 위해, write weight는 아래와 같이 정의됩니다.

\mathbf{w}_t^w = g^w \mathbf{0} + g^r \mathbf{w}_t^r + g^a \mathbf{w}_t^a

\mathbf{w}_t^r 는 위에서 구한 read weight, \mathbf{w}_t^a 는 allocation weight (추후 설명) 이며, 그 앞에 달린 gate g 는 각각 write gate, read gate, allocation gate 입니다.

각 gate는 LSTM controller와 softmax function을 통해 다음과 같이 간단하게 구해집니다. 즉, 세 gate 값의 합은 1 입니다.
세 gate의 합이 1을 유지하며, 위의 3가지 경우에 대한 interpolation이 write weights를 통해 표현된다고 할 수 있습니다.

image

예를 들어, g^w=1 이면, \mathbf{w}_t^w = 0 이 되어 아무것도 메모리에 쓰이지 않습니다.
만약 g^r 이나 g^a 가 더 크다면 기존 메모리 슬롯에 정보가 업데이트 되거나, 새롭게 할당된 위치에 쓰이게 됩니다.

Write weight를 계산하기 위해 사용되는 access vector \mathbf{w}_t^u 와 allocation weight \mathbf{w}_t^a 는 아래와 같이 정의됩니다.

image

image

쉽게 생각하면, access vector는 이전 access vector와 read weight, write weight 값을 모두 더한 값으로, 각각의 메모리 슬롯에 접근이 얼마나 많았는지를 나타냅니다.

이 때, allocation weight는 이전 시간 기준으로 가장 접근이 낮은 메모리 슬롯을 1, 나머지는 0으로 선택한다고 이해할 수 있습니다.

Write weight와 함께 erase factor가 함께 결합되어 메모리 업데이트가 다음과 같이 일어납니다.

여기서 만약

  • g^r=1 이면 g^a=0 이 되고, (case 2)
  • g^r=0, g^a=1 이면 (case 3)

으로 업데이트 하는 것을 알 수 있습니다.

메모리 네트워크의 과정 하나하나에 집중하다보면 전체적인 그림이 헷갈리거나 지저분해보일 수 있지만,

Neural Turing Machine에서부터 나왔던 Memory Network 개념과 전체 그림을 잘 따라가다 보면 생각보다 각각의 과정이 trivial 합니다.

실험 결과

(1) Ablation Study

기존 Memory network에 추가된 attention, residual template 등의 효과를 분석하고, 알맞은 memory slot 개수를 알기 위해 OTB-2015 데이터로 실험을 진행했습니다.

아래 결과는 본 연구에서 제안한 방식이 성능 향상을 가져온다는 것과 8개의 메모리 슬롯이 가장 적절하다는 것을 보여줍니다.

또는 다른 real time tracker 들과 맞멎는 빠른 속도 (50fps)를 보여주면서 높은 성능을 보여줍니다.

자세한 실험 결과는 원문 링크을 참조하시면 됩니다.
코드는 문의해본 결과, 깔끔하게 정리 중이며 Github에 올릴 예정이라고 합니다.

자연어 처리 (NLP)에서 여러 문장을 읽고 관계를 추론하거나, one-shot learning 등에 주로 사용되는 memory network를 간단하게 object tracking에 접목한 연구입니다.
RNN 기반의 tracking 모델들이 큰 성공을 거두지 못하고 있었지만, 직접 external memory를 활용했을 때 빠른 속도를 유지하면서 높은 성능을 가져다줄 수 있다는 가능성을 보여주는 것으로 보입니다.

하지만, 본 연구에서 제안한 attention scheme과 residual template learning 등의 개념은 직관적으로 타당하게 설계되었다고 보기엔 무리가 있어보입니다.