Learning

논문 리뷰 VideoCLIP: Contrastive Pre-training for Zero-shot Video-Text Understanding

CLIP의 방식으로 zero-shot Video Text Understanding

2023
.
03
.
07
논문 리뷰 VideoCLIP: Contrastive Pre-training for Zero-shot Video-Text Understanding

Abstract

Contrastive pre-training 은 CLIP의 아이디어를 Video에 적용한 것입니다. contrastive learning 시 유사한 비디오일지라도 정답을 제외하고 모두 negative로 냉정하게 구분해서 학습시켰으며, Video-Language모델 답게 retrieval 뿐만 아니라 VideoQA와 같이 여러가지 Video-Language관련 학습을 진행 했습니다. 사용된 비디오 인코더는 HowTo100M 데이터셋으로 pretrain 하였으며, 직접적인 objective로 학습하는것보다 text-video간 연관성을 학습시키는 CLIP의 방식을 차용하여 zero-shot Video Text Understanding 에 어느정도 성과를 거두었습니다.

Introduction

NLP모델을 중심으로 Contrastive pre-training 이 광범위하게 유행하면서 finetuning에 대한 부담감을 줄이고자 탄생한것이 zero-shot learning입니다. GPT 시리즈는 in-context learning을 통해 zero-shot에 대한 유의미한 성과를 거두었으며, CLIP은 contrastive learning을 통해 이미지-텍스트간 zero-shot을 불완전하게나마 구현하였습니다. 논문에서는 Video – Text의 zero-shot을 위해 CLIP의 방식을 차용하여 학습을 하고자 했으며. 여기서 사용한 키 테크닉은 크게 두가지 입니다.

  • video-text간 연관성 증진
    기존 video-text모델들은 일정 시간 간격으로 영상을 잘라 학습하는데, 이렇게하면 실질적으로 video-text간 의미가 일치하지 않는 다수의 영상들도 모델에 학습되게 됩니다. 이를 개선시키기 위해 논문에서 고안한 방법은 overlapped video-text clip입니다.

  • contrastive loss 학습 시 negative pairs를 더 빡세게
    retrieval augmented pre-training을 통해 negative pairs 데이터셋을 더 효과적으로 찾아냈다고 합니다.

Retrieval Augmented pre-training 이란?

오픈 도메인 QA봇이 있다고 가정해보자. 단순 LM으로 모든 도메인을 효과적으로 다룰수는 없습니다. 따라서 LM을 도와줄 수 있는 external knowlegde를 제공해주는것이 속도나 성능면에서 더 효과적일 것입니다. 즉 본래 LM외에 retrieval을 통한 정보 선별이 추가된것을 말한다. 이것을 활용한 강화학습을 여러 공룡기업들이 하고 있습니다.

Retrieval Augmented training
QA에 대한 Retrieval Augmented training의 예시 이미지 - 해당 논문

VideoCLIP Contrastive pre-training

Video and Text Encoding

Video encoder와 text encoder 모두 Transformer 구조를 사용하고 있습니다. 다만 비디오의 경우 Transformer의 입력으로 취하기 이전에 미리 학습된 Video Encoder에 영상을 feed-forward 시키고, 해당 출력을 Transformer의 shape과 맞추기 위해 trainable한 MLP를 통과시킵니다. 이후 나온 출력을 역시 trainable한 transformer에 통과하는 구조입니다. 이 때 Video Encoder의 transformer는 BERT의 구조 중 앞 6개 레이어만 가져온 것이며 Text encoder는 BERT를 그대로 사용합니다. 또한 양 transformer간 contrastive loss를 위해 BERT의 CLS를 사용하는게 아니라, 전체 sequence에 대해 average pooling을 한점이 다소 특이합니다.

VideoCLIP 모델 개요
VideoCLIP 모델 개요도

**VideoEncoder는 S3D라는 CNN기반 비디오 인코더를 HowTo100M으로 pretrain 시킨 것(output dimension이 512, 30fps)
**BERT와 사이즈를 맞추기 위해 From 512 to 768의 trainable한 MLP
**Video는 30fps이며, 1초당 비디오토큰 한개 생성
**VideoEncoder는 CLS와 SEP를 포함하여 34(최대 32초 짜리 영상), TextEncoder는 CLS와 SEP를 포함하여 63이 max sequence length(길이를 이렇게 설정한 이유는 가성비 + HowTo100M에서 평균적으로 텍스트 토큰의 갯수가 초당 2.4개정도 되기 때문. 즉 경험적인 근거에 의하여 이정도 길이로 설정)

Contrastive Loss

InfoNCE를 사용합니다. text-to-video와 video-to-text를 바꿔가며 서로 학습시키는 전형적인 NCE 입니다.

양질의 NCE관련 리포팅이 이미 많이 있으므로 따로 다루지는 않겠습니다.
**NCE논문 링크

원본 CLIP의 Loss도 마찬가지로 text-to-video와 video-to-text로 두가지를 더해서 Loss를 구성했습니다.

원본 CLIP의 Loss 코드는 아래와 같습니다::

원본 CLIP의 Loss 코드
원본 CLIP의 Loss 코드

Overlapped Video-Text Clips

introduction에서 이야기한 Video Text Understanding 두가지 테크닉중 하나 입니다. 자막과 영상을 따로 샘플링한뒤 그것을 합쳐서 학습 데이터를 사용한다는 것인데, 다음의 순서로 진행됩니다.

  1. 영상의 자막부분을 먼저 샘플링
  2. 자막이 있는 시작 시간과 끝나는 시간을 중심으로 최대 32초까지 랜덤하게 비디오를 샘플링

이를 통해서 자막과 영상간에 연관성이 적어지는 일을 막고자 한다는데 관련 설명을 아래와 같이 하고 있습니다.

어떤 요리사가 나와서 “제가 볶음밥 만드는법을 보여 드리겠습니다” 라고 말했다고 가정해보자. 이때에 이 동영상과 자막은 align이 올바르다고 할 수 있는가?

Video와 text의 representation을 위해서라면 이 다음 장면으로 나오는 볶음밥을 실제 만들고 있는 장면이 더 올바르다고 할 수 있다.(볶음밥이라는 단어와 만들다는 단어에 더 적합할 것이므로)

Retrieval Augmented Training

유사도 비교시 FAISS사용

  1. 각 비디오 별로 embedding feature를 계산(해당 비디오에 있는 모든 영상-텍스트 클립에 대한 임베딩 평균값)
  2. 모든 영상에 대해 dense index 구성
  3. 학습하고자 하는 영상과 유사한 영상 2k추출
  4. 2k개의 영상 중 k개를 랜덤 샘플링하여 학습 배치로 사용(즉 K는 배치사이즈)
  5. 배치 내에서 label외의 값들은 모두 negative samples

Text to Video understanding Retrieval

Youcook2, MSR-VTT, DiDeMo데이터셋에 대해 zero-shot 테스트하였고. 랜덤 retrieve도 베이스라인으로 두었습니다. 성능이 대체로 VALUE 기준 SOTA와 큰 차이를 보이진 않는 결과를 보이고 있습니다.

Youcook2, MSR-VTT, DiDeMo데이터셋에 대한 zero-shot 테스트
Youcook2, MSR-VTT, DiDeMo데이터셋에 대한 zero-shot 테스트

Action Segmentation

비디오 입력단이 text와의 연관성을 학습하므로 토큰마다 각 토큰에 해당하는 텍스트의 유사성이 있을거라 가정하고 NER처럼 비디오 토큰을 pre-defined된 label과 align 했습니다.

videoCLIP 비디오 토큰을 pre-defined된 label과 align
비디오 토큰을 pre-defined된 label과 align

위 방식을 COIN dataset으로 평가하였는데, COIN데이터셋은 동영상 classification 데이터셋으로 유튜브 영상들을 가져다가 segment로 잘라서 각 구간별 labeling한 것입니다.

COIN Dataset 예시
COIN Dataset 예시

Action segmentation on COIN
Action segmentation on COIN

Average pooling한 것을 NCE Loss로 학습 하였는데도 이런 결과가 나온다는게 개인적으로 많이 놀라웠습니다. 이에 대해서는 많이 고찰하고 생각해볼 여지가 있는것 같습니다.

Training time

미리 pretrain된 VideoEncoder를 통해 필요한 임베딩을 사전에 출력 한 후 NCE Loss로 학습 하였을 때 8 X V100 으로 하루가 걸렸다고 합니다. extract된 feature는 How to 100M 여기서 다운로드 가능합니다.

Contrastive pre-training 의 결론 및 고찰

Freeze된 VideoEncoder를 활용하여 CLIP과 같은 contrastive-learning을 진행한 것이 이 논문입니다. 이해하기 어렵지 않고 깔끔하지만 아직도 CLS대신 AveragePooling을 이용한것이 직관적으로 납득 되진 않습니다. 각 토큰의 discrete한 value를 Average pooling한다는것이 비디오 관점에서는 이해되지만 text관점에서는 이해되지 않기 때문입니다. 앞으로 다른 곳에서 유사한 내용이 등장한다면 좀 더 유심히 생각하게 될 것 같습니다.

Talk to Expert