안녕하세요. 그동안 MoE 관련 논문들을 집중적으로 살펴봤는데, 이제 본격적으로 Text-Video Retrieval(TVR) 모델에 MoE를 적용해보려고 합니다. 그래서 TVR 모델에 대해 다시 서베이를 진행하면서, 각 연구가 어떤 문제를 해결하려 했는지, 또 어떤 부분을 개선하려 했는지를 중점적으로 살펴봤습니다. Vision-Language 모델 중 대표적인 예로는 CLIP이 있습니다. 비디오 도메인에서도 이렇게 대규모 데이터셋으로 사전학습된 모델이 있다면 좋겠지만, 데이터 수집 비용 같은 현실적인 문제 때문에 개발이 쉽지 않은 상황입니다.
따라서 CLIP을 활용하여 비디오 도메인에 적용시키려는 연구들이 진행되고 있습니다. 대표적인 모델로는 2021년 microsoft에서 발표한 [CLIP4Clip: An Empirical Study of CLIP for End to End Video Clip Retrieval] 논문이 있습니다. 이 모델은 비디오의 각 프레임을 개별 이미지로 처리한 뒤 하나의 비디오 임베딩으로 합치는 방식을 사용합니다. CLIP4Clip은 복잡한 구성 없이도 꽤 좋은 결과를 내면서 베이스라인으로 활용되고 있습니다. 이후 연구에서는 CLIP을 더 효과적으로 활용하기 위해 Prompt Learning에 대한 연구가 이어졌습니다. 이는 사전학습된 모델의 전체 파라미터를 Fine-tuning 시키는 방식이 아닌 프롬프트만 학습, 최적화시켜 학습 cost를 줄이는 방식입니다. 제가 관심있는 MoE보다 설계도 간단하고 파라미터 관점에서 더 효율적인 방법이라 할 수 있겠습니다. 그래서 이 연구와 차별점을 두기 위해서 이쪽 연구는 어떻게 진행되는지 살펴보고자 이번 논문을 리뷰하게 되었습니다. 그럼 이제 본격적으로 리뷰 시작하겠습니다.
1. Introduction
Prompt Learning의 주요 방식에는 Text Prompt Engineering과 Visual Prompting이 있습니다. Text Prompt에서는 사람이 직접 프롬프트를 설계하는 Manual Prompting과, 자동으로 프롬프트를 생성하는 Automated Prompting이 있습니다. 또한 Visual Prompting은 입력 이미지에 학습 가능한 프롬프트 토큰을 추가하는 방식입니다. 이 토큰들은 downstream task의 데이터로 학습되면서 해당 task에 필요한 시각적 정보를 더 잘 인식하는 역할을 합니다. 결국에 Prompt Learning의 핵심은 사전 학습된 모델이 가지고 있는 지식을 더 잘 끄집어내어 특정 task에 잘 활용하는 것이라고 할 수 있겠습니다.
이번 논문은 Prompt Learning 연구 분야에 속하며, CLIP을 활용해 비디오 도메인으로 확장하는 방법을 탐구한 논문입니다. 이전에도 비디오 도메인에서 Prompt 학습 방식이 없었던 건 아닙니다. 2021년 ECCV에 발표된 [Prompting Visual-Language Models for Efficient Video Understanding] 논문에서는 아래 그림과 같이 prompt 벡터를 추가하는 방식을 사용했습니다.

하지만 이 방법은 text encoder에서만 사용된다는 한계가 있습니다. 또한 초반 레이어에만 프롬프트가 입력되다 보니, 정보가 충분히 전달되지 않는 문제도 있습니다. 이에 저자는 텍스트 프롬프트뿐만 아니라 비디오 프롬프트도 추가하고, 이를 각 레이어마다 삽입하는 방식을 통해 모델을 full fine-tuning 했을 때와 맞먹는 성능을 달성했다고 합니다.
따라서 저자의 Contribution을 정리하면 다음과 같습니다.
- CLIP을 Text-Video Retrieval에 최소한의 학습만으로 효과적으로 성능을 내는 VoP baseline 제안
- 비디오 정보를 활용하기 위해 frame position, frame context, layer function 등의 세 가지 비디오 프롬프트를 개발
- 벤치마크 실험을 통해 다양한 프롬프트 조합이 VoP의 성능을 향상시키며, full fine-tuning 대비 훨씬 적은 파라미터로 더 나은 성능을 보여줌
2. Method
저자가 제안하는 모델의 framework는 다음과 같습니다.


앞서 설명한 것처럼, 저자는 텍스트 인코더와 비주얼 인코더 모두에 프롬프트를 추가하는 방식을 적용했습니다.
또한, 프롬프트를 초기 레이어에만 추가하는 것이 아니라, 모든 레이어에 프롬프트를 삽입하는 구조로 설계하였습니다. 텍스트 인코더 쪽을 살펴보면, 입력 문장을 먼저 토큰화한 뒤, 이를 임베딩하여 초기 워드 임베딩인 W₀을 얻습니다. 이후 i번째 레이어에서는, 이전 레이어 출력을 Wᵢ로 받아들이고, 여기에 해당 레이어의 텍스트 프롬프트 Pi-1를 입력 시퀀스에 추가하여 새로운 입력으로 사용합니다.
이를 수식으로 표현하면 다음과 같습니다.



이 과정은 총 K번 반복되어 최종적으로 z 벡터를 추출하게 됩니다.
한편, 비주얼 인코더에서는 이미지 I가 주어졌을 때, 이를 M개의 패치로 분할하여 시퀀스 토큰 E0을 생성합니다.
E0는 i번째 레이어에 입력되어 Wi를 얻으며, 이때 CLS 토큰 c와 비주얼 프롬프트 P가 함께 추가되어 레이어 입력으로 사용됩니다.
이를 수식으로 표현하면 다음과 같습니다.


최종적으로 CLIP의 기존 파라미터는 고정(freeze)하고, 프롬프트만 파인튜닝하여 새로운 도메인에 대한 정보를 학습합니다.
Equipping with Video Prompts
비디오에는 움직임, 시간에 따른 변화, 장면의 흐름 등 프레임 하나만으로는 파악하기 어려운 다양한 정보가 존재합니다. 그러나 현재 구조만으로는 모델이 각 프레임을 독립적인 이미지로 인식하기 때문에, 시간적 정보나 프레임 간 관계를 충분히 활용하지 못하는 한계가 있습니다. 이에 저자는 비디오 프롬프트(video prompt)를 추가로 설계하여, 다양한 관점에서 정보를 추출하고자 합니다.
이 방식은 Position-Specific Video Prompts (VoPP), Context-Specific Video Prompts (VoPC), Function-Specific Video Prompts (VoPF) 총 세 가지로 구성됩니다.
VoP with Position-Specific Video Prompts (VoPP)

이 방식은 프레임의 순서를 고려하는 방법입니다. 기존 VoP는 모든 프레임에 동일한 프롬프트를 적용했기 때문에, 프레임 순서에 대한 고려가 전혀 이루어지지 않았습니다. 이로 인해 각 프레임이 영상 내에서 어떤 위치에 있는지, 즉 시간적 순서를 반영할 수 없는 한계가 있었습니다. 이 문제를 해결하기 위해 저자는 VoPP(Position-Specific Video Prompts)를 제안합니다. VoPP는 프레임의 위치 정보를 반영하여, 각 프레임에 해당 위치에 맞는 프롬프트를 적용하는 방식입니다.
구체적으로는 프레임의 위치 인덱스를 기준으로 프롬프트를 저장하는 테이블을 만들고, 각 프레임이 처리될 때 해당 위치에 대응하는 프롬프트를 불러와 사용합니다. 이를 수식으로 표현하면 다음과 같습니다.

이 방식은 프레임의 시간적 순서를 고려해 프롬프트를 적용하기 때문에 기존 VoP보다 더 세밀한 표현이 가능합니다. 다만, 모든 프롬프트를 위치별로 따로 설정할 경우 파라미터 수가 급격히 늘어나는 문제가 있어, 실제로는 일부 프롬프트만 position-specific으로 설정하고, 나머지는 모든 프레임이 공유하도록 설계해 효율성까지 함께 고려했습니다.
VoP with Context-Specific Video Prompts (VoPC)

VoPP에서는 프레임의 위치를 고려하여 시간 정보를 반영했습니다. 하지만 프레임의 위치만으로는 비디오 전체의 맥락, 즉 다른 프레임들과의 의미적 관계까지 충분히 반영하기 어렵습니다. 예를 들어, 특정 프레임이 중요한 이유는 단순히 그 위치 때문이 아니라, 앞뒤 장면과의 연관성 속에서 의미가 부여되기 때문입니다. 이러한 문맥(context) 정보를 반영하기 위해 추가된 방식이 VoPC(Context-Specific Video Prompts)입니다.
VoPC는 각 프레임에 고정된 프롬프트를 적용하는 대신, 비디오 전체 흐름을 바탕으로 프롬프트를 동적으로 생성합니다.
구체적으로는, 비디오 내 모든 프레임의 [CLS]
토큰들을 시퀀스로 모아 Context Modeling Module(CMM)에 입력하고, 이를 통해 각 프레임의 특성이 다른 프레임들과의 관계를 반영해 업데이트 되도록 합니다. 이렇게 문맥 정보를 반영하여 업데이트된 CLS 토큰은 Fully Connected(FC) 레이어를 거쳐 프롬프트 토큰으로 변환되며, 이후 해당 프레임을 처리하는 다음 인코더 레이어에서 사용됩니다.
이를 수식으로 표현하면 다음과 같습니다.




이 프롬프트는 단순한 고정 표현이 아니라 비디오 전체의 상황을 반영한 표현이라는 점에서, 시간적 순서뿐만 아니라 프레임 간 의미적 관계까지 함께 고려할 수 있는 구조를 제안했다고 할 수 있습니다
VoP with Function-Specific Video Prompts (VoPF)

앞서 제안된 VoPP와 VoPC는 비디오의 특성을 고려해 잘 설계되었지만, 비디오 전체의 시간-공간 관계를 완전히 반영하는 데에는 한계가 있습니다. 이를 트랜스포머 구조를 별도로 추가하는 방식으로 보완할 수 있지만, 학습 파라미터가 크게 증가하여 효율성 측면에서 부담이 큽니다. 이에 저자는 새로운 구조를 추가하지 않고도 시간-공간 정보를 효과적으로 다룰 수 있는 VoPF(Function-Specific Prompts)를 제안합니다. VoPF는 CLIP의 비주얼 인코더를 앞쪽과 뒤쪽 두 부분으로 나누고, 각각에 다른 역할을 부여하는 방식입니다.
앞쪽 shallow layers(Ks개)에서는 기존과 같이 각 프레임 내 공간 정보(spatial)를 처리하는 데 집중하며, 이 구간에서는 VoPP나 VoPC처럼 프레임 중심의 프롬프트를 그대로 사용할 수 있습니다.
반면 뒤쪽 deep layers(K−Ks개)에서는 단일 프레임이 아니라 비디오 전체, 즉 프레임 간의 시간-공간 관계를 처리하도록 설계됩니다. 이 구간에서는 모든 프레임의 토큰들을 함께 입력으로 사용하며, 이에 맞춰 비디오 레벨의 프롬프트를 적용합니다. 이를 수식으로 표현하면 다음과 같습니다.

정리하면, VoPF에서는 shallow layers는 프레임 단위로, deep layers는 비디오 단위로 정보를 처리하는 구조를 갖는다 할 수 있겠습니다.
3. Experiment
실험 세팅은 Text-Video Retrieva 분야의 대표 벤치마크인 MSR-VTT, DiDeMo, ActivityNet, LSMDC 등을 사용했습니다. 모델의 경우 사전 학습된 CLIP의 비주얼 및 텍스트 인코더를 사용하고 백본은 모두 freeze 합니다.

먼저 MSR-VTT-9k 데이터셋에서의 실험 결과를 살펴보겠습니다. 테이블에서는 Full fine-tuning과 Bias만 조정하는 방식, linear projection만 업데이트하는 방식, 마지막 레이어만 조정하는 방식, 그리고 Self-Attention 및 FFN에 Adapter를 추가하는 방식과 비교를 진행합니다.
이 과정에서 저자가 제안한 프롬프트 기법 중 비디오 프롬프트만 사용해도 Full fine-tuning보다 더 좋은 성능을 낼 수 있다는 걸 확인할 수 있습니다. 게다가, 아주 적은 양의 파라미터만 추가했을 뿐인데도 성능이 꽤나 크게 향상된다는 점도 눈에 띄네요. 최종적으로 비디오 프롬프트에 더해서 Position 프롬프트와 Context 프롬프트까지 함께 적용했을때 성능이 가장 많이 향상되는 것을 확인할 수 있습니다.

MSR-VTT-9k 데이터셋뿐만 아니라, 다른 데이터셋에서도 실험을 진행해 결과를 함께 살펴보겠습니다.
대부분의 데이터셋에서 성능 향상이 나타났으며, 특히 DiDeMo와 같은 데이터셋에서는 뚜렷한 개선 효과를 확인할 수 있었습니다. 다만, ActivityNet과 LSMDC에서는 다른 경우에 비해 성능 향상은 나타나지 않았습니다.
그럼에도 불구하고, 전반적으로 저자가 제안한 프롬프트 기법이 다양한 데이터셋 환경에서도 일반화 성능을 보여준다는 점은 주목할 만한 결과인 것 같습니다.

다음으로는 프롬프트 depth와 프롬프트 length에 대한 Ablation 실험 결과를 살펴보겠습니다.
먼저, 프롬프트를 삽입하는 레이어(layer) 수를 점진적으로 늘려본 결과, 더 많은 레이어에 프롬프트를 추가할수록 성능이 꾸준히 향상되는 경향을 확인할 수 있었습니다. 반면, 프롬프트 length에 대한 실험에서는 토큰 수를 늘릴수록 성능이 계속해서 증가하지는 않았습니다. 토큰을 8개에서 12개 정도 추가했을 때, 성능과 파라미터 효율성 사이에서 가장 좋은 균형을 보여주는 것을 확인할 수 있습니다.


마지막으로 정성적 결과를 살펴보겠습니다. Fig. 7은 MSR-VTT-9k 데이터셋에서 검색 결과를 시각화한 모습을 보여줍니다.
왼쪽 상단 예시에서는 Full과 제안된 방법들이 정확한 비디오를 찾아낸 반면, Partial은 관련 없는 비디오를 선택해 한계를 드러냈습니다.
오른쪽 상단에서는 Full이 “일본어 책”이라는 핵심 정보를 놓친 반면, 다른 방법들은 일본어 문자나 “Tokyo” 같은 시각적 단서를 정확히 포착하는 모습을 보였습니다. 왼쪽 하단에서는 Full과 VoPF+C가 연속된 프레임을 통해 하나의 사건을 전체적으로 이해하고, 적절한 비디오를 선택하는 모습을 보여주었고, 오른쪽 하단에서는 VoPF+C가 “tail”과 “play with” 같은 세밀한 개념을 정확히 파악해, 난이도 높은 예시들 사이에서도 올바른 비디오를 구별하는 모습을 보여주네요.
감사합니다.
안녕하세요 정의철 연구원님 좋은 리뷰 감사합니다.
frame position, frame context, layer function 세가기 비디오 프롬프트로 구분한 설계를 통해 성능을 향상시킨 것이 인상적인 연구인 것 같습니다. 두가지 질문이 있는데, 첫번째는 Function-Specific Prompts를 적용할 때에 비쥬얼 인코더를 앞쪽과 뒤쪽 두부분으로 나누고 각각에 서로다른 역할을 부여하는 방식이라고 설명해주셨는데, Shallow layer와 Deep layer를 구분하는 Ks는 어떻게 선정되었는지 궁금합니다. 혹시 이에 대한 Ablation Study 결과가 논문에 있었나요?
두번째로 ActivityNet과 LSMDC에서는 다른 경우에 비해 성능 향상이 나타나지 않았다고 설명해주셨는데, 그 이유가 궁금합니다. 데이터셋의 특징으로 인해 프롬프트의 영향력이 적었을 것이라고 생각되는데 어떤 특징으로 인해 성능향상이 없었는지 궁금하네요. 경우에 따라 특정 상황에서만 효과적인 방법은 아닌지, 아니면 특정 상황에서만 효과가 미비한건지, 이에 대한 저자의 고찰은 없었나요?
감사합니다.
안녕하세요 정의철 연구원님 좋은 리뷰 잘 읽었습니다.
프롬프트를 추가하고 이를 학습시켜서 사전학습 모델이 학습한 지식을 더 잘 끄집어내게 한다는 문장을 읽고나서 본 연구의 컨셉을 더 이해가 되었네요!
프롬프트를 초기 레이어에만 추가했을 때 그 정보가 뒤 레이어에 대해선 충분히 전달이 되지 않는다고 설명해주셨는데요 그 이유가 궁금한데 설명해주실 수 있을까요??
또한 본 연구의 contribution 중 하나가 프레임마다 다른 프롬프트를 주는 것이라고 설명해주신 부분에서 기존 VOP의 방법론이 모든 프레임에 대해 동일한 프롬프트를 줬을 때도 학습이 가능했던 이유도 궁금합니다.
감사합니다.