[ECCV 2022] Prompting Visual-Language Models for Efficient Video Understanding

안녕하세요. 이번 주에 리뷰할 논문은 22년도 ECCV에 게재된 <Prompting Visual-Language Models for Efficient Video Understanding>입니다. 논문 제목에서의 Video Understanding은 보통 비디오를 다루는 모든 task를 통칭하며 넓은 의미로 쓰이지만 본 논문에서는 기본적 task 3가지인 Video Action Recognition, Video Retrieval, Video Action Localization을 가리키는 용어로 사용됩니다.

사실 이번 논문은 일전에 리뷰했던 [CVPR 2023] Distilling Vision-Language Pre-training to Collaborate with Weakly-Supervised Temporal Action Localization 논문 저자의 직전 연구라, 기본적으로 CLIP 정보와 video action을 어떻게 엮을 수 있을지에 대한 아이디어의 출발점을 먼저 확인해보고자 읽게 되었습니다.

본 논문은 prompt learning을 기반으로 앞서 언급한 비디오의 기본적인 3가지 task를 수행합니다. 본 논문의 핵심 contribution은, CLIP image encoder와 text encoder representation을 적은 학습량만으로 비디오의 3가지 task를 잘 수행하도록 만들었다는 것입니다. SOTA의 성능까진 아니지만 다른 SOTA 방법론들과의 학습 parameter 개수를 비교했을 때 현저히 적으며 견줄만한 성능을 보여주기에 efficient라는 수식어를 붙일 수 있게 된 것입니다.

이번 주 연구실 세미나 때 제가 dense prediction task를 수행하는 <Probabilistic Prompt Learning> 방법론을 빠르게 소개해드렸었는데, 시간이 부족해 prompt learning과 관련된 정보를 드리지 못하였어서 이에 대해 간단히 정리하고 시작하겠습니다.

Prompt learning

요즘 저도 ChatGPT로부터 다양한 정보를 얻고 있습니다. 때때로 원하는 답이 잘 나오지 않길래 좀 찾아보니, 정말 원하는 정보를 잘 얻기 위해서는 ChatGPT에게 던지는 질문의 퀄리티가 굉장히 중요하다고 많은 사람들이 이야기하고 있었습니다. 이 때 ChatGPT 모델에게 던지는 질문 text를 prompt라고 한다는 점은 다들 알고 계실 것입니다.

Prompting이라는 것은 사전학습된 모델에게서 원하는 결과를 얻기 위해 적절한 “instruction”을 설계하는 것입니다. 세부적 내용까지는 모르지만 GPT-3 모델이 전문가들이 적절히 설계한 handcrafted prompt template을 활용해 few-shot, zero-shot 상황에서 좋은 성능을 얻었다고 합니다. 분류 문제를 풀기 위한 Handcrafted prompt template의 예시로, “a photo of [ CLS ]”를 쿼리로 던져주었을 때 주어진 이미지를 함께 보고 [ CLS ]에 들어갈 단어가 무엇인지 맞추는 방식을 생각해볼 수 있습니다.

ChatGPT로부터 정보를 얻을 때 질문 문장이 중요한 것과 동일하게, [ CLS ]에 들어갈 단어를 찾는 방식에서는 prompt가 어떻게 구성되는지가 성능에 큰 영향을 미치겠죠. Handcrafted prompt template은 보통 수행하고자 하는 task의 전문가들이 고안해 낸다고 합니다. “a photo of [ CLS ]”가 겉으론 단순해보이지만 이것이 임베딩되었을 때 어떠한 특성을 보이고 이미지와 어떠한 연관성을 만들어낼 수 있는지까지 고려하는 것은 어려운 문제일 것이라는 생각이 드네요. 아무튼 handcrafted 방식은 전문가의 힘이 필요하고, task가 변할 때마다 각 task의 전문가가 필요하다는 단점이 존재합니다.

이러한 단점을 극복하고자 최근에는 위 그림과 같이 prompt 자체를 learnable vector로 초기화하여 학습 기반의 최적 prompt를 만들어내는 prompt learning 기법들이 많이 등장하고 있습니다.

그러면 이제 논문의 Introduction으로 들어가보겠습니다.

1. Introduction

저번 KCCV 세미나 때도 나온 이야기지만 최근 CLIP과 같은 거대 Image-based Visual-Language(I-VL) 모델들이 task를 가리지 않고 활발히 응용되고 있습니다. 초 대용량 image-text 쌍으로 학습을 마친 모델은 image classification task에서 높은 zero-shot 성능을 보여주며, 학습 때 아예 보지 못한 클래스가 들어와도 좋은 예측을 만들어내는 일반화된 성능을 가지게 됩니다. 이후엔 CLIP representation을 image classification보다 더욱 복잡한 task에 적용하기 위해 세미나 때 소개드렸던 <Probabilistic Prompt Learning for Dense Prediction>과 같은 논문이 등장하게 되었던 것이죠.

그렇다면 비디오 분야는 어떨까요? 이 부분에 대해 서베이해보니 20년도 이후부터는 ActBERT, VideoBERT, ActionCLIP 등등 많은 연구가 쏟아져 나오고 있었습니다. 저자도 위 논문들과 비슷한 시기에 “어떻게 하면 거대 I-VL 모델의 지식을 효율적으로 비디오 도메인에 활용할 수 있을까?”라는 질문을 던지고 관련된 연구를 수행한 것입니다.

가장 단순하게 떠올릴 수 있는 방법은 비디오를 프레임 단위로 다루며 CLIP image encoder를 각 task에 맞게 end-to-end로 finetune하는 것이겠죠. 하지만 비디오 백본을 학습시키는 것은 cost가 굉장히 크며 task 별 최적의 모델을 얻기 위해 매 task마다 finetune을 수행하는 것은 여간 쉬운일이 아닐 것입니다. 그리고 text encoder의 강력한 zero-shot generalizability를 사용하지 않는다면 학습했던 클래스 내에만 좋은 inference를 만들어내며 활용도가 떨어질 것입니다.

여기까지의 문제점을 고려하면서 CLIP의 representation을 비디오에 잘 활용하려면, CLIP에서와 같이 handcrafted prompt를 줌으로써 text encoder를 활용하며 백본은 학습시키지 않고 추가 모듈을 붙여 CLIP representation을 비디오 task에 적합하도록 embedding하는 방식(adaptation)이 필요하게 됩니다. 하지만 handcrafted prompt는 앞서 언급했듯 task 별 전문가의 지식이 필요하다는 점에서 laborious하다는 단점이 있었습니다. 그래서 저자는 활용할 수 있는 text 단어에 대해 단순히 앞뒤로 learnable vector를 붙여주는 것으로 이러한 문제를 해결하고자 합니다. Task 별 learnable vector를 붙이고 학습시켜 downstream task에서도 text encoder의 generalization 능력을 가져갈 수 있게 되는 것입니다.

저자가 제안하는 방법론이 그리 복잡하지 않으며 Introduction-Method-Experiments에 걸쳐 비슷한 이야기들이 반복되고 있기 때문에 자세한 것은 아래에서 알아보겠습니다.

2. Method

본 연구의 목적은 거대 I-VL 사전학습 모델의 representation을 video에 잘 adaptation하자는 것입니다. 아래 그림 1이 목적을 달성하기 위해 저자가 제안하는 방법론인데, 프레임은 CLIP image encoder와 Transformer를 통과해 video embedding으로 활용되고, task 별 label에 해당하는 text는 tokenizer를 거친 후 앞뒤에 learnable prompt vector를 붙여 CLIP text encoder를 통과함으로써 text embedding으로 활용됩니다. 이러한 CLIP representation이 video task에 잘 adaptation 되었다는 것은 그림에서 오른쪽과 같이 action recognition, action localization, text-video retrieval task 성능을 통해 확인할 수 있을 것입니다.

그림 1

2.1 Image-based Visual-Language Model

저자가 방법론 부분에서는 먼저 CLIP에 관련된 설명까지 해주고 있는데, 이에 대해 잠시 살펴보겠습니다.

Pre-training

한 미니배치 내 총 N개의 (image, text) 쌍을 입력받았을 때, 이미지와 텍스트는 각각의 encoder를 타고 임베딩됩니다. 이후에는 쌍 간의 cosine 유사도를 모두 계산해 N \times{} N 크기의 유사도 매트릭스를 만들게 되고, 이 매트릭스를 기반으로 contrastive learning을 수행합니다. 여기서 대각선 위치의 원소들 총 N개 쌍은 자기 자신과의 유사도이므로 pos sample, 나머지 N \times{} (N-1)개의 쌍은 올바른 짝이 아니므로 neg sample로 두게 됩니다.

Inference

대략 4억 개의 (image-text) 쌍으로 사전학습을 마쳤다면 이를 이용해 inference를 수행할 수 있습니다.

사전학습을 마친 모델이 text를 활용해 위 그림의 연보라색 임베딩 과정을 거쳐 구축해놓은 dataset classifier를 바탕으로 이미지 임베딩과의 가장 큰 유사도를 보이는 text값이 해당 이미지의 정답이 되는 것입니다.

예를 들어 cat, dog를 분류하는 모델이 있다면 위와 같이 handcrafted prompt “this is a photo of [ __ ]”의 빈 칸에 “cat”, “dog”를 넣고 text encoder \Phi{}_{text}를 태워 얻은 임베딩과 이미지 임베딩의 유사도를 계산해 예측을 수행하는 상황인 것입니다.

이렇게 CLIP의 representation을 이미지 분류에 활용하는 상황에선 방금 본 것과 같이 handcrafted prompt가 필요했지만 본 논문에서는 prompt를 학습 기반으로 변경하고, 최소한의 학습 cost만을 들여 여러 비디오 task에 적용해보고자 합니다.

2.2 Prompting CLIP for Video Understanding

이제 본격적인 방법론의 detail 설명입니다.

Problem Scenario.

총 3가지 task를 벤치마킹하다보니 혼동이 올 수 있어 notation을 먼저 정리하고 시작하겠습니다. 하나의 비디오 데이터셋 \mathcal{D} = \{\mathcal{D}_{train}, \mathcal{D}_{val}\}로 나눌 수 있습니다. Subset \mathcal{D}_{train} = \{(\mathcal{V}_{1}, y_{1}), \cdots{}, (\mathcal{V}_{n}, y_{n})\}으로 볼 수 있고 \mathcal{V}_{i} \in{} \mathbb{R}^{T \times{} H \times{} W \times{} 3}는 비디오, y_{i}는 각 task에 맞는 라벨값, 즉 텍스트에 해당합니다.

여기서 y_{i}는 해당 데이터셋에 존재하는 모든 클래스 \mathcal{C}_{train}에 속할 것입니다. Closed-set scenario에서는 \mathcal{C}_{train} = \mathcal{C}_{val}, zero-shot scenario에서는 \mathcal{C}_{train} \cap{} \mathcal{C}_{val} = \phi{}일 것입니다.

Model Adaptation by Learning Prompts.

저자는 효율적으로 CLIP의 representation을 비디오 task에 가져오기 위해서 learnable prompt vector를 클래스 텍스트 앞뒤에 붙이고 CLIP text encoder에 태워줍니다. 이 때 CLIP의 image encoder와 text encoder \Phi{}_{image}, \Phi{}_{text}frozen 상태입니다.

그러면 각 task에 대한 detail들을 좀 더 살펴보겠습니다.

(a) Action Recognition

Action recognition task는 짧은 trimmed video에서 등장하는 action이 무엇인지 하나로 분류하는 것입니다. Image classification의 비디오 버전이라고 생각할 수 있습니다. CLIP에서 cat, dog 이미지 분류기를 구축하였듯 encoder를 활용해 비디오 분류기를 만들 수 있을 것입니다. Action 클래스 중 “archery”, “bowling”을 예시로 들고 있네요.

분류기 c_{archery}를 만드는 과정은 handcrafted prompt 대신 위 식과 같이 “archery” 클래스 앞뒤로 i번째 prompt vector a_{i} \in{} \mathbb{R}^{D}를 붙여주는 것이고 이 때 D는 tokenizer의 출력 차원과 동일할 것입니다. 하나의 데이터셋 내에서는 learnable vector a_{i}가 모두 동일하기 때문에 task-specific하다고 볼 수 있습니다. 매 데이터셋마다 해당 task와 데이터셋에 최적인 prompt vector를 학습하여 사용한다는 것입니다.

(b) Action Localization

Action localization은 긴 untrimmed video에서 action 구간을 찾고 어떤 action인지 분류까지 하는 task입니다. 저자는 먼저 proposal을 만들어내고 분류를 수행하는 2-stage 기반의 방법론을 실험에 사용하는 것으로 채택하였습니다.

(c) Text-Video Retrieval

Text-video retrieval은 앞선 action recognition task에서 비디오 하나에 대한 단어 라벨 하나가 주어지는 coarse한 상황과 다르게 좀 더 fine-grained level의 문장 단위 라벨이 한 비디오 내에 여러 개 주어지게 됩니다. 앞서는 한 단어만을 tokenize 후 \Phi{}_{text}에 태워 text embedding을 얻었다면 여기선 주어진 하나의 문장 전체를 tokenize 후 \Phi{}_{text}에 태워 text embedding을 얻는다는 차이점이 있습니다.

Temporal Modeling.

CLIP이 대용량의 image-text 쌍으로 학습했다는 것에 다양한 장점이 있긴 하지만, 이를 비디오에 적용하기엔 temporal 정보가 부족하다는 단점이 존재합니다. 단 하나의 영상만을 보고 text와의 reprepsentation learning을 수행했기 때문에 예를 들어 해당 이미지가 밀고 있는 것인지 당기고 있는 것인지, 앉는 중인건지 일어나는 중인건지 등 동적인 상황에 대한 정보가 부족하다는 것입니다. 그래서 저자는 가벼운 temporal modeling module을 추가해 이러한 단점을 일부 보완하고자 합니다.

CLIP image encoder \Phi{}_{image}에 temporal 정보를 불어넣어 주기 위해 저자는 Transformer Encoder를 뒤에 붙여 temporal modeling이 가능한 \Phi{}_{video}를 만들어줍니다.

이는 수식으로 보면 위와 같은데, \Phi{}_{image}를 타고 나온 임베딩들을 다시 Transformer Encoder \Phi{}_{TEMP}에 태워 한 비디오의 T개 프레임에 대한 dense feature v_{i} \in{} \mathbb{R}^{T \times{} D}를 만들어주는 것입니다.

Training Loss.

한 미니배치 내 (video, text) 쌍이 주어지면, visual stream은 앞서 설명한 temporal modeling까지 마친 v_{i}를 얻을 수 있고 textual stream은 downstream task에 따라 action classifier c_{i} \in{} \mathcal{C}_{action} 또는 textual query embedding c_{i} \in{} \mathcal{C}_{query}를 얻을 수 있습니다.

Action recognition과 text-video retrieval의 경우 dense feature v_{i}에 아래 수식과 같이 temporal 축에 대한 mean pooling을 수행하여 하나의 video feature \bar{v}_{i}를 만들어내게 됩니다.

Action localization의 경우 구간을 찾아내야 하는 task이므로 첫 번째 stage에서 구한 proposal 구간 단위로 mean pooling을 수행해 proposal-level feature를 \bar{v}_{i}로 사용합니다.

다시 정리하자면 CLIP encoder들은 frozen된 상태이므로, 클래스 텍스트에 붙여준 learnable vector와 temporal modeling을 위한 Transformer Encoder만이 학습의 대상이 됩니다. 이들을 학습해주기 위한 loss도 간단한데요, 아래 수식 2에서 볼 수 있듯 video(or proposal) feature과 상응하는 text feature만을 pos로 둔 채 NCE loss를 적용하게 됩니다.

이 때 feature들은 모두 L2-normalized 된 상태로, 결국 코사인 유사도를 통한 기존 NCE loss와 동일하다고 볼 수 있습니다.

3. Experiments

계속 설명드렸던 3가지 downstream task에 대해 benchmarking을 수행하고, 방법론의 ablation은 action recognition task에 대해 수행되었습니다.

3.1 Implementation Details

아무래도 방법론보다는 실험 결과가 중요한 논문이다보니 detail들을 자세히 살펴보고 결과로 넘어가겠습니다.

CLIP encoder는 image와 text 모두 사전학습된 ViT-B/16을 frozen된 채로 사용하였고, prompt의 learnable vector와 Transformer Encoder의 feature dimension D는 모두 512입니다. 이들은 모두 \mathcal{N}(0, 0.01)로 초기화하였다고 합니다.

Textual token의 최대 길이는 CLIP을 따라 77로 설정하였다고 하는데, text 쪽 지식이 없어 코드를 좀 살펴보니 라벨로 주어지는 단어들을 모두 tokenize 후 77 칸 이외 남는 부분은 모두 0으로 패딩해주고 있었습니다. 비디오에 대한 라벨이 문장으로 주어지는 경우 길이를 맞춰주는 것이 쉽게 납득이 됩니다. Localization의 경우 한 비디오에 포함되는 action이 여러 개일수도 있고, 심지어 localization, recognition에서 한 단어로 주어질듯한 라벨엔 GolfSwing, CliffDiving이 포함되는데 이를 ‘golf swing’, ‘cliff diving’ 등으로 쪼개어 활용하기 때문에 총 77칸으로 패딩하여 길이를 맞춰주는 모습이었습니다.

Action recognition에선 모든 비디오를 30fps로 맞춰주고, 한 비디오 당 16개의 프레임만을 샘플링하여 사용했다고 합니다. 16개의 프레임을 뽑을 때는 프레임 간 random gap (\in{} \{1, 2, 3, 4, 5, 6, 10, 15\})을 주었습니다. Batch size는 64로 두었고 프레임을 랜덤으로 뽑는 과정 자체로 성능 변동이 심할 수 있기 때문에 5번의 실험에 대한 평균 성능을 논문에 담고 있습니다.

Action localization을 위해선 2-stage 방법론을 활용했다고 하였는데, 먼저 전체 비디오를 여러 개의 segment들로 나눠줍니다. 이후 CLIP image encoder와 Transformer Encoder를 통해 임베딩하고 이렇게 임베딩된 feature를 anchor-free action proposal 방법론 하나에 넣어주어 action proposal들을 얻어주게 됩니다. 이후엔 각 proposal을 하나의 trimmed video로 다루어 앞에서 이야기한 action recognition의 detail 그대로 proposal classifier를 구축하고 localization을 수행했습니다.

Video retrieval은 전체 비디오에서 16개의 프레임만을 샘플링하였는데, task 특성 상 비디오에서 넓은 범위를 보는 것이 유리하기 때문에 action recognition보다는 큰 gap (\in{} \{10, 15, 30\}) 중 랜덤으로 가져와 수행했다고 합니다.

3.2 Action Recognition

정말 본격적인 실험 성능 부분입니다.

표 1

먼저 표 1은 Kinetics400과 Kinetics700 데이터셋에서 action recognition을 수행한 ablation 성능입니다. Baseline 성능은 original CLIP 논문에 리포팅된 성능입니다. Baseline 1은 “a photo of [ __ ]”라는 handcrafted prompt로 action recognition을 수행했을 때의 성능이고, Baseline 2는 사전학습된 CLIP image encoder 뒤에 붙인 linear classifier만을 학습했을 때의 성능입니다.

실험 A0에서 temporal modeling없이 앞뒤에 적은 learnable prompt만을 붙였는데, 이렇게 적은 학습만으로도 성능이 Basleine에 비해 유의미하게 향상되는 것을 볼 수 있습니다. Baseline 2와 A3을 보았을 때, 16K의 학습 파라미터만을 추가함으로써 4.4%의 성능 향상을 일으키며 방법론의 효율성을 입증하고 있습니다. Learnable prompt의 경우 앞뒤로 16개씩 붙이는 것이 가장 큰 성능 향상 폭을 보였고, Transformer Encoder를 통한 temporal modeling도 A3 대비 최소 5%의 성능 향상을 가져오며 learnable prompt와 temporal modeling 모두 필수적인 요소임을 알 수 있습니다.

표 2

표 1에서의 실험 결과를 통해 저자는 앞뒤 16개 씩의 learnable prompt vector, 2개의 Transformer Encoder를 통한 temporal modeling을 default setting으로 가져가고, 이는 굉장히 적은 약 5M 크기의 학습 파라미터만을 요구합니다. 표 2에서의 다른 백본들을 학습하기 위해선 훨씬 더 많은 학습 cost가 들어간다는 점을 감안했을 때, 저자의 방법론이 SOTA는 아니지만 합리적인 성능을 보여준다는 점이 인상깊습니다.

표 3

표 3은 Something-Something V2 데이터셋에서의 closed-set action recognition 성능을 보여주고 있습니다. Baseline 1은 어떠한 prompt도 없이 CLIP의 zero-shot inference 성능인데, 여기에 learnable prompt만을 적용하거나 learnable prompt, temporal modeling을 추가하면 큰 성능 향상을 일으키는 것을 볼 수 있습니다. 하지만 이러한 성능은 기존 비디오 백본을 학습시켜 task를 수행하는 경우의 성능보다 차이가 큰 편인데, 저자는 이에 대해 CLIP representation이 사람의 fine-grained motion보단 물체 자체의 정보에 더욱 의존하기 때문이라고 분석하고 있습니다. 이를 이해하기 위해 4개의 Transformer Encoder의 성능과 더불어 다른 개수의 layer를 사용하는 경우의 경향성도 같이 보여주었다면 납득하기 조금 더 쉬웠을 것 같습니다.

표 4

표 4의 Few shot action recognition은 모델의 일반화 성능을 확인하기 위해, 하나의 데이터셋 내 일부 클래스의 일부 샘플만을 학습한 뒤 나머지 클래스들을 모두 포함한 세트 내에서 평가를 진행하는 방식입니다.

5-Shot-5-Way Setting. 현재 총 3개의 데이터셋에 대한 성능을 보여주고 있는데요, HMDB-51, UCF-101의 전체 51개, 101개 클래스 중 각각 10개, 21개만을 샘플링하였다고 합니다. K400의 경우 400개 중 24개의 카테고리에서 비디오 100개씩을 가져오게 됩니다. 이렇게 샘플링한 각각의 subset들에서 5개 카테고리, 각 카테고리별 5개의 샘플만을 가져와 학습하게 됩니다. 학습을 마치면 subset에 속하는 나머지 샘플들로 inference를 수행하는 것입니다. 랜덤으로 샘플링되는 set에 따라 성능 차이가 클 것이기 때문에 총 200번 수행한 뒤 평균 성능을 리포팅하고 있습니다.

다른 few-shot recognition 방법론 또는 CLIP adaptation 방법론들보다 해당 setting에서 굉장히 높은 성능을 보여주며 저자의 방식대로 학습하였을 때 일반성있는 모델을 얻을 수 있음을 증명하였습니다. 신기한 점은 오히려 temporal modeling을 하지 않는 경우 모든 데이터셋에서 성능이 더 높은데, 너무 적은 개수의 sample만을 학습하는 경우 Transformer의 Inductive bias 부재와 엮이며 위와 같은 경향성을 보이는 것 같습니다. 저자가 이에 대해 언급을 하고 있진 않습니다.

5-Shot-C-way Setting. 앞서보다 조금 더 어려운 setting으로, 각 데이터셋의 전체 클래스에서 5개씩만을 모두 샘플링하고, 학습을 마치면 기존 test sample로 inference를 수행하는 경우의 성능입니다. 일반적 상황과 동일하지만 학습 dataset이 대폭 줄어든다는 점이 성능 측면에서 어려움을 줄 것입니다. 학습 데이터셋 양이 많은만큼 실험을 10번 반복하고 평균 성능을 리포팅하고 있습니다.

CLIP zero-shot 성능에 해당하는 Baseline 1 대비 UCF와 HMDB에서는 15% 가량의 큰 성능 향상을 가져오고 있습니다. 이 실험 setting에서는 또 temporal modeling이 긍정적인 영향을 주고 있네요.

표 5

표 5는 zero-shot 상황(\mathcal{C}_{train} \cap{} \mathcal{C}_{val} = \phi{})에서의 ablation 성능입니다. Kinetics700 데이터셋을 기준으로 실험을 수행하였습니다. 700개의 클래스 중 400개의 클래스만 학습에 사용하고 겹치지 않는 나머지 300개의 클래스를 test set으로 사용하였습니다.

C0 ~ C3 성능을 보았을 때 zero-shot 상황에선 prompt vector의 개수가 큰 영향을 미치진 않고 있고, 오히려 temporal modeling layer를 붙일수록 성능이 떨어지는 것을 볼 수 있습니다. Temporal modeling을 돕는 Transformer Encoder가 추가될수록 학습 set 클래스들에 강하게 fitting되며 일반화 성능에는 도움이 안되는 것으로 보입니다.

Action recognition에서의 성능들을 토대로 정리하자면, 일반적으로 prompt learning과 temporal modeling이 모델 성능에 긍정적인 영향을 주고 있었습니다. Closed-set setting에선 단순히 learnable prompt를 사용하는 것만으로도 CLIP의 baseline 성능을 뛰어넘고 있고, 백본 학습 기반의 방법론들보다 적은 개수의 학습 파라미터만으로도 견줄 만한 성능을 보이고 있었습니다. Few shot과 zero shot setting에선 learnable prompt가 seen class를 기반으로 unseen class에 대해서도 일반성을 부여해줄 수 있다는 것을 알 수 있었습니다.

3.3 Action Localization

Action localization에서는 THUMOS14 데이터셋과 ActivityNet v1.3 데이터셋을 사용하여 실험합니다.

표 6

표 6은 closed-set 상황에서의 action localization 성능입니다. Baseline 3은 저자가 사용한 action localization과 동일하게 proposal까진 만들어내지만, 이를 분류하기 위해 기본적인 CLIP의 handcrafted prompt 기반 zero-shot classification 방식을 사용했을 때의 성능입니다.

우선 기존 방법론들에 RGB feature만을 사용하는 경우보다 저자의 방법론이 훨씬 높은 성능을 보여주고 있고, Baseline 3과 비교했을 때의 차이는 action recognition 과정인데 이것이 localization에도 긍정적으로 작용하는 것을 알 수 있습니다. TAL에서 optical flow의 중요성에 대해 이전 세미나 때 설명드린 적이 있었는데, flow를 사용하는 최근 방법론들보단 성능이 많이 떨어지지만 학습에 필요한 cost와 효율성을 기준으로 두고 보아야 할 것 같습니다.

표 7

표 7은 zero-shot 상황에서의 action localization입니다. 저자는 zero-shot action localization을 수행한 기존 연구의 setting이 없어 우선 seen과 unseen 클래스 비율을 75:25, 50:50으로 나눴을 때의 성능을 측정해봅니다. 마찬가지로 클래스에 대해 랜덤으로 나눠주기 때문에 10번 반복실험을 하고 평균 성능을 리포팅하였습니다.

우선 Baseline 3보다는 일반화된 성능을 보여주고 있지만, closed-set 대비 큰 성능의 하락이 일어나고 있습니다. 이에 대해 저자는 untrimmed video 속 존재하는 seen / unseen action 간의 distribution 차이가 커 seen 클래스에 대해 편향된 상황이라는 간단한 분석을 내놓고 있습니다. 또한 proposal 구간은 잘 만들어냈지만 unseen 클래스의 분류 과정에서 오류가 클 수도 있을 것입니다.

3.4 Text-Video Retrieval

표 8

표 8은 MSRVTT, LSMDC, DiDeMo, SMIT 데이터셋에서 수행한 text-video retrieval 성능입니다. 이 실험에선 비디오에 라벨링 되어있는 문장의 길이가 길면서 여러 개이기 때문에 77이라는 칸을 맞추기 위해 learnable vector를 문장 앞뒤에 4개씩만 추가해주었다고 합니다.

Baseline 4는 문장 자체를 바로 tokenize 후 CLIP text encoder에 태워 retrieval을 수행하였을 때의 성능입니다. 저자가 제안하는 방식이 모든 데이터셋에 대해 베이스라인보다 높은 성능을 보이고 있습니다. 가장 위 3가지 방법론은 text-video retrieval을 수행하기 위해 고안된 방법론들이라고 하는데, 이들과 거의 유사하거나 높은 성능을 보여준다는 점으로부터 저자가 제안한 방법론이 비디오에 효과적인 representation을 잘 만들어내고 있다는 점을 알 수 있습니다.

더불어 아래 CLIP4Clip이라는 방법론의 성능도 함께 리포팅하고 있습니다. CLIP4Clip의 경우 애초에 136M개의 비디오로 구성된 HowTo100M 데이터셋으로 사전학습 되었습니다. 반면 본 방법론의 성능은 소규모인 벤치마크 데이터셋만으로 학습하였기 때문에 둘 간의 직접적 성능 비교는 fair하다고 볼 수 없을 것 같습니다.

모든 벤치마크 실험에서 학습 대상이 최대 (learnable vector + 2개의 transformer layer)이기 때문에 24G 3090 한 장이면 충분하다고 하네요. 이 정도의 학습 cost로 다른 사전학습 및 백본 학습 방법론들과 견줄 만한 성능을 낸다는 점은 유의미한 것 같습니다.

4. Conclusion

저자의 방법론은 굉장히 간단했지만, 오히려 이를 통해 일부는 기존에 없던 다양한 setting에서의 실험 baseline을 잡아주었다는 점이 가장 큰 contribution이라고 생각됩니다. Computational cost까지 유사하여 정말 fair하게 비교할 수 있는 벤치마크 방법론들이 그리 많지 않아 영양가 는 분석을 하기엔 힘들었지만, 본 연구의 후속 연구들을 보며 비디오에서는 CLIP representation을 어떻게 효율적으로 받아가고 있는지 살펴보고 고민하는 것이 중요할 것 같습니다.

Author: 김 현우

6 thoughts on “[ECCV 2022] Prompting Visual-Language Models for Efficient Video Understanding

  1. 안녕하세요 김현우 연구원님 리뷰 잘 읽었습니다.

    모를 수도 있을 것 같은데, 읽다보니 궁금해져서 프롬프트를 최적화하는 방식은 어떻게 되나요? 인공지능 학습도 블랙박스지만 대충 방향성은 알 수 있는 부분들이 있을 것 같은데, 프롬프트 최적화도 그런 방식인지 아니면 진짜 말을 잘 만드는 방향으로 해보는지 궁금하네요.

    두번째 질문은 프롬프트를 학습 기반으로 바꾸는 것의 질문인데요.
    “문장 -> 토크나이저 -> 특정 벡터”로 특정 텍스트를 변환해주는 과정이 있는 것으로 알고 있습니다.
    기존의 토크나이저가 고정 벡터를 생성하기 때문에, 앞뒤에 learnable한 벡터를 만들어서 넣어주겠다 같은 느낌같은데요. 그럼 왜 앞 뒤에 넣는지에 대한 insight는 없나요? (기존 Clip의 프롬프트를 생각해보면, “a photo of [ CLS ]”이기 때문에 앞에만 넣어주는 방향도 있었을 것 같습니다)

    1. 안녕하세요 댓글 감사합니다.

      prompt를 이후에 text로 decode하는 과정은 없어 사람이 이해할 수 있는 semantic 함을 가지는지는 알기 어려울 것 같습니다. 하나의 action 클래스마다 비디오에 드러나는 그 action의 특성을 잘 담는 방향성으로 학습되지 않았을까 생각됩니다.

      prompt의 template은 저자의 언급에 따르면, 앞만 또는 뒤만 붙이는 경우에도 성능의 차이가 없었던 것으로 보입니다. 논문에는 정확히 “Note that, although we prepend and append the equal number of prompt vectors, the optimisation can perfectly learn to ignore any of these vectors, thus, we do not ablate other prompt formats”라고 쓰여있어, 이는 실험적으로 결정된 사항인 것 같습니다.

      감사합니다.

  2. 안녕하세요. 김현우 연구원님.
    좋은 리뷰 감사합니다. 마침 저도 CLIP을 비디오에 어떻게 연결할 수 있을까 고민하고 있었는데, 도움이 많이 될 것 같습니다.

    질문이 두가지 있습니다.
    1. CLIP 이미지 인코더를 통과한 프레임들에 트랜스포머로 Temporal 한 정보를 넣어준다고 하셨는데, 이때 트랜스포머에 들어가는 각 토큰이 각 프레임에 대응하는 것이라고 보면 될까요?
    2. CLIP의 학습 비용이 상당히 큰 것으로 알고 있는데, 혹시 본 논문에서 학습에 사용한 자원이나 시간을 언급한 것이 있나요?

    감사합니다!

    1. 안녕하세요 댓글 감사합니다.

      1. 네 3.1의 Implementation Detail 설명에 따라 sampling한 프레임들이 temporal modeling의 대상이 되는 것입니다.

      2. CLIP encoder는 frozen 상태로 사용하고, 저자가 제안하는 방법론에서 학습되는 대상은 learnable prompt와 transformer encoder 2개로 파라미터 개수는 5M입니다. 학습은 한 장의 24G 3090으로 하였다고 리뷰에 적어두었습니다.

  3. 안녕하세요. 좋은 리뷰 감사합니다.

    prompt learning에 대해서 관심이 있었는데 디테일하게 언급해주어서 이해가 쉬웠습니다.
    이와 관련하여 질문이 있습니다.

    1. 왜 learnable prompt vector를 앞 뒤로 붙이는 걸까요? 앞에만 븥이거나 뒤에만 붙이는 방식도 있을 거 같은데 이러한 방식을 이 논문에서 처음 사용하였는지 아니면 기존의 방법론이 존재하는 건지 궁금합니다.
    2. 제가 이해한 바는 prompt를 주는 방식이 (learnable vector1, …., action label, …, learnable vector_n) 이런식으로 들어가는 것으로 이해했는데 여기서 action이 단 하나의 단어로만 존재하는지 궁금합니다. 즉, label의 길이에 따라서 learnable vector의 갯수가 달라지는지가 궁금하네요

    감사합니다

    1. 안녕하세요 댓글 감사합니다.

      1. 이광진 연구원님께 드린 답변을 참고하시면 좋을 것 같습니다. 실험까지 가져오진 않았고 말로만 언급하고 있네요.

      2. 이해하신 것이 맞는데, 3.1의 Implementation detail 부분을 참고하시면 좋을 것 같습니다. 하나의 클래스가 두 단어인 경우 이를 한 단어씩 끊어 tokenize, 임베딩하고, 문장은 한 단어 단위로 tokenize, 임베딩 합니다. 하지만 클래스 text의 길이가 달라진다고 learnable vector 개수가 달라지진 않습니다. 그래서 downstream task 중 text-video retrieval의 경우 주어지는 text 길이가 길기 때문에 16 + (문장) + 16이 아니라 4 + (문장) + 4 형태로 해주어 총 77칸에 넘치지 않고 들어갈 수 있도록 조절해준 것입니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다