PInVerify Qwen3-VL-4B adapters

Every LoRA adapter reported in the FMEA @ CVPR 2026 paper "PInVerify: An Offline Embodied Benchmark for Active Instance Verification", in one repository. All are adapters for Qwen/Qwen3-VL-4B-Instruct.

The task

The agent has already navigated near a candidate object and must decide whether it matches a fine-grained description, choosing viewpoints around it to settle the question. These adapters collapse the modular pipeline (attribute decomposition, per-view verification, tracker, next-best-view) into a single model that navigates and answers end to end.

Which adapter to use

generic-cot/gspo is the paper's headline result. Take that one unless you have a reason not to.

The two families differ only in how the chain-of-thought in the SFT targets was written. Generic-CoT is the paper's main table; Specific-CoT is the appendix variant. Both RL stages train on the same data, so within a family only the SFT starting point differs.

generic-cot/          Table 6, the main trained results
β”œβ”€β”€ sft/              SFT only
β”œβ”€β”€ grpo/             SFT then GRPO
└── gspo/             SFT then GSPO      <- paper best
specific-cot/         Appendix F, Table 23
β”œβ”€β”€ sft/
β”œβ”€β”€ dpo-200/          SFT then DPO, 200 steps
β”œβ”€β”€ dpo-400/          SFT then DPO, 400 steps
β”œβ”€β”€ grpo/
└── gspo/

Results on the PInVerify test split (3,000 episodes)

Overall accuracy, with positive-pair accuracy in parentheses. Grounding DINO is the deployment-realistic setting; GT boxes are the oracle upper bound.

Adapter DINO GT
(base model, no fine-tuning) 0.706 (0.146) 0.710 (0.161)
generic-cot/sft 0.848 (0.759) 0.877 (0.828)
generic-cot/grpo 0.853 (0.736) 0.887 (0.806)
generic-cot/gspo 0.856 (0.745) 0.889 (0.813)
specific-cot/sft 0.858 (0.697) 0.884 (0.761)
specific-cot/dpo-200 0.859 (0.700) 0.881 (0.756)
specific-cot/dpo-400 0.860 (0.665) 0.884 (0.729)
specific-cot/grpo 0.855 (0.793) 0.884 (0.847)
specific-cot/gspo 0.851 (0.796) 0.889 (0.813)

The 95% binomial confidence interval at p=0.85 on n=3,000 is about Β±1.3 pp, so most of the differences between fine-tuned variants sit inside the noise. The gap that matters is against the un-tuned base model, which fails on positives almost entirely (0.146) because of a strong "no match" bias.

Training-free comparison: the best modular agent reaches 0.850 overall with 0.596 on positives. The trained agents trade calibration for confirmation, gaining about 15 pp on positives while giving up ground on same-category rejection, and they are more efficient (1.6 steps to decision versus 2.3, navigation failures 9% versus 28%).

Usage

huggingface-cli download Avalon-S/PInVerify-Qwen3VL-4B \
    --include "generic-cot/gspo/*" --local-dir ./models/pinverify

ADAPTER=./models/pinverify/generic-cot/gspo \
    bash scripts/start_multigpu_servers_lora.sh 4

bash scripts/eval_trained.sh gspo

Evaluation runs through configs/agent/trained_e2e.yaml, which drives the end-to-end agent. scripts/eval_trained.sh covers both detection modes by default.

Training

4Γ— NVIDIA RTX 3090, bf16, ms-swift. LoRA rank 16, alpha 32, applied to all linear layers of the language model; the vision encoder is frozen.

Stage Data Starts from Steps LR
SFT sft_data_v2 (Generic) or sft_data_v3 (Specific), 21,931 samples base model 686 1e-4
DPO dpo_data_v3, 13,273 preference pairs SFT 200 / 400 5e-7
GRPO rl_data_v2 SFT 500 1e-6
GSPO rl_data_v2 SFT 500 1e-6

GSPO differs from GRPO only in using sequence-level importance ratios (Zheng et al., 2025); in ms-swift terms, rlhf_type=grpo with importance_sampling_level=sequence.

The RL reward has four components: output format, final answer, whether the chosen navigation direction lands on a sector the metadata marks visible, and a per-step penalty that pushes the agent to stop. See training/reward.py.

Reproduce with training/run_sft.sh then training/run_gspo.sh for the Generic family, or the *_v3.sh scripts for Specific. Each adapter directory keeps its args.json and trainer_state.json, so the run configuration and the loss curve are both recoverable.

Two edits were made on the way here. Absolute paths from the training machine were rewritten to their repository-relative equivalents, in args.json and in adapter_config.json, where base_model_name_or_path would otherwise point at a directory that exists on no other machine. And training_args.bin, a pickle that duplicates args.json, was dropped along with the README.md that peft generates.

Citation

@misc{jiang2026pinverifyofflineembodiedbenchmark,
      title={PInVerify: An Offline Embodied Benchmark for Active Instance Verification},
      author={Yuhang Jiang},
      year={2026},
      eprint={2605.30639},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2605.30639},
}

License

MIT for the adapters. The base model and the dataset keep their own licenses; the benchmark data inherits PInNED's terms.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for Avalon-S/PInVerify-Qwen3VL-4B

Adapter
(158)
this model

Dataset used to train Avalon-S/PInVerify-Qwen3VL-4B

Papers for Avalon-S/PInVerify-Qwen3VL-4B