Attr1.0-2B
A compact multimodal model for fine-grained visual perception
Shanghai Shuangshen Technology Co., Ltd. · Attrsense Research Lab
Release date: 2026-09-22
中文 | English
Model Overview
Attr1.0-2B is a 2B-class multimodal model developed by Attrsense through post-training based on Qwen3.5. It focuses on visual perception across images and videos, with target capabilities including attribute recognition, spatial relationships, depth and 3D perception, visual grounding, visual comparison, fine-grained recognition, contextual integration, and chart understanding.
With approximately 2.21B parameters, Attr1.0-2B delivers strong visual-perception performance and outperforms larger models on several chart, spatial, and visual-search tasks. It accepts text, single-image, multi-image, and video inputs, making it suitable for multimodal applications that require detailed understanding of visual content.
Highlights
- 🔥 Leading visual-perception performance. Attr1.0-2B achieves an Overall score of 27.4 on PerceptionBench, approximately 35.6% above the second-best result in the reported comparison. Among the evaluated models with up to 4B parameters, it ranks first in Overall and nine perception categories: relations, counting, attributes, depth, localization, comparison, fine-grained recognition, contextual integration, and OCR.
- 💪 Strong multimodal understanding. The model performs well across chart, spatial, real-world, and visual-search tasks, reaching or exceeding the performance of some larger models on ChartQA, CharXivReason, BLINK, RealWorldQA, and VStarBench.
- 🧭 Evidence-oriented visual understanding. It covers the perception pipeline from attributes, spatial relations, and depth estimation to localization, comparison, and contextual integration.
- 📊 Chart and spatial reasoning. The model can interpret chart text, structure, and values while handling grounding, spatial relations, complex-scene retrieval, and fine-grained comparison.
- 🎥 Unified image and video understanding. It supports text, single images, multiple images, and video, with competitive multi-frame performance on benchmarks such as Video-MME without subtitles.
- 🛠️ Compact and integration-friendly. The release uses standard Hugging Face Transformers and Safetensors files, provides a unified image/video processor, and configures a context window of up to 262K tokens.
Model Details
| Item | Description |
|---|---|
| Model type | Multimodal vision-language model |
| Inputs | Text, single image, multiple images, video |
| Output | Text |
| Parameters | Approximately 2.21B |
| Weight precision | BF16 |
| Configured context length | Up to 262K tokens |
| Weight format | Safetensors |
| License | Apache License 2.0 |
The configured maximum context length is not necessarily practical on every device. Memory usage depends on text length, image resolution, sampled video frames, inference framework, and batch size.
Evaluation
The reported evaluation covers 19 benchmarks across 8 capability categories. Higher scores are better; blue cells and bold values identify the best result in each benchmark.

Attr1.0 is developed by Attrsense.
Complete Benchmark Results
Scores should be compared under the same evaluation protocol, prompt template, decoding settings, and software versions.
Quick Start
Installation
pip install "transformers>=5.9.0" accelerate pillow
For video input, install a compatible video-decoding backend for your operating system and PyTorch/CUDA combination.
Load the model
from transformers import AutoModelForMultimodalLM, AutoProcessor
model_path = "/path/to/Attr1.0-2B"
processor = AutoProcessor.from_pretrained(model_path)
model = AutoModelForMultimodalLM.from_pretrained(
model_path,
dtype="auto",
device_map="auto",
).eval()
def generate_response(
messages,
enable_thinking=False,
processor_kwargs=None,
max_new_tokens=512,
):
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
enable_thinking=enable_thinking,
tokenize=True,
return_dict=True,
return_tensors="pt",
processor_kwargs=processor_kwargs or {},
).to(model.device)
output_ids = model.generate(**inputs, max_new_tokens=max_new_tokens)
answer_ids = output_ids[0, inputs["input_ids"].shape[-1]:]
return processor.decode(answer_ids, skip_special_tokens=True)
Image inference
An image item may point to a local file or an accessible URL:
messages = [{
"role": "user",
"content": [
{"type": "image", "path": "/path/to/example.jpg"},
{
"type": "text",
"text": "Describe the main objects and their spatial relationships.",
},
],
}]
response = generate_response(messages, enable_thinking=True)
print(response)
For multi-image input, add multiple image items to the same message's content list.
Video inference
A video item may point to a local file or an accessible URL. Use fps to control sampling density:
messages = [{
"role": "user",
"content": [
{"type": "video", "path": "/path/to/example.mp4"},
{
"type": "text",
"text": "Summarize the main events in chronological order.",
},
],
}]
response = generate_response(
messages,
enable_thinking=True,
processor_kwargs={"videos_kwargs": {"fps": 2}},
)
print(response)
Advanced preprocessing options
| Parameter | Default | Applies to | Description |
|---|---|---|---|
enable_thinking | False | Text, image, video | Enables Thinking mode |
add_vision_id | False | Image and video | Adds labels such as Picture 1 and Video 1 |
min_pixels | 65,536 | Image | Minimum post-resize pixel budget |
max_pixels | 16,777,216 | Image | Maximum post-resize pixel budget |
fps | User-defined | Video | Uniform target-frame-rate sampling; do not explicitly combine with num_frames |
num_frames | Not set | Video | Samples a specified number of frames uniformly |
do_sample_frames | True | Video | Controls whether sampling occurs during preprocessing |
size | shortest_edge=4,096; longest_edge=25,165,824 | Video | Video preprocessing pixel budget |
Higher image resolution and more video frames generally produce more visual tokens. Adjust these settings according to available memory and task requirements.
Transformers Serve
Install the serving dependencies:
pip install "transformers[serving]>=5.9.0"
Start an OpenAI-compatible server:
transformers serve /path/to/Attr1.0-2B \
--port 8000 \
--host 0.0.0.0 \
--continuous-batching
Send an image request:
curl -s http://localhost:8000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "/path/to/Attr1.0-2B",
"messages": [{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {"url": "https://example.com/example.jpg"}
},
{"type": "text", "text": "Describe the main content of this image."}
]
}],
"chat_template_kwargs": {"enable_thinking": false},
"stream": false
}'
Tool calling
The chat template accepts tool definitions as part of the conversation context. The server generates tool calls, while the application remains responsible for executing functions and appending their results to subsequent turns.
Transformers 5.9 and later can parse the model's tool-call format and return structured results in the OpenAI-compatible message.tool_calls field.
llama.cpp Deployment
Run multimodal inference
For an image prompt:
./llama.cpp/build/bin/llama-mtmd-cli \
-m Attr1.0-2B-Q4_K_M.gguf \
--mmproj mmproj-Attr1.0-2B-BF16.gguf \
--image /path/to/example.jpg \
-c 8192 \
-p "Describe this image in detail."
For a video, replace --image with --video /path/to/example.mp4; --video-fps may be set explicitly for the target workload.
Start an OpenAI-compatible HTTP service with:
./llama.cpp/build/bin/llama-server \
-m Attr1.0-2B-Q4_K_M.gguf \
--mmproj mmproj-Attr1.0-2B-BF16.gguf \
-c 8192 \
--host 0.0.0.0 \
--port 8080
The context value above is a conservative deployment example, not the model limit. Increase it according to available memory and the target workload. Refer to the upstream multimodal guide for client examples and current runtime options.
Ollama Deployment
Create a file named Modelfile and use an absolute path:
FROM /absolute/path/to/Attr1.0-2B-Q4_K_M.gguf
PARAMETER num_ctx 8192
Create and run the model:
ollama create attr1.0:2b -f Modelfile
ollama run attr1.0:2b
Limitations and Responsible Use
- The model may produce inaccurate, outdated, biased, or visually unsupported content.
- Image resolution, compression, occlusion, video sampling rate, and prompting can substantially affect results.
- Model output should not be the sole basis for medical, legal, financial, safety-critical, or other high-risk decisions.
- Independent domain testing, safety evaluation, and human review are recommended before production deployment.
Outputs are generated probabilistically and do not represent factual judgments, values, or advice from the development team. The development team is not responsible for consequences arising from misuse, unvalidated deployment, or reliance on model output as the sole basis for high-risk decisions.
License
This repository is released under the Apache License 2.0. See LICENSE for the complete terms. Users must also comply with the applicable licenses and terms of upstream components and data.
Acknowledgements
Attr1.0-2B uses the Qwen3.5 model architecture and related foundation components. We thank the Qwen team, the Hugging Face Transformers community, PerceptionBench, and other open evaluation projects for their contributions.
Citation
@misc{attrsense2026attr10,
title = {Attr1.0-2B: A compact multimodal model for fine-grained visual perception},
author = {{Attrsense Research Lab, Shanghai Shuangshen Technology Co., Ltd.}},
year = {2026},
howpublished = {Model Card}
}