YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

czw2026_Track1_FinalPhase_Submission 说明

以下路径均以当前目录 ./czw2026_Track1_FinalPhase_Submission 为基准。先进入 czw2026_Track1_FinalPhase_Submission 再执行命令:

cd ./czw2026_Track1_FinalPhase_Submission

1. 快速复现

1.1 配环境

conda create -n IQA python=3.10.19 -y
conda activate IQA
cd ms-swift

chmod u+x ./requirements/install_all.sh
./requirements/install_all.sh
pip install -e .

cd ..

1.2 推理

# Phase2
bash ./scripts/infer_phase_2.sh

# Phase3
bash ./scripts/infer_phase_3.sh

脚本会进行:

  • 读取三个专家模型目录:./Checkpoints/MOE_1./Checkpoints/MOE_2./Checkpoints/MOE_3,通过一个投票系统,将这三个专家模型的预测结果进行集成,以达到更好、更鲁棒的结果
  • 使用phase2和phase3的数据集:./Datas/val_infer_1536_split_zoom_images.jsonl./Datas/final_infer_1536_split_zoom_images.jsonl
  • 将单专家模型原始输出保存到 ./Output/Phase_2/raw./Output/Phase_3/raw
  • 将单专家模型规范结果保存到 ./Output/Phase_2/predictions_MOE_*.jsonl./Output/Phase_3/predictions_MOE_*.jsonl
  • 将这三个专家模型结果集成,投票融合为 ./Output/Phase_2/predictions.jsonl./Output/Phase_3/predictions.jsonl

在系统上提交,结果大致为:

Phase Final Score Accuracy
Phase2 0.649 0.8627
Phase3 0.5311 0.703

1.3 训练

  1. 模型介绍
  • 模型以Qwen3-VL-8B为基础模型,进行四阶段的层级训练
  • 最终将三个较优的专家模型的预测结果进行集成,得到最终的预测结果
  1. 实验细节
  • 算力设备:8卡 NVIDIA A800-SXM4-40GB

  • 训练数据集处理

    1. 我们对官方的提供的原始图片格式进行切割。将merged大图切割为两张单独的小图。同时,我们通过实验发现,对detailed图进行训练,会让训练结果更好且更稳定。因此,本模型所有的训练数据都是基于切割后的detailed图进行的。示例如下:
    原始detailed图 切割后image A 切割后image B
    切割原始detailed图 切割原始detailed图 切割原始detailed图
    1. 基于官方提供的训练集的标注数据,我们将图片路径替换成上述切割后的图片路径,得到基础训练数据集(./Datas/train_sft_abs_split_zoom_images.jsonl

    2. 基于GT,对训练的Instruction-Response进行扩充

      • More Questions:设计更多prompt提问形式,如:
        • 直接回答,不要有<think>...<\think>
        • 疑问句,询问图A或者图B是否更好,让模型直接回答<answer>yes/no<\answer>
      • Swaping:交换输入图的顺序,如:
        • 输入图顺序:[p_000_merged_c0.png, p_000_merged_c1.png] -> [p_000_merged_c1.png, p_000_merged_c0.png]
        • GT切换:<think>Image A shows xxx. Image B shows ppp.<\think><answer>Image A<\answer> -> <think>Image A shows ppp. Image A shows xxx<\think><answer>Image B<\answer>
    • 共得到四组训练数据,两组用在SFT,两组用来GRPO Post Training
      • 原始SFT数据集:./Datas/train_sft_abs_split_zoom_images.jsonl
      • 进行Instruction-Response扩充的SFT数据集(More Question)./Datas/train_sft_abs_split_aug_more_ques_zoom_images.jsonl
      • 原始GRPO数据集:./Datas/train_grpo_1536_split_zoom_images.jsonl
      • 进行Instruction-Response扩充的GRPO数据集(Swaping)./Datas/train_grpo_1536_split_zoom_images_aug_swap.jsonl
  • 采用五阶段训练:SFT->GRPO->GRPO->SFT->GRPO

  • 训练前权重下载: Qwen3-VL-8B,保存路径为:./Qwen3-VL-8B-Instruct

pip install modelscope
modelscope Qwen/Qwen3-VL-8B-Instruct --local-dir ./Qwen3-VL-8B-Instruct

或者

pip install huggingface_hub
HF_ENDPOINT=https://hf-mirror.com hf download Qwen/Qwen3-VL-8B-Instruct --local-dir ./Qwen3-VL-8B-Instruct
  1. 模型训练
  • STAGE1: SFT

    • 基于ms-swift框架,进行训练
    • 我们通过超参数搜索算法,得到如下较优参数:
    lora_rank = 128
    lora_alpha = 256 
    num_train_epochs = 30 
    per_device_train_batch_size = 4 
    gradient_accumulation_steps = 8
    learning_rate = 1e-4 
    
    • 采用Instruction-Response增强后的数据进行训练:./Datas/train_sft_abs_split_aug_more_ques_zoom_images.jsonl
    • 训练脚本:bash ./scripts/train/STAGE1.sh
    • 我们选取第70个step的训练权作为一个专家模型(MOE3),Phase2 ACC为:0.74 (75/102)
    • 训练完成后,运行bash ./scripts/merge/MERGE_STAGE1.sh进行权重merge,该阶段模型权重保存在:./EXP/STAGE1_FULL
  • STAGE2: GRPO

    • 基于STAGE1的模型(./EXP/STAGE1_FULL),进行GRPO的Post Training,以提升模型对该任务的探索和理解能力
    • 我们通过超参数搜索算法,得到如下较优参数:
    num_train_epochs = 10 
    per_device_train_batch_size = 2
    gradient_accumulation_steps = 2
    learning_rate = 1e-6
    temperature = 0.9
    
    • 训练数据:./Datas/train_grpo_1536_split_zoom_images.jsonl
    • 训练脚本:bash ./scripts/train/STAGE2.sh
    • 我们选取第10个step的训练权重,一个专家模型(MOE1),Phase2 ACC为:0.77 (79/102)
    • 由于该阶段是全参数微调,因此结果直接保存在:./EXP/STAGE2_FULL/v*-xxxxxxxx-xxxxxx/checkpoint-20
  • STAGE3: GRPO AGAIN

    • 基于STAGE2的模型(./EXP/STAGE2_FULL/v*-xxxxxxxx-xxxxxx/checkpoint-20),进行GRPO的Post Training
    • 这次我们采用增强的数据集./Datas/train_grpo_1536_split_zoom_images_aug_swap.jsonl,以及更小的学习率,尝试让模型在保留当前能力的同时,获得探索其他边界的能力
    • 我们通过超参数搜索算法,得到如下较优参数:
    num_train_epochs = 10 
    per_device_train_batch_size = 2
    gradient_accumulation_steps = 2
    learning_rate = 0.5e-6
    temperature = 0.9
    
    • 训练数据:./Datas/train_grpo_1536_split_zoom_images_aug_swap.jsonl
    • 训练脚本:bash ./scripts/train/STAGE3.sh
    • 我们选取第30个step的训练权重,Phase2 ACC为:0.79 (81/102)
    • 由于该阶段是全参数微调,因此结果直接保存在:./EXP/STAGE3_FULL/v*-xxxxxxxx-xxxxxx/checkpoint-30
  • STAGE4: FINAL SFT

    • 但后续不管我们如何再进行GRPO Post Training,由于GRPO中KL约束的存在,模型始终无法再跳出那个局部最优解,因此,我们再次尝试使用SFT训练,以增大模型的熵,尝试拉出当前模型陷入的局部最优解
    • 基于STAGE3的模型(./EXP/STAGE3_FULL/v*-xxxxxxxx-xxxxxx/checkpoint-30),再次进行SFT
    • 通过更长的训练时间以及稍小的学习率,希望模型能够跳出局部最优解,达到一个新的局部最优解
    • 我们通过超参数搜索算法,得到如下较优参数:
    lora_rank = 128
    lora_alpha = 256 
    num_train_epochs = 50 
    per_device_train_batch_size = 4 
    gradient_accumulation_steps = 8
    learning_rate = 1e-5 
    
    • 训练数据:./Datas/train_sft_abs_split_aug_more_ques_zoom_images.jsonl
    • 训练脚本:bash ./scripts/train/STAGE4.sh
    • 我们选取第50个step的训练权重,Phase2 ACC为:0.81 (83/102)
    • 训练完成后,运行bash ./scripts/merge/MERGE_STAGE4.sh进行权重merge,该阶段模型权重保存在:./EXP/STAGE4_FULL
  • STAGE5: FINAL GRPO

    • 基于STAGE4的模型(./EXP/STAGE4_FULL),再次进行SFT
    • 通过更长的训练时间以及稍小的学习率,我们希望模型能够跳出局部最优,达到一个 ,以提升模型对该任务的探索能力
    • 我们通过超参数搜索算法,得到如下较优参数:
    num_train_epochs = 10 
    num_generations = 8
    reward_weights = 1.5 0.5
    per_device_train_batch_size = 2
    gradient_accumulation_steps = 2
    learning_rate = 0.5e-6
    temperature = 1.0
    
    • 训练数据:./Datas/train_grpo_1536_split_zoom_images_aug_swap.jsonl
    • 训练脚本:bash ./scripts/train/STAGE5.sh
    • 我们选取第10个step的训练权重,一个专家模型(MOE2),Phase2 ACC为:0.84 (86/102)
    • 由于该阶段是全参数微调,因此结果直接保存在:./EXP/STAGE5_FULL/v*-xxxxxxxx-xxxxxx/checkpoint-10
  • 我们通过将STAGE1、STAGE2、STAGE3、STAGE4和STAGE5训练得到的专家模型进行排列组合,发现由STAGE1、STAGE2和STAGE5组成的MOE系统,性能最好最鲁棒,Phase 2 ACC为:0.86 (88/102)

  • 各阶段训练结果总结

训练阶段 训练方式 训练数据 较上一阶段变化 Phase2 准确率 是否选为专家模型
STAGE1 SFT ./Datas/train_sft_abs_split_aug_more_ques_zoom_images.jsonl -- 0.74 (75/102) $\checkmark$
STAGE2 GRPO ./Datas/train_grpo_1536_split_zoom_images.jsonl 采用GRPO后训练 0.77 (79/102) $\checkmark$
STAGE3 GRPO ./Datas/train_grpo_1536_split_zoom_images_aug_swap.jsonl 采用数据增强的GRPO数据集训练 0.79 (81/102)
STAGE4 SFT ./Datas/train_sft_abs_split_aug_more_ques_zoom_images.jsonl 重新进行SFT微调 0.81 (83/102)
STAGE5 GRPO ./Datas/train_grpo_1536_split_zoom_images_aug_swap.jsonl 采用数据增强的GRPO数据集训练 0.84 (86/102) $\checkmark$
MOE -- -- 多专家集成 0.86 (88/102)

2. 其他补充说明

2.1 文件夹结构

当前提交目录的主要结构如下:

./czw2026_Track1_FinalPhase_Submission
├── Checkpoints
│   ├── MOE_1
│   ├── MOE_2
│   └── MOE_3
├── Datas
│   ├── Tools
│   │   └── split_tool.py
│   ├── Train
│   │   ├── images
│   │   └── images-split-zoom
│   ├── Validation
│   │   ├── images
│   │   └── images-split-zoom
│   ├── Final
│   │   ├── images
│   │   └── images-split-zoom
│   ├── train_sft_abs_split_zoom_images.jsonl
│   ├── train_sft_abs_split_aug_more_ques.jsonl
│   ├── train_grpo_1536_split_zoom_images.jsonl
│   ├── train_grpo_1536_split_zoom_images_aug_swap.jsonl
│   ├── val_infer_1536_split_zoom_images.jsonl
│   └── final_infer_1536_split_zoom_images.jsonl
├── Output
│   ├── Phase_2
│   └── Phase_3
├── ms-swift
├── plugins
│   └── reward_funcs.py
├── scripts
│   ├── infer_phase_2.sh
│   └── infer_phase_3.sh
└── tools
    ├── make_submission.py
    └── vote_merge.py

各部分作用如下:

  • ./Checkpoints/MOE_1./Checkpoints/MOE_2./Checkpoints/MOE_3:三个用于集成推理的模型权重目录。
  • ./Datas:训练、验证、测试数据,以及对应的 jsonl 描述文件。
  • ./Datas/Tools/split_tool.py:将原始拼接图切分为左右两张图,并输出到 images-split-zoom
  • ./scripts/infer_phase_3.sh:最终推理脚本。
  • ./tools/make_submission.py:将单模型推理结果转换为提交格式。
  • ./tools/vote_merge.py:对多个模型的预测结果做投票融合。
  • ./Output/Phase_2./Output/Phase_3:保存推理和融合后的输出结果。

2.2 数据集处理

2.2.1 数据目录

./Datas 中按数据划分组织如下:

  • ./Datas/Train/images:训练集原始图片。
  • ./Datas/Validation/images:验证集原始图片。
  • ./Datas/Final/images:测试集原始图片。
  • ./Datas/Train/images-split-zoom:训练集切分后的图片。
  • ./Datas/Validation/images-split-zoom:验证集切分后的图片。
  • ./Datas/Final/images-split-zoom:测试集切分后的图片。

对应的 jsonl 文件位于 ./Datas 根目录:

  • ./Datas/train_sft_abs_split_zoom_images.jsonl:SFT 训练数据
  • ./Datas/train_sft_abs_split_aug_more_ques.jsonl:SFT 增强训练数据
  • ./Datas/train_grpo_1536_split_zoom_images.jsonl:GRPO 训练数据
  • ./Datas/train_grpo_1536_split_zoom_images_aug_swap.jsonl:GRPO 增强训练数据
  • ./Datas/val_infer_1536_split_zoom_images.jsonl:验证集推理数据
  • ./Datas/final_infer_1536_split_zoom_images.jsonl:测试集推理数据

2.2.2 生成 images-split-zoom

运行 ./Datas/Tools/split_tool.py,分别处理 TrainValidationFinal 三个目录下的原始图片:

python ./Datas/Tools/split_tool.py ./Datas/Train/images
python ./Datas/Tools/split_tool.py ./Datas/Validation/images
python ./Datas/Tools/split_tool.py ./Datas/Final/images

脚本会在每个 images 目录同级自动生成对应的 images-split-zoom 目录,即:

  • ./Datas/Train/images-split-zoom
  • ./Datas/Validation/images-split-zoom
  • ./Datas/Final/images-split-zoom
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support