/ Модель

Характеристики

Контекст
32 768 токенов
Параметры
1,5 млрд
Лицензия
MIT
Архитектура
qwen2_vl · dense
Базовая модель
UI-TARS-2B-SFT
Библиотека
transformers
Опубликована
3 июн 2025

GUI-Actor-Verifier-2B

Изображение и текст → текст3 профессии

Мультимодальная модель Microsoft проверяет, соответствует ли отмеченная точка на снимке интерфейса текстовой инструкции, чтобы оценивать кандидаты на действие GUI-агента.

321скачиваний за 30 дней14лайковвеса обновлены10 июн 2025

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Изображение → текст» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

    Модели ответят на каждую задачу, судья оценит ответы. Опубликованный результат появится на этой странице.

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

GUI-Actor-Verifier-2B — мультимодальная модель Microsoft для проверки того, соответствует ли отмеченная позиция на экране текстовой инструкции. Она основана на дообученной ByteDance-Seed/UI-TARS-2B-SFT с архитектурой Qwen2-VL и предназначена для компонента GUI-Actor в системах автоматизации графических интерфейсов.

На вход подаются изображение экрана с целевой позицией, отмеченной красным кругом, и инструкция на естественном языке. Модель предсказывает True или False; вероятности этих ответов можно использовать для оценки кандидатов на действие. В метаданных указаны 1,5 млрд параметров, контекст 32 768 токенов и формат safetensors.

Модель специализируется на проверке визуального соответствия позиции инструкции и поддерживает изображения и текст на входе, текстовые метки на выходе. В карточке указана лицензия MIT. Языки инструкции отдельно не перечислены.

Сценарии применения

  • проверка, указывает ли точка на нужный элемент интерфейса
  • оценка кандидатов координат для клика GUI-агента
  • верификация позиции действия по скриншоту и инструкции

Ограничения

Модель проверяет отмеченную позицию и выдаёт метку True или False, поэтому сама по себе не формирует координаты действия. В README не указаны поддерживаемые языки инструкций.

Для каких профессий подходит3

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

GUI-Actor-Verifier-2B

This model was introduced in the paper GUI-Actor: Coordinate-Free Visual Grounding for GUI Agents. It is developed based on UI-TARS-2B-SFT and is designed to predict the correctness of an action position given a language instruction. This model is well-suited for GUI-Actor, as its attention map effectively provides diverse candidates for verification with only a single inference.

For more details on model design and evaluation, please check: 🏠 Project Page | 💻 Github Repo | 📑 Paper.

Model ListHugging Face Link
GUI-Actor-7B-Qwen2-VL🤗 Hugging Face
GUI-Actor-2B-Qwen2-VL🤗 Hugging Face
GUI-Actor-7B-Qwen2.5-VL🤗 Hugging Face
GUI-Actor-3B-Qwen2.5-VL🤗 Hugging Face
GUI-Actor-Verifier-2B🤗 Hugging Face

📊 Performance Comparison on GUI Grounding Benchmarks

Table 1. Main results on ScreenSpot-Pro, ScreenSpot, and ScreenSpot-v2 with Qwen2-VL as the backbone. † indicates scores obtained from our own evaluation of the official models on Huggingface.

MethodBackbone VLMScreenSpot-ProScreenSpotScreenSpot-v2
72B models:
AGUVIS-72BQwen2-VL-89.2-
UGround-V1-72BQwen2-VL34.589.4-
UI-TARS-72BQwen2-VL38.188.490.3
7B models:
OS-Atlas-7BQwen2-VL18.982.584.1
AGUVIS-7BQwen2-VL22.984.486.0†
UGround-V1-7BQwen2-VL31.186.387.6†
UI-TARS-7BQwen2-VL35.789.591.6
GUI-Actor-7BQwen2-VL40.788.389.5
GUI-Actor-7B + VerifierQwen2-VL44.289.790.9
2B models:
UGround-V1-2BQwen2-VL26.677.1-
UI-TARS-2BQwen2-VL27.782.384.7
GUI-Actor-2BQwen2-VL36.786.588.6
GUI-Actor-2B + VerifierQwen2-VL41.886.989.3

Table 2. Main results on the ScreenSpot-Pro and ScreenSpot-v2 with Qwen2.5-VL as the backbone.

MethodBackbone VLMScreenSpot-ProScreenSpot-v2
7B models:
Qwen2.5-VL-7BQwen2.5-VL27.688.8
Jedi-7BQwen2.5-VL39.591.7
GUI-Actor-7BQwen2.5-VL44.692.1
GUI-Actor-7B + VerifierQwen2.5-VL47.792.5
3B models:
Qwen2.5-VL-3BQwen2.5-VL25.980.9
Jedi-3BQwen2.5-VL36.188.6
GUI-Actor-3BQwen2.5-VL42.291.0
GUI-Actor-3B + VerifierQwen2.5-VL45.992.4

🚀 Usage

The verifier takes a language instruction and an image with a red circle marking the target position as input. One example is shown below. It outputs either ‘True’ or ‘False’, and you can also use the probability of each label to score the sample.

For more detailed usage, please refer to our github repo.

import torch
from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from transformers.generation import GenerationConfig
import json
import re
import os
import numpy as np
from PIL import Image, ImageDraw
from qwen_vl_utils import process_vision_info



# load model
model_name_or_path = "microsoft/GUI-Actor-Verifier-2B"
model = Qwen2VLForConditionalGeneration.from_pretrained(
            model_name_or_path, 
            device_map="cuda:0", 
            trust_remote_code=True, 
            torch_dtype=torch.bfloat16,
            attn_implementation="flash_attention_2"
        ).eval()
output_len = 1

tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True)
processor = AutoProcessor.from_pretrained(model_name_or_path)

def draw_annotations(img, point_in_pixel, bbox, output_path='test.png', color='red', size=1):
    draw = ImageDraw.Draw(img)
    
    # Draw the ground truth bounding box in green
    if bbox:
        # Assuming bbox format is [x1, y1, x2, y2]
        draw.rectangle(bbox, outline="yellow", width=4)
    
    # Draw a small circle around the predicted point in red
    if point_in_pixel:
        # Create a small rectangle around the point (5 pixels in each direction)
        radius = np.ceil(8 * size).astype(int)
        circle_bbox = [
            point_in_pixel[0] - radius,  # x1
            point_in_pixel[1] - radius,  # y1
            point_in_pixel[0] + radius,  # x2
            point_in_pixel[1] + radius   # y2
        ]
        draw.ellipse(circle_bbox, outline=color, width=np.ceil(4 * size).astype(int))
    
    return img

def ground_only_positive(model, tokenizer, processor, instruction, image, point):
  if isinstance(image, str):
      image_path = image
      image = Image.open(image_path)
  else:
      image_path = image_to_temp_filename(image)
  assert os.path.exists(image_path) and os.path.isfile(image_path), "Invalid input image path."

  width, height = image.size
  image = draw_annotations(image, point, None, output_path=None, size=height/1000 * 1.2)

  prompt_origin = "Please observe the screenshot and exame whether the hollow red circle accurately placed on the intended position in the image: '{}'. Answer True or False."
  full_prompt = prompt_origin.format(instruction)

  messages = [
      {
          "role": "user",
          "content": [
              {
                  "type": "image",
                  "image": image,
              },
              {"type": "text", "text": full_prompt},
          ],
      }
  ]
  # Preparation for inference
  text_input = processor.apply_chat_template(
      messages, tokenize=False, add_generation_prompt=True
  )
  image_inputs, video_inputs = process_vision_info(messages)
  inputs = processor(
      text=[text_input],
      images=image_inputs,
      videos=video_inputs,
      padding=True,
      return_tensors="pt",
  )
  inputs = inputs.to("cuda:0")

  generated_ids = model.generate(
      **inputs,  
      max_new_tokens=output_len,
      do_sample=False,
      temperature=0.0
  )

  generated_ids_trimmed = [
      out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
  ]
  response = processor.batch_decode(
      generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
  )[0]

  print(response)
  matches = re.findall(r'\b(?:True|False)\b', response)
  if not len(matches):
      answer = 'Error Format'
  else:
      answer = matches[-1]
  return answer

# given the image path and instruction and coorindate
instruction = 'close this window'
image = Image.open('test.png')
width, height = image.size
point = [int(0.9709 * width), int(0.1548, * height)] # The point should be in pixels
answer = ground_only_positive(model, tokenizer, processor, instruction, image, point) # output True or False

📝 Citation

@article{wu2025gui,
  title={GUI-Actor: Coordinate-Free Visual Grounding for GUI Agents},
  author={Wu, Qianhui and Cheng, Kanzhi and Yang, Rui and Zhang, Chaoyun and Yang, Jianwei and Jiang, Huiqiang and Mu, Jian and Peng, Baolin and Qiao, Bo and Tan, Reuben and others},
  journal={arXiv preprint arXiv:2506.03143},
  year={2025}
}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · transformers

Можно запустить

Подбираем GPU…

Класс архитектуры
Qwen2VLForConditionalGeneration
Ревизия весов
30dd0db

0 моделей