Microsoft Florence-2를 DocVQA에 파인튜닝

TL;DR

Microsoft의 Florence-2는 0.2B 및 0.7B 파라미터를 가진 소형 비전-언어 모델로, 문서 시각 질문 응답(DocVQA)과 같은 특수 작업에 효과적으로 파인튜닝할 수 있습니다. Hugging Face는 DocVQA 데이터셋에서 모델을 7 에폭 동안 파인튜닝하면 검증 세트의 레벤슈타인 유사도 점수가 0에서 57.0으로 증가한다는 것을 보여주었습니다.

Florence-2 아키텍처 및 사전 학습

Florence-2는 모든 컴퓨터 비전 작업을 시퀀스-투-시퀀스 문제로 간주하여 이미지와 텍스트 입력을 받아 텍스트와 위치 토큰을 출력으로 생성합니다. 이 모델은 시각 임베딩을 위해 DaViT 비전 인코더를, 텍스트와 위치 임베딩을 위해 BERT를 활용하며, 이후 표준 인코더-디코더 트랜스포머 아키텍처로 처리됩니다.

아키텍처만으로는 충분하지 않으며, Florence-2의 성능은 FLD-5B 데이터셋에 대한 사전 학습에 의해 크게 향상됩니다. 이 자동화된 데이터셋은 1억 2600만 장의 이미지에 대해 50억 개 이상의 주석(박스, 마스크, 캡션, 그라운딩 등)을 포함하고 있습니다.

시각 질문 응답(VQA)을 위한 Florence-2 적용

원래 Florence-2 모델은 캡션 생성, 객체 탐지, OCR을 지원하지만, 기본적인 VQA 기능은 제공되지 않았습니다. <VQA>, <vqa>, <Visual question answering>와 같은 지원되지 않는 프롬프트를 사용한 초기 시도는 사용 불가능한 결과를 낳았으며, 영역-설명 프롬프트는 VQA 요구사항과 완전히 일치하지 않았습니다.

VQA를 가능하게 하려면 모델을 특정 데이터셋에 파인튜닝해야 합니다. Hugging Face는 DocVQA 데이터셋을 사용했으며, 각 질문 앞에 <DocVQA> 접두사를 추가하여 모델을 안내했습니다.

파인튜닝 성능 및 벤치마크

DocVQA 데이터셋에 Florence-2를 파인튜닝하면 성능이 크게 향상되었습니다. 레벤슈타인 유사도를 지표로 사용할 때, 모델의 검증 점수는 파인튜닝 전 0에서 7 에폭 학습 후 57.0으로 개선되었습니다.

학습 구성

모델의 다양성을 테스트하기 위해 다양한 자원 수준에서 실험을 수행했습니다:

  • Low Resource: Colab에서 단일 A100 GPU를 사용하고 배치 크기를 6으로 설정(또는 T4 GPU를 사용하고 배치 크기를 1로 설정)하며, 비전 인코더를 고정합니다.
  • High Resource: 8개의 H100 GPU 클러스터에서 전체 모델을 배치 크기 64로 파인튜닝합니다. 이 과정은 약 70분이 소요되었습니다.

모든 구성에서 학습률 1e-6의 작은 값이 가장 효과적이었으며, 더 큰 학습률은 훈련 세트에 빠르게 과적합을 일으켰습니다.

구현 세부 사항

이 파인튜닝 과정을 구현하기 위해 transformers 라이브러리의 AutoModelForCausalLMAutoProcessor 클래스를 사용합니다. Florence-2는 커스텀 코드를 사용하므로 로드 시 trust_remote_code=True를 지정해야 합니다.

주요 코드 구성 요소

  • Dataset Class: 질문 앞에 <DocVQA> 접두사를 추가하고 이미지를 RGB로 변환하기 위해 커스텀 DocVQADataset 클래스를 사용합니다.
  • Data Collator: 텍스트와 이미지를 프로세서를 사용해 텐서로 변환하는 collate_fn을 구현합니다.
  • Optimization: 학습 루프는 AdamW 옵티마이저와 선형 학습률 스케줄러를 사용합니다.

결론

Florence-2는 작은 규모(0.2B 및 0.7B 파라미터) 덕분에 엣지 디바이스나 비용 효율적인 프로덕션 환경에 배포하기에 매우 적합합니다. 파인튜닝을 통해 모델을 새로운 작업에 맞게 조정할 수 있어, 기본 제공 기능을 넘어 문서 이해와 같은 특수 도메인도 처리할 수 있습니다.

Sources