(VITAL) Visual Tracking via Adversarial Learning

cvpr
sota
cvpr2018
tracking

#1

VITAL (Visual Tracking via Adversarial Learning)

저자: Yibing et. al.

출처: CVPR 2018 (spotlight)

요약 (Summary)

CVPR2018에서 spotlight을 받은 object tracking 연구입니다.
Tracking-by-detection 방식의 알고리즘이며, 트래킹 분야에서는 최초로 “Adversarial Learning”이 사용되었습니다.

  • 외형 변화(Appearance Variations in Temporal Domain)를 고려해서 positive sample을 얻은 후, 모델을 학습함
  • Adversarial Learning을 통해 외형 변화에 둔감하고 강인한 (insensitive, robust) 특징을 타겟에서 추출하기 원함
  • 이를 위해 feature map을 적절히 dropout하는 mask를 만들어냄 (generative model)
  • 학습 데이터 내 class imbalance 해결을 위해, high-order cost sensitive loss 사용
    (기존 cross entropy의 term들에 확률 p에 비례한 weight 추가)
  • SOTA 수준 성능, 속도는 평균 1.5 fps

배경 (Background)

Tracking-by-detection 방식의 트래킹 모델은 크게 두 가지 학습이 진행됩니다.

먼저, 타겟을 중심으로 수많은 bounding box를 샘플링합니다.

그 다음, 타겟과 얼마나 겹쳐있는지 (IoU) 점수를 바탕으로 많이 겹쳐져 있으면 타겟, 그렇지 않으면 배경이라고 레이블하고 딥러닝 기반의 분류기 (타겟-배경을 분류하는 0-1 분류기)를 학습합니다.

즉, 타겟과 배경을 잘 분별하는 특징 (discriminative representations)을 분류기를 통해 학습하고, 우리가 원하는 타겟인지 아니면 배경인지를 분류함을 통해 트래킹을 진행하게 됩니다.

대표적인 모델로 MDNet이 있으며, 딥러닝 기반 트래커 중에서는 SOTA 성능을 보여주는 모델입니다.

이 논문에서 제안된 VITAL 모델이 해결하고자 하는 문제는 두 가지:

  1. 학습에 사용되는 positive sample들은 시간에 따라 변화하는 타겟의 외형 정보를 고려하지 못한다.
  2. 샘플링하여 학습에 사용하는 데이터는 클래스 불균형(class imbalance) 현상이 심하다.

Insufficient Variation in Positive Samples

VITAL이 해결하고 싶은 주요 문제는 샘플링할 때 나오는 positive sample이 분류기가 타겟의 다양한 외형 변화를 학습하는데 적합하지 않다는 점입니다. 학습 때 사용하는 positive samples은 대부분 너무 겹쳐있어 (오버랩이 심해), 시간이 지남에 따라 발생할 수 있는 타겟의 외형 변화에 대한 정보가 충분하지 않습니다. 예를 들어, 타겟이 다른 장애물에 부분적으로 모습이 가리기도 하고 (occlusion), 회전하거나 고개를 돌려 비춰지는 부분이 달라지기도 합니다. 논문에서는 이러한 변화를 “Appearance Variation in Temporal Domain”이라는 표현을 자주 사용합니다.

트래킹에서 미래의 외형 변화를 미리 예측하는 것은 (사실상) 불가능에 가깝습니다. 그리고 모델 학습에 사용하는 positive sample들은 이전 프레임에서 추출되기 때문에, 미래의 발생가능한 변화들을 포함하는 것은 사실상 불가능합니다.

그렇다면, 적어도 학습에 사용하는 positive sample들에서 추출하여 분류기에서 사용하는 특징들이 각 프레임에 너무 치중되지 않도록 해야합니다. 그렇지 않으면, 각 프레임에서”만” 보이는 것에만 치중하게 되고, 미래에 외형이 조금만 변하더라도 성능이 급격히 떨어지기 때문입니다.

정리하면, 우리가 모델을 학습할 때, 딥러닝 모델이 외형 변화에 robust한 특징을 사용해야하며, 특정 모습에 오버피팅 되는 것을 막아야합니다.

어떻게 이 것을 만들어내는지를 논하기 앞서, 결국 원하는 것은 아래 그림과 같습니다. 아래 그림은 각 프레임 별로 타겟일 확률에 대한 엔트로피를 표현한 것입니다.

빨간색은 엔트로피가 높은 부분 (타겟인지 배경인지 모르겠는 부분), 파란색은 확실히 구분할 수 있는 부분입니다. 원래의 모습이 얼굴의 앞모습이었지만, 고개를 돌리는 순간 인식되는 외형이 많이 변하게 됩니다. 이럴 경우, 우리는 옆 모습을 본적이 없기 때문에 판단에 대한 불확실도가 높아질 것입니다. 이 때도, 앞모습에 과적합된 특징을 사용하는 것이 아닌, 확실하게 트래킹할 수 있는 특징을 사용하겠다는 것입니다.

VITAL에서는 다양한 외형 변화를 반영한 positive sample을 얻기 위해 “generative model”을 사용하여, data augmentation을 합니다. 여기에서 generative model을 학습하기 위해 GAN 등에서 사용하는 adversarial learning을 적용합니다.

Generative Model with Adversarial Learning

우선, VITAL의 모델 구조는 아래와 같습니다. 이미지에서 추출된 target candidate의 feature map을 추출하기 위해 VGG-M 모델의 처음 3개의 ConvNet layer를 사용합니다.

기존의 방법이라면 여기서 얻어진 feature maps을 Fully Connected layer에 입력하여 foreground-background 분류를 진행합니다.

하지만 VITAL은 ConvNet에서 얻어진 feature map을 그대로 사용하지 않고, height, width가 feature map과 같은 1 채널 짜리 mask를 통해 처리된 feature map을 사용합니다.

여기서 mask의 역할은 현재 프레임에서만 유독 두드러진 특징에 overfit되지 않도록, 그 부분을 가리는 일종의 attention 역할을 합니다. 일반적인 attention이 중요한 부분과 중요하지 않은 부분을 알기 위해서 사용하지만, 여기서는 현재 프레임에서 background와 target을 구분할 때 두드러진 부분을 사용하지 않기 위해 존재한다는 점에서 차이가 있습니다.

왜, 배경과 구분할 때 유용한 특징을 가리는지 의문을 가질 수 있지만 이렇게 학습을 하면 시간이 지남에 따라 외형이 변하더라도 나타나는 일반적인 특징을 통해 배경과 타겟을 분류할 수 있다고 논문에서는 주장합니다. 이 때 사용할 mask를 학습하기 위해, adversarial learning을 사용합니다.

GAN 등에서 사용하는 기본적인 adversarial learning의 loss는 아래와 같습니다. 간단히 설명하면 다음과 같습니다. 모델은 생성기 G, 판별기 D로 구성됩니다. 판별기 D는 진짜 이미지 x 를 진짜라고, 랜덤 노이즈 z 로부터 G에 의해 생성된 이미지 D(G(z)) 를 가짜라고 말할 확률을 최대화합니다. 반대로 생성기 G는 D가 자신이 만든 이미지를 가짜라고 말할 확률을 최소화합니다.

VITAL에서는 mask 이 후, 타겟과 배경을 분류하는 fully connected layer 분류기를 판별기 D라고 정의하고, mask를 통해 feature map을 생성하는 부분을 G라고 정의합니다. 이 때, loss function은 아래와 같습니다.

여기서 \cdot 은 dot product가 아니라 dropout operation입니다. C 는 feature map, G(C) 는 feature map C 를 통해 만들어진 mask, 그리고 M 은 discriminative feature를 확인하는 실제 mask 입니다. (실제 mask가 무엇인지는 뒤에서 설명) 각각의 mask는 height, width가 feature map C 와 같고 1개의 채널로 구성됩니다.

Adversarial learning을 통해 mask generator를 학습하기 때문에, 학습이 되지 않은 처음에는 random mask를 만들어낼 것입니다. 하지만 반복적으로 학습을 하게 될 경우, discriminator D가 positive sample을 정확하게 분류하기 못하도록 하는 mask를 생성할 수 있게 됩니다. 즉, positive sample의 feature 중 어떤 부분을 가려야 배경과 구분하기 힘든지를 학습하는 것입니다. 이렇게 학습된 mask가 배경과의 구별에 필요한 주요 feature를 계속 가리게된다면, 시간에 따라 positive sample의 외형이 변하더라도 공통적으로 사용될 수 있는 positive sample의 특징을 얻을 수 있다는 것이 VITAL이 문제를 해결하는 방식입니다.

학습은 D, G 순서로 진행합니다. 먼저 generator를 통해 mask를 생성한 후, supervised learning을 통해 D를 학습합니다. 이제 G를 학습해야 하는데 실제 mask M 이 필요합니다. 이를 위해 먼저 생성한 여러 mask를 씌운 feature map을 모두 D에 넣어 D의 loss를 계산합니다. 여기에서 loss가 가장 큰 mask가 discriminator의 분별력을 가장 낮추는 mask라고 판단하고, M 으로 선택합니다. 이 후, 학습을 진행합니다.

Class Imbalance Problem & High-order Cost Sensitive Loss

두 번째 문제는 class imbalance problem입니다. 이 문제는 머신러닝 분야에서 빈번히 발생하는 문제인데요. 학습 데이터의 레이블이 불균형적인 상황을 말합니다. 예를 들어, 훈련 데이터 중 90%는 정상, 10%만 비정상 데이터라면 두 클래스를 잘 분리하도록 모델을 학습하는 것이 어렵습니다. tracking-by-detection에서도 positive sample의 수보다 negative sample의 수가 훨씬 많습니다. 이 문제를 해결하기 위해 다양한 방법 (bagging, boosting, loss weighting 등)이 있습니다.

VITAL에서는 최근 제안된 focal loss를 사용합니다. Focal loss는 아래와 같이 cross entropy의 각 term에 확률 계산 결과를 고려하여 weighting을 하는 방법입니다.

이 focal loss를 VITAL의 objective function에 적용하면 아래와 같습니다.

실험 결과 정확도를 높일 뿐 아니라, 각 이터레이션마다 모델 수렴의 속도를 높인다고 합니다. (하지만 ablation study 결과를 봤을 때 수치상으로 high-order cost sensitive loss의 효과는 거의 미미합니다…)

Tracking via VITAL

VITAL을 트래킹에 사용하기 위해 먼저 초기화를 진행합니다.
초기화는 두 단계로 진행되는데요.

우선 MDNet과 같이 다양한 동영상의 프레임에 있는 이미지와 bounding box를 사용하여 positive/negative 샘플을 추출하고 offline pre-training을 진행합니다.

이 후, 우리가 트래킹 하고자하는 동영상이 시작할 때 첫 번째 프레임에서 타겟 주위에서 무작위로 샘플링하여 fine-tuning을 진행한 후, 트래킹을 시작합니다.

Offline pre-training에서 안정적인 학습을 위해 D와 G를 처음부터 한꺼번에 학습하지 않고, 우선 D를 몇 차례 학습하고 난 후 G와 함께 학습합니다.

Online detection할 때는 G를 제거한 후, 기존 tracking-by-detection 방식과 동일하게 진행합니다. 주어진 프레임에서 candidate proposal을 만들어낸 후, 각 부분에서 ConvNet feature를 뽑고, 분류기를 통해 target probability를 계산한 후 가장 높은 candidate를 target으로 결정합니다. 이 때, G를 사용하지 않더라도 분류기가 masking한 특징들로부터 학습되어 있기 때문에, 보다 ‘appearance variation in temporal domain” invariant한 특징을 가지고 분류를 할 수 있습니다.

그리고 일정 시간마다 각 프레임에서 추출된 샘플을 가지고 G와 D를 jointly update합니다.

결과

논문에서는 ablation study와 함께, 다양한 벤치마크에 대해서 최신 sota 모델들과 성능을 비교합니다. Cvpr-2013 데이터셋에서 (precision, IoU AUC)가 각각 (0.950, 0.710)으로 sota 수준의 성능을 보여줍니다. (ECO: (0.930, 0.709), MDNet: (0.948, 0.708)) 자세한 결과 수치는 본문을 참조하시기 바랍니다.

정리

Tracking 분야에서 ‘Adversarial Learning’을 사용한 첫 번째 논문입니다. 성능 역시 SOTA를 웃도는 성능을 보여주며, cvpr2018 spotlight 논문으로 선정되었습니다.

트래킹에서 가장 중요한 이슈 중 하나는 타겟의 모습이 시간에 따라 변화하고, 테스트 영상에 나올 타겟의 구체적인 정보를 미리 알 수 없다는 점입니다. 그렇기 때문에 영상 속에서 나타나는 타겟의 외형 변화 또는 주위 환경 변화 등에 유연하게 대처할 수 있어야합니다. 결국, 특정 프레임에서 나타나는 특징이 아닌 타겟의 일반적인 특징을 잘 학습해야 이 문제를 해결할 수 있습니다.

VITAL은 adversarial learning을 통해 mask를 학습함으로써, 특정 프레임에서만 두드러진 특징이 아닌 타겟의 일반적인 특징을 사용한 연구라는 점에서 의미가 있습니다. 또한 mask를 attention의 일종으로 본다면, 2018년 cvpr에 발표된 연구들은 channel attention을 적절히 잘 사용한 연구들이 많다는 점이 두드러집니다.


'Object Tracking' 카테고리의 설명
#2

Tracking 시점에, G를 사용하지 않는다고 되어 있는 것 같은데, 일정 시간마다 G와 D를 업데이트한다는게 어떤 의미인가요? Online Update 부분이 궁금합니다.


#3

네 모호하게 표현해서 헷갈리게 만들었네요. 우선 Tracking 할 때는 G를 사용하지 않습니다. 즉, 학습이 끝나고 tracking 할 때는 ConvNet에서 feature map을 뽑은 후, mask 처리를 하지 않고 그대로 분류기에 입력하여 target-background 여부를 판단합니다.
매 프레임에서 트래킹을 완료한 후, Online update를 위해서 발견한 타겟 주변에 random sampling을 하고 IoU를 기준으로 positive/negative 레이블된 training data를 확보합니다. 그리고 주기적인 프레임마다 모델을 추가로 업데이트합니다. online tuning을 할 때는 G, D 전체에 대해서 학습을 하는데요. tracking에서 G를 사용하지 않더라도 D를 학습할 때, G의 영향을 받아 좀 더 일반적인 특징에 대해서 학습하게 하기 위함으로 보입니다.


#4

안녕하세요. 정리하신 글 잘보았습니다.
tracker를 학습시키는 방법이 궁금한데요.
첫번째 프레임에서 target을 detection하여 bounding box를 찾고나서 다음 프레임부터는 이 target 주변에 candidates들을 만들어서 물체를 찾는건가요? 어떤식으로 찾는지 설명해주시면 감사하겠습니다!

그리고 loss 마지막 부분 lG©-M l^2 은 어떻게 해석해야하는건가요?


#5

Tracking 문제는 주로 첫번째 프레임의 Target의 Bounding Box는 주어집니다. 다른 정보는 없고 Bounding Box Coordinate 만 줍니다. 그러면 이후 프레임에 대해서 추적하는 것이 문제 상황입니다.

말씀하신 것처럼 이후 프레임에 대해서는 candidate를 확보한 후에 classification을 통해 background와 object를 구분하는데, object로 판별한 것중 가장 성능이 높은 녀석을 선별하는 방식을 쓰고 있습니다만… 다른 논문 리뷰를 보시면 이런 방식이 아닌 다른 방식들도 존재합니다 (correlation filter를 쓴다거나…)

Loss 마지막 텀은, 대략적으로 보니 adversarial learning을 위한 term으로 이해해야하는 것 같은데 @damien.lee 님이 설명을 더 해주시면… ^^


#6

안녕하세요 asidaisd님 글에 관심 가져주셔서 감사합니다.
위의 댓글에서 우선 잘 설명을 해주셨는데요 (감사),

우선, 첫 번째 프레임(t=1)에서 target bounding box가 주어지고… (첫 번째 프레임에서는 ground-truth 가 주어짐)
해당 좌표를 기준으로 여러 bounding box를 random sampling 합니다.

이 후, 여러 샘플들이 target bounding box와 얼마나 겹치는지 (IoU, Intersection over Union)를 가지고 각 샘플이
target을 나타내는지, 아니면 주위 background를 나타내는지 레이블을 만듭니다.

마지막으로 레이블된 bounding box sample을 가지고, bounding box의 이미지 (template)이 주어졌을 때 해당 이미지가 target인지 background인지 분류하는 0-1 분류기를 학습합니다.

학습이 완료되면 다음 프레임(t=k, k>1)에서도 bounding box의 후보들을 샘플링한 후, 각각의 박스들의 target/background 여부를 분류기를 통해 하나하나 계산하고… target 점수가 가장 높은 bounding box를 k 번 째 프레임의 target 위치라고 선정합니다.

위와 같은 트래킹 방법 이외에도 말씀하신대로, correlation filter를 이용하거나 SiamFC 구조를 이용하는 방식들이 존재합니다. 이 논문 처럼 매 프레임마다 여러 후보 box들의 target/background 여부를 분류하는 방식을 “tracking-by-detection” 이라고 합니다.

Loss의 마지막 텀은 특별히 구체적인 설명은 논문에 없었는데요…
저는 adversarial learning의 개념과는 직접적으로 연결되어 있지 않고 (1, 2 번째 텀이 이에 해당)
generator가 생성한 마스트 G©가 모델이 학습에서 True라고 생각하는 마스크 M에 가까워지도록 한다고 해석하였습니다.
즉, Generator에게 주어지는 regularization term으로 이해하였습니다.
Regularization term 이 없어도 개념적으로 문제는 되지 않지만 Generator가 생성하는 결과가 단순히 discriminator를 속이는 것을 넘어, 실제 마스크 M와 가까워지도록 유도할 수 있습니다. InfoGAN 등에서도 generator의 uncertainty를 줄이기 위해 mutual information을 regularization으로 사용하기도 합니다 ^^


#7

안녕하세요. 친절한 설명 감사합니다. Tracking 관련 연구를 진행중이라 이 논문을 접하게 되었는데 이해가 안되는 부분이 있어 질문드립니다.

D를 학습할 때는 M\hat을 통해 maskout된 feature를 가지고 supervised learning을 한다고 되어 있습니다. 그러면 이 때는 L_vital loss를 사용한 adversarial learning은 일어나지 않는 것인가요? 마치 adversarial learning은 G를 학습할 때만 사용되는 것 같아 혼란스럽습니다.

또한 논문에서 supervised learning으로 D를 학습하는 과정이 G를 통해 얻은 mask를 씌운 feature map에 대해 supervision을 줘서 학습하는 것이라고 했는데, 이는 D(G©*C)에 1이라는 supervision을 주는 것 같습니다. 하지만 L_vital loss에서 max_D를 따르자면 D(G©*C)는 0이 되도록 학습이 되는 것 같습니다.

요약하자면,

  1. D를 학습하는 것이 supervised learning이라면 L_vital 내에서 max_D는 언제 쓰이는 것인지
  2. 만일 D를 학습하는 과정이 max_D(L_vital)이라면 D(G©*C)=0이 되도록 학습이 될텐데, 이는 논문의 Training D파트, 즉 D(G©*C)=1이 라는 supervision과 상반되는 방향이 아닌지
    궁금합니다!

#8

안녕하세요 @Yoonyeong 님 반갑습니다. 저도 요즘 tracking 연구를 활발히 진행하는 과정에서 이 논문을 리뷰하였는데요. 반갑습니다. 논문 리뷰하시면서 좋은 논문이 있으면 여기에 정리하고 있는데, 윤영님도 좋은 정보 있으면 공유 많이 해주세요 ^^

supervised learning이라는 용어에 혼동이 있었던 것 같습니다. 결론부터 말씀드리면 discriminator 역시 adversarial learning을 하는 것이 맞습니다. 여기에서 sup. learning이라는 용어가 나오는 이유는 max_D 오퍼레이션이 결국 real mask와 generator가 만든 mask를 구분하는 supervised learning 이기 때문입니다. GAN 에서 discriminator가 학습할 때 어떤 것이 real image이고 어떤 것이 fake image인지 label을 제공하고 0-1 분류 문제에 대해서 supervised learning을 한다고 생각하시면 오해가 덜해질 것 같습니다.

또한 두 번째 질문에 이어 답변드리겠습니다. 예리한 지적이신대요. 생성된 mask 중 1개에 M이라고 supervision을 두는 것이 두 loss term이 충돌되게 하는 것은 사실입니다. generator가 생성하는 mask는 1개가 아니기 때문에 그 중에 1개를 M으로 설정할 때 영향이 크리티컬하지 않고, D와 G가 순차적으로 학습하는 데에 무리가 없지 않았나 생각됩니다. (loss term에 큰 충돌이 없다고 가정한 것으로 생각됩니다.)
좀 더 풀어서 생각해보면… D, G가 반복적으로 학습하면서 선택되는 M이 학습이 진행됨에 따라 변경되는 것을 생각해볼 수 있습니다. 이를 보고 D와 G가 순차적으로 학습하는 과정이 (성공적으로 된다면) 두 모델을 발전적으로 유도하는 것으로 기대됩니다. 결국 G가 만든 mask 중 제일 좋은 애를 true라고 가정한 후, D를 학습하고, 학습된 D를 속이기 위해 다시 G가 학습되고… 이 후 새로운 M이 만들어지고 하는 과정에서 adversarial learning이 무리 없이 작동하지 않나 싶습니다.(혹시 몰라 아래 원문 내용 표기합니다.) 좀 더 엄밀히 진행하려면 M으로 선택된 mask는 G©에서 제외하는 처리도 가능해보일 듯 한데, 이는 코드를 확인해봐야할 듯 합니다.

These features are passed onto D, and we pick up the one with the highest loss. The corresponding mask of the selected feature is said to be effective in decreasing the impact of the discriminative features. We set this mask as M in Eq. 2 and update G accordingly.


#9

안녕하세요. 설명 감사합니다. 논문 이해하는데 많은 도움이 되었습니다. 좀 더 자세한 이해를 위해 코드를 보던 중에 궁금한 부분이 있어 질문드립니다.

mdnet_finetune_hnm_update.m에서 G를 학습하는 부분을 보면 batch의 feature map에 대해 임의로 0을 setting한 다음(mask로 가리는 효과), D를 돌려 나온 결과로 M_hat을 결정하는 부분이 있습니다 (@225 line 부분).

여기서 가려진 입력으로 D를 돌려 나온 결과는 soft max를 통과한 확률이고, prob_k(i)=sum(Y(1,1,1,:))를 볼때 target이 아닐 확률(입력이 neg일 확률)을 저장한다고 이해했습니다.

만약 그렇다면 다음 부분 코드처럼, 임의로 feature를 가렸을 때 저장한 결과 중 가장 낮은 row, col을 선택한다는 것은 target이 아닐 확률을 더 낮게 만드는, 즉 다른 말로 바꾸면 target일 확률을 높이는 M_hat을 만든다는 의미가 되는 것 같습니다.

그런데 논문에서 G net은 D의 loss를 증가시키는 방향(=두드러진 feature를 가리는 방향)으로 학습하는 것이 목적이라고 알고있습니다. 반대로 코드는 D를 도와주며 target일 확률을 높이면서 전체적으로 D의 loss를 감소시키는 방향(도움 안되는 feature를 제거하는 mask 생성)으로 G를 학습한다고 보이는데, 이를 어떻게 해석해야 하는지 궁금합니다.

(D의 구별을 힘들게 하는게 G의 목적이면 [~,idx]=max(prob_k);와 같이 코드를 수정해서 입력으로 들어온 pos box가 target이 아닐 확률을 높이는 mask를 생성하는게 맞지 않을까요…?)


#10

감사합니다! 헷갈리던 개념이 이해가 되었습니다. 코드를 좀더 봐야겠네요ㅎㅎ