[đ Paper] [đ€ OneThinker-8B-model] [đ€OneThinker-SFT-model] [đ€ OneThinker-train-data] [đ€ OneThinker-eval]
We introduce OneThinker, an all-in-one multimodal reasoning generalist that is capable of thinking across a wide range of fundamental visual tasks within a single model.
We construct the large-scale OneThinker-600k multi-task training corpus and build OneThinker-SFT-340k with high-quality CoT annotations for cold-start SFT. Moreover, we propose EMA-GRPO, a new RL method that balances heterogeneous reward signals across diverse visual tasks, via simply tracking task-wise moving averages of reward std.
OneThinker demonstrates strong performance on 31 benchmarks across 10 fundamental vision tasks, while showing cross-task knowledge transfer and promising zero-shot generalization toward a unified multimodal reasoning generalist.
All code, models, and data are fully released.
Our dataset covers both image and video modalities and spans a series of fundamental visual reasoning tasks, including rule-based QA, open-ended QA, captioning, spatial grounding, temporal grounding, spatio-temporal grounding, tracking, and segmentation
To enable effective SFT initialization for reasoning, we leverage a strong proprietary model, Seed1.5-VL to produce CoT annotations.
Our model obtains significant performance gains after training based on Qwen3-VL-Instruct-8B across diverse visual tasks. For examle, OneThinker-8B reaches 70.6% accuracy on MMMU, 64.3% on MathVerse, 66.2% on VideoMMMU, 93.7 on Refcoco-testA, 54.9 J&F on ReasonVOS.
Besides, we also observe beneficial cross-task and cross-modality knowledge transfer, along with promising preliminary zero-shot generalization under unified training. This highlights the effectiveness and generalization ability of our unified training framework across diverse visual tasks.
Some reasoning examples are as follows.
Question:
As shown in the figure, AB is the diameter of âO, and points C and D are on âO. If â ABD = 50.0, then the degree of â BCD is () Choices: (A) 30° (B) 35° (C) 40° (D) 45°
Wait, AB is the diameter, so â ADB is also a right angle (since angle inscribed in a semicircle). So triangle ADB is a right-angled triangle at D. In triangle ADB, â ABD is 50°, so â BAD = 90° - 50° = 40°. \n\nNow, â BCD and â BAD are inscribed angles that intercept the same arc BD. Because â BAD intercepts arc BD, and â BCD also intercepts arc BD. So they should be equal. Therefore, â BCD = â BAD = 40°. Let's verify again.\n\nAB is diameter, so â ACB = 90°, â ADB = 90°. In âłABD, â BAD = 90° - 50° = 40°. â BCD and â BAD both subtend arc BD, so they are equal. Hence, â BCD is 40°, which is option C.</think>
<answe>C</answer>
Question:
Given the bounding box [537,403,768,703] of the target object in the first frame, track this object in each frame.
<answer>{"boxes": {"1": [537, 403, 768, 703], "2": [537, 353, 797, 690], "3": [532, 323, 827, 687], "4": [519, 282, 850, 690], "5": [515, 260, 877, 694], "6": [510, 246, 887, 694], "7": [509, 246, 897, 703], "8": [509, 232, 947, 710], "9": [509, 210, 972, 732], "10": [482, 200, 989, 787], "11": [469, 196, 995, 856], "12": [459, 203, 995, 929], "13": [422, 221, 995, 987], "14": [397, 244, 995, 994], "15": [389, 250, 995, 994], "16": [382, 250, 995, 994], "17": [370, 250, 995, 994], "18": [364, 250, 995, 994], "19": [362, 250, 995, 994], "20": [354, 244, 995, 994], "21": [350, 239, 995, 994], "22": [347, 239, 995, 994], "23": [347, 244, 965, 979], "24": [350, 244, 945, 944], "25": [350, 244, 904, 910], "26": [350, 244, 845, 860], "27": [347, 244, 797, 779], "28": [347, 244, 772, 750], "29": [350, 250, 764, 742], "30": [350, 250, 757, 739], "31": [350, 250, 750, 739], "32": [350, 250, 750, 739]}}</answer>
Question:
Pleae segment the shorter one.
<answer>{"time": 0.0, "boxes": [426, 300, 528, 775], "positive_points": [[454, 450], [468, 550], [472, 650]], "negative_points": [[300, 500], [600, 500], [400, 200]]}</answer>
git clone https://github.com/tulerfeng/OneThinker
cd OneThinker
# build SFT environment
conda create -n llamafactory python=3.11
conda activate llamafactory
cd LLaMA-Factory
pip install -e ".[torch,metrics]" --no-build-isolation
# build RL environment
conda create -n easyr1 python=3.11
conda activate easyr1
cd EasyR1
pip install -e .
For more details for the SFT and RL environment installation, please refer to LLaMA-Factory, EasyR1
Then, download the training datasets [đ€ OneThinker-train-data] and unzip all the data.
The onethinker_rl_train.json file is for RL training while onethinker_sft_image.json and onethinker_sft_video.json is for SFT cold start. The json files end with _unsampled are unsampled full set.
For SFT and RL training, a minimum of 8 Ă 80GB GPUs is required; alternatively, you may reduce the number of frames or the input resolution.
We first perform SFT cold start.
bash ./LLaMA-Factory/local_scripts/run_onethinker_sft.sh
If you want to skip the SFT process, we also provide our SFT model at [đ€OneThinker-SFT-model]
Then, we perform RL training as follows
bash ./EasyR1/local_scripts/run_onethinker_rl.sh
For setting Ray in multi-node training, please refer to EasyR1, or you may use single-node training by setting NNODES=1. Performing RL training for about 200 steps can already yield strong performance.
If you want to use model-based rewards for open-ended problem, please use vllm to lanuch POLAR-7B and revised the setting in /EasyR1/verl/reward_function/onethinker_reward.py
Since OneThinker-8B shares the same architecture as Qwen3-VL-8B, it naturally supports easy and efficient inference.
For the majority of tasks and benchmarks, we recommend using our provided json files and scripts for easier evaluation.
The json files can be downloaded at: [đ€ OneThinker-eval]
Download the trained model [đ€ OneThinker-8B-model]
Conduct evaluation on all benchmarks using the following scripts
bash ./Evaluation/Eval/eval_bench_all.sh
If you want to perform evaluation on segmentation tasks, please download and install sam2 and revise the related path in /Evaluation/Eval/seg_post_sam2.py
For image QA and part of video QA, we use VLMEvalKit for evaluation, please install corresponding environment and run:
bash ./Evaluation/VLMEvalKit/local_scripts/eval_vlmevalkit.sh
For infernce on a single example, you may refer to:
python ./Evaluation/inference_single/inference.py
We sincerely appreciate the contributions of the open-source community. The related projects are as follows: Video-R1, DeepSeek-R1, EasyR1, verl, LLaMA-Factory, sam2, VLMEvalKit
If you find our work helpful for your research, please consider citing our work.
@article{feng2025onethinker,
title={OneThinker: All-in-one Reasoning Model for Image and Video},
author={Feng, Kaituo and Zhang, Manyuan and Li, Hongyu and Fan, Kaixuan and Chen, Shuang and Jiang, Yilei and Zheng, Dian and Sun, Peiwen and Zhang, Yiyuan and Sun, Haoze and others},
journal={arXiv preprint arXiv:2512.03043},
year={2025}
}
8 commits
Python
99.3%
[đ Paper] [đ€ OneThinker-8B-model] [đ€OneThinker-SFT-model] [đ€ OneThinker-train-data] [đ€ OneThinker-eval]
We introduce OneThinker, an all-in-one multimodal reasoning generalist that is capable of thinking across a wide range of fundamental visual tasks within a single model.
We construct the large-scale OneThinker-600k multi-task training corpus and build OneThinker-SFT-340k with high-quality CoT annotations for cold-start SFT. Moreover, we propose EMA-GRPO, a new RL method that balances heterogeneous reward signals across diverse visual tasks, via simply tracking task-wise moving averages of reward std.
OneThinker demonstrates strong performance on 31 benchmarks across 10 fundamental vision tasks, while showing cross-task knowledge transfer and promising zero-shot generalization toward a unified multimodal reasoning generalist.
All code, models, and data are fully released.
Our dataset covers both image and video modalities and spans a series of fundamental visual reasoning tasks, including rule-based QA, open-ended QA, captioning, spatial grounding, temporal grounding, spatio-temporal grounding, tracking, and segmentation
To enable effective SFT initialization for reasoning, we leverage a strong proprietary model, Seed1.5-VL to produce CoT annotations.
Our model obtains significant performance gains after training based on Qwen3-VL-Instruct-8B across diverse visual tasks. For examle, OneThinker-8B reaches 70.6% accuracy on MMMU, 64.3% on MathVerse, 66.2% on VideoMMMU, 93.7 on Refcoco-testA, 54.9 J&F on ReasonVOS.
Besides, we also observe beneficial cross-task and cross-modality knowledge transfer, along with promising preliminary zero-shot generalization under unified training. This highlights the effectiveness and generalization ability of our unified training framework across diverse visual tasks.
Some reasoning examples are as follows.
Question:
As shown in the figure, AB is the diameter of âO, and points C and D are on âO. If â ABD = 50.0, then the degree of â BCD is () Choices: (A) 30° (B) 35° (C) 40° (D) 45°
Wait, AB is the diameter, so â ADB is also a right angle (since angle inscribed in a semicircle). So triangle ADB is a right-angled triangle at D. In triangle ADB, â ABD is 50°, so â BAD = 90° - 50° = 40°. \n\nNow, â BCD and â BAD are inscribed angles that intercept the same arc BD. Because â BAD intercepts arc BD, and â BCD also intercepts arc BD. So they should be equal. Therefore, â BCD = â BAD = 40°. Let's verify again.\n\nAB is diameter, so â ACB = 90°, â ADB = 90°. In âłABD, â BAD = 90° - 50° = 40°. â BCD and â BAD both subtend arc BD, so they are equal. Hence, â BCD is 40°, which is option C.</think>
<answe>C</answer>
Question:
Given the bounding box [537,403,768,703] of the target object in the first frame, track this object in each frame.
<answer>{"boxes": {"1": [537, 403, 768, 703], "2": [537, 353, 797, 690], "3": [532, 323, 827, 687], "4": [519, 282, 850, 690], "5": [515, 260, 877, 694], "6": [510, 246, 887, 694], "7": [509, 246, 897, 703], "8": [509, 232, 947, 710], "9": [509, 210, 972, 732], "10": [482, 200, 989, 787], "11": [469, 196, 995, 856], "12": [459, 203, 995, 929], "13": [422, 221, 995, 987], "14": [397, 244, 995, 994], "15": [389, 250, 995, 994], "16": [382, 250, 995, 994], "17": [370, 250, 995, 994], "18": [364, 250, 995, 994], "19": [362, 250, 995, 994], "20": [354, 244, 995, 994], "21": [350, 239, 995, 994], "22": [347, 239, 995, 994], "23": [347, 244, 965, 979], "24": [350, 244, 945, 944], "25": [350, 244, 904, 910], "26": [350, 244, 845, 860], "27": [347, 244, 797, 779], "28": [347, 244, 772, 750], "29": [350, 250, 764, 742], "30": [350, 250, 757, 739], "31": [350, 250, 750, 739], "32": [350, 250, 750, 739]}}</answer>
Question:
Pleae segment the shorter one.
<answer>{"time": 0.0, "boxes": [426, 300, 528, 775], "positive_points": [[454, 450], [468, 550], [472, 650]], "negative_points": [[300, 500], [600, 500], [400, 200]]}</answer>
git clone https://github.com/tulerfeng/OneThinker
cd OneThinker
# build SFT environment
conda create -n llamafactory python=3.11
conda activate llamafactory
cd LLaMA-Factory
pip install -e ".[torch,metrics]" --no-build-isolation
# build RL environment
conda create -n easyr1 python=3.11
conda activate easyr1
cd EasyR1
pip install -e .
For more details for the SFT and RL environment installation, please refer to LLaMA-Factory, EasyR1
Then, download the training datasets [đ€ OneThinker-train-data] and unzip all the data.
The onethinker_rl_train.json file is for RL training while onethinker_sft_image.json and onethinker_sft_video.json is for SFT cold start. The json files end with _unsampled are unsampled full set.
For SFT and RL training, a minimum of 8 Ă 80GB GPUs is required; alternatively, you may reduce the number of frames or the input resolution.
We first perform SFT cold start.
bash ./LLaMA-Factory/local_scripts/run_onethinker_sft.sh
If you want to skip the SFT process, we also provide our SFT model at [đ€OneThinker-SFT-model]
Then, we perform RL training as follows
bash ./EasyR1/local_scripts/run_onethinker_rl.sh
For setting Ray in multi-node training, please refer to EasyR1, or you may use single-node training by setting NNODES=1. Performing RL training for about 200 steps can already yield strong performance.
If you want to use model-based rewards for open-ended problem, please use vllm to lanuch POLAR-7B and revised the setting in /EasyR1/verl/reward_function/onethinker_reward.py
Since OneThinker-8B shares the same architecture as Qwen3-VL-8B, it naturally supports easy and efficient inference.
For the majority of tasks and benchmarks, we recommend using our provided json files and scripts for easier evaluation.
The json files can be downloaded at: [đ€ OneThinker-eval]
Download the trained model [đ€ OneThinker-8B-model]
Conduct evaluation on all benchmarks using the following scripts
bash ./Evaluation/Eval/eval_bench_all.sh
If you want to perform evaluation on segmentation tasks, please download and install sam2 and revise the related path in /Evaluation/Eval/seg_post_sam2.py
For image QA and part of video QA, we use VLMEvalKit for evaluation, please install corresponding environment and run:
bash ./Evaluation/VLMEvalKit/local_scripts/eval_vlmevalkit.sh
For infernce on a single example, you may refer to:
python ./Evaluation/inference_single/inference.py
We sincerely appreciate the contributions of the open-source community. The related projects are as follows: Video-R1, DeepSeek-R1, EasyR1, verl, LLaMA-Factory, sam2, VLMEvalKit
If you find our work helpful for your research, please consider citing our work.
@article{feng2025onethinker,
title={OneThinker: All-in-one Reasoning Model for Image and Video},
author={Feng, Kaituo and Zhang, Manyuan and Li, Hongyu and Fan, Kaixuan and Chen, Shuang and Jiang, Yilei and Zheng, Dian and Sun, Peiwen and Zhang, Yiyuan and Sun, Haoze and others},
journal={arXiv preprint arXiv:2512.03043},
year={2025}
}
8 commits
Python
99.3%