ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Visual Programming: Compositional visual reasoning without training
    Visual reasoning 2024. 2. 1. 00:23

    핵심 아이디어

    본 논문은 CVPR2023 Best paper로 선정된 논문입니다.

    별도의 학습과정 없이 여러가지 Vison Task를 손쉽게 추론할 수 있는 방법을 제안했습니다.

    GPT-3와 같은 LLM을 활용하여 복잡한 비전 테스트를 학습 없이 수행하는 것이 핵심아이디어입니다.

    Introduction

    저자의 문제의식은 다양한 Vision 태스크를 수행할 수 있는 시스템에 대한 니즈에서 시작합니다.

    기존에 Supervised multitask training 모델이 있긴 했으나, 태스크가 다양해진 만큼 요구되는 데이터 규모는 커지고 퀄리티도 점점 까다로워졌습니다. 잘 레이블링된 데이터를 무한하게 얻을 수 없고, 이를 학습하는 것도 어렵기 때문에 결국 학습 기반 모델은 태스크 확장(long tail of complex tasks)에 한계가 있습니다.

     

    저자는 이러한 문제를 해결하기 위해 LLM 모델을 활용한 Neuro-symbolic system, Visprog를 제안합니다.

    LLM은 자연어를 바탕으로 알맞은 프로그래밍을 하는 Symbolic AI(논리적 추론)를 담당하고, LLM에 의해 할당된 알고리즘 / 모델들은 neuro AI(패턴 인식)를 담당한다고 보면 될 것 같습니다.

     

    제안한 방법을 요약하자면 아래와 같습니다.

     

    1. 사용자가 원하는 명령어를 입력하면 LLM 모델이 자연어를 프로그램으로 변환합니다.

    2. 프로그램에서는 명령어를 수행하기 위한 세부 스텝의 순서대로 나열하고, 각 스텝에 매칭되는 함수 또는 SOTA 모델을 할당 및 로드합니다.

    3. 모든 스텝을 순서대로 수행하고 최종 결과를 출력합니다.

     

    따라서 사용자 입장에서는 텍스트만 입력하면 별도의 프로그래밍 없이 복잡한 태스크의 결과를 손쉽게 얻을 수 있습니다.

     

    [예시]

    • line 1: Face detection: Dual shot face detector (Dsfd)
    • line 2: knowledge retrieval system: GPT-3
    • line 3: open-vocabulary image classifier: CLIP

     

    Contribution

    저자가 주장하는 Contribution은 아래와 같습니다.

     

    1. the in-context learning ability of a language model to generate visual programs from natural language instructions for compositional visual tasks (Sec. 3)

    2. demonstrating the flexibility of VISPROG on complex visual tasks (Secs. 4.3 and 4.4)

    • Training 필요 없음
    • 기존(NMN)에 비해 높은 수준의 추상화
    • invoke trained state-of-the-art models and non-neural python subroutines
      • 입력 문장을 Sub-step으로 분해하는 것은 LLM으로, 실행하는 것은 타 모듈을 불러옴
    • 입력 문장에 대한 정해진 형식이 없음

    3. producing visual rationales for these tasks and showing their utility for error analysis and user-driven instruction tuning to improve VISPROG’s performance significantly

    • visual rationale
      • 각 단계의 결과물을 서로 연결해서 흐름을 보여줌
    • 결과 해석이 쉬움
      • 논리적으로 맞는지 판단하기 쉬운 프로그램 생성
      • 각 스텝의 결과에 쉽게 접근 가능

    Method

    Large language models for visual programming

    1. In-context learning 활용

     GPT-3과 같은 LLM은 In-context learning을 통해 몇 개의 샘플만으로도 새로운 Task를 수행할 수 있습니다.

    예를 들어, 아래와 같이 2개의 영어-불어 번역 샘플을 이용하여 3번째 라인의 영어 단어를 번역할 수 있습니다.

    Zero-shot 또는 Few-shot learning 사용한 방법입니다.

    In-context learning 예시

     

    본 연구에서는, GPT-3를 사용하여 자연어 문장을 프로그램 라인으로 번역합니다.

    이를 위해 Task별로 10~30개 정도의 프롬프트를 만들어서 In-context learning을 합니다.

     

    Modules

    VisProg는 20개의 모듈을 지원합니다.

     

    클래스 구조는 parse, execute, html(summarize) 3가지로 구분됩니다.

    • parse
      • input argument names, values, output variable name 구분
    • execute
      • 필요한 모델 실행하는 등 필요한 계산 수행
    • html(summarize)
      • HTML로 (중간)결과 시각화

    Program Execution.

    Program execution은 interpreter가 다루게 됩니다.

    interpreter는 우선 프로그램 상태를 초기화 하고, 라인별로 알맞은 모듈을 불러옵니다. 

    각 step을 수행한 후 프로그램 상태(변수 이름, 출력 값) 업데이트합니다.

     

    Visual Rationale.

    모든 모듈의 결과, 즉 중간결과를 시각화하는 기능입니다.

    Figure 4는 명령어와 프로그래밍된 각 모듈, 그리고 각 모듈의 중간 출력을 보여줍니다.

    이를 통해 사용자는 어디서 프로그램이 틀렸는지를 확인하고, 프롬프트를 튜닝하는 용으로 사용할 수 있습니다.

    아래 그림은 Instruction tuning 예시를 보여줍니다. 사용자는 중간결과를 보면서 Instruction을 어떻게 수정해야 할 지 생각해볼 수 있습니다.

     

    Tasks

    현재 논문에서 지원하는 태스크는 Compositional Visual Question Answering, Zero-Shot Reasoning on Image Pairs, Factual Knowledge Object Tagging, Image Editing with Natural Language로 총 4가지입니다. (Figure 1 참고)

    하지만 약간만 Customizing한다면 사용자가 임의로 태스크를 늘리는 것이 어려운 일이 아닐 것 같습니다.

     

    논문에서는 태스크 별로 10~30개 정도의 프롬프트(in-context examples)를 사용하여 결과를 냈습니다.

     

     

    Experiments and Analysis

    Prompting strategy, prompt size를 비교하며 실험을 진행했습니다.

     

    Prompting strategy는 curated, random, voting strategy 중 voting이 제일 좋은 결과를 냈습니다.

    Prompt size는 example 개수가 많아질수록 성능이 향상되었습니다. (당연한거겠죠?)

    GQA, NLVR testset에서 준수한 성능을 보이며 Generalization 성능도 입증하였습니다.

     

     

    마무리.

    • 복잡하고 다양한 태스크를 학습 없이 추론할 수 있는 것이 신선!
    • 확장성이 무궁무진하다는 장점
    • 단, 프롬프트 엔지니어링 중요!
    • 코드도 잘 정리되어 있음 (Github)
    • 모듈 구성만 잘하면 새로운 서비스를 만들기 좋을 것 같다.
Designed by Tistory.