inblog logo
|
kjyong

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

    바세린용자 (yongja)'s avatar
    바세린용자 (yongja)
    Apr 12, 2026
    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

    kjyong

    RSS·Powered by Inblog