AI바라기의 인공지능

VLM : 논문리뷰 : Visual Programming: Compositional visual reasoning without training 본문

논문리뷰

VLM : 논문리뷰 : Visual Programming: Compositional visual reasoning without training

AI바라기 2024. 10. 13. 15:19

 

VISPROG는 compositional visual reasoning을 위한 modular하고 interpretable한 neuro-symbolic 시스템입니다. 몇 가지 자연어 명령어와 원하는 high-level program 예시가 주어지면, VISPROG는 GPT-3의 in-context learning을 사용하여 새로운 명령어에 대한 program을 생성하고, 입력 이미지에서 program을 실행하여 예측을 얻습니다. 또한 VISPROG는 intermediate output을 interpretable visual rationale로 요약합니다 (Fig. 4). VISPROG는 image understanding and manipulation, knowledge retrieval, arithmetic and logical operations을 위한 다양한 module을 구성해야 하는 task에서 그 성능을 보여줍니다.

 

 

abstract

VISPROG는 자연어 명령어가 주어진 complex하고 compositional한 visual task를 해결하기 위한 neuro-symbolic 접근 방식입니다. VISPROG는 task-specific training을 필요로 하지 않습니다. 대신, large language model의 in-context learning 능력을 사용하여 python과 유사한 modular program을 생성하고, 이를 실행하여 solution과 comprehensive하고 interpretable한 rationale을 얻습니다. 생성된 program의 각 라인은 여러 off-the-shelf computer vision model, image processing subroutine 또는 python function 중 하나를 호출하여 program의 후속 부분에서 사용될 수 있는 intermediate output을 생성합니다.

VISPROG의 유연성을 보여주기 위해 compositional visual question answering, zero-shot reasoning on image pairs, factual knowledge object tagging, language-guided image editing의 4가지 다양한 task에 대한 실험을 진행했습니다. VISPROG와 같은 neuro-symbolic 접근 방식은 사람들이 수행하고자 하는 long tail의 complex task를 쉽고 효과적으로 처리할 수 있도록 AI 시스템의 범위를 확장하는 흥미로운 방법이라고 생각합니다.

 

 

 

 

introduction

범용 인공지능 시스템을 개발하려는 노력은 뛰어난 end-to-end 학습 가능 모델들을 만들어냈습니다. 이러한 모델들은 대부분 사용자가 모델과 상호 작용할 수 있는 간단한 자연어 인터페이스를 제공하고자 합니다. 이러한 시스템을 구축하는 주된 접근 방식은 대규모 unsupervised pretraining과 supervised multitask training을 거치는 것이었습니다. 그러나 이 접근 방식은 각 task에 대해 잘 선별된 데이터셋이 필요하며, 결국 이러한 시스템이 수행하기를 원하는 무한히 긴 complex task에 대해서는 확장하기 어렵습니다.

이 연구에서는 자연어로 설명된 complex task를 specialized end-to-end 학습 모델이나 다른 program으로 처리할 수 있는 더 간단한 단계로 분해하여 long tail의 complex task를 해결하기 위해 large language model을 사용하는 방법을 살펴봅니다.

 

vision 시스템에 "이 이미지에서 TV 쇼 빅뱅 이론의 주요 등장인물 7명에게 태그를 지정하세요."라고 지시하는 것을 상상해 보세요. 이 task를 수행하기 위해 시스템은 먼저 지침의 의도를 이해한 다음 얼굴 감지, knowledge base에서 빅뱅 이론의 주요 등장인물 목록 검색, 등장인물 목록을 사용하여 얼굴 분류, 인식된 등장인물의 얼굴과 이름으로 이미지에 태그 지정과 같은 일련의 단계를 수행해야 합니다. 이러한 각 단계를 수행하는 다양한 vision 및 language 시스템이 존재하지만 자연어로 설명된 이 task를 실행하는 것은 end-to-end 학습 시스템의 범위를 벗어납니다.

 

VISPROG는 자연어 명령어와 함께 visual data (단일 이미지 또는 이미지 세트)를 입력으로 받아 일련의 단계, 즉 visual program을 생성한 다음 이러한 단계를 실행하여 원하는 출력을 생성합니다. visual program의 각 라인은 시스템에서 현재 지원하는 광범위한 모듈 중 하나를 호출합니다. 모듈은 off-the-shelf computer vision model, language model, OpenCV의 image processing subroutine 또는 arithmetic and logical operator일 수 있습니다. 모듈은 이전 코드 라인을 실행하여 생성된 입력을 사용하고 downstream에서 사용할 수 있는 intermediate 결과를 출력합니다. 위의 예에서 VISPROG에서 생성된 visual program은 face detector, knowledge retrieval 시스템으로서의 GPT-3, open-vocabulary image classifier로서의 CLIP를 호출하여 원하는 출력을 생성합니다 (그림 1 참조).

 

VISPROG는 vision 애플리케이션용 program을 생성하고 실행하는 이전 방법을 개선합니다. visual question answering (VQA) task의 경우 Neural Module Networks (NMN)은 specialized된 미분 가능한 neural module에서 question-specific end-to-end 학습 가능 네트워크를 구성합니다. 이러한 접근 방식은 부서지기 쉬운 off-the-shelf semantic parser를 사용하여 모듈의 레이아웃을 deterministic하게 계산하거나 REINFORCE를 통해 weak answer supervision을 통해 레이아웃 생성기를 학습합니다.

 

이와 대조적으로 VISPROG는 강력한 language model (GPT-3)과 소수의 in-context 예제를 사용하여 training 없이 complex program을 만듭니다. VISPROG에서 만든 program은 NMN보다 더 높은 수준의 abstraction을 사용하고 학습된 state-of-the-art model과 비신경망 python subroutine을 호출합니다 (그림 2 참조). 이러한 이점을 통해 VISPROG는 사용하기 쉽고 성능이 뛰어나며 modular한 neuro-symbolic 시스템입니다.

 

 

 

VISPROG는 또한 매우 interpretable합니다.

첫째, VISPROG는 사용자가 논리적 정확성을 확인할 수 있는 이해하기 쉬운 program을 생성합니다.

둘째, prediction을 간단한 단계로 분해하여 사용자가 중간 단계의 출력을 검사하여 오류를 진단하고 필요한 경우 추론 프로세스에 개입할 수 있도록 합니다. 전반적으로 정보 흐름을 나타내기 위해 연결된 중간 단계 결과 (예: 텍스트, bounding box, segmentation mask, 생성된 이미지 등)가 있는 실행된 program은 prediction에 대한 visual rationale 역할을 합니다.

 

유연성을 입증하기 위해 image parsing과 같은 몇 가지 공통적인 기술을 공유하는 동시에 어느 정도 specialized된 추론 및 visual manipulation 기능이 필요한 4가지 task에 VISPROG를 사용합니다. 이러한 task는

(i) compositional visual question answering,

(ii) image pair에 대한 zero-shot natural language visual reasoning (NLVR),

(iii) 자연어 명령어에서 factual knowledge object tagging,

(iv) language-guided image editing입니다.

 

language model이나 모듈은 어떤 식으로든 finetuning되지 않습니다. VISPROG를 task에 적용하는 것은 자연어 명령어와 해당 program으로 구성된 몇 가지 in-context 예제를 제공하는 것만큼 간단합니다. 사용하기 쉬운 VISPROG는 compositional VQA task에서 기본 VQA 모델에 비해 2.7점이라는 놀라운 성능 향상을 보여주고, image pair에 대한 training 없이 NLVR에서 62.4%의 강력한 zero-shot 정확도를 보여주며, knowledge tagging 및 image editing task에서 놀라운 질적 및 양적 결과를 보여줍니다.

 

주요 기여 사항은 다음과 같습니다.

(i) VISPROG - language model의 in-context learning 능력을 사용하여 compositional visual task에 대한 자연어 명령어에서 visual program을 생성하는 시스템 (3절),

(ii) factual knowledge object tagging 및 language guided image editing과 같이 단일 end-to-end 모델로는 성공하지 못했거나 제한적인 성공을 거둔 complex visual task에서 VISPROG의 유연성을 입증 (4.3절 및 4.4절),

(iii) 이러한 task에 대한 visual rationale을 생성하고 VISPROG의 성능을 크게 향상시키기 위해 오류 분석 및 사용자 중심 명령어 tuning에 대한 유용성을 보여줍니다 (5.3절).

 

 

더보기

GPT에게 질문을 잘 쪼개서 퓨샷 예제와 함께 제공하여 올바른 모듈을 사용할 수 있게끔 한게 논문의 전부인듯.

 

Related Work

Neuro-symbolic 접근 방식은 large language model (LLM)의 놀라운 이해, 생성 및 in-context learning 능력으로 인해 새로운 추진력을 얻었습니다. 이제 visual task를 위한 이전 program 생성 및 실행 접근 방식, vision에 LLM을 사용하는 최근 연구, language task를 위한 추론 방법의 발전에 대해 논의합니다.

 

Program generation and execution for visual tasks.

Neural module networks (NMN)은 visual question answering (VQA) task를 위한 modular 및 compositional 접근 방식을 개척했습니다. NMN은 neural module을 end-to-end 미분 가능 네트워크로 구성합니다. 초기 시도에서는 off-the-shelf parser를 사용했지만 최근 방법에서는 REINFORCE 및 weak answer supervision을 사용하여 neural module과 함께 layout 생성 모델을 jointly하게 학습합니다.

 

NMN과 유사한 VISPROG는 NMN에 비해 몇 가지 이점이 있습니다. 첫째, VISPROG는 end-to-end neural network를 생성하는 것과 달리 중간 단계에서 학습된 state-of-the-art neural model과 다른 python function을 호출하는 high-level program을 생성합니다. 따라서 symbolic하고 미분 불가능한 모듈을 쉽게 통합할 수 있습니다. 둘째, VISPROG는 LLM의 in-context learning 능력을 활용하여 자연어 명령어 (또는 확인할 visual question 또는 statement)와 유사한 명령어 및 해당 program의 몇 가지 예제와 함께 LLM (GPT-3)을 prompting하여 program을 생성합니다. 따라서 각 task에 대해 specialized program 생성기를 training할 필요가 없습니다.

 

LLMs for visual tasks.

LLM과 in-context learning은 visual task에 적용되었습니다. PICa는 knowledge-based VQA task에 LLM을 사용합니다. PICa는 이미지의 visual 정보를 캡션, 객체 및 속성을 통해 텍스트로 표현하고 이 텍스트 표현을 질문 및 in-context 예제와 함께 GPT-3에 제공하여 답변을 직접 생성합니다. Socratic model (SM)은 language (BERT, GPT-2), vision-language (CLIP), audio-language (mSLAM)와 같은 다양한 modality에서 pretrained model을 구성하여 image captioning, video to-text retrieval, robot planning을 포함한 여러 zero-shot task를 수행합니다. 그러나 SM에서는 composition이 각 task에 대해 미리 결정되고 고정됩니다. 이와 대조적으로 VISPROG는 명령어, 질문 또는 statement에 따라 program을 생성하여 각 instance에 대해 model을 구성하는 방법을 결정합니다. VISPROG는 다양한 기능 (20개 모듈)과 다양한 입력 (텍스트, 이미지 및 image pair), 중간 (텍스트, 이미지, bounding box, segmentation mask) 및 출력 modality (텍스트 및 이미지)를 포함하는 복잡한 명령어를 처리하는 기능을 보여줍니다. VISPROG와 유사하게 ProgPrompt는 LLM이 자연어 명령어에서 python과 유사한 situated robot action plan을 생성하는 기능을 보여주는 concurrent한 연구입니다. ProgPrompt 모듈 (예: "찾기" 또는 "잡기")은 문자열 (일반적으로 객체 이름)을 입력으로 받는 반면 VISPROG program은 더 일반적입니다. VISPROG program의 각 단계에서 모듈은 문자열, 숫자, 산술 및 논리 표현식 또는 이전 단계에서 생성된 임의의 python 객체 (예: bounding box 또는 segmentation mask가 포함된 list() 또는 dict() instance)를 포함한 여러 인수를 허용할 수 있습니다.

 

 

Reasoning via Prompting in NLP

Prompting을 통해 language reasoning task에 LLM을 사용하는 것에 대한 연구가 증가하고 있습니다. language model이 입력, chain-of-thought rationale (일련의 중간 추론 단계) 및 출력의 in-context 예제로 prompting되는 Chain-of-Thought (CoT) prompting은 수학 추론 문제를 해결하는 데 놀라운 능력을 보여주었습니다. CoT는 LLM이 추론 경로를 생성하고 실행하는 능력에 의존하는 반면, VISPROG와 유사한 접근 방식이 language task에 적용되었습니다. 여기서 decomposer prompt는 먼저 sub-task handler가 처리하는 sub-task 시퀀스를 생성하는 데 사용됩니다.

 

 

Visual Programming

지난 몇 년 동안 AI 커뮤니티는 object detection, segmentation, VQA, captioning, text-to-image generation과 같은 많은 vision 및 language task를 위한 고성능의 task-specific model을 만들어냈습니다. 이러한 각 모델은 잘 정의되었지만 좁은 문제를 해결하는 반면, 우리가 실제로 해결하고자 하는 task는 종종 더 광범위하고 느슨하게 정의됩니다.

이러한 실질적인 task를 해결하기 위해서는 비용이 많이 드는 새로운 task-specific 데이터 세트를 수집하거나 여러 neural model, image processing subroutine (예: 이미지 크기 조정, 자르기, 필터링 및 색 공간 변환) 및 기타 계산 (예: 데이터베이스 조회 또는 산술 및 논리 연산)을 호출하는 program을 세 심하게 구성해야 합니다. 매일 접하는 무한히 긴 complex task에 대해 이러한 program을 수동으로 만드는 것은 프로그래밍 전문 지식이 필요할 뿐만 아니라 느리고 노동 집약적이며 궁극적으로 모든 task의 공간을 포괄하기에 충분하지 않습니다. 자연어로 task를 설명하고 AI 시스템이 training 없이 해당 visual program을 생성하고 실행하도록 하면 어떨까요?

 

 

 

 

Large language models for visual programming.

GPT-3와 같은 Large Language Model은 in-context에서 소수의 입력 및 출력 데모를 본 후 task에 대한 새로운 샘플로 일반화하는 놀라운 능력을 보여주었습니다. 예를 들어 GPT-3에 두 가지 영어-프랑스어 번역 예제와 새로운 영어 구문을 입력하면 프랑스어 번역 "bonsoir"가 생성됩니다. 세 번째 구문에 대한 번역 task를 수행하기 위해 GPT-3를 finetuning할 필요가 없었습니다. VISPROG는 GPT-3의 이러한 in-context learning 능력을 사용하여 자연어 명령어에 대한 visual program을 출력합니다.

 

위의 예에서 영어와 프랑스어 번역 쌍과 유사하게 GPT-3에 명령어와 원하는 high-level program 쌍을 입력합니다. 그림 3은 image editing task에 대한 이러한 prompt를 보여줍니다. in-context 예제의 program은 수동으로 작성되며 일반적으로 이미지 없이 구성할 수 있습니다. VISPROG program 또는 program 단계의 각 라인은 모듈의 이름, 모듈의 입력 인수 이름 및 해당 값, 출력 변수 이름으로 구성됩니다. VISPROG program은 종종 이전 단계의 출력 변수를 이후 단계의 입력으로 사용합니다. GPT-3가 각 모듈의 입력 및 출력 유형과 기능을 이해할 수 있도록 설명적인 모듈 이름 (예: "선택", "색상 팝", "바꾸기"), 인수 이름 (예: "이미지", "객체", "쿼리") 및 변수 이름 (예: "IMAGE", "OBJ")을 사용합니다. 실행하는 동안 출력 변수를 사용하여 임의의 데이터 유형을 저장할 수 있습니다. 예를 들어 "OBJ"는 이미지에 있는 객체 목록이며 각 객체와 연결된 mask, bounding box 및 텍스트 (예: 범주 이름)입니다.

 

이러한 in-context 예제는 새로운 자연어 명령어와 함께 GPT-3에 입력됩니다. 이미지 또는 내용을 관찰하지 않고 VISPROG는 입력 이미지에서 설명된 task를 수행하기 위해 실행할 수 있는 program (그림 3의 아래쪽)을 생성합니다.

 

 

 

 

모듈. VISPROG는 현재 image understanding, image manipulation (생성 포함), knowledge retrieval, 산술 및 논리 연산 수행과 같은 기능을 가능하게 하는 20개의 모듈 (그림 2)을 지원합니다. VISPROG에서 각 모듈은 다음과 같은 메서드를 가진 Python 클래스 (코드 1)로 구현됩니다.

(i) 라인을 parsing하여 입력 인수 이름과 값, 출력 변수 이름을 추출합니다.

(ii) 학습된 neural model을 포함할 수 있는 필요한 계산을 실행하고 출력 변수 이름과 값으로 program 상태를 업데이트합니다.

(iii) html을 사용하여 단계별 계산을 시각적으로 요약합니다 (나중에 visual rationale을 만드는 데 사용됨).

VISPROG에 새 모듈을 추가하려면 모듈 클래스를 구현하고 등록하기만 하면 됩니다. 이 모듈을 사용하는 program의 실행은 다음에 설명하는 VISPROG 인터프리터가 자동으로 처리합니다.

 

Program 실행. program 실행은 인터프리터가 처리합니다. 인터프리터는 입력으로 program 상태 (변수 이름을 해당 값에 매핑하는 dictionary)를 초기화하고 해당 라인에 지정된 입력으로 올바른 모듈을 호출하는 동안 program을 라인별로 단계별로 실행합니다. 각 단계를 실행한 후 program 상태는 단계 출력의 이름과 값으로 업데이트됩니다.

 

Visual Rationale. 필요한 계산을 수행하는 것 외에도 각 모듈 클래스는 html()이라는 메서드를 구현하여 HTML snippet에서 모듈의 입력과 출력을 시각적으로 요약합니다. 인터프리터는 모든 program 단계의 HTML 요약을 visual rationale (그림 4)로 간단하게 연결하여 program의 논리적 정확성을 분석하고 중간 출력을 검사하는 데 사용할 수 있습니다. 또한 visual rationale을 통해 사용자는 실패 이유를 이해하고 자연어 명령어를 최소한으로 수정하여 성능을 향상시킬 수 있습니다. 자세한 내용은 5.3절을 참조하세요.

 

 

 

 

 

 

방법론만 요약

더보기
  1. 자연어 입력 처리: 자연어로 작성된 질문이나 지시 사항이 들어오면, 우선 PICa 모델을 사용해 이미지를 텍스트로 변환합니다. 이 텍스트 변환 과정은 이미지에서 필요한 정보(예: 객체의 위치나 속성)를 추출하기 위한 전처리 단계입니다.
  2. GPT 코드 생성 및 파싱: GPT 모델(구체적으로 Codex)을 사용하여 입력받은 자연어 질문과 텍스트 변환된 정보를 기반으로 Python 코드를 생성합니다. 이 과정에서 입력 변수와 출력 변수를 추출하고, 필요한 계산 절차를 명시하는 코드를 작성합니다.
  3. 전문가 모듈과의 연동: 생성된 코드는 전문가 모듈(vision 모델들, 예를 들어 GLIP, MiDaS, BLIP-2)과 연동되어 실제 시각적 추론 작업을 수행합니다. 여기서 필요한 계산은 각 모듈이 담당하며, 이를 통해 시각적 정보를 처리하거나 수학적 연산을 수행합니다.
  4. 단계별 결과 시각화: 각 단계별로 수행된 계산 결과는 HTML 형식으로 저장되며, 이는 시각적으로 요약되거나 나중에 Visual Rationale을 만드는 데 사용될 수 있습니다. 이 시각적 근거는 모델의 추론 과정에 대한 투명성과 해석 가능성을 제공하는 중요한 부분입니다.

최종 결과물Python 코드가 실행한 결과입니다. Codex가 생성한 Python 코드를 실행하여, 모듈의 계산 결과에 따라 출력이 결정됩니다. 즉, 최종적인 답변이나 결과는 GPT가 생성한 코드에서 나오는 결과값이 됩니다.