페이지

2023년 3월 7일 화요일

트랜스포머로 구현하는 영상 언어 질의응답-1편


영상-언어 트랜스포머 질의응답(Vision and Language Transformer for Question Answering)은 주어진 이미지에 연관된 다양한 질문에 대해 딥러닝을 이용해 올바른 답변을 예측하는 기술이다. 이전 뉴스레터19호 에서 단일 모달(modal)인 텍스트 기반의 질의응답을 BERT를 기반으로 다루었다면, 본 과제에서는  이미지에 대해 자연어로 이루어진 질문을 던지고 이에 대한 답변을 예측하는, 영상과 언어의 멀티모달(multi-modal) AI 모델을 다룬다. 

영상 및 언어의 멀티 모달을 통한 응용 AI 분야 예 

아래 그림 1과 같이 이미지와 자연어 두개의 modal 을 대상으로 AI를 통하여 이해하고 예측할 수 있는 응용분야의 예 중 일부를 표시하였다. Visual Question Answering은 자연어로 이미지에 대해 질문을 던지면, 아래 그림1과 같이 어린이 의상의 색깔은? 에 대해 오렌지라고 답하는 것을 뜻한다. Referring Expression은 이미지에 나타나는 객체에 대해 표현하는 것이다. Multi-modal verification 은 아이가 개를 쓰다듬고 있다 라는 문장을 false 라고 틀렸다고 검증한다. Caption-based Image Retrieval 은 “오렌지색 의상을 입은 어린이가 양과 놀고 있는” 이라는 문장에 대응하는 이미지를 찾아온다. Natural Language Visual Reasoning 은 “왼쪽 영상은 오른쪽 2배의 개를 보유하며 적어도 모두 2개의 개가 서있다”라는 자연어 입력을 추론하여 True 라고 답한다.

<그림 1. 멀티모달 AI 응용 예>


트랜스포머 구조

트랜스포머가 어떻게 동작하는 가는 이전 뉴스레터28호를 참고. Query, Key, Value 의 3개의 동일한 입력 임베딩을 Q 와 K의 행렬곱(dot product)에 소프트맥스를 가한 결과에 Value 를 행렬곱(dot product)을 함으로써 결국 출력이 self-attention 을 거친 벡터를 얻게 된다. 이 벡터는 문맥 간의 가중치를 이해하는 vector 로 되어 트랜스포머의 인코더부분만으로도 자연어처리의 여러 downstream 작업에서 최고 성능을 달성한 바 있고, 이전 뉴스레터19의 Ko-electra 질의응답이 그 한 예였다. 자연어 처리에서 Transformer 구조로 달성한 높은 성능들에 영향을 받아 이미지 처리 영역에서도 Transformer 구조를 이용하고자 하는 많은 노력이 있었고, 이미지를 구역을 나누어 임베딩 하는 합성곱 신경망에서 완전히 독립한 Visual Transformer(ViT) 구조가 제안되어 이미지 분류에서 당시 최고 성능을 달성하였고 이어 객체인식에서도 최고 성능을 달성하였다. 앞선 모델들의 성공으로 이미지처리의 연구흐름은 합성곱(CNN) 신경망방법에서 Transformer 방법으로 이동하고 있다.

Visual Transformer(ViT)

아래 그림2와 같이 2021년 구글은 이미지를 여러 조각(patch)으로 분할하여 분할된 조각을 마치 자연어인 것처럼 트랜스포머 인코더에 입력하는 ViT 를 발표한다. 논문에서 대용량 데이터세트에서 최고 분류 성능을 나타냈다.

<그림 2. Visual Transformer 구조>

영상 및 언어 트랜스포머(ViLT)를 기반으로 한 질의응답

본 과제는 멀티모달(영상 및 언어)의 질의응답을 영상-언어 트랜스포머 사전훈련 모델을 통해 파인 튜닝하는 것을 구현하는 개념증명(proof of concept)을 살펴보는 것이다. 논문은 이전 영상-언어의 여러 사전학습 모델들과 2가지 점에서 특징을 강조한다. 이전 시각언어 접근법은 먼저 이미지내의 객체탐지를 위해 사전 세그먼트를 통해 객체의 존재유무를 판별하는데 사용되는 faster R-CNN 같은 지역 제안방식을 사용하거나, 영상 인코딩으로 컨볼루션 네트워크를 이용하고 문장 인코더와 연합하여 접근하는 방식을 사용한다. 논문은 이러한 이전의 지역 탐색 이나 컨볼루션 방식 대비 최대 10배 빠른 추론성능을 제공하고 파라미터 측면에서도 3배 가벼운 결과를 제시한다. 

무엇보다도 논문의 제목같이 처음으로 컨볼루션 이나 지역 탐색과 같이 성능에 부담이 되는 부분을 제거한 트랜스포머만으로 구현했다는 점에서 주목을 끈다. 코드와 사전훈련 모델은 여기에. 
아래 그림 3은 트랜스포머의 인코더에 ①단어 임베딩과 우측의 ②펼쳐진 이미지 조각들이 입력되는 구조를 나타낸다. ③은 트랜스포머에 입력된 이미지와 단어의 쌍이 같은 쌍인지 여부를 판별하고 ④는 ①에서 입력되는 단어 중 [MASK]처리된 단어를 예측하는 masked language modeling 을 표시한다. ⑤는 훈련 중 batch에서 샘플링된 단어와 이미지 조각 쌍들 사이의 확률분포의 거리를 훈련을 통해 손실을 최소화하도록 정렬된다. 

<그림 3. Vision-and Language Transformer>

사전학습 목표

 ViLT 모델을 사전학습 시키며 달성하고자 하는 목표는 Image Text Matching, Masked Language Modeling 을 훈련시키기 위함이다.
Image Text Matching: 위 그림3의 ③에 Fully Connected Layer 를 통과한, 이미지와 텍스트가 일치하는지 아닌지의 이진 분류로 값이 판별된다. 아울러, ⑤에서는 이미지와 텍스트의 부분집합 간의 정렬 점수를 산출하는 word patch alignment 가 학습된다.
Masked Language Modeling: 위 그림3의 ④와 같이 트랜스포머에서 출력되는 맥락 화된 벡터로부터 [MASK]의 라벨을 예측하는 방식으로 훈련된다.

ViLT 를 통한 질의응답 수행 절차

수행절차는 아래 그림4와 같다. 우선 VQAv2 데이터세트를 준비하고 image, question, annotation 에 관련된 전 처리 및 변환을 수행한다. Annotation 에 labels 과 score 를 추가하고 VQA 데이터셋을 생성하고 모델을 정의 및 훈련한 이후에 저장하고 이 모델과 config 등을 로드하여 추론을 실시한다.

<그림 4. 시각 언어 트랜스포머 수행절차>

Transformer 설치

Huggingface 의 Transformer 모델 중 ViLT를 사용하므로 아래 그림 5와 같이 트랜스포머 라이브러리를 설치한다. 

<그림 5. 트랜스포머 설치>

데이터셋 준비

질의응답을 위한 데이터셋은 공식웹사이트 로부터 다운로드 받는다. 개념증명용도로 image, question, annotations 의 validation 데이터셋 만 data/vqav2 디렉토리 밑으로 다운로드 받는다. 압축을 풀면 annotations, questions json 파일과 val2014 디렉토리 밑에 40,504개의 jpg 이미지 파일이 생성된다.

Image ID 와 Image filename 

v2_OpenEnded_mscoco_val2014_questions.json 을 열어 첫번째 내용을 보면 아래 그림 6과 같다. 

<그림 6. questions.json 내용>

questions 에 있는 image_id 로부터 관련 image filename을 획득하기위해 아래 그림 7과 같은 작업이 필요하다. 이미지파일들을 보면 COCO_val2014_000000290896.jpg 와 같은 형식으로 filename 이 되어있는데 위 그림5의 image_id 는 .jpg 전에 6자리 숫자를 의미한다. ①에서 .jpg 앞의 12자리 숫자를 패턴으로 하여 ②에서 전체 패턴이 일치하면, ③에서 일치된 패턴의 첫번째 즉 12자리 숫자를 int 로 변환하여 리턴 한다.

<그림 7. 이미지 파일명에서 id 추출하기>

아래 그림 8의 ①은 questions 의 image_id key 의 첫번째 image_id 로부터 전체 path 를 포함하는 파일명으로 ②와 같이 Image 를 호출한다. Filename_to_id 와 id_to_filename 의 2가지 dictionary 가 필요하다. 그림 9는 출력된 이미지 이다.

<그림 8. image 확인>



<그림 9. 이미지 출력>

Annotations 작업

아래 그림 10과 같이 annotations.jason 파일의 첫번째 내용을 보면 ①과 같이 복수의 답이 있다. 복수의 사람들이 주석 작업에 참여해서 이미지를 보고 그림 6과 같이 “where is he looking? 이라는 질문에 대해 각자 주관적인 답을 한 결과다. ②부터 10개 dictionary 형식의 답이 이어지고, ③image_id 와 ④question_id 가 포함되어 있다.

<그림 10. Annotations 구조>

Annotations 에 labels 와 scores 추가

Annotations의 answer로 최소 3번 이상 집계되는 것은 score 를 1로 그 이하는 1 이하의 score를 Annotations 에 scores 라는 key 로 추가하고 labels key 에는 label들의 정수형태의 인덱스 리스트 형태로 추가한다. 이 정보는 config.label2id 로 표시된다.
 아래 그림 11은  huggingface 의 transformers 라이브러리로부터 ViltConfig 사전 훈련모델을 통하여 config 을 획득한다. ①은 Huggingface의 ViLT모델 의 ViLTConfig ②는 ViltForQuestionAnswering config를 위하여 붉은색으로 표시된 사전학습 모델 파라미터로 호출.

<그림 11. config 호출>

아래 그림 12의 ①로 config의 label2id 를 사용하여 라벨의 정수형 인덱스를 획득하여 labels key 에 추가한다. ②의 get_score 함수는 answer count 를 입력으로 받아 score를 리턴 하는 함수이다. Score 는 로3개이상이면 1, 1개만 있으면 1/3 로 0.333 이다. ③에 labels 가 순차적으로 annotation 의  labels key 에 추가된다.

<그림 12. labels, scores 추가>

지금까지 영상-언어 트랜스포머를 이용한 질의응답의 개요, 응용분야, 트랜스포머 구조, 영상 및 언어 트랜스포머 구조, 질의응답 수행절차 중 데이터 로드 및 전 처리, Annotations 변환을 살펴보았다. 
뉴스레터 2편에서는 VQA 데이터셋 생성, 모델 정의, 훈련 및 저장, 그리고 저장된 모델로부터의 질의에 대한 응답 추론에 대해 살펴볼 예정이다.





댓글 없음:

댓글 쓰기