This repository provides the dataset, model, and evaluation code accompanying our paper:
"[ReMoT: Reinforcement Learning with Motion Contrast Triplets]" Accepted as a Highlight Paper at CVPR 2026
- π Paper: arXiv:2603.00461
- π€ Model: ReMoT_model on ModelScope
- π Dataset: ReMoT_data on ModelScope
All datasets use JSONL format, with each data entry containing the following fields:
| Field | Type | Description |
|---|---|---|
id |
string | Unique data identifier |
images |
list | List of image paths (supports multi-image input) |
messages |
list | List of conversation messages |
solution |
string | Ground truth answer in format <answer>ABC</answer> |
{
"images": [
"/data/guozeyu/DATA/agibot/resize_images_4/anchor/a_grab_release_656686_000150_35883.png",
"/data/guozeyu/DATA/agibot/resize_images_4/positive/p_grab_release_656686_000508_35883.png",
"/data/guozeyu/DATA/agibot/resize_images_4/negative/n_grab_release_656686_000039_35883.png"
],
"messages": [{
"role": "user",
"content": "The image showed to you is what the robot seen by its eyes.\nIn the image, the robotic arm on the left is the robot's left arm, and the robotic arm on the right is the robot's right arm.\nFocus only on robot arm/gripper motion across the three images.\nPlease select from the following options whether the left gripper is opened or closed from Image 1 to Image 2? A: Opened, B: No movement, C: Closed.\nPlease select from the following options whether the left gripper is opened or closed from Image 1 to Image 3? A: Opened, B: No movement, C: Closed.\nPlease select from the following options whether the left gripper is opened or closed from Image 2 to Image 3? A: Closed, B: No movement, C: Opened.\nAnswer all three questions above in order. Only return the correct option A, B,or C for each of the three questions in order inside <answer></answer>, e.g., <answer>CAB</answer>"
}],
"solution": "<answer>CAC</answer>",
"id": "idx_resize_4_test_0"
}| Dataset | Task Type | Description |
|---|---|---|
| agibot | Robot gripper and arm state recognition | Determine gripper and arm state changes between different frames |
| scannet | Camera viewpoint change recognition | Determine camera viewpoint changes between different frames |
| generaldata | General visual reasoning | Includes relative position (mm), object detection (om), counting (vl), and other tasks |
Since only JSONL files are open-sourced without direct image files, original images can be traced based on filename conventions. Below are the image path naming conventions for each dataset.
- Example filename:
agibot/resize_images_4/anchor/a_grab_release_656686_000150_35883.png - Filename structure:
a_move_complex: Task type (e.g.,grab_release,move_complex, etc.)652288: Scene or task number in the Agibot dataset000450: Video frame number
Through these fields, the image can be traced back to a specific scene and frame sequence in the Agibot dataset.
- Example filename:
scannet/crops3/scene0086_02_000300_A.png - Filename structure:
scene0086_02: Scene numberscene0086_02from the ScanNet datasetcrops3: Indicates the 3rd crop version000300: Frame numberA: Original frame imageB: Cropped image simulating camera movement in the opposite direction
With these identifiers, corresponding images can be located in the original ScanNet dataset using path mapping.
Use index_eval.py for multi-GPU parallel evaluation of a single dataset:
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python eval_codes/index_eval.py \
--model /path/to/your/model \
--input /data1/guozeyu/DATA/CVPR2026/data_upload/agibot/test.jsonl \
--output /path/to/output/result.jsonl \
--check /path/to/checkpoint.jsonl \
--max-new-tokens 10000 \
--num-gpus 8Use infer_remot_bench.py to evaluate all datasets at once:
# First modify configuration parameters in the script (MODEL_PATH, CKPT_TAG, CHECK_FILE, etc.)
python eval_codes/infer_remot_bench.pyUse summary.py to generate evaluation reports:
# Modify configuration parameters in the script (BASE_FOLDER, MODEL_NAME, etc.) before running
python eval_codes/summary.py| Parameter | Type | Required | Description |
|---|---|---|---|
--model |
string | β | HuggingFace model path or name |
--input |
string | β | Input test set JSONL file path |
--output |
string | β | Output result file path |
--check |
string | β | Checkpoint file path (for resuming from breakpoint; can use any placeholder path for first run) |
--max-new-tokens |
int | β | Maximum number of generated tokens, default 128 |
--num-gpus |
int | β | Number of GPUs, default 8 |
Modify the following configurations at the beginning of the script:
| Configuration | Description |
|---|---|
MODEL_PATH |
Model path |
CKPT_TAG |
Output filename tag |
CHECK_FILE |
Checkpoint file path |
BASE_OUTPUT_DIR |
Output directory |
GPUS |
GPU list, e.g., "0,1,2,3" |
MAX_NEW_TOKENS |
Maximum number of generated tokens |
NUM_GPUS |
Number of GPUs |
| Configuration | Description |
|---|---|
AGIBOT_INDEX_PATH |
AGIBOT dataset index path |
GENERALDATA_INDEX_PATH |
GeneralData dataset index path |
BASE_FOLDER |
Evaluation results directory |
MODEL_NAME |
Model name (for matching result files) |
TASK_NAMES |
Task list ["agibot", "generaldata", "scannet"] |
| Metric | Description |
|---|---|
| Exact Match (Ov) | Exact match accuracy, prediction completely matches ground truth |
| Per-Char Match (Par) | Character-level match accuracy, calculates correct ratio at each position |
| Avg Response Words | Average number of response words |
- Gripper-Move: Gripper movement tasks (move_lr + lift_lower)
- Gripper-State: Gripper state tasks (grab_release)
- Composite: Composite tasks (move_complex)
- Camera Ov: Camera viewpoint exact match (average of partial matches across viewpoints)
- Camera Par: Camera viewpoint character-level match
- Rel-Pos: Relative position tasks (mm class)
- Grounding: Object detection tasks (om class)
- Counting: Counting tasks (vl class)
The evaluation script supports resuming from checkpoint:
- When evaluation is interrupted, completed results are saved in temporary files (
{output}_gpu{id}.jsonl) - When rerunning, specify the previous output file using the
--checkparameter - The script automatically skips processed data and continues from the checkpoint
{
"id": "idx_resize_4_test_0",
"gpu_id": 0,
"response_word_count": 45,
"model_response": "Based on image analysis...<answer>CAC</answer>",
"pred_answer": "CAC",
"solution": "<answer>CAC</answer>",
"gt_answer": "CAC",
"correct_count": 3
}The generated Excel file contains two worksheets:
| Worksheet | Content |
|---|---|
Summary_Indicators |
Core metric summary for each task (Sheet1) |
Detailed_Metrics |
Detailed classification accuracy |
- Prepare model β Download or train a vision-language model
- Run batch evaluation β python infer_remot_bench.py
- Generate summary report β python summary.py
- View results β Open the generated Excel file



