Sponsored by
Vmake Labs Video Enhancer
-Vmake Labs Video Enhancer uses AI to improve video quality, restore details, reduce blur, and upscale videos to 8K.
Sa2VA is an MLLM capable of question answering, visual prompt understanding, and dense object segmentation at both image and video levels. It achieves comparable performance to SOTA MLLMs Qwen2.5-VL and InternVL3 on question-answering benchmarks. Additionally, Sa2VA possesses the visual prompt understanding and dense object segmentation capabilities that SOTA MLLMs Qwen2.5-VL and InternVL3 lack. Sa2VA achieves SOTA performance on both image and video grounding and segmentation benchmarks.
Sa2VA Family
We built the Sa2VA series based on Qwen2.5/3-VL and InternVL2.5/3. In the following table, we provide some Sa2VA models built on Qwen2.5/3-VL and InternVL3.
We provide an example code to run
Sa2VA
using
transformers
.
import torch
from transformers import AutoProcessor, AutoModel
from PIL import Image
import numpy as np
import os
# load the model and processor
path = "ByteDance/Sa2VA-Qwen3-VL-4B"
model = AutoModel.from_pretrained(
path,
torch_dtype=torch.bfloat16,
low_cpu_mem_usage=True,
use_flash_attn=True,
trust_remote_code=True).eval().cuda()
processor = AutoProcessor.from_pretrained(path, trust_remote_code=True, use_fast=False)
# for image chat
image_path = "/PATH/TO/IMAGE"
text_prompts = "<image>Please describe the image."
image = Image.open(image_path).convert('RGB')
input_dict = {
'image': image,
'text': text_prompts,
'past_text': '',
'mask_prompts': None,
'processor': processor,
}
return_dict = model.predict_forward(**input_dict)
answer = return_dict["prediction"] # the text format answer# for image chat with segmentation output
image_path = "/PATH/TO/IMAGE"
text_prompts = "<image>Could you please give me a brief description of the image? Please respond with interleaved segmentation masks for the corresponding parts of the answer."
image = Image.open(image_path).convert('RGB')
input_dict = {
'image': image,
'text': text_prompts,
'past_text': '',
'mask_prompts': None,
'processor': processor,
}
return_dict = model.predict_forward(**input_dict)
answer = return_dict["prediction"] # the text format answer
masks = return_dict['prediction_masks'] # segmentation masks, list(np.array(1, h, w), ...)# for chat with visual prompt (mask format) input
mask_prompts = np.load('/PATH/TO/pred_masks.npy') # np.array(n_prompts, h, w)
image_path = "/PATH/TO/IMAGE"
text_prompts = "<image>Can you provide me with a detailed description of the region in the picture marked by region1."
image = Image.open(image_path).convert('RGB')
input_dict = {
'image': image,
'text': text_prompts,
'past_text': '',
'mask_prompts': mask_prompts,
'processor': processor,
}
return_dict = model.predict_forward(**input_dict)
answer = return_dict["prediction"] # the text format answer# for video chat
video_folder = "/PATH/TO/VIDEO_FOLDER"
images_paths = os.listdir(video_folder)
images_paths = [os.path.join(video_folder, image_path) for image_name in images_paths]
iflen(images_paths) > 5: # uniformly sample 5 frames
step = (len(images_paths) - 1) // (5 - 1)
images_paths = [images_paths[0]] + images_paths[1:-1][::step][1:] + [images_paths[-1]]
text_prompts = "<image>Please describe the video."
input_dict = {
'video': images_paths,
'text': text_prompts,
'past_text': '',
'mask_prompts': None,
'processor': processor,
}
return_dict = model.predict_forward(**input_dict)
answer = return_dict["prediction"] # the text format answer# for video chat with segmentation mask output
video_folder = "/PATH/TO/VIDEO_FOLDER"
images_paths = os.listdir(video_folder)
images_paths = [os.path.join(video_folder, image_path) for image_name in images_paths]
text_prompts = "<image>Please segment the person."
input_dict = {
'video': images_paths,
'text': text_prompts,
'past_text': '',
'mask_prompts': None,
'processor': processor,
}
return_dict = model.predict_forward(**input_dict)
answer = return_dict["prediction"] # the text format answer
masks = return_dict['prediction_masks'] # segmentation masks, list(np.array(n_frames, h, w), ...)
Citation
If you find this project useful in your research, please consider citing:
@article{sa2va,
title={Sa2VA: Marrying SAM2 with LLaVA for Dense Grounded Understanding of Images and Videos},
author={Yuan, Haobo and Li, Xiangtai and Zhang, Tao and Huang, Zilong Huang and Xu, Shilin and Ji, Shunping and Tong, Yunhai and Qi, Lu and Feng, Jiashi and Yang, Ming-Hsuan},
journal={arXiv preprint},
year={2025}
}
Runs of ByteDance Sa2VA-Qwen3-VL-2B on huggingface.co
287
Total runs
7
24-hour runs
35
3-day runs
40
7-day runs
147
30-day runs
More Information About Sa2VA-Qwen3-VL-2B huggingface.co Model
Sa2VA-Qwen3-VL-2B huggingface.co is an AI model on huggingface.co that provides Sa2VA-Qwen3-VL-2B's model effect (), which can be used instantly with this ByteDance Sa2VA-Qwen3-VL-2B model. huggingface.co supports a free trial of the Sa2VA-Qwen3-VL-2B model, and also provides paid use of the Sa2VA-Qwen3-VL-2B. Support call Sa2VA-Qwen3-VL-2B model through api, including Node.js, Python, http.
Sa2VA-Qwen3-VL-2B huggingface.co is an online trial and call api platform, which integrates Sa2VA-Qwen3-VL-2B's modeling effects, including api services, and provides a free online trial of Sa2VA-Qwen3-VL-2B, you can try Sa2VA-Qwen3-VL-2B online for free by clicking the link below.
ByteDance Sa2VA-Qwen3-VL-2B online free url in huggingface.co:
Sa2VA-Qwen3-VL-2B is an open source model from GitHub that offers a free installation service, and any user can find Sa2VA-Qwen3-VL-2B on GitHub to install. At the same time, huggingface.co provides the effect of Sa2VA-Qwen3-VL-2B install, users can directly use Sa2VA-Qwen3-VL-2B installed effect in huggingface.co for debugging and trial. It also supports api for free installation.