Instructions to use Yann0122/OPO-8B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Yann0122/OPO-8B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="Yann0122/OPO-8B") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("Yann0122/OPO-8B") model = AutoModelForMultimodalLM.from_pretrained("Yann0122/OPO-8B", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use Yann0122/OPO-8B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Yann0122/OPO-8B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Yann0122/OPO-8B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/Yann0122/OPO-8B
- SGLang
How to use Yann0122/OPO-8B with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "Yann0122/OPO-8B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Yann0122/OPO-8B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "Yann0122/OPO-8B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Yann0122/OPO-8B", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use Yann0122/OPO-8B with Docker Model Runner:
docker model run hf.co/Yann0122/OPO-8B
OPO-8B
OPO-8B is the model from Learning Where to Look: Observation Policy Optimization for Thinking with Images (NeurIPS 2026). Built on Qwen3-VL-8B-Instruct, it learns where to look through uncertainty-guided observation branching and evidence-localized advantage attribution, using image zoom-in tools to acquire fine-grained visual evidence.
Results
Accuracy (%) on high-resolution perception benchmarks.
| Model | Tool | Param. | V* | HR-Bench 4K | HR-Bench 8K | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Attr. | Spatial | Overall | FSP | FCP | Overall | FSP | FCP | Overall | |||
| Closed-source models | |||||||||||
| GPT-5 mini | โ | โ | โ | โ | 78.6 | โ | โ | 78.6 | โ | โ | 74.4 |
| GPT-5.2 | โ | โ | โ | โ | 75.9 | โ | โ | โ | โ | โ | โ |
| Claude Opus 4.6 | โ | โ | โ | โ | 66.5 | โ | โ | โ | โ | โ | โ |
| Gemini-3 Pro | โ | โ | โ | โ | 88.0 | โ | โ | โ | โ | โ | โ |
| Kimi K2.5 | โ | 1T-A32B | โ | โ | 77.0 | โ | โ | โ | โ | โ | โ |
| Open-source models | |||||||||||
| LLaVA-OV | ร | 7B | 75.7 | 75.0 | 75.4 | 72.0 | 54.0 | 63.0 | 67.3 | 52.3 | 59.8 |
| Qwen2.5-VL | ร | 7B | 73.9 | 67.1 | 71.2 | 85.2 | 52.2 | 68.8 | 78.8 | 51.8 | 65.3 |
| Qwen2.5-VL | ร | 32B | 87.8 | 88.1 | 87.9 | 89.8 | 58.0 | 73.9 | 84.5 | 56.3 | 70.4 |
| Qwen3-VL | Zoom | 235B-A22B | โ | โ | 93.7 | โ | โ | 85.4 | โ | โ | 82.4 |
| Qwen3-VL | Zoom | 30B-A3B | โ | โ | 89.5 | โ | โ | 82.5 | โ | โ | 79.3 |
| Qwen3-VL | Zoom | 32B | โ | โ | 91.1 | โ | โ | 84.6 | โ | โ | 81.6 |
| Qwen3.5 | โ | 397B-A17B | โ | โ | 91.1 | โ | โ | โ | โ | โ | โ |
| Qwen3.5 | Code | 397B-A17B | โ | โ | 95.8 | โ | โ | โ | โ | โ | โ |
| Qwen3-VL-8Bโ | Zoom | 8B | 91.3 | 82.9 | 88.0 | 92.5 | 70.3 | 81.4 | 87.8 | 65.3 | 76.5 |
| Specialized visual reasoning methods | |||||||||||
| SEAL | WF | 7B | 74.8 | 76.3 | 75.4 | โ | โ | โ | โ | โ | โ |
| DyFo | WF | 7B | 80.0 | 82.9 | 81.2 | โ | โ | โ | โ | โ | โ |
| ZoomEye | WF | 7B | 93.9 | 85.5 | 90.6 | 84.3 | 55.0 | 69.6 | 88.5 | 50.0 | 69.3 |
| DeepEyes | Zoom | 7B | 91.3 | 88.2 | 90.1 | 91.3 | 59.0 | 75.1 | 86.8 | 58.5 | 72.6 |
| DeepEyesV2 | General | 7B | โ | โ | 81.8 | โ | โ | 77.9 | โ | โ | 73.8 |
| Thyme-RL | Code | 7B | 83.5 | 80.3 | 82.2 | 91.0 | 63.0 | 77.0 | 86.5 | 57.5 | 72.0 |
| ZwZ-8B | ร | 8B | โ | โ | 91.1 | โ | โ | 84.4 | โ | โ | 82.0 |
| SenseNova-MARS | C+S | 8B | โ | โ | 92.2 | โ | โ | 83.1 | โ | โ | 78.4 |
| Ours | |||||||||||
| OPO-8B | Zoom | 8B | 93.04 | 93.42 | 93.19 | 94.00 | 70.50 | 82.25 | 91.00 | 73.50 | 82.25 |
โ denotes a baseline reproduced by us. โโโ denotes an unreported or inapplicable result. LLaVA-OV denotes LLaVA-OneVision. Tools: Zoom = image zoom-in, WF = visual-search workflow, Code = code execution, General = general tools, C+S = cropping and search, ร = no tool.
Usage
Use the OPO evaluation code to run the multi-turn image zoom-in tool loop. From the code repository, after installing its dependencies and configuring the judge service:
python -m scripts.eval_checkpoint \
--model-path /path/to/OPO-8B \
--bench-dir /path/to/benchmarks \
--output-dir ./outputs/opo-8b-evaluation
Evaluation uses up to 10 turns, with qwen3.8-flash for semantic answer judging.
Citation
@misc{wang2026opo,
title={Learning Where to Look: Observation Policy Optimization for Thinking with Images},
author={Wang, Junfeng and Liu, Jiawei and Xu, Yongchao and Jiang, Tao and Ai, Jiangbo and Zhang, Jin and Wang, Chong and Zhang, Qixing},
year={2026},
eprint={2611.04943},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2611.04943}
}
- Downloads last month
- 38