멀티모달인공지능

19강 Vision Language Pretraining

ima9ine4 2025. 6. 5. 01:45

[ 1 ] Vision-language pretraining

멀티모달에서도 BERT 같은 접근이 가능하다!

이를 가능하게 만든 것은 대규모 vision-language 데이터셋의 등장이다. Conceptual Captions라는 데이터셋은 이미지와 캡션 쌍을 수작업 없이 웹에서 자동으로 수집하여 약 3,310,000 쌍의 대규모 데이터셋을 구축할 수 있었다. Conceptual Captions이 등장하기 전, 가장 규모가 컸던 MS-COCO 데이터셋이 약 120,000개의 이미지를 가지고 있었다. Conceptual Captions는 수작업이 필요하지 않은 데이터셋으로 구축되어 MS-COCO보다 무려 25배 이상 데이터셋 크기를 증가시켰다.

 

그렇다면 이 데이터를 어떤 모델로 학습시킬까?

 


[ 2 ] VILBERT

ViLBERT는 Vision & Language BERT로, BERT 구조를 확장하여 이미지와 텍스트를 동시에 이해할 수 있는 모델이다.

ViLBERT는 이미지와 텍스트를 각각 따로 임베딩한 후 BERT 기반의 구조를 활용해 두 모달리티 간의 의미를 연결해준다.

 

먼저 아래와 같은 방식으로 각각의 모달리티에서 임베딩을 진행한다.

  1. 이미지 임베딩: Pre-trained Faster R-CNN 사용
    Faster R-CNN을 통해 Region Embedding 생성, 추가적으로 위치 정보 인코딩을 위한 Bounding box 좌표 및 면적
  2. 텍스트 임베딩: Pre-trained BERT Encoder 사용
    BERT를 통해 각 단어에 대해 context-aware 토큰 임베딩 생성

두 모달리티의 임베딩은 Co-attention Transformer layer를 통해 상호작용한다. 

왼쪽 (a)는 일반 Transformer block이다. 텍스트 또는 이미지 각각 자신에 대한 self-attention만 수행하므로 모달리티 간 정보 공유가 없다. 그러나 오른쪽 (b) 이미지는 이미지 -> 텍스트, 텍스트 -> 이미지 방향 모두에서 attention을 수행한다. 모달리티 간 서로의 정보를 주고 받는다.

 

 

 

 

이러한 구조의 ViLBERT가 학습을 위해 사용하는 두 가지 pre-training task는 다음과 같다.

 

1. Masked Multi-modal Modeling (MMM)

일부 입력을 마스킹하고 그것을 예측하는 task이다. 이미지와 텍스트 모두 마스킹할 수 있다.

  • 이미지 region 중 일부를 [MASK]로 가리면 그 부분이 어떤 객체인지 분류한다.
  • 텍스트 일부를 [MASK]로 가리면 원래 단어를 예측한다. (BERT와 동일)

 

2. Multi-modal Alignment Prediction

이미지와 캡션이 서로 맞는 쌍인지 아닌지 예측하는 이진 분류 task이다.

<IMG> 토큰 위치의 이미지 임베딩은 전체 이미지를 대표(요약)하며, <CLS> 토큰 위치의 임베딩은 전체 문장을 대표(요약)한다. 따라서 이 두 벡터(이미지 요약 벡터와 텍스트 요약 벡터)를 비교해서 그 둘이 의미적으로 비슷한지 판단한다. 두 임베딩을 element-wise product한다. 그 결과는 두 벡터가 얼마나 유사한지를 반영하는 특징 벡터가 되며 이 벡터를 classifier에 넣어 쌍이 맞는지 이진 분류(aligned/not aligned)를 하는 것이다.

학습을 위해 일부러 negative pair도 섞어서 모델을 훈련시킨다.

 

 

이렇게 학습시킨 pre-trained ViLBERT 모델은 downstream task를 위해 fine-tuning을 거친다.

 

Task 1) VQA

<IMG>, <CLS> 토큰 위치의 최종 임베딩 둘을 element-wise product 한다. 그 결과를 Classifier(two-layer MLP)에 넣어 답변 후보중 하나를 분류한다. (alignment 사전학습 방식과 유사)

 

Task 2) Image-Text Retrieval

<IMG>, <CLS> 토큰 위치의 최종 임베딩 둘을 내적하여 이 값을 alignment score로 사용한다 

 

 

이렇게 fine-tuning하여 downstream task를 진행하면 Task-specific SOTA architecture들보다 우수한 성능이 나온다는 놀라운 결과가 나온다. 대규모 데이터셋으로 사전학습을 한 것의 효과인 것이다. zero-shot Retrieval도 가능해졌는데 이 역시 사전 학습을 통해 representation을 잘 학습하게 된 결과이다.

 

 

그러나 two-stream architecture인 ViLBERT는 Co-Attention Transformer Layer를 양쪽 stream에 모두 구현해야 하기 때문에 모델 구조가 복잡해지고 비효율적이라는 단점이 있다. 또한 모달리티 간 상호작용이 Co-TRM에서만 일어나기에 상호작용의 반영이 제한적이라는 문제가 있다.

 

 


[ 3 ] UNITER

이러한 문제 속에서 나온 UNITER는 각각의 모달리티를 따로 처리하지 않고, 처음부터 이어 붙여 하나의 sequence로 통합한다. BERT에서 두 문장을 이어붙여 input sequence를 형성한 것과 유사하다. 단 여기서는 서로 다른 모달리티를 이어붙인 것이다!

위 구조를 보면 이미지 임베딩들과 텍스트 임베딩들이 이어붙여져있다. 그리고 그 위에는 Transformer가 있다. Input Sequence에 대해서 Transformer encoder block을 적용시키는 것이다. 모든 토큰 간의 self-attention을 수행하면서 모달리티 간 상호작용이 발생한다. VILBERT에서는 두 모달리티를 각각 처리하는 부분, 같이 처리하는 부분으로 나뉘었기에 이를 two-stream 아키텍처라고 했는데, 여기서는 처음부터 두 모달리티를 합쳐서 같이 처리하므로 one-stream 아키텍처이다. 

 

pre-training objective는 다음과 같다.

1) Masked Language Modeling

2) Masked Region Modeling

두 방법은 BERT의 Masked Language Modeling 방법과 매우 유사하다. 단 차이가 있다면 모달리티 별로 objective를 분리하였다는 점이다. 한 번에 하나의 모달리티에만 mask를 적용한다. 이는 masked word가 masked region을 예측하거나 masked region이 masked word를 예측하는 상황을 방지하기 위함이다.

 

3) Image-text Matching

VILBERT에서는 Multi-modal alignment prediction을 할 때, <IMG>,<CLS> 토큰 위치의 최종 임베딩 둘을 element-wise product하여 진행하였다. 하지만 UNITER에서는 그렇게 모달리티 각각의 대표 임베딩을 연산해줄 필요가 없다. 두 모달리티를 함께 처리하기 때문이다. <CLS> 토큰 위치의 최종 임베딩을 Linear 층과 Sigmoid 함수를 거치고, 0에서 1 사이의 alignment score로 나온다. 이 값을 통해 ㅡ매칭이 되는지 예측하는 것이다. 

 

4) word region alignment

문장의 단어가 이미지의 어떤 부분(Region)과 가장 잘 대응되는지 정밀하게 맞춰보는 과정이다. (자세한 설명은 pass)

 

이러한 목표를 설정하고 아래의 데이터셋을 모두 합쳐 pre-training을 진행하였다.

 
 

다음은 downstream task에 적용하기 위한 Fine-Tuning 단계이다.

 

1) VQA

<CLS> 토큰 위치의 최종 임베딩이 image-text pair의 joint 임베딩 역할을 한다. <CLS> 토큰 위치의 최종 임베딩에 classifier head를 달면 된다!

 

2) Image-text Retrieval

Image-text mathching pretraining objective를 위해 사용했던 alignment score를 그대로 사용한다. 

(<CLS> 토큰 위치의 최종 임베딩을 Linear, Sigmoid 함수에 통과시켜 나온 0~1 사이의 값)

 

그러나 UNITER는 아래와 같은 단점이 있다.

1) (Image) region Embedding을 얻기 위해 pre-trained object detector(faster-RCNN)을 사용하는데 이게 연산량이 매우 많아 bottle neck이 걸린다.

2) object detector는 freeze한 채로 VLP(Vision Language Pretraining)을 진행하므로 표현력이 제한된다. 이미지는 object detector로부터 미리 뽑아 놓은 region 벡터만 사용하므로 전체 모델이 이미지를 더 잘 표현하기 위해 업데이트할 수 있는 여지가 없다.

 

 

 


[ 4 ] VILT

VILT는 region 임베딩을 사용하지 않고, ViT Patch로 이미지를 표현한다. CNN 기반 object detector를 사용하지 않게 되니 running time과 latency가 대폭 감소하였으며, 또한 해당 부분의 파라미터도 end-to-end로 학습할 수 있게 되었다. 

(근데 VILT는 VILBERT와 UNITER 사이에 나왔다고 한다. UNITER 다음에 나온 것은 아님, 오 그리고 저자가 한국인이다)