ShowUI: One Vision-Language-Action Model for GUI Visual Agent

ShowUI: One Vision-Language-Action Model for GUI Visual Agent
 
 
 
notion image
 
notion image
  • Task
    • 스크린샷 기반으로 GUI를 이해하고 다음 액션을 예측하기
    • 예:
      • 어떤 버튼을 클릭해야 하는지 찾기
      • 특정 텍스트를 어디에 입력해야 하는지 찾기
      • 여러 단계에 걸쳐 웹/모바일 UI를 탐색하기
    • 즉, 단순한 VLM 질의응답이 아니라
      • screenshot + user query + action history
      • 를 바탕으로
      • 다음 GUI action을 생성하는 문제
  • 기존 접근 방식
    • gpt 같은 closed 모델에 html같은 text 데이터를 넣음
      • 하지만 텍스트기반은 real world랑 다른 점이 많음
    • 그래서 gui 기반의 접근이 필요함
      • 하지만 gui 스크린샷을 그대로 쓰는건 비용이 많이 듦
  • 어려운 점
    • GUI 화면은 자연 이미지와 다름
      • 자연 이미지는 texture와 semantic이 풍부함
      • GUI는 빈 공간, 단색 배경, 반복 패턴이 많음
      • 그런데도 작은 아이콘/버튼/텍스트는 매우 중요함
    • 스크린샷이 고해상도라 visual token 수가 많음
      • 예: 1344×756 화면을 patching하면 raw token이 매우 길어짐
      • 14×14 patch + merge 후에도 1296 token 수준이라 self-attention 비용이 큼
    • action이 자연어와 다름
      • action type 자체도 맞춰야 하고
      • 좌표, 문자열 같은 parameter도 같이 맞춰야 함
    • 디바이스마다 action space가 다름
      • web에는 CLICK이 있지만 mobile에는 PRESS HOME 같은 action이 있음
      • 같은 SCROLL도 web/mobile에서 방향 체계가 다를 수 있음
    • navigation에서는 현재 화면만 보면 안 되고
      • 이전 screenshot
      • 이전 action
      • 둘 다 같이 봐야 함
    • 데이터가 다양하지만 품질과 형식이 제각각임
      • web / mobile / desktop
      • grounding / navigation
      • element coordinate / trajectory
      • 이런 것들이 섞여 있어서 아무거나 다 쓰는 게 능사가 아님.
  • 기존 방식들
    • HTML, accessibility tree 같은 구조화된 메타정보를 쓰는 language agent
      • 텍스트 기반으로는 잘 동작할 수 있음
      • 하지만 실제 사용자는 내부 HTML을 못 보고 화면만 보므로 한계가 있음
    • GUI용 VLM들
      • screenshot grounding 위주 모델
      • navigation instruction tuning 모델
    • 하지만 기존 방식들의 한계
      • 고해상도 GUI screenshot의 긴 visual token 처리 비효율
      • action을 어떻게 표현하고 모델링할지 불명확
      • 데이터 선택 기준이 명확하지 않음
  • 이 논문의 핵심 아이디어
    • 하나의 VLA 모델로 GUI과 네비게이션을 같이 다루자
    • 이를 위해 세 가지를 제안함
      • UI-guided visual token selection
      • Interleaved vision-language-action streaming
      • Small-scale high-quality GUI instruction-following dataset
  • 모델 구조
    • notion image
    • 기반 모델
      • Qwen2-VL-2B 위에 GUI 특화 설계를 얹음.
    • 전체 입력
      • user task query
      • action space 설명(README처럼 문서화)
      • 현재/과거 screenshot
      • 과거 action
    • 전체 출력
      • 다음 action 1개
      • JSON 형식으로 생성함
        • {action: ..., value: ..., position: [x,y]}
      • 좌표는 0~1 상대좌표를 사용.
  • UI-guided visual token selection
    • notion image
    • 핵심 문제
      • GUI screenshot은 token 수가 많고
      • 많은 patch가 서로 거의 같은 정보라 비효율적임
    • 기본 아이디어
      • screenshot을 patch로 자른 뒤
      • 각 patch를 graph의 node로 봄
      • 인접 patch끼리 RGB가 거의 같으면 같은 connected component로 묶음
    • 즉 UI connected graph를 만든다고 보면 됨
    • GUI는 배경색, 박스, 빈 공간, 단색 영역이 많아서 인접 patch가 사실상 같은 정보인 경우가 많기 때문
      • 같은 1296 token이라도
        • 구글 검색 화면처럼 단순한 UI는 291 component
        • Overleaf 같은 복잡한 텍스트 화면은 986 component
      • 즉, 화면 복잡도에 따라 적응적으로 중복 정도를 파악함.
  • Token merging vs token selection
    • notion image
    • 단순한 방법
      • 같은 component 안 patch들을 하나의 token으로 merge
    • 문제점
      • pooling으로 하나로 합치면 원래 patch들의 위치 관계가 사라짐
      • GUI grounding에서는 위치 정보가 매우 중요해서 불리함
      • 근데 원래 vit 계열에선 안 하긴 했음
    • 이 논문의 방식
      • merge하지 않고 같은 component 안에서 일부 token만 랜덤 선택
        • 예를 들어 글자가 있는 경우는 서로 다른 개별 토큰이니까 항상 선택 하지만(single-patch component), 배경은 그 중 같은 컴포넌트 안에서 일부만 랜덤선택
      • 선택된 token은 원래 positional embedding 유지
        • 하나의 컴포넌트의 여러 토큰 중 하나를 선택했어도, 해당 토큰의 Positional embedding 사용
      • 기존 vit랑 비슷하긴한듯
    • 장점
      • 연산량은 줄이면서 위치 관계는 최대한 보존 가능
    • 추가 파라미터도 없음
    • 학습 시 token selection을 적용하고 추론 시에는 선택적으로 켜거나 끌 수 있음.
  • Interleaved Vision-Language-Action Streaming
    • 핵심 문제
      • GUI action은 자연어와 다름
      • action type + parameter를 같이 다뤄야 함
      • 그리고 navigation은 screenshot/action history가 섞여 들어감
    • action 표현 방식
      • 모든 action을 JSON으로 통일
        • action: 액션 타입
        • value: 입력 문자열 등
        • position: 클릭 좌표
    • action space 문서화
      • system prompt에 action 설명을 같이 넣음
      • 예:
        • CLICK은 좌표 필요
        • TYPE은 문자열과 위치 필요
      • 그래서 모델이 액션 이름을 외우기보다
        • 문서를 보고 action schema를 해석하는 식으로 동작하게 유도함.
notion image
  • 네비게이션용: Action-Visual Streaming
    • 이전 action 후에 다음 screenshot이 들어오고
    • 그걸 바탕으로 다음 action을 예측
      • ... screenshot_t → action_t → screenshot_t+1 → action_t+1 ...
      • 이런 interleaved sequence로 다룸
    • 모바일은 앱 전환 등으로 화면 변화가 커서 스크린샷 히스토리가 중요함
  • 그라운딩용: Action-Query Streaming
    • grounding 또는 one-step action용
      • grounding: 화면 안에서 특정 UI 요소가 어디에 있고 어떤 역할이고 어떨 때 누르는지
    • 한 screenshot에 대해 여러 query/action이 붙을 수 있음
    • 그런데 screenshot token은 1K 이상으로 길고
    • query/action은 10 token 이하로 짧은 경우가 많음
    • screenshot 하나마다 action 하나씩 따로 학습하면 비효율적임
    • 그래서
      • 하나의 screenshot에 대해
      • 여러 query-action pair를 multi-turn처럼 묶어서
      • 한 번의 forward pass에서 여러 action을 학습함.
  • Training strategy / 데이터 구성
    • 핵심 철학
      • 데이터를 무작정 많이 쓰지 않음
      • 작고 질 좋은 instruction-following 데이터를 선별해서 사용
    • Web 데이터
      • 웹은 수집하기 쉽고 텍스트가 많음
      • 그런데 static text가 40% 정도를 차지함
      • 대부분의 VLM이 OCR을 이미 꽤 잘한다고 보고 button, checkbox 같은 시각적으로 중요한 요소 위주로 선택함
    • Desktop 데이터
      • 데스크톱 데이터는 자동 수집이 어렵고 양도 적음
      • OmniAct 데이터를 사용
      • 원래는 단순 element name만 있었는데
      • GPT-4o를 이용해 query를 다양화함
        • notion image
          notion image
        • appearance query
        • spatial relationship query
        • intention query
      • 예:
        • “message_ash”
        • → “A가 적힌 파란 채팅 카드”
        • → “Clara의 채팅 박스 위”
        • → “Ash에게 사진 보내기”
      • 이런 식으로 annotation 다양성을 늘림.
    • Mobile 데이터
      • Android 기반 데이터 사용
      • 단순 element name뿐 아니라
      • 기능 설명(functionality description)이 있는 데이터를 중요하게 봄.
    • Navigation 데이터
      • GUIAct의 web/mobile trajectory를 사용.
      notion image
  • 전체 학습/설계 순서
    • 1단계: screenshot을 visual token으로 바꿈
      • patch 단위로 쪼갬
      • UI connected graph 구성
    • 2단계: redundant patch를 component 단위로 파악
      • 같은 component 안의 token 일부만 선택
      • 위치 정보는 유지
    • 3단계: query + action space 설명 + screenshot/history를 interleaved sequence로 넣음
    • 4단계: 다음 action을 JSON 형식으로 생성
    • 5단계: grounding / one-step action / multi-step navigation을 같은 프레임워크 안에서 instruction tuning.
  • 실험
    • 그라운딩 실험
      • notion image
      • 아이콘이 텍스트보다 어려움. 모바일에서 더 심함
      • 적은 양의 데이터 & 작은 모델 사이즈로 좋은 성능을 냄
    • 네비게이팅
      • 모바일
        • notion image
        • 모바일은 이전 화면 히스토리를 넣는게 정확도가 더 좋았음
          • 모바일은 화면이 바뀌는게 커서 그런듯 함
        • 제로샷이 잘 되지는 않았지만 발전 가능성은 있어보임
        • html과 같은 오라클 정보 없이, 외부 API 모델을 사용하지 않고 standalone 모델로도 효과적임
        • notion image
        • 모바일만큼 스크린샷 히스토리가 중요하지 않았다
      • 크로스
        • notion image
        • 크로스 타스크/도메인/웹사이트에서 정확도가 낮아짐. 못 보던 ui에 잘 안 됨
        • 좀 더 general 하게 ui를 다룰 수 있도록 학습이 필요함
      • fine tuinng으로 인한 성능 차이가 큼
        • notion image
        • ui 변화에 대비하여 zero shot에서도 잘 되는 방향으로 가야 함
    • 토큰 머지 안 하는게 정확도에 더 좋음
      • notion image
    • 토큰 셀렉션
      • notion image
      • 어느 특정 레이어에서 하는 것보다 섞어서(cross)하는게 제일 좋았음
        • 너무 초반에 하면 정보를 잃을 수 있고, 너무 마지막에 하면 유추한 정보를 잃을 수 있음
        • 다하면 너무 정보가 압출 될 수도 있음
      notion image
    • 학습 시 밸런스 맞춰서 학습시키는게 가장 좋았음
Share article