新闻:我们发布了新的VLM-RL环境、训练代码库和研究论文 G1:通过强化学习引导视觉语言模型的感知与推理能力,欢迎查看!
R1-V 路线图
我们正在为VLM中的RLVR构建一个通用框架。我们相信 深耕 与 长期主义 的力量。
我们的兴趣:通用视觉语言智能 & 视觉/GUI智能体
我们的目标:🔄 算法增强 ⚡ 效率优化 🎯 任务多样性 🌲 有影响力的开源研究。
欢迎提出想法与贡献。敬请关注!
博客文章:
资源:
🤗 R1V 训练数据集:CLEVR-70k-Counting
R1-V 团队:
Liang Chen · Lei Li · Haozhe Zhao · Yifan Song · Vinci · Zihao Yue
贡献者:
./src/scripts/run_grpo_vllm_qwen25vl.sh 获取脚本和环境更新。pip install vllm==0.7.2)和SFT。R1-V/src/distill_r1/)。当前的训练代码不依赖于此,欢迎探索。help wanted 标签的问题,欢迎社区提供想法/PR来帮助解决它们。
注:在我们后续的实验中,我们发现让2B基础模型直接输出结果,而不是遵循 <think></think><answer></answer> 格式,会在SuperClevr上获得更高的分数(86%)。这表明强制进行思维链推理可能不仅不必要,甚至可能损害2B模型的性能。
conda create -n r1-v python=3.11
conda activate r1-v
bash setup.sh
[!NOTE]
如果运行脚本时遇到错误,请首先尝试使用./src/requirements.txt对齐您的环境。
🤗 R1V 训练数据集:GEOQA-8k:几何推理
cd src/r1-v
export DEBUG_MODE="true" # 如果想在RL过程中查看模型的rollout,请启用Debug模式
export LOG_PATH="./debug_log_2b.txt"
torchrun --nproc_per_node="8" \
--nnodes="1" \
--node_rank="0" \
--master_addr="127.0.0.1" \
--master_port="12345" \
src/open_r1/grpo.py \
--output_dir <OUTPUT_DIR> \
--model_name_or_path <PATH-TO-Qwen2-VL-2B-Instruct> \
--dataset_name leonardPKU/clevr_cogen_a_train \
--deepspeed local_scripts/zero3.json \
--max_prompt_length 512 \
--max_completion_length 512 \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 2 \
--logging_steps 1 \
--bf16 \
--report_to wandb \
--gradient_checkpointing false \
--attn_implementation flash_attention_2 \
--max_pixels 401408 \
--num_train_epochs 2 \
--run_name Qwen2-VL-2B-GRPO-CLEVR-70k \
--save_steps 100 \
--save_only_model true \
--num_generations 8 # GRPO中的输出数量G,减少它会加快训练速度并降低内存消耗,但会增加方差
[!NOTE]
1. 要复现结果,请暂时将per_device_train_batch_size保持为1,因为目前存在一个关于批处理训练的已知bug。请查看此处的复现报告。我们意识到这对效率很重要,并正在与社区合作解决它。
2. 如果遇到 OOM 错误,可以尝试减少--num_generations。
3. 要使用vLLM加速,请参考此脚本。
我们也提供了SFT代码,请按照脚本操作并编辑配置以自定义SFT任务。
accelerate launch --config_file src/r1-v/configs/zero2.yaml src/r1-v/src/open_r1/sft.py --config src/r1-v/configs/qwen2vl_sft_config.yaml
我们提供了示例脚本,可在1分钟内评估模型在SuperCLEVR子集上的OOD计数性能。您也可以修改脚本和数据集,在您自己的数据集上进行测试。
cd ./src/eval
wget https://www.cs.jhu.edu/~zhuowan/zhuowan/SuperCLEVR/to_be_released/images.zip
unzip images.zip
# 在脚本中更改模型路径
python test_qwen2vl_counting_superclevr.py
# 测试得分:
# Qwen2VL-2B-Instruct: 48.0%
# Qwen2VL-2B-Instruct-GRPO-100step: 82.5%
我们提供了示例脚本,用于在GEOQA测试集(直接答案形式)上进行评估。
# 准备测试图像
cd ./src/eval
git lfs install
git clone https://huggingface.co/datasets/Luckyjhg/Geo170K
cd Geo170K
unzip images.zip
# 评估脚本
python test_qwen2vl_geoqa.py
# 测试得分:
# Qwen2VL-7B-Instruct: 30.63%
# Qwen2VL-7B-Instruct-GRPO-2epochs: 38.72%
# Qwen2.5VL-3B-Instruct: 35.41%
# Qwen2.5VL-3B-Instruct-GRPO-1epochs: 47.48%
要使用多个GPU实现更快的推理,您也可以使用 R1-V/src/scripts/test_grpo_geoqa_multigpu.sh 中的脚本。
bash src/scripts/test_grpo_geoqa_multigpu.sh
我们衷心感谢 DeepSeek、Open-R1、QwenVL、Open-R1-Multimodal(我们的初始代码库)、CLEVR、SuperCLEVR、G-LLAVA 提供开源资源并构建本项目。特别感谢 Kimi、bAInance Labs 提供计算资源支持,以及 Yuxin Wu、Xinyu Zhou、Baobao Chang 提供的宝贵建议。
@misc{chen2025r1v,
author = {Chen, Liang and Li, Lei and Zhao, Haozhe and Song, Yifan and Vinci},
title = {R1-V: Reinforcing Super Generalization Ability in Vision-Language Models with Less Than \$3},
howpublished = {\url{https://github.com/Deep-Agent/R1-V}},
note = {Accessed: 2025-02-02},
year = {2025}
}