논문리뷰

VLM : 빠른 흐름 정리 : 2024-10-14

AI바라기 2024. 10. 14. 12:01

World to Code: Multi-modal Data Generation via Self-Instructed Compositional Captioning and Filtering

더보기

1. 이미지를 보고 VLM을 통해 캡션 생성

  • VLM(Vision-Language Model)을 사용하여 짧은 일반 캡션(General Caption)과 디테일한 세부 캡션(Detail Caption)을 생성합니다.
    • 짧은 캡션: 이미지 전체를 요약하는 한두 문장. (예: "A park with a tree and a dog.")
    • 디테일 캡션: 이미지 내의 가능한 모든 객체와 속성을 최대한 상세히 설명하는 문장. (예: "A large green tree stands near a small brown dog.")

2. 캡션에서 객체 추출 및 이미지 내 위치 정보 생성

  • 생성된 캡션에서 명사구(예: "tree", "dog")와 같은 **객체(시각적 개념, Visual Concepts)**를 추출합니다.
  • Grounding DINO라는 도구를 사용해 **이미지에서 해당 객체가 위치한 영역(bounding box)**을 찾아냅니다.
    • 즉, 추출한 객체(나무, 강아지 등)가 이미지에서 어디에 있는지를 식별하여, 위치 정보바운딩 박스를 생성합니다.
    • 예: 나무의 바운딩 박스 좌표가 [100, 200, 150, 250]라면, 나무가 이미지의 이 영역에 위치해 있다는 뜻입니다.

3. 여러 번의 검증을 통해 정확한 정보만 선별

이 과정은 VLM의 생성 결과가 신뢰할 수 있는지 확인하는 단계입니다. **자기 일관성 필터링(Self Consistency Filtering)**을 사용하여 잘못된 정보나 노이즈를 걸러냅니다. 여기서 "여러 번의 검증"이 의미하는 바는 다양한 방식으로 질문을 던지고, 그 결과가 일관된지 확인하는 것입니다.

어떤 부분에서 다시 검증을 하는지?

  • 객체의 개수: 예를 들어 "사과가 몇 개 있나요?"와 같은 질문을 여러 번 던집니다. 만약 동일한 객체(사과)에 대해 일관된 응답이 나오면 그 정보를 신뢰합니다. 서로 다른 응답이 나오면, 그 정보는 필터링됩니다.
  • 캡션 재정렬(Caption Re-ranking): 여러 개의 캡션 후보가 있을 때, 각 캡션이 얼마나 정확한지(해당 객체가 실제로 있는지 여부)를 검증하고, 가장 일관성 있는 캡션을 선택합니다.
    • VLM에게 "나무는 실제로 이 이미지에 존재하나요?"라는 식으로 물어보고, "Yes" 또는 "No"로 답하게 해서 정확한 캡션만 남깁니다.

결과적으로 일관성 있게 생성된 정보만 선택하게 되므로 데이터의 신뢰도를 높일 수 있습니다.


4. 최종적으로 Python 코드로 변환하여 모델 학습에 사용

마지막으로, 추출된 시각적 개념(객체)과 그 위치 정보를 Python 코드로 변환합니다. 이렇게 구조화된 데이터는 나중에 모델 학습에 직접 활용될 수 있습니다.

어떤 input이 어떤 형식의 output으로 변환되는지 자세히 설명

  • Input: 이미지를 보고 추출한 시각적 개념(예: 나무, 강아지)과 그에 대한 세부 설명, 이미지 내 위치 정보(바운딩 박스), OCR 정보(이미지 속 텍스트).
    • 시각적 개념: "나무(tree)", "강아지(dog)"
    • 바운딩 박스: 나무의 위치는 [100, 200, 150, 250], 강아지의 위치는 [300, 400, 350, 450]
    • 세부 설명: 나무는 "The tree is tall and green", 강아지는 "The dog is small and brown"
  • 예를 들어:
  • Output (Python 코드): 이 정보를 Python 코드로 변환하면 다음과 같은 형식이 됩니다.
  • python
    코드 복사
    class Image1: # 이미지 전체에 대한 설명 description = "This is a picture of a park with a tree and a dog." # 시각적 개념 목록 objects = [ { "name": "tree", # 시각적 개념 이름 "description": "The tree is tall and green", # 세부 설명 "bbox": [100, 200, 150, 250], # 바운딩 박스(위치 정보) "ocr": "" # OCR 정보 (해당 시각적 개념에 관련된 텍스트가 없는 경우) }, { "name": "dog", # 시각적 개념 이름 "description": "The dog is small and brown", # 세부 설명 "bbox": [300, 400, 350, 450], # 바운딩 박스(위치 정보) "ocr": "" # OCR 정보 } ]

이처럼 시각적 개념(객체)의 이름, 설명, 위치 정보를 코드로 변환하여 구조화된 데이터로 저장합니다. 이렇게 구조화된 데이터는 이후 모델 학습에 사용할 수 있습니다.


5. 평가 (Evaluation)

생성된 데이터가 실제로 얼마나 유용한지 평가하는 단계입니다. **VQA(Visual Question Answering)**나 Visual Grounding 같은 태스크에서 모델 성능을 평가합니다.

  • VQA: 이미지에 대한 질문에 답하는 태스크입니다. 예를 들어 "이미지에 강아지가 있나요?" 같은 질문에 대해, 모델이 정확하게 답할 수 있는지 평가합니다.
  • Visual Grounding: "사과는 이미지의 어디에 있나요?"와 같은 질문에 대해, 이미지 속에서 특정 객체를 정확히 찾아내는 능력을 평가합니다.

성능 평가의 목적:

W2C 파이프라인에서 생성된 데이터가 기존의 데이터셋보다 더 나은 성능을 보이는지를 확인하는 것이 주요 목표입니다. 실험 결과 W2C 데이터는 VQA, Visual Grounding 등의 태스크에서 더 높은 성능을 보였으며, 특히 코드로 구조화된 방식이 더 효과적임을 증명했습니다.