初始化项目,由ModelHub XC社区提供模型
Model: tanhuajie2001/Robo-Dopamine-GRM-2.0-4B-Preview Source: Original Platform
This commit is contained in:
35
.gitattributes
vendored
Normal file
35
.gitattributes
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||
*.arrow filter=lfs diff=lfs merge=lfs -text
|
||||
*.bin filter=lfs diff=lfs merge=lfs -text
|
||||
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
||||
*.ftz filter=lfs diff=lfs merge=lfs -text
|
||||
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||
*.h5 filter=lfs diff=lfs merge=lfs -text
|
||||
*.joblib filter=lfs diff=lfs merge=lfs -text
|
||||
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
||||
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
||||
*.model filter=lfs diff=lfs merge=lfs -text
|
||||
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
||||
*.npy filter=lfs diff=lfs merge=lfs -text
|
||||
*.npz filter=lfs diff=lfs merge=lfs -text
|
||||
*.onnx filter=lfs diff=lfs merge=lfs -text
|
||||
*.ot filter=lfs diff=lfs merge=lfs -text
|
||||
*.parquet filter=lfs diff=lfs merge=lfs -text
|
||||
*.pb filter=lfs diff=lfs merge=lfs -text
|
||||
*.pickle filter=lfs diff=lfs merge=lfs -text
|
||||
*.pkl filter=lfs diff=lfs merge=lfs -text
|
||||
*.pt filter=lfs diff=lfs merge=lfs -text
|
||||
*.pth filter=lfs diff=lfs merge=lfs -text
|
||||
*.rar filter=lfs diff=lfs merge=lfs -text
|
||||
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
||||
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
||||
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
||||
*.tar filter=lfs diff=lfs merge=lfs -text
|
||||
*.tflite filter=lfs diff=lfs merge=lfs -text
|
||||
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||
*.wasm filter=lfs diff=lfs merge=lfs -text
|
||||
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
*.zst filter=lfs diff=lfs merge=lfs -text
|
||||
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
||||
126
README.md
Normal file
126
README.md
Normal file
@@ -0,0 +1,126 @@
|
||||
---
|
||||
license: apache-2.0
|
||||
base_model:
|
||||
- Qwen/Qwen3-VL-4B-Instruct
|
||||
pipeline_tag: image-text-to-text
|
||||
---
|
||||
<h1 align="center">Robo-Dopamine: General Process Reward Modeling for High-Precision Robotic Manipulation</h1>
|
||||
|
||||
<h3 align="center">Joy is dopamine’s handiwork—whether in humans or in robotics.</h3>
|
||||
|
||||
|
||||
<p align="center">
|
||||
<a href="https://arxiv.org/abs/2512.23703"><img src="https://img.shields.io/badge/arXiv-2512.23703-b31b1b.svg" alt="arXiv"></a>
|
||||
|
||||
<a href="https://robo-dopamine.github.io/"><img src="https://img.shields.io/badge/%F0%9F%8F%A0%20Project-Homepage-blue" alt="Project Homepage"></a>
|
||||
|
||||
<a href="https://github.com/FlagOpen/Robo-Dopamine"><img src="https://img.shields.io/badge/🔍%20Code-Github-orange" alt="Github"></a>
|
||||
|
||||
<a href="https://huggingface.co/collections/tanhuajie2001/robo-dopamine"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Weights-Huggingface-yellow" alt="Weights"></a>
|
||||
|
||||
<a href="#"><img src="https://img.shields.io/badge/🤗%20Dataset-Stay%20tuned-green.svg" alt="Dataset"></a>
|
||||
|
||||
</p>
|
||||
|
||||
|
||||
<div style="text-align: center; background-color: white;">
|
||||
<img src="https://github.com/FlagOpen/Robo-Dopamine/raw/main/assets/teasor.png" width=100% >
|
||||
</div>
|
||||
|
||||
|
||||
## 🗞️ News
|
||||
- **`2026-04-05`**: 🤗 We released [Robo-Dopamine-GRM-2.0-4B-Preview](https://huggingface.co/tanhuajie2001/Robo-Dopamine-GRM-2.0-4B-Preview) model.
|
||||
- **`2026-03-05`**: 🤗 We released [Robo-Dopamine-GRM-2.0-8B-Preview](https://huggingface.co/tanhuajie2001/Robo-Dopamine-GRM-2.0-8B-Preview) model. More General, More Powerful!!!
|
||||
- **`2026-03-02`**: 🤗 We released [Robo-Dopamine-GRM-8B](https://huggingface.co/tanhuajie2001/Robo-Dopamine-GRM-8B) model
|
||||
- **`2026-02-22`**: 🔥🔥🔥 **Robo-Dopamine** gets accepted to CVPR 2026! See you in Denver, Colorado, USA!
|
||||
- **`2026-02-10`**: ⚡ We released data generation pipeline and finetune codes. ***Try to finetune with your own data***.
|
||||
- **`2026-01-26`**: 🔍 We released [Robo-Dopamine-Bench](https://huggingface.co/datasets/tanhuajie2001/Robo-Dopamine-Bench) benchmark and evaluation codes.
|
||||
- **`2026-01-08`**: 🤗 We released [Robo-Dopamine-GRM-3B](https://huggingface.co/tanhuajie2001/Robo-Dopamine-GRM-3B) model and inference codes.
|
||||
- **`2025-12-30`**: ✨ ***Codes, Dataset and Weights are coming soon! Stay tuned for updates***.
|
||||
- **`2025-12-30`**: 🔥 We released our [Project Page](https://robo-dopamine.github.io/) of **Robo-Dopamine**.
|
||||
|
||||
|
||||
## 🤖 Overview
|
||||
|
||||
**Robo-Dopamine** is composed of two core components: ***(a) Dopamine-Reward Modeling Method --*** At the heart of our reward modeling is to build the General Reward Model (GRM), a vision-language model that is prompted with a task description and conditioned on multi-view images of initial, goal, "BEFORE," and "AFTER" states to predict a relative progress or regress hop. To ensure a stable and accurate signal, we employ *Multi-Perspective Progress Fusion*, which combines incremental, forward-anchored, and backward-anchored predictions into a final fused reward. And ***(b) Dopamine-RL Training Framework --*** The Dopamine-RL framework first adapts the pre-trained GRM to a novel task using a single demonstration, i.e., *One-Shot GRM Adaptation*. Subsequently, it uses a theoretically-sound *Policy-Invariant Reward Shaping* method to convert the GRM's dense output into a reward signal that accelerates learning without altering the optimal policy.
|
||||
This approach is universally compatible with a wide range of RL algorithms.
|
||||
|
||||
<div align="center">
|
||||
<img src="https://github.com/FlagOpen/Robo-Dopamine/raw/main/assets/method.png" alt="Logo" style="width=100%;vertical-align:middle">
|
||||
</div>
|
||||
|
||||
## 🛠️ Setup
|
||||
|
||||
```bash
|
||||
# clone repo.
|
||||
git clone https://github.com/FlagOpen/Robo-Dopamine.git
|
||||
cd Robo-Dopamine
|
||||
|
||||
# build conda env.
|
||||
conda create -n robo-dopamine python=3.10
|
||||
conda activate robo-dopamine
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## 💡 Simple Inference
|
||||
|
||||
```python
|
||||
import os
|
||||
from examples.inference import GRMInference
|
||||
|
||||
model = GRMInference("tanhuajie2001/Robo-Dopamine-GRM-2.0-4B-Preview")
|
||||
|
||||
TASK_INSTRUCTION = "organize the table"
|
||||
BASE_DEMO_PATH = "./examples/demo_table"
|
||||
OUTPUT_ROOT = "./results"
|
||||
|
||||
## Note: If no target/goal image is provided,
|
||||
## please replace `GOAL_IMAGE_PATH` with the blank image "./examples/demo_table/blank_goal.png".
|
||||
GOAL_IMAGE_PATH = "./examples/demo_table/goal_image.png" # "./examples/demo_table/blank_goal.png"
|
||||
|
||||
# select prediction model: Forward-Mode, Incremental-Mode or Backward-Mode
|
||||
PREDICTION_MODE = "forward" # "incremental" or "backward"
|
||||
|
||||
# multi-view usage:
|
||||
output_dir = model.run_pipeline(
|
||||
cam_high_path = os.path.join(BASE_DEMO_PATH, "cam_high.mp4"),
|
||||
cam_left_path = os.path.join(BASE_DEMO_PATH, "cam_left_wrist.mp4"),
|
||||
cam_right_path = os.path.join(BASE_DEMO_PATH, "cam_right_wrist.mp4"),
|
||||
out_root = OUTPUT_ROOT,
|
||||
task = TASK_INSTRUCTION,
|
||||
frame_interval = 10, # modify frame_interval as desired, but it shouldn't be set too small if using 'incremental'.
|
||||
batch_size = 1, # please increase batch_size > 1, if you have enough GPU memory.
|
||||
goal_image = GOAL_IMAGE_PATH,
|
||||
eval_mode = PREDICTION_MODE,
|
||||
visualize = True
|
||||
)
|
||||
print(f"Episode ({BASE_DEMO_PATH}) processed with multi-view {PREDICTION_MODE}-mode. Output at: {output_dir}")
|
||||
|
||||
# single-view usage:
|
||||
output_dir = model.run_pipeline(
|
||||
cam_high_path = os.path.join(BASE_DEMO_PATH, "cam_high.mp4"),
|
||||
cam_left_path = os.path.join(BASE_DEMO_PATH, "cam_high.mp4"), # repeat cam_high
|
||||
cam_right_path = os.path.join(BASE_DEMO_PATH, "cam_high.mp4"), # repeat cam_high
|
||||
out_root = OUTPUT_ROOT,
|
||||
task = TASK_INSTRUCTION,
|
||||
frame_interval = 10, # modify frame_interval as desired, but it shouldn't be set too small if using 'incremental'.
|
||||
batch_size = 1, # please increase batch_size > 1, if you have enough GPU memory.
|
||||
goal_image = GOAL_IMAGE_PATH,
|
||||
eval_mode = PREDICTION_MODE,
|
||||
visualize = True
|
||||
)
|
||||
print(f"Episode ({BASE_DEMO_PATH}) processed with single-view {PREDICTION_MODE}-mode. Output at: {output_dir}")
|
||||
|
||||
```
|
||||
|
||||
## 📑 Citation
|
||||
|
||||
If you find our work helpful, feel free to cite it:
|
||||
```
|
||||
@article{tan2025robo,
|
||||
title={Robo-Dopamine: General Process Reward Modeling for High-Precision Robotic Manipulation},
|
||||
author={Tan, Huajie and Chen, Sixiang and Xu, Yijie and Wang, Zixiao and Ji, Yuheng and Chi, Cheng and Lyu, Yaoxu and Zhao, Zhongxia and Chen, Xiansheng and Co, Peterson and others},
|
||||
journal={arXiv preprint arXiv:2512.23703},
|
||||
year={2025}
|
||||
}
|
||||
```
|
||||
4
chat_template.json
Normal file
4
chat_template.json
Normal file
File diff suppressed because one or more lines are too long
63
config.json
Normal file
63
config.json
Normal file
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"architectures": [
|
||||
"Qwen3VLForConditionalGeneration"
|
||||
],
|
||||
"image_token_id": 151655,
|
||||
"model_type": "qwen3_vl",
|
||||
"text_config": {
|
||||
"attention_bias": false,
|
||||
"attention_dropout": 0.0,
|
||||
"bos_token_id": 151643,
|
||||
"dtype": "bfloat16",
|
||||
"eos_token_id": 151645,
|
||||
"head_dim": 128,
|
||||
"hidden_act": "silu",
|
||||
"hidden_size": 2560,
|
||||
"initializer_range": 0.02,
|
||||
"intermediate_size": 9728,
|
||||
"max_position_embeddings": 262144,
|
||||
"model_type": "qwen3_vl_text",
|
||||
"num_attention_heads": 32,
|
||||
"num_hidden_layers": 36,
|
||||
"num_key_value_heads": 8,
|
||||
"rms_norm_eps": 1e-06,
|
||||
"rope_scaling": {
|
||||
"mrope_interleaved": true,
|
||||
"mrope_section": [
|
||||
24,
|
||||
20,
|
||||
20
|
||||
],
|
||||
"rope_type": "default"
|
||||
},
|
||||
"rope_theta": 5000000,
|
||||
"tie_word_embeddings": true,
|
||||
"use_cache": true,
|
||||
"vocab_size": 151936
|
||||
},
|
||||
"tie_word_embeddings": true,
|
||||
"transformers_version": "4.57.0.dev0",
|
||||
"video_token_id": 151656,
|
||||
"vision_config": {
|
||||
"deepstack_visual_indexes": [
|
||||
5,
|
||||
11,
|
||||
17
|
||||
],
|
||||
"depth": 24,
|
||||
"hidden_act": "gelu_pytorch_tanh",
|
||||
"hidden_size": 1024,
|
||||
"in_channels": 3,
|
||||
"initializer_range": 0.02,
|
||||
"intermediate_size": 4096,
|
||||
"model_type": "qwen3_vl",
|
||||
"num_heads": 16,
|
||||
"num_position_embeddings": 2304,
|
||||
"out_hidden_size": 2560,
|
||||
"patch_size": 16,
|
||||
"spatial_merge_size": 2,
|
||||
"temporal_patch_size": 2
|
||||
},
|
||||
"vision_end_token_id": 151653,
|
||||
"vision_start_token_id": 151652
|
||||
}
|
||||
14
generation_config.json
Normal file
14
generation_config.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"bos_token_id": 151643,
|
||||
"pad_token_id": 151643,
|
||||
"do_sample": true,
|
||||
"eos_token_id": [
|
||||
151645,
|
||||
151643
|
||||
],
|
||||
"top_k": 20,
|
||||
"top_p": 0.8,
|
||||
"repetition_penalty": 1.0,
|
||||
"temperature": 0.7,
|
||||
"transformers_version": "4.56.0"
|
||||
}
|
||||
151387
merges.txt
Normal file
151387
merges.txt
Normal file
File diff suppressed because it is too large
Load Diff
3
model.safetensors
Normal file
3
model.safetensors
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e2f6e3c372f4ef76afb5e9e28ec56679944fcc3b4f2ce2ebda8b21264e96eb2f
|
||||
size 9653631848
|
||||
21
preprocessor_config.json
Normal file
21
preprocessor_config.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"size": {
|
||||
"longest_edge": 16777216,
|
||||
"shortest_edge": 65536
|
||||
},
|
||||
"patch_size": 16,
|
||||
"temporal_patch_size": 2,
|
||||
"merge_size": 2,
|
||||
"image_mean": [
|
||||
0.5,
|
||||
0.5,
|
||||
0.5
|
||||
],
|
||||
"image_std": [
|
||||
0.5,
|
||||
0.5,
|
||||
0.5
|
||||
],
|
||||
"processor_class": "Qwen3VLProcessor",
|
||||
"image_processor_type": "Qwen2VLImageProcessorFast"
|
||||
}
|
||||
303318
tokenizer.json
Normal file
303318
tokenizer.json
Normal file
File diff suppressed because it is too large
Load Diff
239
tokenizer_config.json
Normal file
239
tokenizer_config.json
Normal file
File diff suppressed because one or more lines are too long
21
video_preprocessor_config.json
Normal file
21
video_preprocessor_config.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"size": {
|
||||
"longest_edge": 25165824,
|
||||
"shortest_edge": 4096
|
||||
},
|
||||
"patch_size": 16,
|
||||
"temporal_patch_size": 2,
|
||||
"merge_size": 2,
|
||||
"image_mean": [
|
||||
0.5,
|
||||
0.5,
|
||||
0.5
|
||||
],
|
||||
"image_std": [
|
||||
0.5,
|
||||
0.5,
|
||||
0.5
|
||||
],
|
||||
"processor_class": "Qwen3VLProcessor",
|
||||
"video_processor_type": "Qwen3VLVideoProcessor"
|
||||
}
|
||||
1
vocab.json
Normal file
1
vocab.json
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user