-
Visual Programming: Compositional visual reasoning without trainingVisual 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)
- 모듈 구성만 잘하면 새로운 서비스를 만들기 좋을 것 같다.