본문 바로가기
AIML 분야/Video Classification & Detection

Contrastive Learning + Video 논문 나온거 읽어보기

by 포숑은 맛있어 2020. 12. 14.
반응형

논문 읽는 동시에 정리하는 글.

 

 

존홉이랑 페북에서 나온 논문.

arxiv.org/pdf/2011.13046v1.pdf

 

unsupervised / self-supervised / contrastive loss 이런 것들 제대로 안 다뤄봐서 논문 자세히 읽는건 처음이다. 뭐 몇개 읽으면 익숙해 지겠지.

 

요약

  1. 아무튼 여기서 핵심은, 여러 temporal augmentation을 적용한 것들이 원본과 시맨틱이 일치하는쪽으로 contrastive learning을 하는 게 중요하다는 것이다.
  2. Temporal augmentation은 temporal information 배우는데에 도움이 된다.
    하지만, 무슨 일이 일어나는지 인지하고 있어야 (aware of) 도움이 되며, 그냥 적용하는건 도움이 안된다. task aware함이 중요함.
  3. 모든 pretext task가 CSL에 도움되는건 아니다.
  4. 2개정도 좋은 pretext task combination이 존재한다. 3개 이상으로 가면 오히려 별로다.

 

자그마한 생각

  • 다른 방법은 없나? 비전에서 요즘에는 contrastive learning 어떻게 하나 봐야겠다.
  • augmentation이 적용된 클립 - 안 적용된 것 : 둘이 비슷한 비디오라는 loss를 적용한 것인데, 뭔가 프레임단위의 처리한건 아니고 클립단위로 맵핑해서 본 것이다. 프레임단위로, inner-clip information같은 경우에는 어떻게 활용할 수 없을까? supervision 주기 까다롭긴 할 것 같다...
  • 특히 TPN인가 TRN인가 논문에서 언급되었던 것의 경우에는 이 로스가 방해된다. walking, jogging, running의 경우, tempo는 다르고 클립 생김새는 비슷할 것이다. 그러면 augmentation을 함으로써 이미 의미가 달라지는데 original clip이랑 같다고 loss를 준다. (positive pair인데 시맨틱으로는 negative pair여야 맞음)
  • task aware하게 비디오에서 한게 이 논문이 최초일까? task aware라는게 결정적이었던 것 같은데.
  • 일단은 이번 CVPR에서 temporal 관련 논문 찾은거 한편 읽고, circle loss를 리뷰하여 생각을 더 정리할 계획이다.

 


 

"Can temporal information help CSL?"

 

Introduction

- unsupervised representation learning. <- self-supervised learning이 발전하면서 주목받기 시작

- 이건 pretext tasks가 스스로 supervision을 제공하는 방식.

- 일반적으로는 rotation, patch를 이용하는 방법, jigsaw 퍼즐을 풀게하는 것 등의 supervision이 제안되었음.

- 한편으로는, CSL은 self-supervised learning에 포함되는 분야이며, downstream tasks에 대해 더욱 generalization이 잘 되어서 이 분야가 탄력을 받기 시작하였음.

- 이와 같은 선상에 있는 대표적인 예시 중 하나가 instance discrimination based framework라고함. 이는 encoded query와 key가 주어지면 둘이 같은 instance에서 왔는지, 아닌지를 판별함.

- 이제 이걸 비디오로 확장하면, 가장 중요한건 역시 temporal 처리.

- 이전에 pretext task를 video jigsaw puzzle / reorganizing rotations of clips / identifying the order of sequences, encouraging temporal consistency 등의 방법으로 하는 연구가 있었다함. 아니 이렇게까지 많은지 몰랐다. 직쏘는 16년도 연구, 나머지는 18년도 2개, 19년도 20년도 아카이브이다.

 

이에 따라, 이 연구에서는 아래 세가지 질문에 대답하는 식으로 연구를 진행했다.

Q1. Can we just resort to adding temporal augmentations with existing CSL frameworks?

Q2. Is there a more suitable way to model temporal information and learn a better solution for video CSL?

Q3. Is there any innate relation between different video tasks? How can multiple video tasks help with CSL?

 

먼저, 첫번째 질문을 위해,

1. spatial augmentation (이미지에서 자주 쓰던 그런 것)

2. temporally consistent spatial augmentation

3. temporal augmentation (reversed sequence, shuffled clips, speedup sequence)

세가지를 진행했다. 그리고 결과, 3번은 안좋고 나머지 1,2는 도움이 됨을 확인했다. temporal information을 위해서 그냥 바로 뭘 적용하는건 좋지 못했다는 의미.

 

두번째 질문을 위해,

모델이 지금 temporal하게 어떤 것을 적용했는지 "의식할 수 있게"함이 중요하다고 한다. 그래서 이 논문에서 TaCo라는 기법을 제안한다.

 

마지막 질문을 위해,

특정 task combination이 성능이 잘 내는지, multi-task relation이 어떤지를 제안한 기법 기반으로 알아봤다고 한다.

 

 

Related work는 조금 이따가 읽기로 하고, 우선 Method로 넘어가자.

Related Works

self-supervised learning 구경하다보니까 익숙해졌다.

 

Contrastive Learning

- Instance Discrimination (InstDisc) : an early CSL framework to learn feature representation that discriminates among individual instances using a memory bank.

위 논문의 후속 연구들

- Momentum contrast for unsupervised visual representation learning.

- Self-supervised learning of pretext-invariant representations.

- Contrastive multiview coding

- A simple framework for contrastive learning of visual representations

- MoCo : structures the dictionary as a queue of encoded representations.

- PIRL : focuses on learning invariant representation of the augmented view.

- SimCLR

 

이미지에서의 pretext tasks

- predicting the rotation angle of the transformed images.

- predicting the relative position

- Jigsaw puzzle

- counting features

- colorization

 

비디오에서의 pretext tasks

1. 이미지에서 확장시킨 것들

- predicting the rotation video clip

- solving cubic puzzles

 

2. temporal 처리때문에 생긴 것들

- sequence ordering of the video clips

- detecting the shuffled clips

- predicting if a video clips is at its normal frame rate, or down-sampled rate

 

3. temporal correspondence를 supervision으로 사용한 것들

- "Aligning videos in space and time" (20년7월)

- "Learning correspondence from the cycle-consistency of time" (CVPR19)

- "Video representation learning with visual tempo consistency" (20년 6월)

Method

 

TaCo (Temporal-aware Contrastive Self-supervised Learning)

세가지 모듈로 구성되어있다.

1. temporal augmentation module

2. contrastive learning module

3. temporal pretext task module

여기 3DCNN에 들어가는건 original video에서 들어가는것, 그리고 N가지의 augmentation이 적용된 것이 있다.

original video에는 task head가 필요 없이 projection head (feature extraction)만, 그리고 나머지에는 task head도 붙는다.

 

contrastive learning.

여기서 이름이 projection head인 이유는, contrastive loss가 적용될 representation으로 projection하는 역할을 하기 때문. Linear+L2Norm. 아니면 ReLU와 함께 MLP 사용할수도.

그림에서 contrastive loss라고 적힌 것 처럼 original-augmented는 positive, 나머지는 negative pair라고 한다. 그림에서 보면 다른 비디오와의 거리를 멀게 하는 loss로 보인다.

아무튼 cosine similarity와 NCE loss 사용하는 것 까지가 contrastive learning module.

 

task head는 pretext task를 풀기 위함이다. 아까 인코딩했던 feature에다가 softmax를 적용하여, classification task로 정의한다.

각각 전부 다른 task를 가지고 있는거라 동일하게 더해준다. L_task = L_task1 + L_task2 ..... + L_taskN. 태스크마다 다른 로스는 뒤에 experiment에서 정의되는걸 봐야 알 듯 싶다.

 

그러면 전체 로스는 task loss와 contrastive loss 더한 것이겠지. balancing parameter 곱해서.

 

 

Experiment

 

Step 1: self-supervised pretraining.

  • 3D ResNet을 backbone으로 사용하였음. SlowFast의 slow pathway만 사용한 것 같이 구현했다고함. (lateral connection도 없을텐데 왜 이렇게 표현했는지 모르겠음.)
  • linear warmup + half cosine scheduler 사용.
  • kinetics400에서 진행. unsupervised이므로 label정보는 빼고 학습하였다.
  • Contrastive Learning으로는 2가지를 사용함. 이건뭔지 모르겠으니 각각의 논문을 봐야할 것 같음. InfoNCE loss의 temperature는 둘다 0.07 사용.
    • InstDisc : the number of sampled representation N = 16384.
    • MoCo : syncronized batch norm을 사용하여 오버피팅을 막음. 
  • Temporal pretext tasks
    • Rotation Jittering task
      0, 90, 180, 270 4가지에다가 각각 -3~3도의 랜덤 노이즈 추가.
      모든 프레임마다 다르기 때문에 연산이 좀 있을 것 같긴 하다.
    • temporal reverse task
      클립이 forward인지 backward인지 맞추는 태스크.
    • temporal shuffle task
      1.5t 프레임을 랜덤샘플해서 섞은 다음에 뭐가 셔플된 프레임인지 맞추는 태스크
    • temporal speed task
      1,2,4배속

pretext tasks.

 

 

 

 

 

Step 2: supervised fine-tuning.

UCF101, HMDB51에서 진행.

fine-tuning on all layers / 마지막 레이어만 파인튜닝 하는 것도 해봤다고 함.

 

 

Task-aware 라는게 중요했던 모양.

그렇다고 모든 pretext task가 좋은건 아니다. ClipOrder의 경우에는 이점이 없었으며, re-ordering같은 경우에는 연산이 많아서 비효율적이라고 한다. 그래서 최종적으로 speed, rotation jittering만 골랐다고 함.

그리고 재밌는 점이 있는데, 당연히 pretext task가 다 좋은게 아니라고 하면, 가장 잘되는 것은 뭔지 궁금할 것이다.

이 논문에서는 pretext task를 잘 맞추면 그에 따라 그 task를 사용했을때의 contrastive learning 성능도 올라간다고 한다.

pretext task로는 shuffle task의 성능이 가장 좋았고, 이에 따라 ucf에서 action recognition task의 fine-tuned 성능이 가장 좋았다.

hmdb또한 reverse에서 그러하다.

=> TaCo가지고 contrastive pretraining 할 때, pretext 성능 제일 좋은 것만 골라서 fine-tuning하면 되겠군.

 

 

아이러니하게도 hmdb에서는 셔플이 가장 안좋았던걸 보면, 역시 몇개의 pretext task를 가지고 해봐야할 것 같다.

fine-tuning 말고 from scratch로 어떤지가 가장 궁금하긴 하다.

 

 

또한 multi-pretext task의 경우, 하나에 대해 pretrain, fine tuning시에 다른 task. 이렇게 했다.

성능이 더 좋아지는건 확인할 수 있으나, appendix를 보면 triple, quad로 늘어나면 성능이 오히려 저하된다. pretext tasks끼리 harmonized 되지 않아서라고 주장한다. (어떻게 실험했는지는 안나온다.) 3개 이상의 경우, 뭘 base로 두고 뭘 fine tuning때 쓰고 그런 설명은 없음.

multiple pretext tasks
Multiple tasks. pretext의 성능.

 

Generalization을 보기 위해서, 여러 모델에서 전부 실험해서 보여준 것도 있다. pretrain 없는 성능이 궁금한데 아쉽다.

Ablation은 세가지가 있다.

  • task loss만 사용한 pretraining : contrastive loss 사용을 해야 성능이 좋다. 꽤 많이 차이난다. pretraining을 했는데도 60%대.
  • 두 loss 규모를 조절하는 람다값 : 3% 차이난다. 그런데 10~15 구간에서는 별 차이가 없기 때문에 robust하다고 주장한다.
  • 마지막 레이어만 파인튜닝 : 왜 이걸 linear evaluation이라 부르는지는 모르겠다만, 성능향상이 있음을 확인했다. 그런데 애초에 이 셋팅은 베이스라인 성능이 많이 낮아서 50%대이다. (그러면 pretrain 안한거랑 성능이 똑같은데...?) 8프레임밖에 안봐서 그런 듯.

 

 

반응형

댓글