Update Stage-2 code, evaluations, handoff, and deployment skill
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- MANIFEST.sha256 +677 -16
- README.md +28 -0
- artifact_sources.yaml +21 -0
- code/umm/runtime/models/blip3o/data/covt_data_van.py +9 -1
- code/umm/runtime/models/blip3o/model/language_model/covt_qwen_stage2_van.py +9 -1
- code/umm/stage2_covt/cvbench_eval.py +366 -0
- code/umm/stage2_covt/eval_cvbench.py +263 -0
- code/umm/stage2_covt/eval_cvbench_base.py +390 -0
- code/umm/stage2_covt/eval_multibench.py +551 -0
- code/umm/stage2_covt/merge.py +23 -4
- code/umm/stage2_covt/run_train.sh +4 -0
- code/umm/stage2_covt/train.py +43 -0
- code/umm/stage2_covt/validate_checkpoint.py +78 -23
- code/umm/stage2_covt/validate_merged.py +118 -0
- configs/stage2_covt.template.yaml +4 -0
- configs/stage2_covt_from3k_bcd_2k.template.yaml +82 -0
- models/ckpts/stage2_covt_from3k_bcd_2k/merged/README.md +20 -0
- reports/PROGRESS_2026-08-11.md +190 -0
- reports/README.md +10 -0
- reports/cvbench_2k_3k_8k/01_experiment_summary.md +79 -0
- reports/cvbench_2k_3k_8k/02_text_output_cases.md +162 -0
- reports/cvbench_2k_3k_8k/03_methodology_and_validation.md +151 -0
- reports/cvbench_2k_3k_8k/04_presentation_talking_points.md +79 -0
- reports/cvbench_2k_3k_8k/05_base_baseline_comparison.md +71 -0
- reports/cvbench_2k_3k_8k/README.md +28 -0
- reports/cvbench_2k_3k_8k/SHA256SUMS +6 -0
- reports/evaluations/checkpoint-7000/REPORT.md +110 -0
- reports/evaluations/checkpoint-7000/audit_summary.json +302 -0
- reports/evaluations/checkpoint-7000/blink_full_val/audit.json +169 -0
- reports/evaluations/checkpoint-7000/blink_full_val/metrics.json +97 -0
- reports/evaluations/checkpoint-7000/blink_full_val/rank_00.jsonl +0 -0
- reports/evaluations/checkpoint-7000/blink_full_val/rank_01.jsonl +0 -0
- reports/evaluations/checkpoint-7000/blink_full_val/rank_02.jsonl +0 -0
- reports/evaluations/checkpoint-7000/blink_full_val/rank_03.jsonl +0 -0
- reports/evaluations/checkpoint-7000/blink_full_val/rank_04.jsonl +0 -0
- reports/evaluations/checkpoint-7000/blink_full_val/rank_05.jsonl +0 -0
- reports/evaluations/checkpoint-7000/blink_full_val/rank_06.jsonl +0 -0
- reports/evaluations/checkpoint-7000/blink_full_val/rank_07.jsonl +0 -0
- reports/evaluations/checkpoint-7000/blink_full_val/results.jsonl +0 -0
- reports/evaluations/checkpoint-7000/blink_full_val/swanlab.json +6 -0
- reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/.gitignore +1 -0
- reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/debug/debug.log +1 -0
- reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/files/config.yaml +89 -0
- reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/files/requirements.txt +305 -0
- reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/files/swanlab-metadata.json +1 -0
- reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/run-fbdon9l7.swanlab +0 -0
- reports/evaluations/checkpoint-7000/cvbench_full_test/audit.json +82 -0
- reports/evaluations/checkpoint-7000/cvbench_full_test/metrics.json +60 -0
- reports/evaluations/checkpoint-7000/cvbench_full_test/rank_00.jsonl +0 -0
- reports/evaluations/checkpoint-7000/cvbench_full_test/rank_01.jsonl +0 -0
MANIFEST.sha256
CHANGED
|
@@ -1,7 +1,19 @@
|
|
|
|
|
| 1 |
d7652f9729f8fb44dc54e150b982b31272184a6f37e0100650e95a2ad0687bf5 .gitignore
|
| 2 |
-
|
| 3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
d5383ea8f4877b2472eb973e0fd72d557c7da5d3611bd527ceeb1d7162cbf428 cache/torch/hub/checkpoints/dinov2_vitl14_pretrain.pth
|
|
|
|
| 5 |
843ad6a49b4b9d5c852ac97c2261038424bc14dc3ccee1f5cdbdc4f79a4fbbaf cache/torch/hub/facebookresearch_dinov2_main/.github/workflows/lint.yaml
|
| 6 |
ec0cbea6dd54b7483520390b354ae720b9f3c2c44f68571afc86d0b25fd130b2 cache/torch/hub/facebookresearch_dinov2_main/.gitignore
|
| 7 |
b161b3e2ec4712ebf69efc38ef796d2c701a323aac51cf11759d38e9c56c39bd cache/torch/hub/facebookresearch_dinov2_main/CODE_OF_CONDUCT.md
|
|
@@ -221,7 +233,7 @@ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 code/umm/runti
|
|
| 221 |
1cf7bdbe65b607ddc84d497ff5f751d9c6331223e38f7994a7068a7e854e7e19 code/umm/runtime/models/blip3o/constants.py
|
| 222 |
f462ed9fb8191e40a6fa856553b57b128796f783ccdff2fec2afe544a1667019 code/umm/runtime/models/blip3o/conversation.py
|
| 223 |
0e98e29a335df6e89fd0f9ef96c7e8ab11f9d728234642a2b1134f07278b7440 code/umm/runtime/models/blip3o/data/covt_data.py
|
| 224 |
-
|
| 225 |
92be9f2b3c602be215fc5bc84c78c7ad7bc3c4e5c3e85327614c0015768e2116 code/umm/runtime/models/blip3o/data/covt_data_var.py
|
| 226 |
38de556ad608afb2d2b36f08a85dc3103ae35d9ac5718f81af437c75ae14e9f0 code/umm/runtime/models/blip3o/data/mix_und_t2i_data.py
|
| 227 |
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 code/umm/runtime/models/blip3o/data/moe_data.py
|
|
@@ -352,7 +364,7 @@ ceef1cd2601f4ed730c7ccd1e5bfef381fab8e93faf3700466daf1deca860480 code/umm/runti
|
|
| 352 |
a02d1d09638d4c50b4b277c572c7f1beda2a65ce0207a50ae7676252a557d4dd code/umm/runtime/models/blip3o/model/language_model/covt_gen_qwen_stage3.py
|
| 353 |
4769b6fe8b91f5c601516c0469c6ca9cd40d6eba1fddb5c8896be5f2d2b730ea code/umm/runtime/models/blip3o/model/language_model/covt_qwen_stage2.py
|
| 354 |
198ad7e3cfcbf0b78d7041053d312d3490b770eae6f4db161517a2bd6e5cbfbd code/umm/runtime/models/blip3o/model/language_model/covt_qwen_stage2_inference.py
|
| 355 |
-
|
| 356 |
899ec2a8a0e452f3d8d977af4ce8624b1cebf5e3283b1e646d752ed6bbb6d936 code/umm/runtime/models/blip3o/model/language_model/covt_qwen_stage2_van_infer.py
|
| 357 |
a8ed9018695d2a967c42e8acf3fd6ed55d0132a2bec448b51d5e6a460611d3bc code/umm/runtime/models/blip3o/model/language_model/fm_step_prob.py
|
| 358 |
9f4b79a5234c4de40d4280b0a616af6382afc4a606253a9b9823b3baa95ef581 code/umm/runtime/models/blip3o/model/language_model/moe_qwen_stage3_flux.py
|
|
@@ -416,15 +428,20 @@ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 code/umm/runti
|
|
| 416 |
6b29f159166921a4974cab247b6fd95565107f1e26acb59685a31d59c9a4abf2 code/umm/stage2_covt/VGGT_GEOMETRY_DESIGN.md
|
| 417 |
8010d3a41fa35ff6da86e43def9d836941ed5da64fb660fda6b30df8bd8c41d0 code/umm/stage2_covt/__init__.py
|
| 418 |
588756f5b08c712742a825107731a65910cb134658c4fcd64a9b1909c441478a code/umm/stage2_covt/config.yaml
|
|
|
|
| 419 |
58d7f9109213132096a9f7a5ec3a2fcb42d09effd543c3ce970ee6ac22443456 code/umm/stage2_covt/download_vggt.sh
|
|
|
|
|
|
|
|
|
|
| 420 |
df7b61e30098a7b1ccad9576fce365809340122dc2fbb77c3ed29fe337752631 code/umm/stage2_covt/launch_when_free.sh
|
| 421 |
-
|
| 422 |
1d2a3cc935c47be2bbdc149296c75de099c8ba77bd2bd99602131b880a8a886e code/umm/stage2_covt/run_merge.sh
|
| 423 |
-
|
| 424 |
5b8cb57589b03e3789058cd340bd9663cdf20df43ee89649d3ae53977ccbce9d code/umm/stage2_covt/setup_umm_env.sh
|
| 425 |
f8d2d9aefdd02bc37dd169284ab0c1b15d3b75f8c9987ea29de89fe5fc43cfe7 code/umm/stage2_covt/smoke_vggt_teacher.py
|
| 426 |
-
|
| 427 |
-
|
|
|
|
| 428 |
d1a3058477f082f591fcad284ba53026a72b99a449409c29fb124677d949b7fe code/umm/stage2_covt/validate_setup.py
|
| 429 |
213da455a7c5aa9e240f9d59fec603bdb4083600218880a25f312998b6c8f750 code/umm/stage2_covt/validate_umm_env.py
|
| 430 |
fe614b68085eb57eab2c221d30f84715d1e0ed634bb1542084697467296fd06c code/umm/stage3_generation/README.md
|
|
@@ -444,7 +461,510 @@ fa048658f74e31ef31cabe71cfc92e270ae3267aebf65ad1601addeefbbbd6fd code/umm/stage
|
|
| 444 |
19ce8c5cb80fde9ac2652efa93f4eac3d65e49b8125428454d5f1438fddf3a72 code/umm/stage4_tag_moe/task_schema.yaml
|
| 445 |
28f6ab86eb502b001af5fd892ac5a00d1ddc776b510e0bddd13136b6e18e6101 code/umm/stage4_tag_moe/train.py
|
| 446 |
76178473b234b72cb534ee28c50af786f91d0a6b18283b6739ee5f296bbba037 code/umm/stage4_tag_moe/validate_data.py
|
| 447 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 448 |
49fe81fff2d979e0be1dfaad1827992d448de6542ef8562059d018671727f7d2 data/covt/README.md
|
| 449 |
9727e323b2d5b0ebd9c695c6bbf28aee3f0179022f5d6bdbd42aac01abbd87a6 data/covt/data.json
|
| 450 |
2d11080286128e429777a3ac5dea9d4ae478bc6566818cd4a94064c614932fe2 data/covt/shard_lists/images-00000.txt
|
|
@@ -640,6 +1160,8 @@ d20b70224581c447e99c60b8e8e65ea89151c9c5a156848e0a7db01e00d52362 data/covt/shar
|
|
| 640 |
5e48f0b4e023d94c9bff8e3f184caa3900255bcb2a1fd3dd353c89702a752ad6 data/covt/shards/images-00063.tar
|
| 641 |
26b9273cb982d7fa312a6916f4b1025025347f63e58d22fbabab21dad14948eb data/covt/shards/images-00063.tar.sha256
|
| 642 |
a25011cdc65b0f96da9fe60bfa5b9d4134f887d1d8f01d65790a4f2454dfa2ef data/covt/stats.json
|
|
|
|
|
|
|
| 643 |
63a3647b2bcc2fa303e94aa2a8d84dbd07dffe0d073a7fc9eda62f200691043a environment/README.md
|
| 644 |
92af0ebd4196552b3ef750effa363572badd0a92ec23aa85aaa7c0153f3840bb environment/unvideo-conda.tar.gz
|
| 645 |
11ad7efa24975ee4b0c3c3a38ed18737f0658a5f75a0a96787b576a78a023361 models/base/Qwen3-VL-4B-Instruct/.gitattributes
|
|
@@ -656,6 +1178,23 @@ a5d85b6dcc535e6b93115a9ef287e6132fdbf30270da6218194ba742261173c7 models/base/Qw
|
|
| 656 |
c2da771801886ad9ae98181793ffd3dfb7f1af30f6f7c6a4e15d7dbba52e2399 models/base/Qwen3-VL-4B-Instruct/tokenizer_config.json
|
| 657 |
7768af27c1fafa9cc9011c1dc20067e03f8915e03b63504550e11d5066986d13 models/base/Qwen3-VL-4B-Instruct/video_preprocessor_config.json
|
| 658 |
ca10d7e9fb3ed18575dd1e277a2579c16d108e32f27439684afa0e10b1440910 models/base/Qwen3-VL-4B-Instruct/vocab.json
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 659 |
b94e46746792d1adfa0ebdbccada5d4576d244ae230be9de8a46b5868fff001b models/teachers/VGGT-1B/LICENSE.txt
|
| 660 |
d15bf50a8615c8225ed48b51ea5cac673d82442ec0309036df555a053253afe0 models/teachers/VGGT-1B/model.pt
|
| 661 |
14e780d86fa1861f8751f868d7f45425b5feb55c38ca26f152ca5097ab30f828 models/teachers/dinov2-large-processor/preprocessor_config.json
|
|
@@ -668,18 +1207,140 @@ cb9140fae3ac5122c972d37adf83e1248471a38147ad76f8215c8872c6fd8322 models/teacher
|
|
| 668 |
61a7b147390c64585d6c3543dd6fc636906c9af3865a5548f27f31aee1d4c8e2 models/teachers/siglip2-large-patch16-256/tokenizer.model
|
| 669 |
14afe629fe4959b9e0d51e1852b8d9f7ad074f90a1a7125a4fcdd17f06e78fc8 models/teachers/siglip2-large-patch16-256/tokenizer_config.json
|
| 670 |
aa103197722645487c7d670c0866e8a5537ab4501e610012bebec06dc559883a models/teachers/table5_baseline.pth
|
| 671 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 672 |
ea3fc924e9462bd724882eb2596123398f3cf78d1297af0d9764d7f2c185f850 scripts/build_image_shards.sh
|
| 673 |
ed91cb550a076d7f2a64100f86c2c97fbd2767bb69424176c0810df9abdf868a scripts/collect_local_assets.sh
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 674 |
a81b19f43685b469c5b4e0b96d5e15960b31b1dbf09bd5eb3c10e010a9627acc scripts/make_portable_data.py
|
| 675 |
2b8a8d666c66312bc2dfe91254261c697f90b43a79210f3829be81149d8c3063 scripts/pack_environment.sh
|
| 676 |
-
|
| 677 |
-
|
| 678 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 679 |
577f75ad96f55302c32ee84805dad02ee988e796dcdc1642bc26382b3033c408 scripts/verify_bundle.py
|
| 680 |
-
|
| 681 |
-
|
| 682 |
-
|
| 683 |
eb739aa7ac343581d5d113fd12f748c4622c70a86a99bdfdd9f162b8daaec2f6 skills/deploy-umm-stage2/scripts/deploy.sh
|
| 684 |
6fd91d83c23444bc0e826e644683f8d5095a599414a84172c6215b885779e541 skills/deploy-umm-stage2/scripts/verify.sh
|
| 685 |
f9e2070c247517b1ddf65f7b11b393484a18da91a958fd18a97bd0f241c3125c third_party/diffusers/LICENSE
|
|
|
|
| 1 |
+
6f8797cb6f7e38ecec58d33fadb9c7fc8e0faf5733e4611b5d5100279d301286 .gitattributes
|
| 2 |
d7652f9729f8fb44dc54e150b982b31272184a6f37e0100650e95a2ad0687bf5 .gitignore
|
| 3 |
+
82b5bae2a21068e6d79d2b74a626055dc877cf69668785a534476d66f1a1c487 DEPLOYMENT_LOCAL.md
|
| 4 |
+
0ef5714b1d8ba43310bb57ed7d0b321645c3ba965828903dcaa36c66ae48f7b8 README.md
|
| 5 |
+
2223003af9c765d1cec7885d37dade6f9e57a4e1f024219dc5a1a80f12e09a07 artifact_sources.yaml
|
| 6 |
+
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 cache/huggingface/covt_anchor_hf_hub.lock
|
| 7 |
+
f6572428f6d5e1575e73a1502895a8731f10757dfbb634909c6e154b849af91d cache/huggingface/hub/CACHEDIR.TAG
|
| 8 |
+
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 cache/huggingface/hub/models--facebook--dinov2-large/.no_exist/47b73eefe95e8d44ec3623f8890bd894b6ea2d6c/processor_config.json
|
| 9 |
+
14e780d86fa1861f8751f868d7f45425b5feb55c38ca26f152ca5097ab30f828 cache/huggingface/hub/models--facebook--dinov2-large/blobs/ff5b47c2edcd1d3556d63c01a65d93b58b9efce1
|
| 10 |
+
595e9f7c7a152890017c1cc1035fc0faaf758bb76e8efe152a1c4bf8e466f2da cache/huggingface/hub/models--facebook--dinov2-large/refs/main
|
| 11 |
+
14e780d86fa1861f8751f868d7f45425b5feb55c38ca26f152ca5097ab30f828 cache/huggingface/hub/models--facebook--dinov2-large/snapshots/47b73eefe95e8d44ec3623f8890bd894b6ea2d6c/preprocessor_config.json
|
| 12 |
+
5d5649b214fe6fc4d43bee3c170a12940ba45e3862160f3963fb7137f73c71ae cache/huggingface/xet/logs/xet_20260810T110601798+0000_2454765.log
|
| 13 |
+
c105b03e873f81db6366754f6f40461b8e81edef68bf229d8fbff8ac3ff3bd52 cache/huggingface/xet/logs/xet_20260810T110609502+0000_2454970.log
|
| 14 |
+
d14ae681036924d96f15e5e66bca13c7412fed6364ea0e9517d62eb055068f06 cache/huggingface/xet/logs/xet_20260810T110615413+0000_2455096.log
|
| 15 |
d5383ea8f4877b2472eb973e0fd72d557c7da5d3611bd527ceeb1d7162cbf428 cache/torch/hub/checkpoints/dinov2_vitl14_pretrain.pth
|
| 16 |
+
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 cache/torch/hub/dinov2_torch_hub.lock
|
| 17 |
843ad6a49b4b9d5c852ac97c2261038424bc14dc3ccee1f5cdbdc4f79a4fbbaf cache/torch/hub/facebookresearch_dinov2_main/.github/workflows/lint.yaml
|
| 18 |
ec0cbea6dd54b7483520390b354ae720b9f3c2c44f68571afc86d0b25fd130b2 cache/torch/hub/facebookresearch_dinov2_main/.gitignore
|
| 19 |
b161b3e2ec4712ebf69efc38ef796d2c701a323aac51cf11759d38e9c56c39bd cache/torch/hub/facebookresearch_dinov2_main/CODE_OF_CONDUCT.md
|
|
|
|
| 233 |
1cf7bdbe65b607ddc84d497ff5f751d9c6331223e38f7994a7068a7e854e7e19 code/umm/runtime/models/blip3o/constants.py
|
| 234 |
f462ed9fb8191e40a6fa856553b57b128796f783ccdff2fec2afe544a1667019 code/umm/runtime/models/blip3o/conversation.py
|
| 235 |
0e98e29a335df6e89fd0f9ef96c7e8ab11f9d728234642a2b1134f07278b7440 code/umm/runtime/models/blip3o/data/covt_data.py
|
| 236 |
+
e60ea5f486e8c911934cd35e7dd2e321f808d9f8768f762521d21befd593d275 code/umm/runtime/models/blip3o/data/covt_data_van.py
|
| 237 |
92be9f2b3c602be215fc5bc84c78c7ad7bc3c4e5c3e85327614c0015768e2116 code/umm/runtime/models/blip3o/data/covt_data_var.py
|
| 238 |
38de556ad608afb2d2b36f08a85dc3103ae35d9ac5718f81af437c75ae14e9f0 code/umm/runtime/models/blip3o/data/mix_und_t2i_data.py
|
| 239 |
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 code/umm/runtime/models/blip3o/data/moe_data.py
|
|
|
|
| 364 |
a02d1d09638d4c50b4b277c572c7f1beda2a65ce0207a50ae7676252a557d4dd code/umm/runtime/models/blip3o/model/language_model/covt_gen_qwen_stage3.py
|
| 365 |
4769b6fe8b91f5c601516c0469c6ca9cd40d6eba1fddb5c8896be5f2d2b730ea code/umm/runtime/models/blip3o/model/language_model/covt_qwen_stage2.py
|
| 366 |
198ad7e3cfcbf0b78d7041053d312d3490b770eae6f4db161517a2bd6e5cbfbd code/umm/runtime/models/blip3o/model/language_model/covt_qwen_stage2_inference.py
|
| 367 |
+
c479512325924fbb5c08b5e8bf0130aadf72516a0d560353e4224b4e082fd5af code/umm/runtime/models/blip3o/model/language_model/covt_qwen_stage2_van.py
|
| 368 |
899ec2a8a0e452f3d8d977af4ce8624b1cebf5e3283b1e646d752ed6bbb6d936 code/umm/runtime/models/blip3o/model/language_model/covt_qwen_stage2_van_infer.py
|
| 369 |
a8ed9018695d2a967c42e8acf3fd6ed55d0132a2bec448b51d5e6a460611d3bc code/umm/runtime/models/blip3o/model/language_model/fm_step_prob.py
|
| 370 |
9f4b79a5234c4de40d4280b0a616af6382afc4a606253a9b9823b3baa95ef581 code/umm/runtime/models/blip3o/model/language_model/moe_qwen_stage3_flux.py
|
|
|
|
| 428 |
6b29f159166921a4974cab247b6fd95565107f1e26acb59685a31d59c9a4abf2 code/umm/stage2_covt/VGGT_GEOMETRY_DESIGN.md
|
| 429 |
8010d3a41fa35ff6da86e43def9d836941ed5da64fb660fda6b30df8bd8c41d0 code/umm/stage2_covt/__init__.py
|
| 430 |
588756f5b08c712742a825107731a65910cb134658c4fcd64a9b1909c441478a code/umm/stage2_covt/config.yaml
|
| 431 |
+
85a931deded136ff6eb1f4ff99bbb3b73d0b54c1a695b88bfdf2f10a034464a0 code/umm/stage2_covt/cvbench_eval.py
|
| 432 |
58d7f9109213132096a9f7a5ec3a2fcb42d09effd543c3ce970ee6ac22443456 code/umm/stage2_covt/download_vggt.sh
|
| 433 |
+
2ec7778833cc45cfff463a5c03a46f7fea1c3c943124fa8622997440ddd0b5ae code/umm/stage2_covt/eval_cvbench.py
|
| 434 |
+
db7f92f5a92bb33369683c46d7da84c6d29c20d3ac32dd117967bb2b250aa2cf code/umm/stage2_covt/eval_cvbench_base.py
|
| 435 |
+
3e5e8d6029255bfe17a65a7c5104d0afe1ef4549a83be90a7040bc83c8e96f35 code/umm/stage2_covt/eval_multibench.py
|
| 436 |
df7b61e30098a7b1ccad9576fce365809340122dc2fbb77c3ed29fe337752631 code/umm/stage2_covt/launch_when_free.sh
|
| 437 |
+
333878a518bc20942cb78f426198f90c2ee604bb8d284325d3909393be78cf92 code/umm/stage2_covt/merge.py
|
| 438 |
1d2a3cc935c47be2bbdc149296c75de099c8ba77bd2bd99602131b880a8a886e code/umm/stage2_covt/run_merge.sh
|
| 439 |
+
0581ac15b0d96d6822f36b66b9e895ddff8f3597aae2a4f986844fbeea208515 code/umm/stage2_covt/run_train.sh
|
| 440 |
5b8cb57589b03e3789058cd340bd9663cdf20df43ee89649d3ae53977ccbce9d code/umm/stage2_covt/setup_umm_env.sh
|
| 441 |
f8d2d9aefdd02bc37dd169284ab0c1b15d3b75f8c9987ea29de89fe5fc43cfe7 code/umm/stage2_covt/smoke_vggt_teacher.py
|
| 442 |
+
e15800986c7e4c6711ab73ab67e203f6a00b3709ba83a9f771f6727413842631 code/umm/stage2_covt/train.py
|
| 443 |
+
01c9a0d1df40cd16593e8e3ff7520f0c108648307fd4b7a1cb937000bd09c6d4 code/umm/stage2_covt/validate_checkpoint.py
|
| 444 |
+
f39d22bf5b08d6b25028f4a0ad81c0db75f1f43a1073eba0be7504b17a203561 code/umm/stage2_covt/validate_merged.py
|
| 445 |
d1a3058477f082f591fcad284ba53026a72b99a449409c29fb124677d949b7fe code/umm/stage2_covt/validate_setup.py
|
| 446 |
213da455a7c5aa9e240f9d59fec603bdb4083600218880a25f312998b6c8f750 code/umm/stage2_covt/validate_umm_env.py
|
| 447 |
fe614b68085eb57eab2c221d30f84715d1e0ed634bb1542084697467296fd06c code/umm/stage3_generation/README.md
|
|
|
|
| 461 |
19ce8c5cb80fde9ac2652efa93f4eac3d65e49b8125428454d5f1438fddf3a72 code/umm/stage4_tag_moe/task_schema.yaml
|
| 462 |
28f6ab86eb502b001af5fd892ac5a00d1ddc776b510e0bddd13136b6e18e6101 code/umm/stage4_tag_moe/train.py
|
| 463 |
76178473b234b72cb534ee28c50af786f91d0a6b18283b6739ee5f296bbba037 code/umm/stage4_tag_moe/validate_data.py
|
| 464 |
+
e4c397d9dc55bb82a7f8eacceed05c52ac1ffe917ee3490164ef373f0387c3e9 configs/stage2_covt.template.yaml
|
| 465 |
+
66684b192a74cec576efc795d65535459a728a876015ee1067f4488e8ceea2c5 configs/stage2_covt_from3k_bcd_2k.template.yaml
|
| 466 |
+
1394ee1149d0669ad03c424bf4523940301d2c3bacfd7f41c2873b8b4fe136ab data/benchmarks/prepared/blink_val/manifest.jsonl
|
| 467 |
+
684c39b032b02ca47e65f776b66726bf8f97cc3672850aa867613d78416087c9 data/benchmarks/prepared/blink_val/metadata.json
|
| 468 |
+
2f2111f2dd3537bf39c495be5fe646e7c14bec825bd3b3a894697081b1709776 data/benchmarks/prepared/cvbench_full/manifest.jsonl
|
| 469 |
+
d17208904be088f6b87368ba6343586a93ab375212dc8c3079fb0c4b89a4f239 data/benchmarks/prepared/cvbench_full/metadata.json
|
| 470 |
+
37eb222de48c369e7ea19065e392f1e8430ac70f999b0a2989f8940db8b60531 data/benchmarks/prepared/vstar_test/manifest.jsonl
|
| 471 |
+
82bf3f1bdc2c7ed81c1190263f334262539ec7c9aeb8b225521f06ed58c7573c data/benchmarks/prepared/vstar_test/metadata.json
|
| 472 |
+
9400707b7d0e54809146f0f6e9eec058803bef7f50b58b7d21c75b95b90e37d4 data/benchmarks/raw/BLINK/Art_Style/val-00000-of-00001.parquet
|
| 473 |
+
7404d7b8e3c4a97a9ab5015739ad3b76a505bbe073286c8c3412f60f4d2b13e5 data/benchmarks/raw/BLINK/Counting/val-00000-of-00001.parquet
|
| 474 |
+
48499d694cfffe81fa1eac3dcb1a84804d30cee8ffb501d7ff7020d8c20dd00c data/benchmarks/raw/BLINK/Forensic_Detection/val-00000-of-00001.parquet
|
| 475 |
+
fa3b85a94002be63939088627224d53bca84b20efcebb2cfa95fd246004514c1 data/benchmarks/raw/BLINK/Functional_Correspondence/val-00000-of-00001.parquet
|
| 476 |
+
5753ee46f95354f5d3207ff51df6cb0a70a3ffd63114e80718ab465a3997ca61 data/benchmarks/raw/BLINK/IQ_Test/val-00000-of-00001.parquet
|
| 477 |
+
cf6ae1c48389667e0c245e56c48479f86e9f0bc1f5d33f0559da5fc2f37b671f data/benchmarks/raw/BLINK/Jigsaw/val-00000-of-00001.parquet
|
| 478 |
+
f4e81718f844747bce372bcf046ffe207f82a1ea8b7ce308655c11f536114e19 data/benchmarks/raw/BLINK/Multi-view_Reasoning/val-00000-of-00001.parquet
|
| 479 |
+
cce5f661cc5c6ddde12d37c2a70e4f7dc4f18e613a5e647d6f5ae35c05799532 data/benchmarks/raw/BLINK/Object_Localization/val-00000-of-00001.parquet
|
| 480 |
+
b8529ead736085c3b317853226e9ee4a220928ae82f5692597e908227fe88822 data/benchmarks/raw/BLINK/README.md
|
| 481 |
+
4cd1d5840a2f9e3ad86b310865bd44a29555344b0c6b67b36f9ab1c1029a4d1a data/benchmarks/raw/BLINK/Relative_Depth/val-00000-of-00001.parquet
|
| 482 |
+
f6d6a7605b50f7283b09b4a2f98f7552bacd6a256ad61e6ecafa12e49b38e3ca data/benchmarks/raw/BLINK/Relative_Reflectance/val-00000-of-00001.parquet
|
| 483 |
+
83b9882aca27f740e32d8973c2454e8b78203d3958d189cb5a5fe00a34b88e05 data/benchmarks/raw/BLINK/Semantic_Correspondence/val-00000-of-00001.parquet
|
| 484 |
+
7ce3f778ac870af32151eb8a71512c203314404bd0d903f3bff6c80ff89322c2 data/benchmarks/raw/BLINK/Spatial_Relation/val-00000-of-00001.parquet
|
| 485 |
+
c7c54374f3016df3781d306890c8921ed04ef5b8abd3fa404c6560b2f503d827 data/benchmarks/raw/BLINK/Visual_Correspondence/val-00000-of-00001.parquet
|
| 486 |
+
15857cd004055977c2486e39523a913762e9e6551603bc57b5bc097a70d19aa0 data/benchmarks/raw/BLINK/Visual_Similarity/val-00000-of-00001.parquet
|
| 487 |
+
7673ec70487b434ff115676f5b9fda25753d515a36bb1123e4302b2a4a54347b data/benchmarks/raw/CV-Bench/README.md
|
| 488 |
+
33196034ef4bf3265cae4a7ff5c4071b2ff1cc21123e8e285c6a91393897ecbc data/benchmarks/raw/CV-Bench/test_2d.parquet
|
| 489 |
+
ef91fe8b5392eb2a16e318ca68fa02449d45ba1e152afece12a0a526e9fbbc25 data/benchmarks/raw/CV-Bench/test_3d.parquet
|
| 490 |
+
f4e703ea6e44bbebe53aceed2a89c11e40b88b7ae130c480c89860ab805ffc8f data/benchmarks/raw/vstar_bench/.gitattributes
|
| 491 |
+
e3735087c577110a3cd79748efb4743c65cc501035c9bf366c54be6725ca4c1f data/benchmarks/raw/vstar_bench/GPT4V-hard/0.JPG
|
| 492 |
+
95d9c81effad40f33926a9f14bde31591e6c1e16e617cdb89aa2cc0b7dc62f44 data/benchmarks/raw/vstar_bench/GPT4V-hard/0.json
|
| 493 |
+
c60c2eea92d9f9855608854e52f8d65ae1fc2380dc782647bd413021cf00facc data/benchmarks/raw/vstar_bench/GPT4V-hard/1.jpg
|
| 494 |
+
139b46d1dcc9314eb0251143907f5bb0249422782cd6fe50e92ae662525f9e10 data/benchmarks/raw/vstar_bench/GPT4V-hard/1.json
|
| 495 |
+
0c71f706bdc6c7f730b07b181cc9f87329ea5eb7349e3ba03a73fcbe8dbeed1d data/benchmarks/raw/vstar_bench/GPT4V-hard/10.json
|
| 496 |
+
050c9ff6333184fd021fb56734c65f20a86abdffd64522086e204a8113b6cc70 data/benchmarks/raw/vstar_bench/GPT4V-hard/10.webp
|
| 497 |
+
b501c14d22c2a3ce77a317b91291d38ed21a8e7be223c66be5db3eec68e1b5b2 data/benchmarks/raw/vstar_bench/GPT4V-hard/12.jpg
|
| 498 |
+
11d1471cb40c8f8406f09bfc1fe5f2aef4bb3e153a0b999df36068b303db2ab6 data/benchmarks/raw/vstar_bench/GPT4V-hard/12.json
|
| 499 |
+
7b8530ee2040e6bfd9c0a59ed7d0e98dae00f868db6a02626b20086fc7205e03 data/benchmarks/raw/vstar_bench/GPT4V-hard/13.json
|
| 500 |
+
5c232b927cb03a63c352660561c4fd8bcbfcb34f0cfcf0d2c5dcbb8eee5caba9 data/benchmarks/raw/vstar_bench/GPT4V-hard/13.png
|
| 501 |
+
b67b71000f6716ab7c72c68aa5d91527882a94ea0759a098364dac4a720ba02e data/benchmarks/raw/vstar_bench/GPT4V-hard/14.jpg
|
| 502 |
+
803f1569a5cb1e78e501ec9a9e7ee31414d168585f998eeda5c43c424fb1c495 data/benchmarks/raw/vstar_bench/GPT4V-hard/14.json
|
| 503 |
+
c93b2e6a3318c92a36d76b381f645a5efbf8306c55155ccec08c485c64a71cc9 data/benchmarks/raw/vstar_bench/GPT4V-hard/15.JPG
|
| 504 |
+
6b237fa10afbdd3c1de08f25f8c6fe0df91200c45996378cdf6cda90b4ec4b80 data/benchmarks/raw/vstar_bench/GPT4V-hard/15.json
|
| 505 |
+
8cab3cce053e2aa713db1a999010b043afdf7d91f3212de588bb985d3f0b167d data/benchmarks/raw/vstar_bench/GPT4V-hard/16.JPG
|
| 506 |
+
1fe12b230793c9053f1fc4719f1c3f545d2854510ce85dacab3ad36cfe608012 data/benchmarks/raw/vstar_bench/GPT4V-hard/16.json
|
| 507 |
+
3d572ef7b4d95c19060ca003dec0fbd7c740e02d51dfd1d146b0d405bf85dd2d data/benchmarks/raw/vstar_bench/GPT4V-hard/17.JPG
|
| 508 |
+
3a0a6167f35ac9928b61616304927f1988cfc694a122ec3a38090b24bdf0ad3b data/benchmarks/raw/vstar_bench/GPT4V-hard/17.json
|
| 509 |
+
24610bd1951574e9569e9b5c40da3b39de17d0fffd5012a9adf48a01f92263da data/benchmarks/raw/vstar_bench/GPT4V-hard/18.json
|
| 510 |
+
2ba8444087a3335e2360dfd2d8883e601d10a93d57db0d1a265a12b4158eacbc data/benchmarks/raw/vstar_bench/GPT4V-hard/18.webp
|
| 511 |
+
097d5de2c60eda82778da92f7dd5043c4ea3ed3838d4562b045750aa324ee3f9 data/benchmarks/raw/vstar_bench/GPT4V-hard/19.JPG
|
| 512 |
+
2895d0c2d1e72569a60f4a79ce69f9d1c98f8db80c12985ccac06700446600f2 data/benchmarks/raw/vstar_bench/GPT4V-hard/19.json
|
| 513 |
+
09caddf7e753906a821a22eee058aefbea787a23c3d78f133c36f50fdd1a84d9 data/benchmarks/raw/vstar_bench/GPT4V-hard/2.json
|
| 514 |
+
c6db12149692ba714a7e79ad8c13b55ac063fc46e850f59855dcb6375acc7cff data/benchmarks/raw/vstar_bench/GPT4V-hard/2.png
|
| 515 |
+
0e4725f8b7dbf591e928dd9f633c697618dbbd864784a08a5fb001ebc6e86f6c data/benchmarks/raw/vstar_bench/GPT4V-hard/21.jpeg
|
| 516 |
+
364ff4a223003347cc41847fe2cdc1ae7f66acaf29872d811bf2d7037d8105d3 data/benchmarks/raw/vstar_bench/GPT4V-hard/21.json
|
| 517 |
+
97a1b5b06c30f2b6e762bb16469c9fc9c5def3cc1a5377f842433163501bd697 data/benchmarks/raw/vstar_bench/GPT4V-hard/4.JPG
|
| 518 |
+
cfa432e714a483b6f85db68e7d96118360be25b378c570b76856131bbadd1b2d data/benchmarks/raw/vstar_bench/GPT4V-hard/4.json
|
| 519 |
+
a3110526cb2a581b916b7789fc5432f7ccce2afb30c8357800f6eaf13f8d66b6 data/benchmarks/raw/vstar_bench/GPT4V-hard/5.JPG
|
| 520 |
+
f8435e7f95355947239137ac45d6a55ad7d8fbbe2416e9bc478ae2395a09e640 data/benchmarks/raw/vstar_bench/GPT4V-hard/5.json
|
| 521 |
+
be4aeb307de4d8ab63b6503ee8654d7904cda04484e69946f70847f75570f431 data/benchmarks/raw/vstar_bench/GPT4V-hard/7.jpg
|
| 522 |
+
6186e63e5bd4cf801e02add3ecb7b5092511835a463f5a554a7cd5a3c318fa49 data/benchmarks/raw/vstar_bench/GPT4V-hard/7.json
|
| 523 |
+
061621196fd3ec65095c9f8dd5f3506eedad2f16bb67a983da089b9eec04a680 data/benchmarks/raw/vstar_bench/GPT4V-hard/8.json
|
| 524 |
+
52cc83bc4be6c850361c48e95aae39aeb4e70d4376bd862a726f4529022344e4 data/benchmarks/raw/vstar_bench/GPT4V-hard/8.webp
|
| 525 |
+
3628a1406a7b0063eb0c043c626dd17ada846a02db28f584a803863af3e72253 data/benchmarks/raw/vstar_bench/OCR/sa_17012.jpg
|
| 526 |
+
b7c04682b71c72dec5696c7dd3d0411b74f44290695b3761a4968360e8ce9d5a data/benchmarks/raw/vstar_bench/OCR/sa_17012.json
|
| 527 |
+
7d37b72c86f5efd18a1f7561a02121920514ac6eaa49888259df302886fce4a1 data/benchmarks/raw/vstar_bench/OCR/sa_17063.jpg
|
| 528 |
+
19c233f9ce2d6975196b62eccbaa5a03347b03ec5ba6d66b7f180b130d5de795 data/benchmarks/raw/vstar_bench/OCR/sa_17063.json
|
| 529 |
+
2c2d40eec5e16064355417352cb7547e1157e9bedec1a2dbe526f087b1256a49 data/benchmarks/raw/vstar_bench/OCR/sa_18172.jpg
|
| 530 |
+
81e8945ab43c54a353a1071458ef4b9ba44a3e0da779365d229d1d25753a0339 data/benchmarks/raw/vstar_bench/OCR/sa_18172.json
|
| 531 |
+
4ea2f0ee4d1a76c168027fe37c1b6901556c93ccb96d0619f9694d47dd52e65a data/benchmarks/raw/vstar_bench/OCR/sa_21796.jpg
|
| 532 |
+
eab55243bf35f67adcf1f5757d94afe9d7c585398fa4a0c01d9ba3e4df751e9e data/benchmarks/raw/vstar_bench/OCR/sa_21796.json
|
| 533 |
+
d6ea59c1e8258529b62c2def20ec4ad63768840eccec2ab6f5d8deb5edf990a2 data/benchmarks/raw/vstar_bench/OCR/sa_2786.jpg
|
| 534 |
+
6912a4cf6a9cf2777921030aac58d1f3a469fe1ab32c8fa183cfb04499d1b948 data/benchmarks/raw/vstar_bench/OCR/sa_2786.json
|
| 535 |
+
d10090b9cb8fe09d0d2b4b229da013959b3b22a7200213a7ae33c87cd33c6931 data/benchmarks/raw/vstar_bench/OCR/sa_3088.jpg
|
| 536 |
+
9c94c83cc19147625be5f9849f8b0a85eb18ada42eae5be166aa467bafafabe7 data/benchmarks/raw/vstar_bench/OCR/sa_3088.json
|
| 537 |
+
e3d4e7b14cda0ee7cfe5a7a90b240a7222819565c6af815b48e9c8e011bf329b data/benchmarks/raw/vstar_bench/OCR/sa_39432.jpg
|
| 538 |
+
60004214b578e22910cb965430645f5b4429e394568cbf5c8228c00ca0a2cb3f data/benchmarks/raw/vstar_bench/OCR/sa_39432.json
|
| 539 |
+
30e15b4e5f72488d6030451b98afcaed23dcd7e4fabc1c9360ca1368230d2c42 data/benchmarks/raw/vstar_bench/OCR/sa_39793.jpg
|
| 540 |
+
bbc8c02ae76ca38c4d4dc8918161070a63b67f05be9b1b7053dde646bc0835de data/benchmarks/raw/vstar_bench/OCR/sa_39793.json
|
| 541 |
+
4b640149d7da625fdbaf0c6d5dfa0f894275101a1b487c2880619d9e6aec1f44 data/benchmarks/raw/vstar_bench/OCR/sa_40637.jpg
|
| 542 |
+
864a8d4a6e391edacc10a648c94f10cefc06b81d44a47221834d749b64a08492 data/benchmarks/raw/vstar_bench/OCR/sa_40637.json
|
| 543 |
+
bbd669607a118dd289dd3c118fcc8dd9e8b8ec8519f6ad592d16ce9f5a5d4015 data/benchmarks/raw/vstar_bench/OCR/sa_41985.jpg
|
| 544 |
+
1d44594633177c5e3552c54dbba5a85813a9cd269a50cf529ae516afb9943129 data/benchmarks/raw/vstar_bench/OCR/sa_41985.json
|
| 545 |
+
c8c38223829668bcd89a583d3fd8a7dde7d95b3b2e115e3ee4403311cf06801d data/benchmarks/raw/vstar_bench/OCR/sa_42303.jpg
|
| 546 |
+
85f3fa6ececa4cf4ab6523dac0e35b882ae3bdadbb2b814af39edffc6adb403b data/benchmarks/raw/vstar_bench/OCR/sa_42303.json
|
| 547 |
+
3e8b42c2b975c8f9e4c6bf367e2893ecd45f10948a86a8b5982923c4382cb25d data/benchmarks/raw/vstar_bench/OCR/sa_42566.jpg
|
| 548 |
+
a6822913a40a9ebf0880723ee7f86cade4890b7923edbaeb447a158b526bd8df data/benchmarks/raw/vstar_bench/OCR/sa_42566.json
|
| 549 |
+
59298d6b2bbbb1a54313e4bb73e0bf52b41217402271d12e4f5d59eb80977691 data/benchmarks/raw/vstar_bench/OCR/sa_43283.jpg
|
| 550 |
+
b957c49d308998a528f03d41e4f9631186f63d419bb118238cf6bd543ec9e2f7 data/benchmarks/raw/vstar_bench/OCR/sa_43283.json
|
| 551 |
+
b0c8d000e065069f0587453218345f2d86c9202530298a6af6258bae88c3b92a data/benchmarks/raw/vstar_bench/OCR/sa_44616.jpg
|
| 552 |
+
7d173d4fc89f0580e142f3ec2ba6f733a5acfe3808facdc2aeaf4ddcf7ba48c8 data/benchmarks/raw/vstar_bench/OCR/sa_44616.json
|
| 553 |
+
8b3f467c7af5fe70c1f6ce91fe89621a9a019ab014f65f998397bfff4e8a03b5 data/benchmarks/raw/vstar_bench/OCR/sa_47747.jpg
|
| 554 |
+
28088e9c9d6e05701f54dd99b852ced6fc71adc71fc7566c20981c9fca3b9aad data/benchmarks/raw/vstar_bench/OCR/sa_47747.json
|
| 555 |
+
ed18c3f35a9163970db3d1d4f83528707506452ec0e2269125f2a667d011f01f data/benchmarks/raw/vstar_bench/OCR/sa_50038.jpg
|
| 556 |
+
d34a80c167c34180b39c55f72e8bde1a1565a9336405d8e7066843ab28d80c12 data/benchmarks/raw/vstar_bench/OCR/sa_50038.json
|
| 557 |
+
6049a1f22e55ab33dbb0196191be763a2eada12b83b264ebafbdd6861d142a2e data/benchmarks/raw/vstar_bench/OCR/sa_58860.jpg
|
| 558 |
+
756c5cead3205515ce8c723eb8044dd24f5139e53aff6b9b3bd574e19ab101aa data/benchmarks/raw/vstar_bench/OCR/sa_58860.json
|
| 559 |
+
d0bb5c7b457e14988c07dbe31989d411106956ccee29c6a5a2ae3c12f9747268 data/benchmarks/raw/vstar_bench/OCR/sa_60634.jpg
|
| 560 |
+
458894da1aa05a71466eae432aaa4ba03cf350963f682ba2e59335409689dc06 data/benchmarks/raw/vstar_bench/OCR/sa_60634.json
|
| 561 |
+
b722a4d72b60b614b804d70fb3febd31cd28fe16ed42d8cff43df64a2c473261 data/benchmarks/raw/vstar_bench/OCR/sa_61610.jpg
|
| 562 |
+
78b3a6cba1a791195ea31fe8a43a0c5fcfcba4ec68b410be2633ae3ce10acd08 data/benchmarks/raw/vstar_bench/OCR/sa_61610.json
|
| 563 |
+
2abb0046207392fb9b2a2d01b8aadb5865206bd9dec86958ae5215d49bb46eb9 data/benchmarks/raw/vstar_bench/OCR/sa_61957.jpg
|
| 564 |
+
eebb25d5556b34f21c23dc4fe0e8c1839c3564400a69a42c93ae105e28cd6500 data/benchmarks/raw/vstar_bench/OCR/sa_61957.json
|
| 565 |
+
993b1d33eea5118052a1acfb19486a59ee503669311ab10966ae9ad5fe3e37ae data/benchmarks/raw/vstar_bench/OCR/sa_72937.jpg
|
| 566 |
+
ca86a881d1878582c36e63f1a0b777721ef5f60ae6cf366afcd17d984a169454 data/benchmarks/raw/vstar_bench/OCR/sa_72937.json
|
| 567 |
+
8405d6067c4614550787ef655c7851ad1d0db85c0c82d4601dd038b5e5a66e3c data/benchmarks/raw/vstar_bench/OCR/sa_79154.jpg
|
| 568 |
+
c5d788ec1c5ab07ee14c9c42c871fa42a6e4b28909a93e95ee148fbe526e2f9b data/benchmarks/raw/vstar_bench/OCR/sa_79154.json
|
| 569 |
+
fac9b0bd82a2cb51d12afe4ed1a038e003bc4b99a7762454b3393f4f29e34291 data/benchmarks/raw/vstar_bench/OCR/sa_82003.jpg
|
| 570 |
+
bc6896bf488b49b7af024a403e15e81cc21d06e81a2da7e235b394c33e398a39 data/benchmarks/raw/vstar_bench/OCR/sa_82003.json
|
| 571 |
+
88a19655f21ff5c2a31c82b0642f57ea10f86413cdabdc4103874c0a8875b8a9 data/benchmarks/raw/vstar_bench/OCR/sa_88890.jpg
|
| 572 |
+
940fb3cca2286b1ff8a6282eb789f02015cd6761074989a70e45a19f9efb9504 data/benchmarks/raw/vstar_bench/OCR/sa_88890.json
|
| 573 |
+
60e8c3e949c5829e2a93bd88985fcd3e2d1c9127730132522aed925b3b92ea91 data/benchmarks/raw/vstar_bench/OCR/sr_raw_0.JPG
|
| 574 |
+
f91c5626cfef880daabd0f67510e1bbfbe24c99897ea8a9053752b9ee7c948f9 data/benchmarks/raw/vstar_bench/OCR/sr_raw_0.json
|
| 575 |
+
3088a32c88f170094c7108b58238b45dbae13bec2f347cc8e5b31d7423560bb1 data/benchmarks/raw/vstar_bench/OCR/sr_raw_1.JPG
|
| 576 |
+
312cbc8b3bf901b1b62aac61ba6d2b578d90e8ca34da757bf6e60d491f51187a data/benchmarks/raw/vstar_bench/OCR/sr_raw_1.json
|
| 577 |
+
b5f6afe82f526963ff2c53c8bb0806177ef84c4582264b9124ced3a5e92289a2 data/benchmarks/raw/vstar_bench/OCR/sr_raw_2.JPG
|
| 578 |
+
b019abda4e2d16ae651e078c110c7b679f330ebba08229ea3a92974932f82688 data/benchmarks/raw/vstar_bench/OCR/sr_raw_2.json
|
| 579 |
+
534596426649316e5078654fca9525f0a015dcf24698a9426e007be82b9790c2 data/benchmarks/raw/vstar_bench/OCR/textvqa_0.jpg
|
| 580 |
+
12caf08ece21a8d5bbc81a937bd148cb02a6e3ff97b5f5fc706119623ce1bebd data/benchmarks/raw/vstar_bench/OCR/textvqa_0.json
|
| 581 |
+
d6fc67f1235823ee58ddd745218ad78f9bd267435eb417c0e6118de5a43834a6 data/benchmarks/raw/vstar_bench/OCR/textvqa_1.jpg
|
| 582 |
+
ce8d85eb48d9ee9ddb90c5c507ffb9b07496be11cf1c225ef93cda9f2f2a86ae data/benchmarks/raw/vstar_bench/OCR/textvqa_1.json
|
| 583 |
+
6534345d2c7b336fcf28a6cee3363ef6fbf58c02abd65213444121de99dad030 data/benchmarks/raw/vstar_bench/OCR/textvqa_2.jpg
|
| 584 |
+
86d30ae1ef7dd0e967b12f66975fbba5d946a75df59266796eb627c3328d3197 data/benchmarks/raw/vstar_bench/OCR/textvqa_2.json
|
| 585 |
+
05ffb7c86eb8b6645bab7709b386afe83645a8a37c75679e83e7358880e8f0cc data/benchmarks/raw/vstar_bench/direct_attributes/sa_10033.jpg
|
| 586 |
+
b27d5e41f74b0d88e06652a2def36cf4a48dc9b75248398a6d8c443648e6e5e3 data/benchmarks/raw/vstar_bench/direct_attributes/sa_10033.json
|
| 587 |
+
a27b465130715a16b83f8f410fb764f8114ff55542d508cda5eaf562f0be13bf data/benchmarks/raw/vstar_bench/direct_attributes/sa_10052.jpg
|
| 588 |
+
89fdbb9555903f0fd2e9f01a357ec84cfd6787d1d848ecabec17999bf1aa6783 data/benchmarks/raw/vstar_bench/direct_attributes/sa_10052.json
|
| 589 |
+
9c48c4603abc698003455cbbcd7d55ee390e313f6bdbac114245b5b4985dd692 data/benchmarks/raw/vstar_bench/direct_attributes/sa_10204.jpg
|
| 590 |
+
6085f08be8dcdc070140730dd2b00221ef195c363747bbb04458f8ff69ce56af data/benchmarks/raw/vstar_bench/direct_attributes/sa_10204.json
|
| 591 |
+
fcafdbf96253c5936db0ca9b96e7c7dc881f7abf609c4ff53edc95eb46c8de3b data/benchmarks/raw/vstar_bench/direct_attributes/sa_10225.jpg
|
| 592 |
+
9e79f24c39068a8cded713ad80d504a58e406a11918981ae6ec6a19b7ad47db0 data/benchmarks/raw/vstar_bench/direct_attributes/sa_10225.json
|
| 593 |
+
bae4c1f06bd1ff48f8bd24c210930852e2e31bceb3efa1c1b3f52bc9ceed3823 data/benchmarks/raw/vstar_bench/direct_attributes/sa_10415.jpg
|
| 594 |
+
493f19cef7b86575cc2af8f612ba751bc177f181ecaf9acc86b28be3643a00db data/benchmarks/raw/vstar_bench/direct_attributes/sa_10415.json
|
| 595 |
+
3982576f32813d6a0a5351ef6cdbcbeed0a4d68196ce4e742ae1680d1bde47c8 data/benchmarks/raw/vstar_bench/direct_attributes/sa_10701.jpg
|
| 596 |
+
bfaa468b691db4c652d021e5954ef991c111f4b4370d9a62a146ae82f001a76e data/benchmarks/raw/vstar_bench/direct_attributes/sa_10701.json
|
| 597 |
+
7eb38e6c2bc0572fcf72fd9b159347011d264787db051a15cc76003019192610 data/benchmarks/raw/vstar_bench/direct_attributes/sa_10720.jpg
|
| 598 |
+
3945ef86b4a9559a08164cc9b3b8892153d1179f8e6242bd6c7a23b7780c93a2 data/benchmarks/raw/vstar_bench/direct_attributes/sa_10720.json
|
| 599 |
+
f32491dd101c92615b6b536bf16b15fda6f2d273385d5b3bc8aec9699ef4219a data/benchmarks/raw/vstar_bench/direct_attributes/sa_10885.jpg
|
| 600 |
+
75dd24e36ccc7271540b79713d4ce756d8f36371330e89654679d232e7624c65 data/benchmarks/raw/vstar_bench/direct_attributes/sa_10885.json
|
| 601 |
+
705f2c7a2af535a98214e554454935f8deb979dd5e9f5336788d7d02ffe1b737 data/benchmarks/raw/vstar_bench/direct_attributes/sa_10919.jpg
|
| 602 |
+
e39a5eaf95196e8e2daa8ae40616258ac5cfad442ce1d87244bd0e936013a3d2 data/benchmarks/raw/vstar_bench/direct_attributes/sa_10919.json
|
| 603 |
+
d50bcbb7f9a78ad7cd4f7c150691d30c7d5c836a6905d6e0185184486f6696d6 data/benchmarks/raw/vstar_bench/direct_attributes/sa_10997.jpg
|
| 604 |
+
b57b42d16b9de426aca493012057a4e6640d3ca8c1ce4ef0d69a2df778eb4699 data/benchmarks/raw/vstar_bench/direct_attributes/sa_10997.json
|
| 605 |
+
baa3403902f49d4e7d89e839b08627399195b677c4aa7f911346aa58230e7df2 data/benchmarks/raw/vstar_bench/direct_attributes/sa_11290.jpg
|
| 606 |
+
79e8c67bce11afeb1e2930f29eb8ca20837e7a5ed1f17ab0802cb326032a874b data/benchmarks/raw/vstar_bench/direct_attributes/sa_11290.json
|
| 607 |
+
d20c4e3ba61f2f73afeb2b7142bc3bb5d9a1337a074fd3c6696527f021ad26bd data/benchmarks/raw/vstar_bench/direct_attributes/sa_11370.jpg
|
| 608 |
+
41942ab05059ffae6e88dd2057acca5278f3e32361ddaef6b826a04347367bc9 data/benchmarks/raw/vstar_bench/direct_attributes/sa_11370.json
|
| 609 |
+
c09342d252635967777c51d5d73e48f4b84875e3bf9b92c1d3ad1c913a18979f data/benchmarks/raw/vstar_bench/direct_attributes/sa_11405.jpg
|
| 610 |
+
52c54d9e9b88854077c2859b12ff56d6eeec7f360653cf00ae3ac149df29c930 data/benchmarks/raw/vstar_bench/direct_attributes/sa_11405.json
|
| 611 |
+
7a7fe73b4b1aed8dfc42bfe7ef4d3a24cfdbaa1aa1dd84b7117b23db5fbf9d20 data/benchmarks/raw/vstar_bench/direct_attributes/sa_11528.jpg
|
| 612 |
+
c4d29846412699bcdf9539255730dc5abb1a5576eaf99ff77639c05303d288be data/benchmarks/raw/vstar_bench/direct_attributes/sa_11528.json
|
| 613 |
+
71af4b9af3602e66bf59a8b8c3b55e6be83b701ce8a5fb050c06efe79101b053 data/benchmarks/raw/vstar_bench/direct_attributes/sa_1244.jpg
|
| 614 |
+
1c48e1e4f831d7e02477f33ef9466d79bc538ccf8bf91bd8f91b8400c290d1b4 data/benchmarks/raw/vstar_bench/direct_attributes/sa_1244.json
|
| 615 |
+
89cf48f95483dc0590a5eb5ed78778dcfce9373b68a4f374243e8f93d75d3844 data/benchmarks/raw/vstar_bench/direct_attributes/sa_13337.jpg
|
| 616 |
+
2ab7e18529f4c8cf9c8e51750914f0c747584e5f227290d2b736615f7c4decd6 data/benchmarks/raw/vstar_bench/direct_attributes/sa_13337.json
|
| 617 |
+
0f948b7933e990a331a95012330c7e42e711eb276f13c71f300ecc64aec24de8 data/benchmarks/raw/vstar_bench/direct_attributes/sa_16306.jpg
|
| 618 |
+
86bddee6ae8be0562677b974be37e289799c679430b7d6ea9d8d7144ea8e6ac7 data/benchmarks/raw/vstar_bench/direct_attributes/sa_16306.json
|
| 619 |
+
6ee73eb9973d00737ff5c4901c9ae3f5d168e0da44f5992d1d5fab0e21b6e174 data/benchmarks/raw/vstar_bench/direct_attributes/sa_16825.jpg
|
| 620 |
+
4dfc25aeb6cc2372abc41b34c84769834e6567c318af66e2509f3d011d061590 data/benchmarks/raw/vstar_bench/direct_attributes/sa_16825.json
|
| 621 |
+
70d41e075be7c2870e66241ee2d429e62621eee3e1b8c0240b152817acb9513e data/benchmarks/raw/vstar_bench/direct_attributes/sa_16854.jpg
|
| 622 |
+
2c8e8de574c3bb4b17e070277ced60416d85964189cf44e16c36793e8faa93c1 data/benchmarks/raw/vstar_bench/direct_attributes/sa_16854.json
|
| 623 |
+
847ba9aa5edd9f28c2d40d4a39c7a74bc9a4cb5918ec7627f1b70f46d5fe954a data/benchmarks/raw/vstar_bench/direct_attributes/sa_17.jpg
|
| 624 |
+
3437ca235275bbf5f837febf1b6443e5a9c6b27302f7b7dc35b18b0182b0826d data/benchmarks/raw/vstar_bench/direct_attributes/sa_17.json
|
| 625 |
+
951fc7b4a6b8f2c1caffb216d1d33afe0eec824c867ba35e9234151f0938b119 data/benchmarks/raw/vstar_bench/direct_attributes/sa_17108.jpg
|
| 626 |
+
a21b04ca757dcceeaaf648ad9bb3608fe5bb53b17bc76ad0788b10a972206117 data/benchmarks/raw/vstar_bench/direct_attributes/sa_17108.json
|
| 627 |
+
e3c8df1a142cbb6b2b8b4a8c1fcc367a1a7eaae9440385b79031b43e6f9fae4a data/benchmarks/raw/vstar_bench/direct_attributes/sa_19272.jpg
|
| 628 |
+
cd4800f21b56d7e64b54f58af677b1feb486b7af1815b1997e77c62be30b5acd data/benchmarks/raw/vstar_bench/direct_attributes/sa_19272.json
|
| 629 |
+
7963d046c427dffbec10f8496713224e670a8500ebd2ff9445b0f53c6dbb6448 data/benchmarks/raw/vstar_bench/direct_attributes/sa_19483.jpg
|
| 630 |
+
8f4d14f656a3b5bfffba705e3b8c8de8a49945b70cb7a89275c0fad170557ec6 data/benchmarks/raw/vstar_bench/direct_attributes/sa_19483.json
|
| 631 |
+
e30fe2d013e11a5da655a46e65930d77e40e098f8a8141a1a3fab36fa50249f4 data/benchmarks/raw/vstar_bench/direct_attributes/sa_20519.jpg
|
| 632 |
+
496ff558fc2376947fdf306ed249c4b3e1c4e1c336a7c1a26e34d92f6f188c9f data/benchmarks/raw/vstar_bench/direct_attributes/sa_20519.json
|
| 633 |
+
2f401e382fbbd1b8e96aa9e594dba48096a85f225b975403a59251a7af7f0d65 data/benchmarks/raw/vstar_bench/direct_attributes/sa_23893.jpg
|
| 634 |
+
b8e39654f2d8fac20dc197af70b8f5fe48f0a54516c2296c37499655fe8b9060 data/benchmarks/raw/vstar_bench/direct_attributes/sa_23893.json
|
| 635 |
+
bee6acf7e730cc1ffe7a06e756b36a14a8c9d56006162c27a95ef2aedf485a79 data/benchmarks/raw/vstar_bench/direct_attributes/sa_24546.jpg
|
| 636 |
+
3a5cddff802f2ea3e7d9a5be6c663c8a3b2005ed0dffe3dd97ceeea2bac42d9d data/benchmarks/raw/vstar_bench/direct_attributes/sa_24546.json
|
| 637 |
+
7ca8a64e268c7d3429187505263e8da55599a24b3d612f62731bede443d6d955 data/benchmarks/raw/vstar_bench/direct_attributes/sa_25212.jpg
|
| 638 |
+
2848892fa5754a8d20b0fc3ddcb7abc858b5068a1df2064f50df46e7ad95a2c4 data/benchmarks/raw/vstar_bench/direct_attributes/sa_25212.json
|
| 639 |
+
5a1dddfe2a7659af22371ed810f44ec00883e98761be3bcb41f902066a66e38e data/benchmarks/raw/vstar_bench/direct_attributes/sa_25219.jpg
|
| 640 |
+
d707782ac520a27b86af9782691d10d6bedc1518ca86c3cb8e90dc1a27598af9 data/benchmarks/raw/vstar_bench/direct_attributes/sa_25219.json
|
| 641 |
+
1cf1a784386776c6a815a0b6c912248cfec18efee34cceef7fd768db7efd2087 data/benchmarks/raw/vstar_bench/direct_attributes/sa_25835.jpg
|
| 642 |
+
2e4071f26ccec5347e2ad9b1c5251b5346d3144123f5b1b784a6d5646c0a6a7f data/benchmarks/raw/vstar_bench/direct_attributes/sa_25835.json
|
| 643 |
+
9025100e7b27e4be15426c06c43dd881a8ede29b710a0a6f66a7014af1229d05 data/benchmarks/raw/vstar_bench/direct_attributes/sa_26085.jpg
|
| 644 |
+
7f4212f832867ed49c5c0df09f2ecde5891be63519594d21834691b3b4d379fe data/benchmarks/raw/vstar_bench/direct_attributes/sa_26085.json
|
| 645 |
+
723de17eeb7884abb114e0108fbf30e225f6f9d3aa01ee6d2ece32a3215fe768 data/benchmarks/raw/vstar_bench/direct_attributes/sa_26968.jpg
|
| 646 |
+
5e633cf498d2d21d4d073b92c459993d19384d4833b2a634388043b896cdb14e data/benchmarks/raw/vstar_bench/direct_attributes/sa_26968.json
|
| 647 |
+
53b669046587cee8fbafb94f33b53067f48f8d580198aa6061ca6c615da98d30 data/benchmarks/raw/vstar_bench/direct_attributes/sa_27986.jpg
|
| 648 |
+
fbae58568addb253f2bebae233bc4d1ce1d6e3de1036c84df63ad30e65c555ab data/benchmarks/raw/vstar_bench/direct_attributes/sa_27986.json
|
| 649 |
+
bd1af53236961868516adcb0fbbc6e1eebd89f2dfdedcd3278f35e8f510ac471 data/benchmarks/raw/vstar_bench/direct_attributes/sa_28073.jpg
|
| 650 |
+
61b07921029543c2fb4a37319b3e0ee5341d3ed2f3820ec862df925182e8e57a data/benchmarks/raw/vstar_bench/direct_attributes/sa_28073.json
|
| 651 |
+
459d7283fa94b8caefcadb52f7e25c956ce52c9886719732b4f710481fe133c3 data/benchmarks/raw/vstar_bench/direct_attributes/sa_28392.jpg
|
| 652 |
+
30a86aecba5d6ff1f33dccfa57c0c13564679871777d161880f1ece305ab0264 data/benchmarks/raw/vstar_bench/direct_attributes/sa_28392.json
|
| 653 |
+
e3aff5f93fbb9da76f8045ba8b897aa8e0cfe81560f31bfa7b2cfdae2d6f5936 data/benchmarks/raw/vstar_bench/direct_attributes/sa_29509.jpg
|
| 654 |
+
33b1aeaae0932c3a3805a1930e2bde9f3180621277a983ec7dcd99b1fc748850 data/benchmarks/raw/vstar_bench/direct_attributes/sa_29509.json
|
| 655 |
+
f091453fccf0445a65f090edd455ad41ae7e8e348c3f738755c4cd55071e99d3 data/benchmarks/raw/vstar_bench/direct_attributes/sa_29744.jpg
|
| 656 |
+
dac8234d7a5502fea3077dbd88537a9d5703b19a618db08c1a343597e6ad17b9 data/benchmarks/raw/vstar_bench/direct_attributes/sa_29744.json
|
| 657 |
+
9e91780c84f13addf7deebfb452e066fe8b8f1b311431539b509232c667900e3 data/benchmarks/raw/vstar_bench/direct_attributes/sa_30034.jpg
|
| 658 |
+
f23c3561f79cbc9042abd9825a348454a61eaa31e3b9c28dafca3f7b8270692d data/benchmarks/raw/vstar_bench/direct_attributes/sa_30034.json
|
| 659 |
+
8292c5f9f792a165c66d974a8f8ea0bbb9a3eafd2df7678246dac8cd24aa55fe data/benchmarks/raw/vstar_bench/direct_attributes/sa_30179.jpg
|
| 660 |
+
2370f3abf60a0abeae85fbffcba4ce03062dcb7c9fbac08ff015fbea6690a929 data/benchmarks/raw/vstar_bench/direct_attributes/sa_30179.json
|
| 661 |
+
b3952603517ae2a00ca3f2ecf102e104ebd5aa6c40faf994b8f402bdb3420c77 data/benchmarks/raw/vstar_bench/direct_attributes/sa_30411.jpg
|
| 662 |
+
bc1b558a8faf151f486ee232600b1751a6c566070182e2a1130db97e80e2d266 data/benchmarks/raw/vstar_bench/direct_attributes/sa_30411.json
|
| 663 |
+
4637032694d4df5d753ce867091e1b564efb3baf49dc222d645cb506a440b1cc data/benchmarks/raw/vstar_bench/direct_attributes/sa_30935.jpg
|
| 664 |
+
bad7baa4bfc9b57081cfa438d362d041218df167dfeb065fd3816212e0279941 data/benchmarks/raw/vstar_bench/direct_attributes/sa_30935.json
|
| 665 |
+
8bfa3b8e5ba697aeea5ac3a50307afef5d8920150139f062fc47b0db3140188f data/benchmarks/raw/vstar_bench/direct_attributes/sa_31451.jpg
|
| 666 |
+
27e3f55ecec43a0799f06b8019b6c95a2ade3992bc5bf519a026f3637f241ebe data/benchmarks/raw/vstar_bench/direct_attributes/sa_31451.json
|
| 667 |
+
790aad9a5d088d4a363bff4d6d21c2014d998f08e1005e575d9a9b8826c29048 data/benchmarks/raw/vstar_bench/direct_attributes/sa_31511.jpg
|
| 668 |
+
3d6d6b9bc9f6398bd518a3649dd9b4223fa6bab162bbf7b1df56fbffbe45cb01 data/benchmarks/raw/vstar_bench/direct_attributes/sa_31511.json
|
| 669 |
+
9bd54c9b748e0ce5b0cfab907ff73f4bcc5163e5f5c07a00ca228c2b03c43700 data/benchmarks/raw/vstar_bench/direct_attributes/sa_33492.jpg
|
| 670 |
+
f5b0285cedbdb55263a545af5db223607cdd59dbb9d331ecf4be12d82e3654ca data/benchmarks/raw/vstar_bench/direct_attributes/sa_33492.json
|
| 671 |
+
7e34f311a53f3ab6cd37f5952cb885329054ed7ba4d82e74aad446a4df2c2bd7 data/benchmarks/raw/vstar_bench/direct_attributes/sa_33579.jpg
|
| 672 |
+
7ed0ce5cfd75e1a85cb95161f32b800343794686818ecaaf7ba26d96a2a707ec data/benchmarks/raw/vstar_bench/direct_attributes/sa_33579.json
|
| 673 |
+
5953e55ed420328a2a40f8ccd6930f80f2dd1ea82b83f2a0bc1c67aaa8acbca5 data/benchmarks/raw/vstar_bench/direct_attributes/sa_34040.jpg
|
| 674 |
+
85877916d1446f774d765259699525a5f8615271e77c9266fee1cb04b5f84910 data/benchmarks/raw/vstar_bench/direct_attributes/sa_34040.json
|
| 675 |
+
041cf461004964681a9e7b00494f9b20a6ba20a026d70fa208fe62d8bd9d3e4d data/benchmarks/raw/vstar_bench/direct_attributes/sa_3568.jpg
|
| 676 |
+
99e5f0a0e019d062e6ea926c4f3e8633f3a4f7cd19a5d6464453caa59f001cbd data/benchmarks/raw/vstar_bench/direct_attributes/sa_3568.json
|
| 677 |
+
82e689ad10fafc8b118a8ab587ebcc2c9850a0f4a533576b638c200b1f4ff901 data/benchmarks/raw/vstar_bench/direct_attributes/sa_35748.jpg
|
| 678 |
+
0a6cc2aaee810e813135e4a6f17f4974e2767b211283e9621bbfed7c9e547880 data/benchmarks/raw/vstar_bench/direct_attributes/sa_35748.json
|
| 679 |
+
1b1bdf531f07ab13bd7974bfa52de1fb433235f1a37aa3b84e93e3e7f9114c2d data/benchmarks/raw/vstar_bench/direct_attributes/sa_37675.jpg
|
| 680 |
+
1ef866c0d119ae39184cba0eda69c7a4e1e02c440c24889c27383cf18b13ab71 data/benchmarks/raw/vstar_bench/direct_attributes/sa_37675.json
|
| 681 |
+
3a6e7b2370b3445a5f5a38f8ee8ea3268d01de02bd151c7d531c89d599069cc6 data/benchmarks/raw/vstar_bench/direct_attributes/sa_38155.jpg
|
| 682 |
+
0f865f5add5f4a48a8e4231d77a8e696ab163a31e14138913099f4a3b9e95902 data/benchmarks/raw/vstar_bench/direct_attributes/sa_38155.json
|
| 683 |
+
6ffcf6a1870310d425ed9da2562f53f2821987d93aa8d088680fd0944d88c198 data/benchmarks/raw/vstar_bench/direct_attributes/sa_38195.jpg
|
| 684 |
+
8e41a17e7a06b0d9a1c0188827a2dfcb40693d05f71857e93a4f445f58eb4ba9 data/benchmarks/raw/vstar_bench/direct_attributes/sa_38195.json
|
| 685 |
+
ebdea79a8059f59b65d5de06cd2e30e9f8095714de4f051644f531195c51194d data/benchmarks/raw/vstar_bench/direct_attributes/sa_38610.jpg
|
| 686 |
+
2ef628f29c87c464084f31f6473d2f3fe3a348b91c644fd28cb579669f1f98cc data/benchmarks/raw/vstar_bench/direct_attributes/sa_38610.json
|
| 687 |
+
61e98ae88df3673bf7e77f2a0cdc4bc6d4c4e29326e7f9f4aea22d95b5cda100 data/benchmarks/raw/vstar_bench/direct_attributes/sa_38669.jpg
|
| 688 |
+
e35cba07f41c3d82f6a8285ab647e815d6d0be70c2e124b45fe688763cd4fe04 data/benchmarks/raw/vstar_bench/direct_attributes/sa_38669.json
|
| 689 |
+
4688897f16b029d95b767de2444f3ea3a7db843733d7393adb8dabb5c32eb525 data/benchmarks/raw/vstar_bench/direct_attributes/sa_39518.jpg
|
| 690 |
+
d9ba8a7b31307d1728b3ea1661e284b4dee9fb5caf31b5ecd0ac270f86794796 data/benchmarks/raw/vstar_bench/direct_attributes/sa_39518.json
|
| 691 |
+
775b9e431209d38ee87edba968098b1ff164f126a5229f4b66c1f0c13058dfbc data/benchmarks/raw/vstar_bench/direct_attributes/sa_39678.jpg
|
| 692 |
+
e772cf2acc1e16b74f76fb27f854498cc7d3a9d2ea2dfacb9968745294b2382a data/benchmarks/raw/vstar_bench/direct_attributes/sa_39678.json
|
| 693 |
+
8ea6c13f6ef913bd563a4c50ae60b168a9e7ca4c74f8e07384b39cad45fd51ea data/benchmarks/raw/vstar_bench/direct_attributes/sa_4020.jpg
|
| 694 |
+
d97c52450c7eb3584b5c6bb1c51a8649dc10e845d504dd9935f4b8e3048b5792 data/benchmarks/raw/vstar_bench/direct_attributes/sa_4020.json
|
| 695 |
+
516b085b49994c2120d67449a816b2fd065b4dd1611c6b09ed0694f469eb1b20 data/benchmarks/raw/vstar_bench/direct_attributes/sa_40973.jpg
|
| 696 |
+
6b70a8d6ce2d969391470d9efc023821b054de06bcda80bb9cb56d99b2c64f86 data/benchmarks/raw/vstar_bench/direct_attributes/sa_40973.json
|
| 697 |
+
b92da97e1ca952b7eb951a5c34af240f9b3d8eb577bf9eb71a0982fb79977c64 data/benchmarks/raw/vstar_bench/direct_attributes/sa_41908.jpg
|
| 698 |
+
90b1e88976dd8c50d9fb603d4a414670bf21059ca09a4bd5bd040d7a12afc3b1 data/benchmarks/raw/vstar_bench/direct_attributes/sa_41908.json
|
| 699 |
+
f3a1d7c441451dcd4148fc84205aafd4f077e1d9b2b65b24c535a67514976507 data/benchmarks/raw/vstar_bench/direct_attributes/sa_4203.jpg
|
| 700 |
+
e169b5ea94441946116776062b52f982ad3bb3535900b4cefc25cf9acdfecfdb data/benchmarks/raw/vstar_bench/direct_attributes/sa_4203.json
|
| 701 |
+
ef75635ada67c1917fcc46b31276ace3d9af4e008e6ec8cec9fbe00069d1b8bf data/benchmarks/raw/vstar_bench/direct_attributes/sa_42562.jpg
|
| 702 |
+
0ae4a24e60e4be0d57b54f11215675a94e9ea733e42e529f5334f5f93bf6040d data/benchmarks/raw/vstar_bench/direct_attributes/sa_42562.json
|
| 703 |
+
ec03c16f9dc656c5def6b794f3c429452ed51b0a1ad0db63a135e5744d6bbde9 data/benchmarks/raw/vstar_bench/direct_attributes/sa_42585.jpg
|
| 704 |
+
92eb9598cf783e74cea8a063c4af32d9f734dc7402f48309ad2e1d955b020c4a data/benchmarks/raw/vstar_bench/direct_attributes/sa_42585.json
|
| 705 |
+
0b2613fb401a0ad96b11a4f9250f7b96fb2a81a44408bb2fdc758ecfe0513e2d data/benchmarks/raw/vstar_bench/direct_attributes/sa_43391.jpg
|
| 706 |
+
572ea747523737064108b54a1c468efaa31fcbb9f25e0a26c31f1eb435f5a229 data/benchmarks/raw/vstar_bench/direct_attributes/sa_43391.json
|
| 707 |
+
a85299e91686359489237d6e3efd198270dd54fccd2d0037d325ea73192af84c data/benchmarks/raw/vstar_bench/direct_attributes/sa_44097.jpg
|
| 708 |
+
441bf43f68398ab9d21ac18b28a007b5ae9fe4f5876d483fe6e2f291149d5158 data/benchmarks/raw/vstar_bench/direct_attributes/sa_44097.json
|
| 709 |
+
24d5e82ca89ea9d88a219813bfac8bc5425c2e531dfbbab2ffcd38dd2a6937c2 data/benchmarks/raw/vstar_bench/direct_attributes/sa_4460.jpg
|
| 710 |
+
5aaf637a46acc8617d9e151e9699c7b52cfebd29a559dc9868441cea78dd2b3b data/benchmarks/raw/vstar_bench/direct_attributes/sa_4460.json
|
| 711 |
+
1a37cc9e322c4dfde3097d13283601de36ce3602e10b311c90b4ef71d5582dc0 data/benchmarks/raw/vstar_bench/direct_attributes/sa_4658.jpg
|
| 712 |
+
3f6f0733187980ebb7bf9fd83b2fdf7bb931336dc3ed7d8d641f11a5b4f44a12 data/benchmarks/raw/vstar_bench/direct_attributes/sa_4658.json
|
| 713 |
+
7fbbc4f28e251181d6e90e20e7f022dfaadf652f8b03419c936d7efee5caaaf7 data/benchmarks/raw/vstar_bench/direct_attributes/sa_4690.jpg
|
| 714 |
+
6c0f85d90a8218e3e0473e718f7f15801e7e4446bba1ec7130495100a86489c0 data/benchmarks/raw/vstar_bench/direct_attributes/sa_4690.json
|
| 715 |
+
7a1b843364dada6693b8a18a74dba917e9fab05858ad4596269d18955b3c38b4 data/benchmarks/raw/vstar_bench/direct_attributes/sa_47397.jpg
|
| 716 |
+
d8d7d6e146e7a56a6e66483852d71054c4234af6fd59c0a99044040bb9923173 data/benchmarks/raw/vstar_bench/direct_attributes/sa_47397.json
|
| 717 |
+
0c5d66d4951526efd093c7cb8184c62d77386d973775a8e1a38fa1c43e824720 data/benchmarks/raw/vstar_bench/direct_attributes/sa_4988.jpg
|
| 718 |
+
3a29d1ef67a961b3d917c5c6aa21195080fc2aac829177ac2d4e8b82411c8356 data/benchmarks/raw/vstar_bench/direct_attributes/sa_4988.json
|
| 719 |
+
df3e6b30103b0d85bb7170a78ef4c1cee92b829ce7567c7aaffc05eb7cd8baa2 data/benchmarks/raw/vstar_bench/direct_attributes/sa_50442.jpg
|
| 720 |
+
39bf2a92ae366cf4681d52e1c07b0b67e43b11da7ccbf0ca0d5970eb365de1b9 data/benchmarks/raw/vstar_bench/direct_attributes/sa_50442.json
|
| 721 |
+
20f87897e8c8603d2650e678a9751d1361f99c3bfdbc5611d48ef04cfff577d8 data/benchmarks/raw/vstar_bench/direct_attributes/sa_50451.jpg
|
| 722 |
+
84985e0710509c80725d94f89af7dc00b4f22b3ec63ef332647338a1c2224350 data/benchmarks/raw/vstar_bench/direct_attributes/sa_50451.json
|
| 723 |
+
1809cc9e7676908bc28d63caa1ee5103f49e7442c65d26538992581fbbba7553 data/benchmarks/raw/vstar_bench/direct_attributes/sa_51837.jpg
|
| 724 |
+
ee5087bcbfc478564eabd7146883c670568e60bdd59367a2c4e32a16ab860f7f data/benchmarks/raw/vstar_bench/direct_attributes/sa_51837.json
|
| 725 |
+
d5e1101f6757c89cd9fde60822a22cedeeed8d3453bc6b7eb6e9e4a031e6886c data/benchmarks/raw/vstar_bench/direct_attributes/sa_52155.jpg
|
| 726 |
+
52abb9bcab5a9553e47eaca04b9e35d40815486ed471a68a43633ec69255d8b5 data/benchmarks/raw/vstar_bench/direct_attributes/sa_52155.json
|
| 727 |
+
ce3648833dc8d324ef23da827759f3cb33c022d5b2f6ea84b6b76a981ddbb4b1 data/benchmarks/raw/vstar_bench/direct_attributes/sa_5281.jpg
|
| 728 |
+
613b3ce17dddc6b744cf017b58d802d5685ecefd33853ad3fc2f8b1d22c206aa data/benchmarks/raw/vstar_bench/direct_attributes/sa_5281.json
|
| 729 |
+
b2f93dfe497314ed0085143652ca4526b8ae6ff4a9de546e9e05b66b4ce883bb data/benchmarks/raw/vstar_bench/direct_attributes/sa_5346.jpg
|
| 730 |
+
12c21c3831892723ec9df9ccafda7b7a2bbbc53a02f35d52aae217b8ad2d6a64 data/benchmarks/raw/vstar_bench/direct_attributes/sa_5346.json
|
| 731 |
+
091c3563fe99da827a1af65ed665a5cd92db49e9523d9debc8aad43bfb84b9c6 data/benchmarks/raw/vstar_bench/direct_attributes/sa_5387.jpg
|
| 732 |
+
fdf96d22df03cf38d631eaf21182afebc178ccf425aada2e67ac3c207c30d425 data/benchmarks/raw/vstar_bench/direct_attributes/sa_5387.json
|
| 733 |
+
a99317784c6e35bb2c1e06a4d20c838024cefc0e5128f5a55e1abf1a1b3e5133 data/benchmarks/raw/vstar_bench/direct_attributes/sa_5413.jpg
|
| 734 |
+
80f1351075a06d27106ee2c08e84109b48f5051f7839f59bbe32023ecd5aca48 data/benchmarks/raw/vstar_bench/direct_attributes/sa_5413.json
|
| 735 |
+
21b65392c99d7e7ae79752c6fae072b199dd681701a5c2f34d3d8ace429f29b3 data/benchmarks/raw/vstar_bench/direct_attributes/sa_55332.jpg
|
| 736 |
+
52244b26896d187fa0985310428def55bd1376444b3fe7861ae8f5bfb63a721a data/benchmarks/raw/vstar_bench/direct_attributes/sa_55332.json
|
| 737 |
+
3961e519b441d898184332d944176a60a5581f092d5190fa21a80307033de6bd data/benchmarks/raw/vstar_bench/direct_attributes/sa_55722.jpg
|
| 738 |
+
a8c6f82bc59f2ae21b588630c8188ee904b92da152dc6aa16fef10fc9968a4b1 data/benchmarks/raw/vstar_bench/direct_attributes/sa_55722.json
|
| 739 |
+
7675f7e6ac60e233a9e0bde4c320bf15260e984544570e6da8049a9270299911 data/benchmarks/raw/vstar_bench/direct_attributes/sa_56573.jpg
|
| 740 |
+
71c78949e3cd1fcf133b7fed7c839d237729feac108c21041ec8a3f48c643e0f data/benchmarks/raw/vstar_bench/direct_attributes/sa_56573.json
|
| 741 |
+
dad6d6c380f312421fa03d263f64ae181656da05b0ee14ae5f8818ea7a235797 data/benchmarks/raw/vstar_bench/direct_attributes/sa_5674.jpg
|
| 742 |
+
34a1adbdf1c21c9fe228821d9c6c208e1264318b4bfc544206237f825fd97973 data/benchmarks/raw/vstar_bench/direct_attributes/sa_5674.json
|
| 743 |
+
e691b60dc53d60a739271c13b0c93664bb8f48661a8c7218ac49805dd6dbc396 data/benchmarks/raw/vstar_bench/direct_attributes/sa_58805.jpg
|
| 744 |
+
3121837d9e06096ca0cbd07007d84ca771b9bad99bf36a2ffc2ad243c121bcb7 data/benchmarks/raw/vstar_bench/direct_attributes/sa_58805.json
|
| 745 |
+
afda17ca70157b030439d211abedeafb97d8ee8ee2db460d7af528fd591f279a data/benchmarks/raw/vstar_bench/direct_attributes/sa_59482.jpg
|
| 746 |
+
4f9ed1c94d837c5118f41aafff622c3156263e504e0bf3135993a860cadf2c11 data/benchmarks/raw/vstar_bench/direct_attributes/sa_59482.json
|
| 747 |
+
44e00589023f7271859138616ac7e9f4830aef6034e739fe832798b7f6314ce6 data/benchmarks/raw/vstar_bench/direct_attributes/sa_59664.jpg
|
| 748 |
+
3f1b87759e03505a6e034fc85e284ddcf6f25f16966c3a3682d1dff0d215597c data/benchmarks/raw/vstar_bench/direct_attributes/sa_59664.json
|
| 749 |
+
f72f062d1d20fab8f6fbd2012fe8cbdfb7c4a567e035c1dfebd64f4c2938d6b5 data/benchmarks/raw/vstar_bench/direct_attributes/sa_60786.jpg
|
| 750 |
+
8c80018e431e138e43a9088dc9a72112fb6c8ea9652d20d541856cb26f969084 data/benchmarks/raw/vstar_bench/direct_attributes/sa_60786.json
|
| 751 |
+
e46eaa3269664a06ea9055c67f879704f49b0f9160940a49357168fa8dbcc448 data/benchmarks/raw/vstar_bench/direct_attributes/sa_63876.jpg
|
| 752 |
+
2b824959dda705ffa65e0fd29e14a3d7dc2772447130487656a668498223422e data/benchmarks/raw/vstar_bench/direct_attributes/sa_63876.json
|
| 753 |
+
5620308f53d7fcd62d66d195a5bd0e37733b3b44d6bc3e4e2fee85eb39ce5d5a data/benchmarks/raw/vstar_bench/direct_attributes/sa_6422.jpg
|
| 754 |
+
9f9d39c008ddd7ecb21d74b2cccd64f506a3861ae3981012ad4d0e84a3102fca data/benchmarks/raw/vstar_bench/direct_attributes/sa_6422.json
|
| 755 |
+
e152108fe195987badf1e5e68c5c079f8e047e6f70efae101f7a775635db2fb2 data/benchmarks/raw/vstar_bench/direct_attributes/sa_64897.jpg
|
| 756 |
+
ddf35885a619d6efff8fc6ca391feb4ceb596cc571b4b8a0afb96fb32203b0ff data/benchmarks/raw/vstar_bench/direct_attributes/sa_64897.json
|
| 757 |
+
495e5fc1b20142d0f27b13f4f60c4828c5d201ecbb4497e5180b97253fd8e8db data/benchmarks/raw/vstar_bench/direct_attributes/sa_65370.jpg
|
| 758 |
+
5d1ef89ed82c08a04af1c04e71846ce38ad129afa0620c963e8ad858cafae567 data/benchmarks/raw/vstar_bench/direct_attributes/sa_65370.json
|
| 759 |
+
7253f9bcdef974ea271249d87f2369e7637a964bda7f619d76933ed8574ae9ce data/benchmarks/raw/vstar_bench/direct_attributes/sa_65476.jpg
|
| 760 |
+
8f353fd7ee095bf8c4242a2048c9296fbd0a9095c580d26d2f90d8527b8bea43 data/benchmarks/raw/vstar_bench/direct_attributes/sa_65476.json
|
| 761 |
+
3f8f1beb8c26329dbe97e1c7d6d3900f25cf1be0c72bfece1f74a1989316e697 data/benchmarks/raw/vstar_bench/direct_attributes/sa_66471.jpg
|
| 762 |
+
630b471a1b9c85b31a023512aa87e9548f695f4172e249d3cc450ed50aadabe5 data/benchmarks/raw/vstar_bench/direct_attributes/sa_66471.json
|
| 763 |
+
0b2ef2f07bb690e45b07b8ebd9893126b1044296fd55938d6abdf49cb687a5bc data/benchmarks/raw/vstar_bench/direct_attributes/sa_66657.jpg
|
| 764 |
+
99953e0b19b75eacd6e9264dab694774dcc8185097ea36f91fff32b13bc363c4 data/benchmarks/raw/vstar_bench/direct_attributes/sa_66657.json
|
| 765 |
+
b4a4a836484cfa1f6c7cc56ca6f42b76f9bc92f32af2daa8aac50a1dff546261 data/benchmarks/raw/vstar_bench/direct_attributes/sa_66699.jpg
|
| 766 |
+
e4b1a77ddb67416b710aeeccb4960bb931076d1c68f2a36393a77a49bf1a216f data/benchmarks/raw/vstar_bench/direct_attributes/sa_66699.json
|
| 767 |
+
9c7b7684c5d697679a8d8c884d0cb99863ef032407fa78e68384d6b5214ea4a0 data/benchmarks/raw/vstar_bench/direct_attributes/sa_68625.jpg
|
| 768 |
+
4356ec77df200c29acc7da637a9a32ce1748c879f3d677e1b8b568a4bc387ed3 data/benchmarks/raw/vstar_bench/direct_attributes/sa_68625.json
|
| 769 |
+
31d9f95cdfa881617815efd578a0074aa0156d4a34ff8ca20dc2acef6ec6e057 data/benchmarks/raw/vstar_bench/direct_attributes/sa_6965.jpg
|
| 770 |
+
4d094ecd317665f02c3ead761de5c656af44f4602d7c9f766bc0050222bc12ba data/benchmarks/raw/vstar_bench/direct_attributes/sa_6965.json
|
| 771 |
+
35f816a2393e5ba31fb50718495336adaee52e5f3bbffee2ac0e71e4531a65c0 data/benchmarks/raw/vstar_bench/direct_attributes/sa_70112.jpg
|
| 772 |
+
aecd119b9b9444254b0a4b0ac1b12601cdefe4dafd539724be88ecee97a7135f data/benchmarks/raw/vstar_bench/direct_attributes/sa_70112.json
|
| 773 |
+
44c5778c8836984a0d2061f739e633d3e086a12880872bc8bee36f4a36025df5 data/benchmarks/raw/vstar_bench/direct_attributes/sa_7018.jpg
|
| 774 |
+
6d898d9b0ac309e15d385df1c22e4c93cace4ff84b9cfcfd5be55595c2b26d9d data/benchmarks/raw/vstar_bench/direct_attributes/sa_7018.json
|
| 775 |
+
6349b23527a846a18675aa243e4282370b38f97e5fafa630893622a51dd4d152 data/benchmarks/raw/vstar_bench/direct_attributes/sa_7065.jpg
|
| 776 |
+
ea613da4d9a8a6047cb063b612086b574eb8df9fb113ea8fdf120de40585c7b1 data/benchmarks/raw/vstar_bench/direct_attributes/sa_7065.json
|
| 777 |
+
0f751f49cd0e7bacae26bc7aabd0d737e869e1bfac8061dc4f86d7ea7e726fc7 data/benchmarks/raw/vstar_bench/direct_attributes/sa_7081.jpg
|
| 778 |
+
c1973ac18c6472c6b6c92da7bbb5095a069ac29fa231bcf67a5195f2bdbc7922 data/benchmarks/raw/vstar_bench/direct_attributes/sa_7081.json
|
| 779 |
+
22f0696025998e56fa24ffca4ed30a4da8ad8402a95aef67377bfa5815a4fd35 data/benchmarks/raw/vstar_bench/direct_attributes/sa_717.jpg
|
| 780 |
+
de6523553ebd47d9c51ddf793ea7fd3dc78a4f2f5e595845aba77ecaa0216888 data/benchmarks/raw/vstar_bench/direct_attributes/sa_717.json
|
| 781 |
+
82c745aeddb8b0b5a66259ac4e63a6f415dfa5eb0031409611a323b196063757 data/benchmarks/raw/vstar_bench/direct_attributes/sa_7347.jpg
|
| 782 |
+
3af151e080eacd77e48122cb8fdb75c6a33f4b0e103d9236e5ab2bdad53e48fd data/benchmarks/raw/vstar_bench/direct_attributes/sa_7347.json
|
| 783 |
+
66899d728bd6ebcd063f3eccd67964b9c9500e1d4f62d2ab87c7a61972a55d2f data/benchmarks/raw/vstar_bench/direct_attributes/sa_7428.jpg
|
| 784 |
+
3436c79a3dfc70b84e15b4e5a3a3c9eb5422ca560c2e8ccdf4a0d1e4a501baf1 data/benchmarks/raw/vstar_bench/direct_attributes/sa_7428.json
|
| 785 |
+
870500384ffae8497c8275db6a522e646c4675d10b7d0a00a11cd529f6f2483c data/benchmarks/raw/vstar_bench/direct_attributes/sa_7429.jpg
|
| 786 |
+
49aefb2a9da163d5d9964d8f97c5b4cf0d0e8281af187884d6a1bad5286b8e6e data/benchmarks/raw/vstar_bench/direct_attributes/sa_7429.json
|
| 787 |
+
28fd54a4ae9fa62e0d2a99499ce6b877f3046ccf5d158870bf0bbaabe4c0c419 data/benchmarks/raw/vstar_bench/direct_attributes/sa_7609.jpg
|
| 788 |
+
8e1104e8fe39bf5995b2e3ad0a47941f6b1314d330d008603dd626f8e3c385ae data/benchmarks/raw/vstar_bench/direct_attributes/sa_7609.json
|
| 789 |
+
10eff9ab60a8af14972a6e666f7f1facf69a85532a1ffd15083450ca4f500b9c data/benchmarks/raw/vstar_bench/direct_attributes/sa_7668.jpg
|
| 790 |
+
3e7e192b9d9a6a87f1d12edcfa203c713a9262210a25e56528d7b3f48c2455f6 data/benchmarks/raw/vstar_bench/direct_attributes/sa_7668.json
|
| 791 |
+
4081ecf7e44b1723a82ebd838845aaf332f60db91e85faa12dc1a964d5855685 data/benchmarks/raw/vstar_bench/direct_attributes/sa_7683.jpg
|
| 792 |
+
fedb22c5a55a6458bc1a72a043e6914c0efdebc4623da930386916b2af12920b data/benchmarks/raw/vstar_bench/direct_attributes/sa_7683.json
|
| 793 |
+
24e3395b46db153c59e5c373120012210eaa1348b956e97a109d42552f314ce7 data/benchmarks/raw/vstar_bench/direct_attributes/sa_79105.jpg
|
| 794 |
+
e33ffb4f7993532bc821758c4e759bb8db69a3051eac8ce11e808675fa36991f data/benchmarks/raw/vstar_bench/direct_attributes/sa_79105.json
|
| 795 |
+
3797dd3109bba96724d6e1143c09f225f06faa1c30e7cde0f15bf47a4c06916b data/benchmarks/raw/vstar_bench/direct_attributes/sa_80352.jpg
|
| 796 |
+
920ce7d3a903da6ee0731c74a242e0959169f2a15b73ae7b4b6c6107e45fa9f7 data/benchmarks/raw/vstar_bench/direct_attributes/sa_80352.json
|
| 797 |
+
2b83fc7437a8cba84b9f86b27be11021709f39dee0d78358d3bae0dcd7444221 data/benchmarks/raw/vstar_bench/direct_attributes/sa_80880.jpg
|
| 798 |
+
81b5eabb52905b8b43c63445dd90aef4a3e1ecfe5b0de15c1ba5cc8a5d04848e data/benchmarks/raw/vstar_bench/direct_attributes/sa_80880.json
|
| 799 |
+
5d500d4e76f84fc9537833469f9c3cbf4d72f8b61c6b7245792f8b340eaea2c2 data/benchmarks/raw/vstar_bench/direct_attributes/sa_84131.jpg
|
| 800 |
+
7509b3239eadeaabbbd640fa69865ecba363c92c1489ea23343e8eec2768fa6b data/benchmarks/raw/vstar_bench/direct_attributes/sa_84131.json
|
| 801 |
+
0a8fd0123fa99598363b94e042de51f72bc79347e11c80f6f4e2725f8cad9e8b data/benchmarks/raw/vstar_bench/direct_attributes/sa_86101.jpg
|
| 802 |
+
13ca95fd699ccdd08afc6fec292d2b0c55629da98f7c038fb84f399cea9fd137 data/benchmarks/raw/vstar_bench/direct_attributes/sa_86101.json
|
| 803 |
+
d9cdafae3804b8dc544390351fe66a3833972f1132d4fb3d4f5b7558c426a479 data/benchmarks/raw/vstar_bench/direct_attributes/sa_86882.jpg
|
| 804 |
+
d36528bd4f5f6cd2799c7e5b56e75d171eeafb705f84572a73fab5fdd3c088bd data/benchmarks/raw/vstar_bench/direct_attributes/sa_86882.json
|
| 805 |
+
00eb62c67abe6959a6a167fbea979d967128b6bf3fce2a418b9daef07d1e9280 data/benchmarks/raw/vstar_bench/direct_attributes/sa_9019.jpg
|
| 806 |
+
858a3b83e94c1dfdda999903985efc143b90d73fb572bd23e69137e88bc7c776 data/benchmarks/raw/vstar_bench/direct_attributes/sa_9019.json
|
| 807 |
+
3a3c3a39484f7b916651b2b549c2e8972693f0496176b6fc7228c63d41c4d157 data/benchmarks/raw/vstar_bench/direct_attributes/sa_9230.jpg
|
| 808 |
+
5fda69ffe8f08a2749a31787e14af207dd0aa776e3fdcb62ddcbb6cd2b4d2f84 data/benchmarks/raw/vstar_bench/direct_attributes/sa_9230.json
|
| 809 |
+
d0742ff1ad44411264237aa4c6e6e0fdca690cfdc66266b1c1e09a12d0130699 data/benchmarks/raw/vstar_bench/direct_attributes/sa_9611.jpg
|
| 810 |
+
cbdb7ed4c1ba27d61cebc5d4eb4f2b550662d183c9dbed54f19e496ba00411c8 data/benchmarks/raw/vstar_bench/direct_attributes/sa_9611.json
|
| 811 |
+
6a2395e0df954a06dc8ad79ac23e83df0c5dc7fd146ebaa42ef4c8f203d4f806 data/benchmarks/raw/vstar_bench/direct_attributes/sa_9877.jpg
|
| 812 |
+
2681d2f6bada6add2cb93babca5c8b9f4e6863584fc944b1b0fc06edbc6b1dac data/benchmarks/raw/vstar_bench/direct_attributes/sa_9877.json
|
| 813 |
+
14f0428e4b6b775ddf201d557620672a62ac7fef1e4cf5949411864eef7031bf data/benchmarks/raw/vstar_bench/direct_attributes/sa_9957.jpg
|
| 814 |
+
5b9f31d1f2f9a9c4d671928be30a44b56aa9112036c7cea4b0655dafffd5ee13 data/benchmarks/raw/vstar_bench/direct_attributes/sa_9957.json
|
| 815 |
+
5491aed21a5a7c4fca97489bb542ba29309ddb3ab4e1fda2b47a8734ae55bca8 data/benchmarks/raw/vstar_bench/relative_position/sa_10313.jpg
|
| 816 |
+
145f89a2193400dd647e3edd98040ece17802cd3f98e8fd99a5a17969606fe4b data/benchmarks/raw/vstar_bench/relative_position/sa_10313.json
|
| 817 |
+
50c3d32bb86f6b6b0d72130f5a75d3504a083aa0b877bed7e919671d53d85838 data/benchmarks/raw/vstar_bench/relative_position/sa_19421.jpg
|
| 818 |
+
aa11e94e2294f4ddbfe0f20a28dacd3f9d4cbfba352248fbdbe9610b12e65d4e data/benchmarks/raw/vstar_bench/relative_position/sa_19421.json
|
| 819 |
+
920ee19619c00bf4d047508abda10fc3473e77dcb965c5ba2f9fe956f08912be data/benchmarks/raw/vstar_bench/relative_position/sa_23098.jpg
|
| 820 |
+
1ac6a4ce30351f2ec89dbf1fe1cd888853660ca4ff55a00c3e75d0bc3502c711 data/benchmarks/raw/vstar_bench/relative_position/sa_23098.json
|
| 821 |
+
8ae15b659062f128c888efeb9ac37eda433445e2e6e1bd2b55da3a948ac18b60 data/benchmarks/raw/vstar_bench/relative_position/sa_23264.jpg
|
| 822 |
+
e007b9b9cac216bd5d4239a6060f46e496b64ada25da236b144610366d46edc7 data/benchmarks/raw/vstar_bench/relative_position/sa_23264.json
|
| 823 |
+
90cc4aded19429d529793b50aa10ef2744bd09a1797c314a11a5a976afe58dd3 data/benchmarks/raw/vstar_bench/relative_position/sa_23298.jpg
|
| 824 |
+
61d9cba4442c33d741988e1ffb46c3bd2322d78789ba7ea19b3a010372fb8044 data/benchmarks/raw/vstar_bench/relative_position/sa_23298.json
|
| 825 |
+
e93342f9d7063a579ad86523e6514e5157590d0427026a8cad03fa26fc904085 data/benchmarks/raw/vstar_bench/relative_position/sa_23575.jpg
|
| 826 |
+
c51e8c3991a132de9ca0f936aabd163642f60153e9f14ba2f3be984c30e2c566 data/benchmarks/raw/vstar_bench/relative_position/sa_23575.json
|
| 827 |
+
a5ef8088df1cf73a56aeb351056f3ebc9e999fae4a9584026b15e1ac29b2e9dd data/benchmarks/raw/vstar_bench/relative_position/sa_24031.jpg
|
| 828 |
+
bc1548406c3f12d3c957e9e7073434c67b4a29fb58c947c55609e4860a301adc data/benchmarks/raw/vstar_bench/relative_position/sa_24031.json
|
| 829 |
+
d5c7c6cee7746acf226e48897c89367eb4b4d30a322d40e9b4ce813e2457a53c data/benchmarks/raw/vstar_bench/relative_position/sa_24464.jpg
|
| 830 |
+
69ccb1869d93cdcbf23426548e25083bff2661e660bba5d0f5cf075665ff1ccd data/benchmarks/raw/vstar_bench/relative_position/sa_24464.json
|
| 831 |
+
1ef4d928d78bf1e285cd92f2d34c229513c6e6a85c771347c8e99e7f31311273 data/benchmarks/raw/vstar_bench/relative_position/sa_24971.jpg
|
| 832 |
+
a84710ff7338cbc95f86f91fef92eaa85f0eb6004424c5fc53fecb624824ab8f data/benchmarks/raw/vstar_bench/relative_position/sa_24971.json
|
| 833 |
+
685f71fe37ec617aba34be9970d91722c8caaabf69b149777b16312c9594fb7d data/benchmarks/raw/vstar_bench/relative_position/sa_25678.jpg
|
| 834 |
+
831c7fde10ab8be08a68cd4e1b7e7ad7be85e7de6635cf8c6d6946546896a64e data/benchmarks/raw/vstar_bench/relative_position/sa_25678.json
|
| 835 |
+
941f61e7145d29ecdfc839c8e35006c13f48af76ab832422ad4ffea8859a4aa9 data/benchmarks/raw/vstar_bench/relative_position/sa_25747.jpg
|
| 836 |
+
f5731cc972268d588b6e86865c4c164ae0fab36f91bd7fe30f43adb2b9316c1f data/benchmarks/raw/vstar_bench/relative_position/sa_25747.json
|
| 837 |
+
d8571fbed941515de45006a17386df8281bd382ef4d311bb3fcf3442c9721de8 data/benchmarks/raw/vstar_bench/relative_position/sa_28639.jpg
|
| 838 |
+
fd55bea45c6a78b0e928e13391981eb95dd55350a98e435e407489a65554d255 data/benchmarks/raw/vstar_bench/relative_position/sa_28639.json
|
| 839 |
+
78678463d38a919623d3858a8f056bcbe890d51b58d322e4dc62defdf4d8dcf4 data/benchmarks/raw/vstar_bench/relative_position/sa_29022.jpg
|
| 840 |
+
d33a341d6e9d018aebfef648aec28970e824c211bf51a44eb248f014e7d05edc data/benchmarks/raw/vstar_bench/relative_position/sa_29022.json
|
| 841 |
+
9e6df6c240572ee243392281377d35eaab96fa34f0f9a07a1d47b9fcafdaa48a data/benchmarks/raw/vstar_bench/relative_position/sa_30441.jpg
|
| 842 |
+
18d83caa7edb6458084bf8c679230ac29b02d1042e0e48e0123cdc92155ef048 data/benchmarks/raw/vstar_bench/relative_position/sa_30441.json
|
| 843 |
+
d72f31fb1b2521c36c45cf6097c168861250ec71b7234962f467aa20b0f08e2d data/benchmarks/raw/vstar_bench/relative_position/sa_3053.jpg
|
| 844 |
+
f406c174428664b9ca02f13789802c3f53d4ac34e2053bffa4471401aeb69a62 data/benchmarks/raw/vstar_bench/relative_position/sa_3053.json
|
| 845 |
+
67cb41b840b2ff7c173b3d78b7dce065f524ab97df696f12320ff3a6a5b70d31 data/benchmarks/raw/vstar_bench/relative_position/sa_31038.jpg
|
| 846 |
+
0890e089cabb76bc140eeb566409131098ca6755139dcea83bcd1097be32e5be data/benchmarks/raw/vstar_bench/relative_position/sa_31038.json
|
| 847 |
+
a5285c32e56c711aab09793a2f4f5cd2a947e3083cb5a061373b92e95d564a7d data/benchmarks/raw/vstar_bench/relative_position/sa_31586.jpg
|
| 848 |
+
7dd5151a7cbead0586e36e7ba810c6a75b9a875b1ea1aafb03526ce118043c76 data/benchmarks/raw/vstar_bench/relative_position/sa_31586.json
|
| 849 |
+
9021d99227c04b45680a66392a62f5083a4ede83b5b497ec1dbd2232937c1ea6 data/benchmarks/raw/vstar_bench/relative_position/sa_31784.jpg
|
| 850 |
+
2b8fd7b95b1e32d6b58ef3f5abbfadc440d4e92f82329b3290d4a070fe45b400 data/benchmarks/raw/vstar_bench/relative_position/sa_31784.json
|
| 851 |
+
3d4f21c15443d1d21933cdd6a33a3080ffbdbebb9486e4e39321109eb1b5ec93 data/benchmarks/raw/vstar_bench/relative_position/sa_3194.jpg
|
| 852 |
+
bb0e81285104b49ae8ccbb0b5eb4b594ff1e1a55f1b577802942fff31e04a7f5 data/benchmarks/raw/vstar_bench/relative_position/sa_3194.json
|
| 853 |
+
5d83a4c58c4c98705361570bc1e36d092f80c841c8b30296ce9e29e6bed71fa3 data/benchmarks/raw/vstar_bench/relative_position/sa_3222.jpg
|
| 854 |
+
cb454b60cf498b7de1ce0c87d0fa1124240ec40d1628c22625fb35402ef3738c data/benchmarks/raw/vstar_bench/relative_position/sa_3222.json
|
| 855 |
+
9210728931a826428b0f17d2340f36418a5d64e0c1c88d5af9fd66b8412284c8 data/benchmarks/raw/vstar_bench/relative_position/sa_33280.jpg
|
| 856 |
+
24cc223808aaa31b0e0fadec1fc1a2b2c0f743fdb61eb54942880b394b617ac3 data/benchmarks/raw/vstar_bench/relative_position/sa_33280.json
|
| 857 |
+
a26ccd8df87803c6bc207f7215640400cd4fc8ce8f2a00047f9d9358d4a20ac1 data/benchmarks/raw/vstar_bench/relative_position/sa_34291.jpg
|
| 858 |
+
8a859749010065ba05330481ca0825da29e2dd1aa050ffc37daa807f52fbafcb data/benchmarks/raw/vstar_bench/relative_position/sa_34291.json
|
| 859 |
+
26560e898003ef04f807bd997744a1b15b2cfd1235b15069206808d6ce38932f data/benchmarks/raw/vstar_bench/relative_position/sa_34785.jpg
|
| 860 |
+
2bceaa85d5d41b7b879d3a46a2c437b673db9d3fcee33fbc6b52b07f88a1d6a9 data/benchmarks/raw/vstar_bench/relative_position/sa_34785.json
|
| 861 |
+
263c0fdea126ebc5dbc0689a068c13ace7afde0ea2764b0e9c47ff70a326b7fb data/benchmarks/raw/vstar_bench/relative_position/sa_36787.jpg
|
| 862 |
+
8cc093a0dac762f2ae502002334cad71a2a55b6e64511ddb4b6c2aaf4af04dcb data/benchmarks/raw/vstar_bench/relative_position/sa_36787.json
|
| 863 |
+
654a632d8050709a04d491923c4b28d920f547ed3a21a9241a2ddaaf198b8db0 data/benchmarks/raw/vstar_bench/relative_position/sa_3796.jpg
|
| 864 |
+
1c332f68e8858351515fc09ba43729d27904c5942fb24e267d6e2eeb4ee537c8 data/benchmarks/raw/vstar_bench/relative_position/sa_3796.json
|
| 865 |
+
75940a9b9211e7f2e0244612fc991dbce4f88aa0151bc67f7ea42a0a6c75b110 data/benchmarks/raw/vstar_bench/relative_position/sa_40188.jpg
|
| 866 |
+
647cd751661b337634774ab59a534309bc5d1d0e6497828bb934edd9ced98d40 data/benchmarks/raw/vstar_bench/relative_position/sa_40188.json
|
| 867 |
+
8b0a1a03b1c64eab314d698d290e672461d7baa69b62bb3ef6ed0b2f78f09ad5 data/benchmarks/raw/vstar_bench/relative_position/sa_40555.jpg
|
| 868 |
+
0f18c97361a2406b6fdb6f314045b89081adb8059f8096e336209bab7e1b764d data/benchmarks/raw/vstar_bench/relative_position/sa_40555.json
|
| 869 |
+
4933e8cdce2e5a82b882754dcacf8574a832017b23a0bf863be00a6ecb19e1f3 data/benchmarks/raw/vstar_bench/relative_position/sa_40977.jpg
|
| 870 |
+
c71c8b32b507c760f31709453b6c328d4975c23329fabdfcb195f0e4ca0a79bf data/benchmarks/raw/vstar_bench/relative_position/sa_40977.json
|
| 871 |
+
26983f23d4551c3a2499918b096ea0cea30cd05cf89eace0bcf0ca741327c6b3 data/benchmarks/raw/vstar_bench/relative_position/sa_4137.jpg
|
| 872 |
+
7d92749bbac626a29c34f6f5e45f849653cac0f10905912de0792c0697bf688b data/benchmarks/raw/vstar_bench/relative_position/sa_4137.json
|
| 873 |
+
5b54d1cbdacce50cd197d6c2940790486ed0d88ddcb87f2d916dbbec90a672c3 data/benchmarks/raw/vstar_bench/relative_position/sa_41869.jpg
|
| 874 |
+
d57d4628e8803796fa38fab9d3769dd64330cddc9c30c80688d3ffd3a209216d data/benchmarks/raw/vstar_bench/relative_position/sa_41869.json
|
| 875 |
+
01e03af84f9b982da1b68ec4b27c29f831d621115e9ffe47bab2da1f6877d872 data/benchmarks/raw/vstar_bench/relative_position/sa_42676.jpg
|
| 876 |
+
85863fc6fc00331b774775d6abbed0019829ac8affc28fcbaf709026067fbbc2 data/benchmarks/raw/vstar_bench/relative_position/sa_42676.json
|
| 877 |
+
419db1f0ffb5348d6ed2d1e5d8560a4e0a37413ad47f27ed8d5fdae44bf73e33 data/benchmarks/raw/vstar_bench/relative_position/sa_45802.jpg
|
| 878 |
+
f39495c2c249520fc79317e3edd76df6eac9153dddfb5b8813594f327ad801f7 data/benchmarks/raw/vstar_bench/relative_position/sa_45802.json
|
| 879 |
+
8469681b55bf322b37a444dd8e7046403164cd00b3eae6edbc89716fa8bf7700 data/benchmarks/raw/vstar_bench/relative_position/sa_46221.jpg
|
| 880 |
+
74a77ded84fc4941db2472b890ca12e24c8cadd34f3a66d487563afe4ce823bb data/benchmarks/raw/vstar_bench/relative_position/sa_46221.json
|
| 881 |
+
dcbfafc1e4d7f40621f7531543e881bf2fce779d96b4e9546f566fabc8bd62f4 data/benchmarks/raw/vstar_bench/relative_position/sa_4953.jpg
|
| 882 |
+
ef0505b9faa75461e1fe3a130fc9042527eaaa4791566fba427231abb28de0bb data/benchmarks/raw/vstar_bench/relative_position/sa_4953.json
|
| 883 |
+
4260c707662dfff059320af7d7e30d14ee8864ef908724e769cac4f4e7eba99a data/benchmarks/raw/vstar_bench/relative_position/sa_49792.jpg
|
| 884 |
+
72166dbbd88febc5700d511179781c19e905166e055c330be222582ebf34cccb data/benchmarks/raw/vstar_bench/relative_position/sa_49792.json
|
| 885 |
+
fa3c7bfca90dafb81e9b4fc64bfa798bc49afa60f1d0dd8144491f017f25ed1e data/benchmarks/raw/vstar_bench/relative_position/sa_5156.jpg
|
| 886 |
+
b2f3fb5cb3e408538f28dcd98d0314718a5e41666a067825e578cedefe24b001 data/benchmarks/raw/vstar_bench/relative_position/sa_5156.json
|
| 887 |
+
03d35c80a834947628ad9b0e0aa80550c7117409ba9548a022be019caddd630f data/benchmarks/raw/vstar_bench/relative_position/sa_51681.jpg
|
| 888 |
+
9d34b87ab67b46927f0366b98fa72fb77281cc63a3934a8a2ed15d6842db519d data/benchmarks/raw/vstar_bench/relative_position/sa_51681.json
|
| 889 |
+
e6662fc523b62332236443c31323e0bc76baf873fa8201d3575b78bc53fcaf37 data/benchmarks/raw/vstar_bench/relative_position/sa_52228.jpg
|
| 890 |
+
063f3bf5a7f5bc0c09026bdd0efaa2618908ae78791ad2c9307f549c2adfef71 data/benchmarks/raw/vstar_bench/relative_position/sa_52228.json
|
| 891 |
+
af1c0e611a5c633c40ccb3c8b29ffd304411ae0ffaff23ca88ac19bbaaa343b3 data/benchmarks/raw/vstar_bench/relative_position/sa_53377.jpg
|
| 892 |
+
4aa19b0a89d46b9930ddf9fede51221c068cf4dd7f525258a2cc88e60a7f6118 data/benchmarks/raw/vstar_bench/relative_position/sa_53377.json
|
| 893 |
+
69a87b03bb8b46583abb956676e6d26fef0d00e6ef351415f77a7d3c0671bb99 data/benchmarks/raw/vstar_bench/relative_position/sa_53509.jpg
|
| 894 |
+
255b0d0f8c35d83e4aefee22059cdbc7d8f6383365eceef7dd1ee091dfac2d95 data/benchmarks/raw/vstar_bench/relative_position/sa_53509.json
|
| 895 |
+
66c53b754e8aecb020082e8b81416e7d9f4e01e236973d8827a355d8477565a0 data/benchmarks/raw/vstar_bench/relative_position/sa_5465.jpg
|
| 896 |
+
74646075e0cc49abce00ae126e44e91eb8d4c269b1d061bb38a50aceb892766d data/benchmarks/raw/vstar_bench/relative_position/sa_5465.json
|
| 897 |
+
ef160def0cdca690bf981da2a35e860b5089d5bc3d365141e1b3e2390e524563 data/benchmarks/raw/vstar_bench/relative_position/sa_5593.jpg
|
| 898 |
+
2a8fe6050f2c7c9fb668ba1386e34fa727d78d68e7b253e863ea0eb12c0cd664 data/benchmarks/raw/vstar_bench/relative_position/sa_5593.json
|
| 899 |
+
9482ef5b7de421ece5d592df1b027001a31e8ccfc42aa7c470096f9948b9f230 data/benchmarks/raw/vstar_bench/relative_position/sa_5613.jpg
|
| 900 |
+
ff3b8e4777b1f4ab4b8bad4743985274ef800d529b615711fbb441ebd2030278 data/benchmarks/raw/vstar_bench/relative_position/sa_5613.json
|
| 901 |
+
ebf3418eeb147ffa42dcc66615a08a45bb3a983034455599dbc1c5485531df42 data/benchmarks/raw/vstar_bench/relative_position/sa_56362.jpg
|
| 902 |
+
a74526dea02fdb9d41afc2ede2234e319e43f96f38dc915bea13e3538b80bdad data/benchmarks/raw/vstar_bench/relative_position/sa_56362.json
|
| 903 |
+
c39ac6bbe1dd4bda1e3c52a2f93f0d3e29ed1a0b169af6041f55a25c9f614960 data/benchmarks/raw/vstar_bench/relative_position/sa_57152.jpg
|
| 904 |
+
757e02a6a2db3b9904f7261b273d5db3c8939a40adfe8b8d2087e3d85fb7ab18 data/benchmarks/raw/vstar_bench/relative_position/sa_57152.json
|
| 905 |
+
e1259170f87f6fd4654cc4b8002f9fadb042fcdef955c8022283fc5a61f6fca6 data/benchmarks/raw/vstar_bench/relative_position/sa_57960.jpg
|
| 906 |
+
9e675fce0142add7f41d960e99efcf77c268fe953e84bfd60d2df5e4a4ddcedb data/benchmarks/raw/vstar_bench/relative_position/sa_57960.json
|
| 907 |
+
e6f507a61aa384a69ad8a390365d5298303e58bdfdc2800cc9d70f096680169e data/benchmarks/raw/vstar_bench/relative_position/sa_58331.jpg
|
| 908 |
+
2a75a8206d01103a1f7f7518d6941caa258291d0da894370e26d6512b9865a39 data/benchmarks/raw/vstar_bench/relative_position/sa_58331.json
|
| 909 |
+
31d64177507dace7acbdd2eb4b5315e6b1d8a3f86dd40b482c680f4881dbb29d data/benchmarks/raw/vstar_bench/relative_position/sa_59351.jpg
|
| 910 |
+
09acc98572ee71389453a961b747dbb83f50740b50aa600220ea0b520e5c2e1e data/benchmarks/raw/vstar_bench/relative_position/sa_59351.json
|
| 911 |
+
610bf00d3a90e018d4a2927f3354f68e5473d9f5e6e95f0279aa6f0b3ccb2888 data/benchmarks/raw/vstar_bench/relative_position/sa_61121.jpg
|
| 912 |
+
3392c3b2a8209816b6503d459be27fea4707a43439584dea3cf355c082d79c7a data/benchmarks/raw/vstar_bench/relative_position/sa_61121.json
|
| 913 |
+
b64b000a753943275288cc64ffcb4b191e12c457549bb34ce1370183bafd1083 data/benchmarks/raw/vstar_bench/relative_position/sa_61594.jpg
|
| 914 |
+
df131fac39b90cebf3197afec27562cd18504b3063733ec53d11f954e5baf576 data/benchmarks/raw/vstar_bench/relative_position/sa_61594.json
|
| 915 |
+
95e65f8223b3d0bdfaa4793e2791efd675d353707fc7e454f8f57b3051c60493 data/benchmarks/raw/vstar_bench/relative_position/sa_6183.jpg
|
| 916 |
+
01f052efe42b30c10950743ae9de3bf44372cd340cd580241790282029c4bad3 data/benchmarks/raw/vstar_bench/relative_position/sa_6183.json
|
| 917 |
+
d76f6f9875b7cd9e2b69e274202200d239c4920a5ac5e493383dc60026730952 data/benchmarks/raw/vstar_bench/relative_position/sa_62287.jpg
|
| 918 |
+
b5069d5ec85c3bdc665cdc6b4c7c3397f1f6706be846309169f31630f86fdf26 data/benchmarks/raw/vstar_bench/relative_position/sa_62287.json
|
| 919 |
+
c0e79858b9cbb8f2108d0234cd5bf44389c75cd219546d79e4ab8f8b9ee729b2 data/benchmarks/raw/vstar_bench/relative_position/sa_62783.jpg
|
| 920 |
+
86fd4f1de870835b6dfd256a9fa70f27e916f2780882f20b91835a84bf1832fd data/benchmarks/raw/vstar_bench/relative_position/sa_62783.json
|
| 921 |
+
1e009b4410893a072cc2a46dcf9c3669df8984fed431a2ea72ad522062bb1f39 data/benchmarks/raw/vstar_bench/relative_position/sa_64142.jpg
|
| 922 |
+
f24ab3d49d8bcbc4eef293800c29c88cef080cf5a34df062870eb3de30f2eeee data/benchmarks/raw/vstar_bench/relative_position/sa_64142.json
|
| 923 |
+
b1ed607f11f22db5e06098ef7ae02a99429ea4d7a687d6bf5b1c9f0ee65f656b data/benchmarks/raw/vstar_bench/relative_position/sa_64257.jpg
|
| 924 |
+
14f51da03ab9663e2f0cb04a2269dc6f676de9d5b7b9e39d6cf8a0da138fc48e data/benchmarks/raw/vstar_bench/relative_position/sa_64257.json
|
| 925 |
+
b20cc8c964d1793a741b34198b7fc40cb768f81b6db98ee39a7cd3ae0cec819e data/benchmarks/raw/vstar_bench/relative_position/sa_64554.jpg
|
| 926 |
+
4448b983811f49ebb21e0486f266fe27d70c1a0bd1e41478c6159b179bc5e715 data/benchmarks/raw/vstar_bench/relative_position/sa_64554.json
|
| 927 |
+
2a36683602e7acc1dbab8c79c37b31ad3e228e4ba3917845855bd784fe26ee34 data/benchmarks/raw/vstar_bench/relative_position/sa_6531.jpg
|
| 928 |
+
8b9a922c32d6834e3830cb3e8342e9e171df8ee0318acef6a6907c67464b6b62 data/benchmarks/raw/vstar_bench/relative_position/sa_6531.json
|
| 929 |
+
4951d918f0d85fddab875c4e1b50299ec4e4766cb11272bc8d204623fe411113 data/benchmarks/raw/vstar_bench/relative_position/sa_65606.jpg
|
| 930 |
+
3417a9054dbdeb1cdf45ecd4fae274f592af89d16c987f77bb05a076bfbe04a9 data/benchmarks/raw/vstar_bench/relative_position/sa_65606.json
|
| 931 |
+
cf3ec0b4a40090b4ad767eedaf8d6ea4979e760af4cd5402193242accc08f4b7 data/benchmarks/raw/vstar_bench/relative_position/sa_65804.jpg
|
| 932 |
+
91a289565258f5e5921dbeca2dc053570d1b18e191ce67241ab6c524264207d0 data/benchmarks/raw/vstar_bench/relative_position/sa_65804.json
|
| 933 |
+
40682483372a90b0eb46e2dbe45f4e57a224b315b1a5d5b83ecaac82a73a99c7 data/benchmarks/raw/vstar_bench/relative_position/sa_6887.jpg
|
| 934 |
+
8e51775d17838a39f4d9ab6598c40a2d502f2310172dda3a1284a2b7c84b2424 data/benchmarks/raw/vstar_bench/relative_position/sa_6887.json
|
| 935 |
+
36879ad264a49dec27d06294f9a60aa94bf86cebcc0cc130aeb4e5c418e2d3cb data/benchmarks/raw/vstar_bench/relative_position/sa_69550.jpg
|
| 936 |
+
22b017aeb5f132a491a1f0d8f3fe9a5ed6e9d881a7e8b98d821eda9f995f1bf5 data/benchmarks/raw/vstar_bench/relative_position/sa_69550.json
|
| 937 |
+
28a5612eec49012d7cc88f936f36be8ee6dfc640b398f036f1ea6ad757432abb data/benchmarks/raw/vstar_bench/relative_position/sa_69634.jpg
|
| 938 |
+
7a651ecc9fd2dc8f6f239e029b67f08ae960a134ff0f8d8d1d57d6afcd9114db data/benchmarks/raw/vstar_bench/relative_position/sa_69634.json
|
| 939 |
+
1227289d1fea51078f0d0183058803bdcad16060d1de84a3e01a1da8ed390c08 data/benchmarks/raw/vstar_bench/relative_position/sa_69962.jpg
|
| 940 |
+
1d9a8670250ea8744ae77243b6bc277c77bd7a92de18c967c0e61d5168e1c02c data/benchmarks/raw/vstar_bench/relative_position/sa_69962.json
|
| 941 |
+
eee1069d186cd6f2cb666c3fb8ab54b623ac9ad2bc9a04f299bcea7ac1800dd6 data/benchmarks/raw/vstar_bench/relative_position/sa_71151.jpg
|
| 942 |
+
e73de184341917f64934afbea051423bc325db5ca4f89324257ad7530059c952 data/benchmarks/raw/vstar_bench/relative_position/sa_71151.json
|
| 943 |
+
e0d81c848bf14791e021d61b0b902695c371a91ea795e8ad6cdfcf2ec4c98a55 data/benchmarks/raw/vstar_bench/relative_position/sa_7228.jpg
|
| 944 |
+
c5bcb97b4ecb00d18ea59d89dc4db0064b99646c89f248ad4880668ce9c0eebd data/benchmarks/raw/vstar_bench/relative_position/sa_7228.json
|
| 945 |
+
c221f27dfad9fe78a49ed2bce243dd6c380b2f73d23f6d56fab7903cef6cb5ac data/benchmarks/raw/vstar_bench/relative_position/sa_7621.jpg
|
| 946 |
+
4881db69b6584e6e54e54df8bd32012caba3a2622fef903227469b3f770a44af data/benchmarks/raw/vstar_bench/relative_position/sa_7621.json
|
| 947 |
+
bb357d1e7d9da75adeb20273ffe78e282011db796496e00b8abd59db5cd9a0ff data/benchmarks/raw/vstar_bench/relative_position/sa_7626.jpg
|
| 948 |
+
90e2346607136b6676db95c7f4d156cae2e3bf4603bc8f0e3feaa7ab81ae129e data/benchmarks/raw/vstar_bench/relative_position/sa_7626.json
|
| 949 |
+
bdd519a32601efebf4e028bc59864871b0875600e2be67c56b3a6dd0cd55c8fa data/benchmarks/raw/vstar_bench/relative_position/sa_77731.jpg
|
| 950 |
+
5cd9b22ed79907030744492a90cd719a81011d25732d27d38d920c9662a2c919 data/benchmarks/raw/vstar_bench/relative_position/sa_77731.json
|
| 951 |
+
932538c8caed9ec00f65fcffcb118e55547977539d2742ac727d55e041c5ebda data/benchmarks/raw/vstar_bench/relative_position/sa_7826.jpg
|
| 952 |
+
6c92c7cced3a6d83cae1ebe4feccbc3ee85922b22fbfd4a0eecc7268dcb067ba data/benchmarks/raw/vstar_bench/relative_position/sa_7826.json
|
| 953 |
+
7d55bc3a2505af812051bbb89ec9c8844287098242f639780af7ba6238a98c5c data/benchmarks/raw/vstar_bench/relative_position/sa_78272.jpg
|
| 954 |
+
827ab427517e7b501b83be7a529608088bd9b7118dd3855b88c9fa4f8ac665d3 data/benchmarks/raw/vstar_bench/relative_position/sa_78272.json
|
| 955 |
+
2cb74a937bece0386625242f491689376b3c727bb44d55bc5808291cc5183fc1 data/benchmarks/raw/vstar_bench/relative_position/sa_79349.jpg
|
| 956 |
+
57d970718239f6895a3b813e486dc4f2b78d048de228937a81a7a0fef2ceddf1 data/benchmarks/raw/vstar_bench/relative_position/sa_79349.json
|
| 957 |
+
a4aef85d3979cc02737edcbc32c5b31d4d68d82b3fc2124a172100005f0bbee8 data/benchmarks/raw/vstar_bench/relative_position/sa_79958.jpg
|
| 958 |
+
4d2593de2041ba4d08ebd2b31ed6c8b4e5f447970d021ba1f46af3a49376756c data/benchmarks/raw/vstar_bench/relative_position/sa_79958.json
|
| 959 |
+
bb2bb4651db1f94119db07b0deb40955a404c110f5098179bc439a2183f769af data/benchmarks/raw/vstar_bench/relative_position/sa_80084.jpg
|
| 960 |
+
c9c92cc2f4f79eb76b8db488a4e273a678823b8ffabb3db446b03a8054c64e9f data/benchmarks/raw/vstar_bench/relative_position/sa_80084.json
|
| 961 |
+
6f56c068c6b9b03743d7650406c6560dcdc81c26349b47b3bed65d2902cdd842 data/benchmarks/raw/vstar_bench/relative_position/sa_83235.jpg
|
| 962 |
+
eebc478e19e9b81fbde72919ff0d8675bbf201ff885a039d54b3ab7dae3ae44a data/benchmarks/raw/vstar_bench/relative_position/sa_83235.json
|
| 963 |
+
4f170930283c75eafb65efa7cf3b6531417d59a2dbfe69d82d2b8cbf96f0a508 data/benchmarks/raw/vstar_bench/relative_position/sa_86732.jpg
|
| 964 |
+
116dff0bf7a3224bdc400233875631dc3c8fc9794fdf234246bbe1712078be31 data/benchmarks/raw/vstar_bench/relative_position/sa_86732.json
|
| 965 |
+
7cf9cca5c863c5d5dc70e1ae11590ec3179e641641b91a4cfdb9b064379a28fa data/benchmarks/raw/vstar_bench/relative_position/sa_87051.jpg
|
| 966 |
+
b2a3bb63a4573c8bdfb84853f8d4e39c9de31e7d0471302b05cfcb0746e30eed data/benchmarks/raw/vstar_bench/relative_position/sa_87051.json
|
| 967 |
+
d7e1ca9d1beb9a1f86b0cb309bb4a73091e8cb062f75eda81c2fda5304923ae9 data/benchmarks/raw/vstar_bench/test_questions.jsonl
|
| 968 |
49fe81fff2d979e0be1dfaad1827992d448de6542ef8562059d018671727f7d2 data/covt/README.md
|
| 969 |
9727e323b2d5b0ebd9c695c6bbf28aee3f0179022f5d6bdbd42aac01abbd87a6 data/covt/data.json
|
| 970 |
2d11080286128e429777a3ac5dea9d4ae478bc6566818cd4a94064c614932fe2 data/covt/shard_lists/images-00000.txt
|
|
|
|
| 1160 |
5e48f0b4e023d94c9bff8e3f184caa3900255bcb2a1fd3dd353c89702a752ad6 data/covt/shards/images-00063.tar
|
| 1161 |
26b9273cb982d7fa312a6916f4b1025025347f63e58d22fbabab21dad14948eb data/covt/shards/images-00063.tar.sha256
|
| 1162 |
a25011cdc65b0f96da9fe60bfa5b9d4134f887d1d8f01d65790a4f2454dfa2ef data/covt/stats.json
|
| 1163 |
+
beead9570cd9df871bd47cecec705c49cc86327afae7d85a16801d6640344ba9 data/cvbench_500/summary.json
|
| 1164 |
+
066ec4e7e6a79168e255f05a7db79f17b42341e84fd050a1f7731cda8b7f20f2 data/cvbench_500/validation.jsonl
|
| 1165 |
63a3647b2bcc2fa303e94aa2a8d84dbd07dffe0d073a7fc9eda62f200691043a environment/README.md
|
| 1166 |
92af0ebd4196552b3ef750effa363572badd0a92ec23aa85aaa7c0153f3840bb environment/unvideo-conda.tar.gz
|
| 1167 |
11ad7efa24975ee4b0c3c3a38ed18737f0658a5f75a0a96787b576a78a023361 models/base/Qwen3-VL-4B-Instruct/.gitattributes
|
|
|
|
| 1178 |
c2da771801886ad9ae98181793ffd3dfb7f1af30f6f7c6a4e15d7dbba52e2399 models/base/Qwen3-VL-4B-Instruct/tokenizer_config.json
|
| 1179 |
7768af27c1fafa9cc9011c1dc20067e03f8915e03b63504550e11d5066986d13 models/base/Qwen3-VL-4B-Instruct/video_preprocessor_config.json
|
| 1180 |
ca10d7e9fb3ed18575dd1e277a2579c16d108e32f27439684afa0e10b1440910 models/base/Qwen3-VL-4B-Instruct/vocab.json
|
| 1181 |
+
9c1aaeec4728cf2ed56e124bfb0744951e4d86f7187d469e5621901e4debe0ff models/ckpts/stage2_covt_from3k_bcd_2k/merged/README.md
|
| 1182 |
+
aaf74b3541178a4433c81af64f09cfb9878c9c9749e06c6a045514171dc4fcb9 models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged/SHA256SUMS
|
| 1183 |
+
3636d0f0bd6bef02654cdffdc447b79cb2cef8ab02cc75267345946291a489e4 models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged/chat_template.jinja
|
| 1184 |
+
d01bbb4d4e72254ab456e34d6b88177d9a95f245af314e75ff9d16b6af0468dd models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged/config.json
|
| 1185 |
+
f0602e770da53149297a75e8fb21d57b453c33f13cb168f14aa915f54d038580 models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged/generation_config.json
|
| 1186 |
+
37b2610f97956b60d38453d58178708137e1b306ced624e58dd787e49dfe3b60 models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged/model.safetensors
|
| 1187 |
+
d89ef49ce9cd37fbf510158e13c1ef063d9286411c1ec9049932dbe0487143b1 models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged/processor_config.json
|
| 1188 |
+
ca2edeb243824e36112e719282cfdf100f88be39cbdc62a396f53df46c26668a models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged/tokenizer.json
|
| 1189 |
+
e1179d605381d8b384e87688705fa3c9543c00535a2da8ecce77ae15d763991c models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged/tokenizer_config.json
|
| 1190 |
+
5ea050380edce8efa5d903634a21d83cd4ba7650c565dd81dcdab849adf19ff3 models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-9000-merged/SHA256SUMS
|
| 1191 |
+
3636d0f0bd6bef02654cdffdc447b79cb2cef8ab02cc75267345946291a489e4 models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-9000-merged/chat_template.jinja
|
| 1192 |
+
d01bbb4d4e72254ab456e34d6b88177d9a95f245af314e75ff9d16b6af0468dd models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-9000-merged/config.json
|
| 1193 |
+
f0602e770da53149297a75e8fb21d57b453c33f13cb168f14aa915f54d038580 models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-9000-merged/generation_config.json
|
| 1194 |
+
8bd17a768e9452eaabe43fc7ef059e50e22f4d3819721e24d4095777e8ff8b97 models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-9000-merged/model.safetensors
|
| 1195 |
+
d89ef49ce9cd37fbf510158e13c1ef063d9286411c1ec9049932dbe0487143b1 models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-9000-merged/processor_config.json
|
| 1196 |
+
ca2edeb243824e36112e719282cfdf100f88be39cbdc62a396f53df46c26668a models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-9000-merged/tokenizer.json
|
| 1197 |
+
e1179d605381d8b384e87688705fa3c9543c00535a2da8ecce77ae15d763991c models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-9000-merged/tokenizer_config.json
|
| 1198 |
b94e46746792d1adfa0ebdbccada5d4576d244ae230be9de8a46b5868fff001b models/teachers/VGGT-1B/LICENSE.txt
|
| 1199 |
d15bf50a8615c8225ed48b51ea5cac673d82442ec0309036df555a053253afe0 models/teachers/VGGT-1B/model.pt
|
| 1200 |
14e780d86fa1861f8751f868d7f45425b5feb55c38ca26f152ca5097ab30f828 models/teachers/dinov2-large-processor/preprocessor_config.json
|
|
|
|
| 1207 |
61a7b147390c64585d6c3543dd6fc636906c9af3865a5548f27f31aee1d4c8e2 models/teachers/siglip2-large-patch16-256/tokenizer.model
|
| 1208 |
14afe629fe4959b9e0d51e1852b8d9f7ad074f90a1a7125a4fcdd17f06e78fc8 models/teachers/siglip2-large-patch16-256/tokenizer_config.json
|
| 1209 |
aa103197722645487c7d670c0866e8a5537ab4501e610012bebec06dc559883a models/teachers/table5_baseline.pth
|
| 1210 |
+
cef9f8aaf2dcc0b9cbfb7b060988ed00ff28206606f411da966eb551aa6d7fb4 reports/PROGRESS_2026-08-11.md
|
| 1211 |
+
856ecfd8e4b188d8bfc47e6e95e8e1ba671e74062aac3c6afce5613d6d55b040 reports/README.md
|
| 1212 |
+
f9712f4adccfab30ad0b3c1f841b4b4614e138bf93af586a8d8bfd67bf724f5d reports/cvbench_2k_3k_8k/01_experiment_summary.md
|
| 1213 |
+
36beb0f71ad4868151a944d61891ef4aca27fcdbc048c0409606c57339060553 reports/cvbench_2k_3k_8k/02_text_output_cases.md
|
| 1214 |
+
4a318aca15bc7835e3a104d4d84c9bfb0d370ce3030e5b48297a2140192b2dfa reports/cvbench_2k_3k_8k/03_methodology_and_validation.md
|
| 1215 |
+
34fa57ac5c436611bd91437243c34047c37b9d80479506b4c1d574d516c9d6f8 reports/cvbench_2k_3k_8k/04_presentation_talking_points.md
|
| 1216 |
+
00ee1e0a3c6b2071fbfe77eef50aa67938abc3e8e1751f47be7190fa4ba683b7 reports/cvbench_2k_3k_8k/05_base_baseline_comparison.md
|
| 1217 |
+
8390855e1e9ed232c5411e366b5f824984e3065ec36145783a4b3bfa82dbfee0 reports/cvbench_2k_3k_8k/README.md
|
| 1218 |
+
e7df032703fce912ca63402a38cda1762869e9ff4cf058b9a53f66ebc185ebdd reports/cvbench_2k_3k_8k/SHA256SUMS
|
| 1219 |
+
773d39dd2f452d7e984dc2e494970b5907daee2bcea2922321da8a8cd63b10a0 reports/evaluations/checkpoint-7000/REPORT.md
|
| 1220 |
+
b94d5f8a5259617beea2c97dd5898365fe99dd2b99d19ad32fbf9cc72407b8eb reports/evaluations/checkpoint-7000/audit_summary.json
|
| 1221 |
+
3043895196ffd5aef9a95affd57feaf67dbee62bb7b9cffb26a39e7df5a30eaf reports/evaluations/checkpoint-7000/blink_full_val/audit.json
|
| 1222 |
+
b33180454bfc934af8936e8ef9bc5389f2a29594b5ebe4777fc9832e8ead903d reports/evaluations/checkpoint-7000/blink_full_val/metrics.json
|
| 1223 |
+
5d6971941a50d08db4e29290af6cc372ba6c1bb855083b025bc9a8a208b6959e reports/evaluations/checkpoint-7000/blink_full_val/rank_00.jsonl
|
| 1224 |
+
a91c424accb8137c6fe668efb66e96a90a7216cc9e3b8e55d839d65d7e3e44c1 reports/evaluations/checkpoint-7000/blink_full_val/rank_01.jsonl
|
| 1225 |
+
5a13dc1e84d8d76e77a454b7f71fa47152a84ef28d3dc79d9c06e2b4d149dedf reports/evaluations/checkpoint-7000/blink_full_val/rank_02.jsonl
|
| 1226 |
+
2d782ae3b051e7df43cfd683ca1628c44d2ca6c57b2182f62e4e424d5ba25706 reports/evaluations/checkpoint-7000/blink_full_val/rank_03.jsonl
|
| 1227 |
+
7c242e5db9b37042cb5ad85ba6239aa09da389cbc61c0152801986cb9fc0f671 reports/evaluations/checkpoint-7000/blink_full_val/rank_04.jsonl
|
| 1228 |
+
101bcaa679e01787838a4a61b73c0fe6c315e99a9a014521ff9597a9dde8a584 reports/evaluations/checkpoint-7000/blink_full_val/rank_05.jsonl
|
| 1229 |
+
59f3062c0f4edcadbda2916bfa04112829caf42882833658e489b52e6322293e reports/evaluations/checkpoint-7000/blink_full_val/rank_06.jsonl
|
| 1230 |
+
196abcfcb5de71f83124614543213d719bbe822a5846703cd8efed6b85aa92d8 reports/evaluations/checkpoint-7000/blink_full_val/rank_07.jsonl
|
| 1231 |
+
09d69b48a7b547cfaf6d145edb3cdb7d0413f2092db5a702cb5262b409b3892e reports/evaluations/checkpoint-7000/blink_full_val/results.jsonl
|
| 1232 |
+
10c9fcab80f0aec3ba35fccbd0ca1b373c8d7aff1644fb45cc1dd4a3bb522e1f reports/evaluations/checkpoint-7000/blink_full_val/swanlab.json
|
| 1233 |
+
684888c0ebb17f374298b65ee2807526c066094c701bcc7ebbe1c1095f494fc1 reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/.gitignore
|
| 1234 |
+
442aed06c1e37bdf5a2849b168a31cec086cf19edcf29598ea75491f6c6a9565 reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/debug/debug.log
|
| 1235 |
+
8e587d420b84204bd22336012a62145edb839ca15dbd1f4a1afec96d8bffc2f8 reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/files/config.yaml
|
| 1236 |
+
26e76b399febaec4b38e878f2a7bd045ed14d1843a7409577ede31b44083b0b7 reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/files/requirements.txt
|
| 1237 |
+
908388d968f64dbf50b20d751db4430682a0bea16326684df861acd2df7bc1cb reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/files/swanlab-metadata.json
|
| 1238 |
+
786803a332460d31699a533a7cb985b33043927783cb9d83b4ef56f2c85e3775 reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/run-fbdon9l7.swanlab
|
| 1239 |
+
7af8d9c451da624fefa0572ba4cf43e0eef0e027aa5c3e2a1d32cc35bf47f882 reports/evaluations/checkpoint-7000/cvbench_full_test/audit.json
|
| 1240 |
+
5e5ed1ae9cf752b24aa2bccff283deeddd88bdf80642ac242cc251f7b53f063f reports/evaluations/checkpoint-7000/cvbench_full_test/metrics.json
|
| 1241 |
+
680c8d333b7d6ea7de0e8036e9043ad3b618ccc76c0396a20f94e0d7146b6807 reports/evaluations/checkpoint-7000/cvbench_full_test/rank_00.jsonl
|
| 1242 |
+
6e691456a180c688fea0b4cefaf861a7e1195b0efc26b31d69ab84f1c532dc37 reports/evaluations/checkpoint-7000/cvbench_full_test/rank_01.jsonl
|
| 1243 |
+
0b960bef85be91d4865fa367552f294ea36ef3410236ac8dde2f5c781e039723 reports/evaluations/checkpoint-7000/cvbench_full_test/rank_02.jsonl
|
| 1244 |
+
246155875d94b1300783785a7d322714c0e3b7fc3c9fe286e7ca13c6e52c0de9 reports/evaluations/checkpoint-7000/cvbench_full_test/rank_03.jsonl
|
| 1245 |
+
1454cb73e262d2c76eb6df01f477da3b71957ead5d7912801508fcc20d0c9529 reports/evaluations/checkpoint-7000/cvbench_full_test/rank_04.jsonl
|
| 1246 |
+
8f70eff392e927eea32aacd6da63551a0ea4600ac489c13c621568380e2d24a7 reports/evaluations/checkpoint-7000/cvbench_full_test/rank_05.jsonl
|
| 1247 |
+
056b9b1163bb0ee5b99b9b01579df63d12285a9c94623c365281cbab25542e7c reports/evaluations/checkpoint-7000/cvbench_full_test/rank_06.jsonl
|
| 1248 |
+
1071f5206abd0009a999761a0934d9efe3ae9f42f6c13fc2273befc86a156cd9 reports/evaluations/checkpoint-7000/cvbench_full_test/rank_07.jsonl
|
| 1249 |
+
003cf5331e5511349db2d36ae5c00378a7749d8c1a044d7e44191bdff84cda6e reports/evaluations/checkpoint-7000/cvbench_full_test/results.jsonl
|
| 1250 |
+
afa3f5609e29b5c2f7301b4933e8a84478d7a469595685214d26c94d9be4dbd5 reports/evaluations/checkpoint-7000/cvbench_full_test/swanlab.json
|
| 1251 |
+
684888c0ebb17f374298b65ee2807526c066094c701bcc7ebbe1c1095f494fc1 reports/evaluations/checkpoint-7000/cvbench_full_test/swanlab_retry/.gitignore
|
| 1252 |
+
710a37bdb159bacf05fdb58ab02617087bd0be575e60a35a030ce6b438ffc023 reports/evaluations/checkpoint-7000/cvbench_full_test/swanlab_retry/run-20260810_112943-t5gafmyt/debug/debug.log
|
| 1253 |
+
d30902b60901a399dab80f2c8b788a4cd0b83b6dcf720949f4b26d33d62a504a reports/evaluations/checkpoint-7000/cvbench_full_test/swanlab_retry/run-20260810_112943-t5gafmyt/files/config.yaml
|
| 1254 |
+
26e76b399febaec4b38e878f2a7bd045ed14d1843a7409577ede31b44083b0b7 reports/evaluations/checkpoint-7000/cvbench_full_test/swanlab_retry/run-20260810_112943-t5gafmyt/files/requirements.txt
|
| 1255 |
+
dd5f4e434a53b6c2f7e97677f4aacc7b057446d53dd143e46a83445a54517631 reports/evaluations/checkpoint-7000/cvbench_full_test/swanlab_retry/run-20260810_112943-t5gafmyt/files/swanlab-metadata.json
|
| 1256 |
+
8ccf82cbca987fd2dee3627ce01d988c5b6243582284347baca09464ea7a52fb reports/evaluations/checkpoint-7000/cvbench_full_test/swanlab_retry/run-20260810_112943-t5gafmyt/run-t5gafmyt.swanlab
|
| 1257 |
+
e33830a481c5f65c17b12d2580d1f7c83c3c58f1d58a0cfa83228944d3a86838 reports/evaluations/checkpoint-7000/vstar_diagnosis/VSTAR_ROOT_CAUSE_REPORT.html
|
| 1258 |
+
495ba438d8984b906e31cfbf8f40e5dd02ab2642be9b821d9c7c50a9708d510a reports/evaluations/checkpoint-7000/vstar_diagnosis/VSTAR_ROOT_CAUSE_REPORT.md
|
| 1259 |
+
a64efb5be74e3c5c316f2b7f805a1a0aa921870d323d3d3b860f4c3e6ea80296 reports/evaluations/checkpoint-7000/vstar_diagnosis/artifact.json
|
| 1260 |
+
67d6416c903f2fdbf9e3328b4080f81be9d10f5648b972694eb18a1147be737a reports/evaluations/checkpoint-7000/vstar_diagnosis/diagnosis.json
|
| 1261 |
+
46f837fd6ed373e7c295c5fd63c853605ebf544330d8db8f520b4044826b812a reports/evaluations/checkpoint-7000/vstar_diagnosis/diagnostic_audit.log
|
| 1262 |
+
e7ab620ce12c602aab82ca7c1e6cc719fa13757e6ee098779a6de5f8df5b11de reports/evaluations/checkpoint-7000/vstar_diagnosis/global_dynamic_0p8mp/audit.json
|
| 1263 |
+
832da6f51f8ddd219053fcb5105151b2059138cb6a33c712d4e0bc6771fa2b35 reports/evaluations/checkpoint-7000/vstar_diagnosis/global_dynamic_0p8mp/metrics.json
|
| 1264 |
+
610964fc8329e34a2cf5a278eed744761db358823a412b46535113a64004360e reports/evaluations/checkpoint-7000/vstar_diagnosis/global_dynamic_0p8mp/rank_00.jsonl
|
| 1265 |
+
7142924eef70e4251f9ea5dfdfb17148257c329d731f84a44de2f183d61f4ec2 reports/evaluations/checkpoint-7000/vstar_diagnosis/global_dynamic_0p8mp/rank_01.jsonl
|
| 1266 |
+
8ab68f20b7adb9db35537b031f0cc59a062f52adaf8eba37a0272ef6ea8768a1 reports/evaluations/checkpoint-7000/vstar_diagnosis/global_dynamic_0p8mp/rank_02.jsonl
|
| 1267 |
+
f164522713a94c8ae3550f674c570f4f6c02e00d17cca05851b949c88bf9a3bc reports/evaluations/checkpoint-7000/vstar_diagnosis/global_dynamic_0p8mp/rank_03.jsonl
|
| 1268 |
+
c184d0fe673b2d51a2564f36cccab7ae830d5885961ff1835537b561f218cf22 reports/evaluations/checkpoint-7000/vstar_diagnosis/global_dynamic_0p8mp/rank_04.jsonl
|
| 1269 |
+
76061ae847118644dcea78e982e43b8e767e0695ff638ae05a5af5d1477976c0 reports/evaluations/checkpoint-7000/vstar_diagnosis/global_dynamic_0p8mp/rank_05.jsonl
|
| 1270 |
+
bec824c7048f9f1df75bc3731e763b9ffdbd40e43d44ae5fb0fa0863b8457e11 reports/evaluations/checkpoint-7000/vstar_diagnosis/global_dynamic_0p8mp/rank_06.jsonl
|
| 1271 |
+
a7fb3d21850d22e462e8ff4931ea9d626ddaa51beca058e26dbf8a46d0869515 reports/evaluations/checkpoint-7000/vstar_diagnosis/global_dynamic_0p8mp/rank_07.jsonl
|
| 1272 |
+
e23073557cb454ee84efc3f0c90791b5c042cfad5fdfbe3cf3928a925f546494 reports/evaluations/checkpoint-7000/vstar_diagnosis/global_dynamic_0p8mp/results.jsonl
|
| 1273 |
+
4a30c9be3f878a9b2ecf59f5e0ada934c9d7e390f09c232597a46d5b4e929a50 reports/evaluations/checkpoint-7000/vstar_diagnosis/global_dynamic_0p8mp/swanlab.json
|
| 1274 |
+
1cc53d0c72d3902a971669cd25b26cdd7ffdde2cde9dac60f33562f6602fac27 reports/evaluations/checkpoint-7000/vstar_diagnosis/oracle_crop_fixed448/audit.json
|
| 1275 |
+
5cdd18bc4d1b2e1504bf7c8409f8fcede7c3a4b03da4744c06d6f56d5c460591 reports/evaluations/checkpoint-7000/vstar_diagnosis/oracle_crop_fixed448/metrics.json
|
| 1276 |
+
b693daad6072fa88e0d0410b1f39d0bcf244c8c4b11074fcdd15378bdaa92bd6 reports/evaluations/checkpoint-7000/vstar_diagnosis/oracle_crop_fixed448/rank_00.jsonl
|
| 1277 |
+
ece50f3dacf2472da34647d863aa7a04bf15103fed43499bd03b011d8dfec04e reports/evaluations/checkpoint-7000/vstar_diagnosis/oracle_crop_fixed448/rank_01.jsonl
|
| 1278 |
+
d1bda4c79eb903197074ba56736596c1eec1e5cd3c1d3701022bea96d21a3d6e reports/evaluations/checkpoint-7000/vstar_diagnosis/oracle_crop_fixed448/rank_02.jsonl
|
| 1279 |
+
0518da4c0c0ca83617816a5b9ac7cae8c0b5bdb9596341dc631508ddc8553a82 reports/evaluations/checkpoint-7000/vstar_diagnosis/oracle_crop_fixed448/rank_03.jsonl
|
| 1280 |
+
fca73736dbb2673363de92b6a7074a1e46f97293595853eed16914de17b91565 reports/evaluations/checkpoint-7000/vstar_diagnosis/oracle_crop_fixed448/rank_04.jsonl
|
| 1281 |
+
5202049c3983199806193f7324a02834ff1ba84f1be2de484bf1301c9a3923a0 reports/evaluations/checkpoint-7000/vstar_diagnosis/oracle_crop_fixed448/rank_05.jsonl
|
| 1282 |
+
ed5f6444241e7ea8e6adf174e06e457e05e45ec13674efd4c3c3a071ca84809e reports/evaluations/checkpoint-7000/vstar_diagnosis/oracle_crop_fixed448/rank_06.jsonl
|
| 1283 |
+
0fb2dca188da2f6b222abe283b8877327323d4af759297887bebaf4b93bfbfd8 reports/evaluations/checkpoint-7000/vstar_diagnosis/oracle_crop_fixed448/rank_07.jsonl
|
| 1284 |
+
8ad543f6e0c62ffea4d4e2f2447eaccf76abdb09f12abbfa8ce88a29bb57110d reports/evaluations/checkpoint-7000/vstar_diagnosis/oracle_crop_fixed448/results.jsonl
|
| 1285 |
+
4a30c9be3f878a9b2ecf59f5e0ada934c9d7e390f09c232597a46d5b4e929a50 reports/evaluations/checkpoint-7000/vstar_diagnosis/oracle_crop_fixed448/swanlab.json
|
| 1286 |
+
0a36b8271d2aa322bac882aa5f2fc87289e450cb69f6fa3fa6ab31d9c4f0f381 reports/evaluations/checkpoint-7000/vstar_diagnosis/report_build.log
|
| 1287 |
+
67d6416c903f2fdbf9e3328b4080f81be9d10f5648b972694eb18a1147be737a reports/evaluations/checkpoint-7000/vstar_diagnosis/run.log
|
| 1288 |
+
a66199df72518d60a39415ccac1caa68ccef4e3affa186182353c9ee6070a54e reports/evaluations/checkpoint-7000/vstar_diagnosis/sample_diagnostics.csv
|
| 1289 |
+
7f5929ddb15c35f17ed9fbb0f79443c65ae01850506eafafeb9cea0c41f3b531 reports/evaluations/checkpoint-7000/vstar_diagnosis/sensitivity.log
|
| 1290 |
+
423f67e331e9046bb13fa4c6a6d66b06be571b72a6bec208af6893c1ad0c5054 reports/evaluations/checkpoint-7000/vstar_diagnosis/vstar_report_data.sql
|
| 1291 |
+
c30896440345175f50314143dad1d23c25d15821013432c0a72c95e03030b3d7 reports/evaluations/checkpoint-7000/vstar_full_test/audit.json
|
| 1292 |
+
5952e6037ca1edbd73ea4ac1445b1052c9e9420c9a6196b5d6e0bc3cc829717c reports/evaluations/checkpoint-7000/vstar_full_test/metrics.json
|
| 1293 |
+
389e37adedffb43911c65bfe7c899f616697996ca198922fade9f7dabf22c147 reports/evaluations/checkpoint-7000/vstar_full_test/rank_00.jsonl
|
| 1294 |
+
797640030c7b87028b8cd98643b7018347d3c64efff33ee366016accc3cd8cfa reports/evaluations/checkpoint-7000/vstar_full_test/rank_01.jsonl
|
| 1295 |
+
9fe3a88b0794bda5fcd40659fd172aebb577be991ae22f7bec3d7eee4c7ef13c reports/evaluations/checkpoint-7000/vstar_full_test/rank_02.jsonl
|
| 1296 |
+
766cdd9a19a74d68462e26f995602ee098cbbc35f30f1203fab10315170a123f reports/evaluations/checkpoint-7000/vstar_full_test/rank_03.jsonl
|
| 1297 |
+
f657863864aa8083a7cb7da71a91bb6d51df94c905ae730d4fc333b9298e9379 reports/evaluations/checkpoint-7000/vstar_full_test/rank_04.jsonl
|
| 1298 |
+
4c6541391d9b9eb2dcd517ea2c01b4975b37030738b8c25be1f8639e04f51ed5 reports/evaluations/checkpoint-7000/vstar_full_test/rank_05.jsonl
|
| 1299 |
+
82c4765a9cce5a9782cd4d552f58ebd253de6060d53489cd79e7a0ead3fd89cd reports/evaluations/checkpoint-7000/vstar_full_test/rank_06.jsonl
|
| 1300 |
+
d1c592f94c25a095340cb0fcc13e7fcbd5a9bc1ff40390540164104d5d4b8bbb reports/evaluations/checkpoint-7000/vstar_full_test/rank_07.jsonl
|
| 1301 |
+
5a50a8b9ebb806419bf07bd56ccd41df6ea276f1dbb4ab51683b86b373ff6496 reports/evaluations/checkpoint-7000/vstar_full_test/results.jsonl
|
| 1302 |
+
684888c0ebb17f374298b65ee2807526c066094c701bcc7ebbe1c1095f494fc1 reports/evaluations/checkpoint-7000/vstar_full_test/swanlab/.gitignore
|
| 1303 |
+
25bf6dcec506231dd56b1a5374a6f080dbc0640d8a12cd8326ab58870c961ebe reports/evaluations/checkpoint-7000/vstar_full_test/swanlab/run-20260810_115323-0abcgyj9/debug/debug.log
|
| 1304 |
+
30aa0be164df16cec481a19ca544917de9bdcadfecc742a9d29cefcd0c0b0ca3 reports/evaluations/checkpoint-7000/vstar_full_test/swanlab/run-20260810_115323-0abcgyj9/files/config.yaml
|
| 1305 |
+
26e76b399febaec4b38e878f2a7bd045ed14d1843a7409577ede31b44083b0b7 reports/evaluations/checkpoint-7000/vstar_full_test/swanlab/run-20260810_115323-0abcgyj9/files/requirements.txt
|
| 1306 |
+
bf4e72898e439be7ea3ab4904870eafe464520ee2a91dffe145175fe3012fcfa reports/evaluations/checkpoint-7000/vstar_full_test/swanlab/run-20260810_115323-0abcgyj9/files/swanlab-metadata.json
|
| 1307 |
+
a25c7d338657ee86f24dce29d2e422906559a9472ae5ea9468536fc78185e284 reports/evaluations/checkpoint-7000/vstar_full_test/swanlab/run-20260810_115323-0abcgyj9/run-0abcgyj9.swanlab
|
| 1308 |
+
d20f881c21830395867a046620d380330d654ce0decd876f20d4422cdff655f1 reports/evaluations/checkpoint-7000/vstar_full_test/swanlab.json
|
| 1309 |
+
05526ad1a111438942297b7a00229a0876cdfef78d939214c8c18c4710604965 reports/logs/H3_LoRA_from3k_BCD_train.log
|
| 1310 |
+
01770a965546d67021f3a8aa12097163a353f1fd6782dec95a933b152b0b552a reports/logs/H3_ckpt7000_three_benchmarks.log
|
| 1311 |
+
65066a19d1da9ddafdf0c5eb336fb4703c3491bbe522cfc86e09af74bf00dc11 reports/logs/H3_code_upload_qa_final.log
|
| 1312 |
+
dc5087669edc587fab0cfc975884b4aa543378a015fdee49916a452c6e1e3303 reports/logs/H3_hash_merged_7k_9k.log
|
| 1313 |
+
c7a50771356c60f426a3b2c926148ce60f413666a342d1246bdb8daac045f82d reports/logs/H3_merge_checkpoint-7000.log
|
| 1314 |
+
cde1f9b4a85ca6647efc023d65cdb7376565d3ba7c07bd569ae3a6d9ae6f23a3 reports/logs/H3_merge_checkpoint-9000.log
|
| 1315 |
+
d32353008c2eaf63d1c841dbdbb2b94605d1e811cd8507e24ff58edfc9fa099f scripts/audit_multibench_results.py
|
| 1316 |
+
2dfcd483850dc2a91cd6150c45e8d5d8126ace3b979ad7054ae2dcd8b380310d scripts/bootstrap.sh
|
| 1317 |
ea3fc924e9462bd724882eb2596123398f3cf78d1297af0d9764d7f2c185f850 scripts/build_image_shards.sh
|
| 1318 |
ed91cb550a076d7f2a64100f86c2c97fbd2767bb69424176c0810df9abdf868a scripts/collect_local_assets.sh
|
| 1319 |
+
08e3e7fe3e5b5f408106b282319a476eb155a3cc769bd201e2bebc7a3044e6fa scripts/compare_cvbench_results.py
|
| 1320 |
+
5f228f3212de246e76c14103ce7b15af02adb2922a262ab97db20b4accc09734 scripts/diagnose_vstar_eval.py
|
| 1321 |
+
c6766f5135db8f5865edd026d8a0dbd383409af3120fcccf492a79a0b9bc01c5 scripts/eval_cvbench_8gpu.sh
|
| 1322 |
+
11d771cd5cf06cbfb4cc8ed45a9f07335a6613e436727ff4ba26d865498bce21 scripts/eval_cvbench_qwen3vl4b_raw_8gpu.sh
|
| 1323 |
+
db3ac82eedb90d5e77398b6ebe5f430b7d4ff617d5224f074616961e79edc35e scripts/eval_cvbench_stage1_base_8gpu.sh
|
| 1324 |
+
3664f2f4e4f64e2d1ac952619612df8436b69a7a25ec1e72a883ff7420291640 scripts/eval_multibench_8gpu.sh
|
| 1325 |
+
1b64707a7a4058406b204fc231b1e6199b23e2aebd58953653aeb74abf8d8191 scripts/launch_h3_lora.sh
|
| 1326 |
+
d25599d5970f092b7c164e95b29be486757bc5da157a2c1d24c37d957bf53eb8 scripts/launch_h3_lora_from3k_bcd.sh
|
| 1327 |
a81b19f43685b469c5b4e0b96d5e15960b31b1dbf09bd5eb3c10e010a9627acc scripts/make_portable_data.py
|
| 1328 |
2b8a8d666c66312bc2dfe91254261c697f90b43a79210f3829be81149d8c3063 scripts/pack_environment.sh
|
| 1329 |
+
6f4b106ad40ad2449b2075f804bbab792a55e34ec1d0d6a650b917d1c8ac9b18 scripts/prepare_cvbench_subset.py
|
| 1330 |
+
6461e78e023fe7bd30d43e9fab1ffc29cda5bc4a5af081d775f4b9a4d1695005 scripts/prepare_three_benchmarks.py
|
| 1331 |
+
29e8b9578649a6caaafe3f9489d99a7f603ee0537150a698519c0c4764fc8c5d scripts/render_config.py
|
| 1332 |
+
dad8be377aa6a77f9f7cc764a58e32316b55a1e08468bf33c14ffbcfcddd0809 scripts/render_manifest.py
|
| 1333 |
+
806ba5ffd85b7ccb6ae9c4fdca818e05dbca0c9dd165b87e4c0cc4e413911088 scripts/run_ckpt7000_three_benchmarks.sh
|
| 1334 |
+
fefafeba5bcad6b8a1567bc37614ec48cf42261552ec34248ab4958a6ff0eacd scripts/run_vstar_diagnostic_sensitivity.sh
|
| 1335 |
+
8b199afd359539c4d30cd0b8086a0f6a6ddc0f0001e5288dbfa97fbeb8fca0ee scripts/trace_cvbench_cases.py
|
| 1336 |
+
8c0294b0e604c5cb01ee11b16d5b27601fe361df3c8a28e7ca432fdea3b3f4d5 scripts/upload_eval_to_swanlab.py
|
| 1337 |
+
09f8a5ee1a50e3f3d215eeceed0997a43d88e5f12691444e63d0c478e742bdc2 scripts/upload_hf.sh
|
| 1338 |
+
02522f2fe86e943ed04bb605317df3322c51d1a194f242785f880a3d755cbcb8 scripts/validate_covt_references.py
|
| 1339 |
+
cd53e70a04326905078abc4f2039110c1ddc5ab8e0cda1cf1531fc3a6736efe1 scripts/validate_cvbench_results.py
|
| 1340 |
577f75ad96f55302c32ee84805dad02ee988e796dcdc1642bc26382b3033c408 scripts/verify_bundle.py
|
| 1341 |
+
b71189e40baa7bba0e6d4614a41b853fa3fe2f4a85380a254f598352ec6eb4be skills/deploy-umm-stage2/SKILL.md
|
| 1342 |
+
689912e9c31725bf3dada861eaf06aff2a397f65a8e56b0414855d8ade3dba56 skills/deploy-umm-stage2/agents/openai.yaml
|
| 1343 |
+
583ea1ad5fa3c4e5a89b4b15d8a2e53d371808adbade1970ed7069774b6aa692 skills/deploy-umm-stage2/references/layout.md
|
| 1344 |
eb739aa7ac343581d5d113fd12f748c4622c70a86a99bdfdd9f162b8daaec2f6 skills/deploy-umm-stage2/scripts/deploy.sh
|
| 1345 |
6fd91d83c23444bc0e826e644683f8d5095a599414a84172c6215b885779e541 skills/deploy-umm-stage2/scripts/verify.sh
|
| 1346 |
f9e2070c247517b1ddf65f7b11b393484a18da91a958fd18a97bd0f241c3125c third_party/diffusers/LICENSE
|
README.md
CHANGED
|
@@ -15,6 +15,23 @@ This public repository is a self-contained handoff for retraining UMM Stage 2: Q
|
|
| 15 |
|
| 16 |
The deployed visual-token counts are `[8,4,4,4,4]`; VGGT/depth uses four tokens, aligned with CoVT.
|
| 17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
## Download and deploy
|
| 19 |
|
| 20 |
```bash
|
|
@@ -50,6 +67,15 @@ MODEL_PATH="$PWD/outputs/stage2_covt_sam_vggt_covt4_v2" \
|
|
| 50 |
bash code/umm/stage2_covt/run_merge.sh
|
| 51 |
```
|
| 52 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
## Included artifacts
|
| 54 |
|
| 55 |
- portable UMM code and DeepSpeed config;
|
|
@@ -60,6 +86,8 @@ MODEL_PATH="$PWD/outputs/stage2_covt_sam_vggt_covt4_v2" \
|
|
| 60 |
- exact local CoVT dataset: 889,489 conversations and 756,894 images;
|
| 61 |
- relocatable packed `unvideo` environment;
|
| 62 |
- `$deploy-umm-stage2` Code Agent skill;
|
|
|
|
|
|
|
| 63 |
- SHA256 integrity manifest and provenance metadata.
|
| 64 |
|
| 65 |
FLUX weights and the 560 GB Stage-1 DeepSpeed optimizer history are not included because the active Stage-2 code does not load them. Stage 2 consumes only the included 1.06 GB Stage-1 connector file.
|
|
|
|
| 15 |
|
| 16 |
The deployed visual-token counts are `[8,4,4,4,4]`; VGGT/depth uses four tokens, aligned with CoVT.
|
| 17 |
|
| 18 |
+
## Current status (2026-08-11)
|
| 19 |
+
|
| 20 |
+
Stage-2 continuation training is complete at step 9,000. Portable dense bfloat16
|
| 21 |
+
models for steps 7,000 and 9,000 are included at:
|
| 22 |
+
|
| 23 |
+
- `models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged`;
|
| 24 |
+
- `models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-9000-merged`.
|
| 25 |
+
|
| 26 |
+
Both models passed the 767-tensor dense validation, exact 54-expert comparison,
|
| 27 |
+
exact LoRA merge probe and finite-value scan. Step 7,000 was evaluated on full
|
| 28 |
+
CV-Bench test, labelled BLINK val and V* core test. Step 9,000 is merged and
|
| 29 |
+
validated but not yet benchmarked.
|
| 30 |
+
|
| 31 |
+
Read [`reports/PROGRESS_2026-08-11.md`](reports/PROGRESS_2026-08-11.md) before
|
| 32 |
+
continuing work. It contains the exact curriculum, benchmark results, V*
|
| 33 |
+
resolution correction, published artifact paths and remaining tasks.
|
| 34 |
+
|
| 35 |
## Download and deploy
|
| 36 |
|
| 37 |
```bash
|
|
|
|
| 67 |
bash code/umm/stage2_covt/run_merge.sh
|
| 68 |
```
|
| 69 |
|
| 70 |
+
For an exact saved checkpoint, always set both source and destination:
|
| 71 |
+
|
| 72 |
+
```bash
|
| 73 |
+
MODEL_PATH="$PWD/models/ckpts/stage2_covt_from3k_bcd_2k/checkpoint-9000" \
|
| 74 |
+
SAVE_MODEL_PATH="$PWD/models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-9000-merged" \
|
| 75 |
+
DTYPE=bfloat16 DEVICE_MAP=cpu \
|
| 76 |
+
bash code/umm/stage2_covt/run_merge.sh
|
| 77 |
+
```
|
| 78 |
+
|
| 79 |
## Included artifacts
|
| 80 |
|
| 81 |
- portable UMM code and DeepSpeed config;
|
|
|
|
| 86 |
- exact local CoVT dataset: 889,489 conversations and 756,894 images;
|
| 87 |
- relocatable packed `unvideo` environment;
|
| 88 |
- `$deploy-umm-stage2` Code Agent skill;
|
| 89 |
+
- validated merged Stage-2 checkpoints at steps 7,000 and 9,000;
|
| 90 |
+
- full evaluation metrics, audits, selected logs and progress reports under `reports/`;
|
| 91 |
- SHA256 integrity manifest and provenance metadata.
|
| 92 |
|
| 93 |
FLUX weights and the 560 GB Stage-1 DeepSpeed optimizer history are not included because the active Stage-2 code does not load them. Stage 2 consumes only the included 1.06 GB Stage-1 connector file.
|
artifact_sources.yaml
CHANGED
|
@@ -49,3 +49,24 @@ environment:
|
|
| 49 |
python: '3.10'
|
| 50 |
pytorch: 2.8.0+cu128
|
| 51 |
deepspeed: 0.18.9
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
python: '3.10'
|
| 50 |
pytorch: 2.8.0+cu128
|
| 51 |
deepspeed: 0.18.9
|
| 52 |
+
|
| 53 |
+
stage2_continuation:
|
| 54 |
+
completed_utc: '2026-08-11'
|
| 55 |
+
source_step: 3000
|
| 56 |
+
phase_boundaries: [3000, 5000, 7000, 9000]
|
| 57 |
+
cvbench_eval_every_n_steps: 500
|
| 58 |
+
merged_checkpoints:
|
| 59 |
+
- models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged
|
| 60 |
+
- models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-9000-merged
|
| 61 |
+
progress_report: reports/PROGRESS_2026-08-11.md
|
| 62 |
+
|
| 63 |
+
evaluation_datasets:
|
| 64 |
+
cvbench:
|
| 65 |
+
source: nyu-visionx/CV-Bench
|
| 66 |
+
revision: bc284db50d036958861cb60cdd7b77612052ce0d
|
| 67 |
+
blink:
|
| 68 |
+
source: BLINK-Benchmark/BLINK
|
| 69 |
+
revision: a3666eb249237ba3d5eca8db21176cc47967e040
|
| 70 |
+
vstar:
|
| 71 |
+
source: craigwu/vstar_bench
|
| 72 |
+
revision: d9ae62c903da0c98336e85c5ee89cd863b04b4da
|
code/umm/runtime/models/blip3o/data/covt_data_van.py
CHANGED
|
@@ -578,7 +578,15 @@ class SupervisedDataset(Dataset):
|
|
| 578 |
|
| 579 |
def set_cur_step(self, step: int):
|
| 580 |
self.cur_step = step
|
| 581 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 582 |
|
| 583 |
def __len__(self):
|
| 584 |
return len(self.list_data_dict)
|
|
|
|
| 578 |
|
| 579 |
def set_cur_step(self, step: int):
|
| 580 |
self.cur_step = step
|
| 581 |
+
if step < self.stage_0_step:
|
| 582 |
+
phase = "A_input_anchors"
|
| 583 |
+
elif step < self.stage_1_step:
|
| 584 |
+
phase = "B_anchor_generation"
|
| 585 |
+
elif step < self.stage_2_step:
|
| 586 |
+
phase = "C_full_covt"
|
| 587 |
+
else:
|
| 588 |
+
phase = "D_mixed_covt"
|
| 589 |
+
print(f"[Dataset] cur_step={step} phase={phase}")
|
| 590 |
|
| 591 |
def __len__(self):
|
| 592 |
return len(self.list_data_dict)
|
code/umm/runtime/models/blip3o/model/language_model/covt_qwen_stage2_van.py
CHANGED
|
@@ -2667,6 +2667,10 @@ class CoVTVanForConditionalGeneration(Qwen3VLPreTrainedModel,GenerationMixin, bl
|
|
| 2667 |
if video_grid_thw is not None:
|
| 2668 |
video_grid_thw = video_grid_thw.to(device=device)
|
| 2669 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2670 |
gen_kw: Dict[str, Any] = dict(
|
| 2671 |
input_ids=input_ids,
|
| 2672 |
attention_mask=attention_mask,
|
|
@@ -2705,7 +2709,9 @@ class CoVTVanForConditionalGeneration(Qwen3VLPreTrainedModel,GenerationMixin, bl
|
|
| 2705 |
out_ids[len(in_ids):] for in_ids, out_ids in zip(input_ids, generated_ids)
|
| 2706 |
]
|
| 2707 |
texts =processor.batch_decode(
|
| 2708 |
-
generated_ids_trimmed,
|
|
|
|
|
|
|
| 2709 |
)
|
| 2710 |
|
| 2711 |
# texts = self.decode_llm_token_ids_to_text(
|
|
@@ -2717,6 +2723,8 @@ class CoVTVanForConditionalGeneration(Qwen3VLPreTrainedModel,GenerationMixin, bl
|
|
| 2717 |
# )
|
| 2718 |
# if return_generated_ids:
|
| 2719 |
# return texts, generated_ids
|
|
|
|
|
|
|
| 2720 |
return texts
|
| 2721 |
|
| 2722 |
def forward(
|
|
|
|
| 2667 |
if video_grid_thw is not None:
|
| 2668 |
video_grid_thw = video_grid_thw.to(device=device)
|
| 2669 |
|
| 2670 |
+
# These are wrapper-only controls, not Hugging Face ``generate`` kwargs.
|
| 2671 |
+
return_generated_ids = bool(generate_kwargs.pop("return_generated_ids", False))
|
| 2672 |
+
skip_special_tokens = bool(generate_kwargs.pop("skip_special_tokens", True))
|
| 2673 |
+
|
| 2674 |
gen_kw: Dict[str, Any] = dict(
|
| 2675 |
input_ids=input_ids,
|
| 2676 |
attention_mask=attention_mask,
|
|
|
|
| 2709 |
out_ids[len(in_ids):] for in_ids, out_ids in zip(input_ids, generated_ids)
|
| 2710 |
]
|
| 2711 |
texts =processor.batch_decode(
|
| 2712 |
+
generated_ids_trimmed,
|
| 2713 |
+
skip_special_tokens=skip_special_tokens,
|
| 2714 |
+
clean_up_tokenization_spaces=False,
|
| 2715 |
)
|
| 2716 |
|
| 2717 |
# texts = self.decode_llm_token_ids_to_text(
|
|
|
|
| 2723 |
# )
|
| 2724 |
# if return_generated_ids:
|
| 2725 |
# return texts, generated_ids
|
| 2726 |
+
if return_generated_ids:
|
| 2727 |
+
return texts, generated_ids_trimmed
|
| 2728 |
return texts
|
| 2729 |
|
| 2730 |
def forward(
|
code/umm/stage2_covt/cvbench_eval.py
ADDED
|
@@ -0,0 +1,366 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Distributed, judge-free CV-Bench evaluation during Stage-2 training."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
import json
|
| 6 |
+
import os
|
| 7 |
+
import re
|
| 8 |
+
import time
|
| 9 |
+
from collections import Counter
|
| 10 |
+
from pathlib import Path
|
| 11 |
+
from typing import Optional, Sequence
|
| 12 |
+
|
| 13 |
+
import torch
|
| 14 |
+
import torch.distributed as dist
|
| 15 |
+
from PIL import Image
|
| 16 |
+
from transformers import TrainerCallback
|
| 17 |
+
|
| 18 |
+
from models.blip3o.constants import SYSTEM_MESSAGE
|
| 19 |
+
from models.blip3o.data.covt_data_van import get_image_info
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
_PAREN_CHOICE = re.compile(r"\(([A-Z])\)", re.IGNORECASE)
|
| 23 |
+
_BARE_CHOICE = re.compile(r"(?<![A-Z])([A-Z])(?![A-Z])", re.IGNORECASE)
|
| 24 |
+
_ANSWER_SPAN = re.compile(r"<answer>(.*?)</answer>", re.IGNORECASE | re.DOTALL)
|
| 25 |
+
_COVT_ANCHOR_TOKENS = {
|
| 26 |
+
"sam": "<|sam_pad|>",
|
| 27 |
+
"dino": "<|dino_pad|>",
|
| 28 |
+
"depth": "<|depth_pad|>",
|
| 29 |
+
"pidinet": "<|pidinet_pad|>",
|
| 30 |
+
"siglip": "<|siglip_pad|>",
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
def _normalize_text(value: str) -> str:
|
| 35 |
+
return re.sub(r"\s+", " ", value.strip().lower()).strip(" .,:;!?()[]{}")
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
def extract_choice(text: str, choices: Sequence[str]) -> Optional[str]:
|
| 39 |
+
"""Extract an option letter with deterministic string matching only."""
|
| 40 |
+
answer_spans = _ANSWER_SPAN.findall(text)
|
| 41 |
+
candidate = answer_spans[-1] if answer_spans else text
|
| 42 |
+
matches = _PAREN_CHOICE.findall(candidate)
|
| 43 |
+
if matches:
|
| 44 |
+
return matches[-1].upper()
|
| 45 |
+
matches = _BARE_CHOICE.findall(candidate)
|
| 46 |
+
valid = [match.upper() for match in matches if ord(match.upper()) - ord("A") < len(choices)]
|
| 47 |
+
if valid:
|
| 48 |
+
return valid[-1]
|
| 49 |
+
normalized = _normalize_text(candidate)
|
| 50 |
+
for index, choice in enumerate(choices):
|
| 51 |
+
if normalized == _normalize_text(str(choice)):
|
| 52 |
+
return chr(ord("A") + index)
|
| 53 |
+
return None
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
def _expected_choice(answer: str) -> str:
|
| 57 |
+
match = _PAREN_CHOICE.search(str(answer))
|
| 58 |
+
if not match:
|
| 59 |
+
raise ValueError(f"CV-Bench answer is not an option letter: {answer!r}")
|
| 60 |
+
return match.group(1).upper()
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
def _rank() -> int:
|
| 64 |
+
return dist.get_rank() if dist.is_available() and dist.is_initialized() else 0
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
def _world_size() -> int:
|
| 68 |
+
return dist.get_world_size() if dist.is_available() and dist.is_initialized() else 1
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
def _unwrap_generation_model(model):
|
| 72 |
+
while hasattr(model, "module"):
|
| 73 |
+
model = model.module
|
| 74 |
+
if hasattr(model, "get_base_model"):
|
| 75 |
+
model = model.get_base_model()
|
| 76 |
+
return model
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
class CVBenchEvalCallback(TrainerCallback):
|
| 80 |
+
"""Run 2D/3D multiple-choice accuracy on all ranks at fixed steps."""
|
| 81 |
+
|
| 82 |
+
def __init__(
|
| 83 |
+
self,
|
| 84 |
+
*,
|
| 85 |
+
processor,
|
| 86 |
+
manifest_path: str,
|
| 87 |
+
every_n_steps: int,
|
| 88 |
+
max_new_tokens: int = 64,
|
| 89 |
+
image_min_pixels: int = 200704,
|
| 90 |
+
image_max_pixels: int = 802816,
|
| 91 |
+
image_resized_width: int = 448,
|
| 92 |
+
image_resized_height: int = 448,
|
| 93 |
+
fail_fast: bool = True,
|
| 94 |
+
):
|
| 95 |
+
if every_n_steps <= 0:
|
| 96 |
+
raise ValueError("CV-Bench every_n_steps must be positive")
|
| 97 |
+
self.processor = processor
|
| 98 |
+
self.manifest_path = Path(manifest_path).resolve()
|
| 99 |
+
self.every_n_steps = int(every_n_steps)
|
| 100 |
+
self.max_new_tokens = int(max_new_tokens)
|
| 101 |
+
self.image_min_pixels = int(image_min_pixels)
|
| 102 |
+
self.image_max_pixels = int(image_max_pixels)
|
| 103 |
+
self.image_resized_width = int(image_resized_width)
|
| 104 |
+
self.image_resized_height = int(image_resized_height)
|
| 105 |
+
self.fail_fast = bool(fail_fast)
|
| 106 |
+
self._records: Optional[list[dict]] = None
|
| 107 |
+
self._last_step = -1
|
| 108 |
+
|
| 109 |
+
def _load_records(self) -> list[dict]:
|
| 110 |
+
if self._records is None:
|
| 111 |
+
if not self.manifest_path.is_file():
|
| 112 |
+
raise FileNotFoundError(f"CV-Bench manifest not found: {self.manifest_path}")
|
| 113 |
+
records = [
|
| 114 |
+
json.loads(line)
|
| 115 |
+
for line in self.manifest_path.read_text(encoding="utf-8").splitlines()
|
| 116 |
+
if line.strip()
|
| 117 |
+
]
|
| 118 |
+
counts = Counter(str(record.get("config")) for record in records)
|
| 119 |
+
if len(records) != 500 or counts != Counter({"2D": 250, "3D": 250}):
|
| 120 |
+
raise ValueError(
|
| 121 |
+
f"CV-Bench validation must contain 250 2D + 250 3D rows; got {dict(counts)}"
|
| 122 |
+
)
|
| 123 |
+
for record in records:
|
| 124 |
+
image_path = (self.manifest_path.parent / record["image"]).resolve()
|
| 125 |
+
if not image_path.is_file():
|
| 126 |
+
raise FileNotFoundError(f"CV-Bench image missing: {image_path}")
|
| 127 |
+
record["_image_path"] = str(image_path)
|
| 128 |
+
self._records = records
|
| 129 |
+
return self._records
|
| 130 |
+
|
| 131 |
+
def _tokenize(self, prompt: str, image: Image.Image) -> dict[str, torch.Tensor]:
|
| 132 |
+
messages = [
|
| 133 |
+
{"role": "system", "content": SYSTEM_MESSAGE},
|
| 134 |
+
{
|
| 135 |
+
"role": "user",
|
| 136 |
+
"content": [
|
| 137 |
+
{"type": "image"},
|
| 138 |
+
{"type": "text", "text": prompt},
|
| 139 |
+
],
|
| 140 |
+
},
|
| 141 |
+
]
|
| 142 |
+
rendered = self.processor.apply_chat_template(
|
| 143 |
+
messages, tokenize=False, add_generation_prompt=True
|
| 144 |
+
)
|
| 145 |
+
vision_input = get_image_info(
|
| 146 |
+
image,
|
| 147 |
+
self.image_min_pixels,
|
| 148 |
+
self.image_max_pixels,
|
| 149 |
+
self.image_resized_width,
|
| 150 |
+
self.image_resized_height,
|
| 151 |
+
)
|
| 152 |
+
kwargs = {
|
| 153 |
+
"text": [rendered],
|
| 154 |
+
"images": [vision_input],
|
| 155 |
+
"padding": True,
|
| 156 |
+
"return_tensors": "pt",
|
| 157 |
+
}
|
| 158 |
+
if hasattr(self.processor, "create_mm_token_type_ids"):
|
| 159 |
+
kwargs["return_mm_token_type_ids"] = True
|
| 160 |
+
try:
|
| 161 |
+
inputs = self.processor(**kwargs)
|
| 162 |
+
except TypeError:
|
| 163 |
+
kwargs.pop("return_mm_token_type_ids", None)
|
| 164 |
+
inputs = self.processor(**kwargs)
|
| 165 |
+
if "mm_token_type_ids" not in inputs and hasattr(
|
| 166 |
+
self.processor, "create_mm_token_type_ids"
|
| 167 |
+
):
|
| 168 |
+
inputs["mm_token_type_ids"] = torch.tensor(
|
| 169 |
+
self.processor.create_mm_token_type_ids(inputs["input_ids"].tolist()),
|
| 170 |
+
dtype=torch.long,
|
| 171 |
+
)
|
| 172 |
+
return {key: value for key, value in inputs.items() if torch.is_tensor(value)}
|
| 173 |
+
|
| 174 |
+
def _evaluate_one(self, model, record: dict) -> dict:
|
| 175 |
+
prompt = (
|
| 176 |
+
str(record["prompt"])
|
| 177 |
+
+ "\nReturn the selected option in <answer> tags, for example "
|
| 178 |
+
+ "<answer>(A)</answer>."
|
| 179 |
+
)
|
| 180 |
+
with Image.open(record["_image_path"]) as opened:
|
| 181 |
+
image = opened.convert("RGB")
|
| 182 |
+
inputs = self._tokenize(prompt, image)
|
| 183 |
+
device = next(model.parameters()).device
|
| 184 |
+
inputs = {key: value.to(device) for key, value in inputs.items()}
|
| 185 |
+
texts, generated_ids = model.forward_llm_decode_text(
|
| 186 |
+
self.processor.tokenizer,
|
| 187 |
+
self.processor,
|
| 188 |
+
max_new_tokens=self.max_new_tokens,
|
| 189 |
+
do_sample=False,
|
| 190 |
+
use_cache=True,
|
| 191 |
+
return_generated_ids=True,
|
| 192 |
+
**inputs,
|
| 193 |
+
)
|
| 194 |
+
text = str(texts[0])
|
| 195 |
+
token_ids = [int(value) for value in generated_ids[0].tolist()]
|
| 196 |
+
raw_text = self.processor.tokenizer.decode(
|
| 197 |
+
token_ids,
|
| 198 |
+
skip_special_tokens=False,
|
| 199 |
+
clean_up_tokenization_spaces=False,
|
| 200 |
+
)
|
| 201 |
+
# Parse the raw continuation so <answer>...</answer> remains an explicit
|
| 202 |
+
# boundary once the later curriculum begins emitting CoVT prose.
|
| 203 |
+
predicted = extract_choice(raw_text, record["choices"])
|
| 204 |
+
expected = _expected_choice(record["answer"])
|
| 205 |
+
anchor_counts = {
|
| 206 |
+
name: raw_text.count(token) for name, token in _COVT_ANCHOR_TOKENS.items()
|
| 207 |
+
}
|
| 208 |
+
return {
|
| 209 |
+
"sample_id": record["sample_id"],
|
| 210 |
+
"config": record["config"],
|
| 211 |
+
"task": record["task"],
|
| 212 |
+
"row_index": record["row_index"],
|
| 213 |
+
"expected": expected,
|
| 214 |
+
"predicted": predicted,
|
| 215 |
+
"correct": predicted == expected,
|
| 216 |
+
"response": text,
|
| 217 |
+
"raw_response": raw_text,
|
| 218 |
+
"generated_token_ids": token_ids,
|
| 219 |
+
"covt_has_think": "<think>" in raw_text and "</think>" in raw_text,
|
| 220 |
+
"covt_has_answer": "<answer>" in raw_text and "</answer>" in raw_text,
|
| 221 |
+
"covt_anchor_counts": anchor_counts,
|
| 222 |
+
"covt_has_any_anchor": any(anchor_counts.values()),
|
| 223 |
+
"error": None,
|
| 224 |
+
}
|
| 225 |
+
|
| 226 |
+
@staticmethod
|
| 227 |
+
def _metrics(results: list[dict], elapsed: float) -> dict[str, float]:
|
| 228 |
+
metrics: dict[str, float] = {
|
| 229 |
+
"eval/cvbench_seconds": float(elapsed),
|
| 230 |
+
"eval/cvbench_samples": float(len(results)),
|
| 231 |
+
"eval/cvbench_errors": float(sum(bool(row["error"]) for row in results)),
|
| 232 |
+
"eval/cvbench_parse_rate": sum(row["predicted"] is not None for row in results)
|
| 233 |
+
/ max(len(results), 1),
|
| 234 |
+
"eval/cvbench_accuracy": sum(bool(row["correct"]) for row in results)
|
| 235 |
+
/ max(len(results), 1),
|
| 236 |
+
"eval/cvbench_covt_think_rate": sum(
|
| 237 |
+
bool(row.get("covt_has_think")) for row in results
|
| 238 |
+
)
|
| 239 |
+
/ max(len(results), 1),
|
| 240 |
+
"eval/cvbench_covt_answer_tag_rate": sum(
|
| 241 |
+
bool(row.get("covt_has_answer")) for row in results
|
| 242 |
+
)
|
| 243 |
+
/ max(len(results), 1),
|
| 244 |
+
"eval/cvbench_covt_any_anchor_rate": sum(
|
| 245 |
+
bool(row.get("covt_has_any_anchor")) for row in results
|
| 246 |
+
)
|
| 247 |
+
/ max(len(results), 1),
|
| 248 |
+
}
|
| 249 |
+
for name in _COVT_ANCHOR_TOKENS:
|
| 250 |
+
metrics[f"eval/cvbench_covt_{name}_tokens_mean"] = sum(
|
| 251 |
+
int(row.get("covt_anchor_counts", {}).get(name, 0)) for row in results
|
| 252 |
+
) / max(len(results), 1)
|
| 253 |
+
groups: dict[str, list[dict]] = {}
|
| 254 |
+
for result in results:
|
| 255 |
+
groups.setdefault(str(result["config"]), []).append(result)
|
| 256 |
+
groups.setdefault(f"{result['config']}_{result['task']}", []).append(result)
|
| 257 |
+
for name, rows in sorted(groups.items()):
|
| 258 |
+
safe_name = re.sub(r"[^a-zA-Z0-9]+", "_", name).strip("_").lower()
|
| 259 |
+
metrics[f"eval/cvbench_{safe_name}_accuracy"] = sum(
|
| 260 |
+
bool(row["correct"]) for row in rows
|
| 261 |
+
) / len(rows)
|
| 262 |
+
task_scores = [
|
| 263 |
+
metrics[key]
|
| 264 |
+
for key in (
|
| 265 |
+
"eval/cvbench_2d_count_accuracy",
|
| 266 |
+
"eval/cvbench_2d_relation_accuracy",
|
| 267 |
+
"eval/cvbench_3d_depth_accuracy",
|
| 268 |
+
"eval/cvbench_3d_distance_accuracy",
|
| 269 |
+
)
|
| 270 |
+
if key in metrics
|
| 271 |
+
]
|
| 272 |
+
if len(task_scores) == 4:
|
| 273 |
+
metrics["eval/cvbench_task_macro_accuracy"] = sum(task_scores) / 4
|
| 274 |
+
metrics["eval/cvbench_2d_task_macro_accuracy"] = sum(task_scores[:2]) / 2
|
| 275 |
+
metrics["eval/cvbench_3d_task_macro_accuracy"] = sum(task_scores[2:]) / 2
|
| 276 |
+
return metrics
|
| 277 |
+
|
| 278 |
+
def _run(self, args, state, model) -> None:
|
| 279 |
+
if dist.is_available() and dist.is_initialized():
|
| 280 |
+
dist.barrier()
|
| 281 |
+
started = time.perf_counter()
|
| 282 |
+
records = self._load_records()
|
| 283 |
+
rank = _rank()
|
| 284 |
+
world_size = _world_size()
|
| 285 |
+
generation_model = _unwrap_generation_model(model)
|
| 286 |
+
was_training = generation_model.training
|
| 287 |
+
generation_model.eval()
|
| 288 |
+
local_results: list[dict] = []
|
| 289 |
+
try:
|
| 290 |
+
with torch.inference_mode():
|
| 291 |
+
for record in records[rank::world_size]:
|
| 292 |
+
try:
|
| 293 |
+
local_results.append(self._evaluate_one(generation_model, record))
|
| 294 |
+
except Exception as exc: # noqa: BLE001 - synchronize failures across ranks
|
| 295 |
+
local_results.append(
|
| 296 |
+
{
|
| 297 |
+
"sample_id": record["sample_id"],
|
| 298 |
+
"config": record["config"],
|
| 299 |
+
"task": record["task"],
|
| 300 |
+
"row_index": record["row_index"],
|
| 301 |
+
"expected": _expected_choice(record["answer"]),
|
| 302 |
+
"predicted": None,
|
| 303 |
+
"correct": False,
|
| 304 |
+
"response": "",
|
| 305 |
+
"raw_response": "",
|
| 306 |
+
"generated_token_ids": [],
|
| 307 |
+
"covt_has_think": False,
|
| 308 |
+
"covt_has_answer": False,
|
| 309 |
+
"covt_anchor_counts": {
|
| 310 |
+
name: 0 for name in _COVT_ANCHOR_TOKENS
|
| 311 |
+
},
|
| 312 |
+
"covt_has_any_anchor": False,
|
| 313 |
+
"error": repr(exc),
|
| 314 |
+
}
|
| 315 |
+
)
|
| 316 |
+
finally:
|
| 317 |
+
if was_training:
|
| 318 |
+
generation_model.train()
|
| 319 |
+
|
| 320 |
+
gathered: list[Optional[list[dict]]] = [None] * world_size
|
| 321 |
+
if dist.is_available() and dist.is_initialized():
|
| 322 |
+
dist.all_gather_object(gathered, local_results)
|
| 323 |
+
else:
|
| 324 |
+
gathered = [local_results]
|
| 325 |
+
results = [row for shard in gathered if shard is not None for row in shard]
|
| 326 |
+
results.sort(key=lambda row: (row["config"], row["row_index"]))
|
| 327 |
+
elapsed = time.perf_counter() - started
|
| 328 |
+
metrics = self._metrics(results, elapsed)
|
| 329 |
+
|
| 330 |
+
if rank == 0:
|
| 331 |
+
output = Path(args.output_dir) / "cvbench_eval"
|
| 332 |
+
output.mkdir(parents=True, exist_ok=True)
|
| 333 |
+
step = int(state.global_step)
|
| 334 |
+
with (output / f"step_{step:06d}.jsonl").open("w", encoding="utf-8") as handle:
|
| 335 |
+
for result in results:
|
| 336 |
+
handle.write(json.dumps(result, ensure_ascii=False) + "\n")
|
| 337 |
+
with (output / "metrics.jsonl").open("a", encoding="utf-8") as handle:
|
| 338 |
+
handle.write(json.dumps({"step": step, **metrics}, ensure_ascii=False) + "\n")
|
| 339 |
+
print(f"[cvbench] step={step} metrics={json.dumps(metrics, sort_keys=True)}", flush=True)
|
| 340 |
+
try:
|
| 341 |
+
import swanlab
|
| 342 |
+
|
| 343 |
+
swanlab.log(metrics, step=step)
|
| 344 |
+
except Exception as exc: # noqa: BLE001 - local files remain authoritative
|
| 345 |
+
print(f"[cvbench] SwanLab logging failed: {exc!r}", flush=True)
|
| 346 |
+
|
| 347 |
+
error_count = int(metrics["eval/cvbench_errors"])
|
| 348 |
+
if dist.is_available() and dist.is_initialized():
|
| 349 |
+
dist.barrier()
|
| 350 |
+
if error_count and self.fail_fast:
|
| 351 |
+
first_error = next(row["error"] for row in results if row["error"])
|
| 352 |
+
raise RuntimeError(
|
| 353 |
+
f"CV-Bench evaluation failed for {error_count} samples; first error: {first_error}"
|
| 354 |
+
)
|
| 355 |
+
|
| 356 |
+
def on_step_end(self, args, state, control, model=None, **kwargs):
|
| 357 |
+
step = int(state.global_step)
|
| 358 |
+
if (
|
| 359 |
+
model is not None
|
| 360 |
+
and step > 0
|
| 361 |
+
and step % self.every_n_steps == 0
|
| 362 |
+
and step != self._last_step
|
| 363 |
+
):
|
| 364 |
+
self._last_step = step
|
| 365 |
+
self._run(args, state, model)
|
| 366 |
+
return control
|
code/umm/stage2_covt/eval_cvbench.py
ADDED
|
@@ -0,0 +1,263 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""Standalone distributed evaluation for the fixed local CV-Bench-500 subset."""
|
| 3 |
+
|
| 4 |
+
from __future__ import annotations
|
| 5 |
+
|
| 6 |
+
import argparse
|
| 7 |
+
import ctypes
|
| 8 |
+
import json
|
| 9 |
+
import os
|
| 10 |
+
import socket
|
| 11 |
+
import time
|
| 12 |
+
from datetime import datetime, timezone
|
| 13 |
+
from pathlib import Path
|
| 14 |
+
|
| 15 |
+
import torch
|
| 16 |
+
import torch.distributed as dist
|
| 17 |
+
from transformers import AutoProcessor
|
| 18 |
+
|
| 19 |
+
from cvbench_eval import CVBenchEvalCallback, _expected_choice
|
| 20 |
+
from models.blip3o.constants import (
|
| 21 |
+
DEPTH_PAD_TOKEN,
|
| 22 |
+
DINO_PAD_TOKEN,
|
| 23 |
+
PIDINET_PAD_TOKEN,
|
| 24 |
+
SAM_PAD_TOKEN,
|
| 25 |
+
SIGLIP_PAD_TOKEN,
|
| 26 |
+
)
|
| 27 |
+
from models.blip3o.model.language_model.covt_qwen_stage2_van import (
|
| 28 |
+
CoVTVanForConditionalGeneration,
|
| 29 |
+
)
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
ANCHORS = ["sam", "dino", "depth", "pidinet", "siglip"]
|
| 33 |
+
REQUIRED_SPECIAL_TOKENS = [
|
| 34 |
+
SAM_PAD_TOKEN,
|
| 35 |
+
DINO_PAD_TOKEN,
|
| 36 |
+
DEPTH_PAD_TOKEN,
|
| 37 |
+
PIDINET_PAD_TOKEN,
|
| 38 |
+
SIGLIP_PAD_TOKEN,
|
| 39 |
+
"<think>",
|
| 40 |
+
"</think>",
|
| 41 |
+
"<answer>",
|
| 42 |
+
"</answer>",
|
| 43 |
+
]
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
def _set_process_name(name: str) -> None:
|
| 47 |
+
try:
|
| 48 |
+
ctypes.CDLL(None).prctl(15, name.encode()[:15], 0, 0, 0)
|
| 49 |
+
except Exception:
|
| 50 |
+
pass
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
def _distributed() -> tuple[int, int, int]:
|
| 54 |
+
world_size = int(os.environ.get("WORLD_SIZE", "1"))
|
| 55 |
+
rank = int(os.environ.get("RANK", "0"))
|
| 56 |
+
local_rank = int(os.environ.get("LOCAL_RANK", "0"))
|
| 57 |
+
torch.cuda.set_device(local_rank)
|
| 58 |
+
if world_size > 1:
|
| 59 |
+
dist.init_process_group(
|
| 60 |
+
backend="nccl", device_id=torch.device("cuda", local_rank)
|
| 61 |
+
)
|
| 62 |
+
return rank, local_rank, world_size
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
def _barrier() -> None:
|
| 66 |
+
if dist.is_available() and dist.is_initialized():
|
| 67 |
+
dist.barrier(device_ids=[torch.cuda.current_device()])
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
def _write_json(path: Path, payload: dict) -> None:
|
| 71 |
+
temporary = path.with_suffix(path.suffix + ".tmp")
|
| 72 |
+
temporary.write_text(
|
| 73 |
+
json.dumps(payload, ensure_ascii=False, indent=2, sort_keys=True) + "\n",
|
| 74 |
+
encoding="utf-8",
|
| 75 |
+
)
|
| 76 |
+
temporary.replace(path)
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
def _validate_tokenizer(processor, model) -> dict[str, int]:
|
| 80 |
+
token_ids: dict[str, int] = {}
|
| 81 |
+
unk_id = processor.tokenizer.unk_token_id
|
| 82 |
+
for token in REQUIRED_SPECIAL_TOKENS:
|
| 83 |
+
ids = processor.tokenizer(token, add_special_tokens=False).input_ids
|
| 84 |
+
if len(ids) != 1 or ids[0] == unk_id:
|
| 85 |
+
raise ValueError(f"Required token is not represented by one vocabulary row: {token!r} -> {ids}")
|
| 86 |
+
token_ids[token] = int(ids[0])
|
| 87 |
+
embedding_rows = int(model.get_input_embeddings().weight.shape[0])
|
| 88 |
+
if len(processor.tokenizer) > embedding_rows:
|
| 89 |
+
raise ValueError(
|
| 90 |
+
f"Tokenizer/model vocabulary mismatch: tokenizer={len(processor.tokenizer)}, "
|
| 91 |
+
f"embedding_rows={embedding_rows}"
|
| 92 |
+
)
|
| 93 |
+
return token_ids
|
| 94 |
+
|
| 95 |
+
|
| 96 |
+
def _swanlab_log(args, metrics: dict, metadata: dict) -> dict:
|
| 97 |
+
if not args.swanlab:
|
| 98 |
+
return {"enabled": False}
|
| 99 |
+
import swanlab
|
| 100 |
+
|
| 101 |
+
run = swanlab.init(
|
| 102 |
+
project=args.swanlab_project,
|
| 103 |
+
name=args.swanlab_run_name,
|
| 104 |
+
log_dir=str(args.output_dir / "swanlab"),
|
| 105 |
+
config=metadata,
|
| 106 |
+
tags=["CV-Bench", "evaluation", f"checkpoint-{args.checkpoint_step}", "8GPU"],
|
| 107 |
+
description="Judge-free exact-match evaluation on fixed CV-Bench-500 (250 2D + 250 3D).",
|
| 108 |
+
)
|
| 109 |
+
swanlab.log(metrics, step=args.checkpoint_step)
|
| 110 |
+
run_id = getattr(run, "id", None)
|
| 111 |
+
run_url = getattr(run, "url", None)
|
| 112 |
+
swanlab.finish()
|
| 113 |
+
return {"enabled": True, "run_id": run_id, "run_url": str(run_url) if run_url else None}
|
| 114 |
+
|
| 115 |
+
|
| 116 |
+
def main() -> None:
|
| 117 |
+
parser = argparse.ArgumentParser()
|
| 118 |
+
parser.add_argument("--model-path", type=Path, required=True)
|
| 119 |
+
parser.add_argument("--manifest", type=Path, required=True)
|
| 120 |
+
parser.add_argument("--output-dir", type=Path, required=True)
|
| 121 |
+
parser.add_argument("--dtype", choices=("bfloat16", "float16"), default="bfloat16")
|
| 122 |
+
parser.add_argument(
|
| 123 |
+
"--attn-implementation",
|
| 124 |
+
choices=("flash_attention_2", "sdpa"),
|
| 125 |
+
default="flash_attention_2",
|
| 126 |
+
)
|
| 127 |
+
parser.add_argument("--max-new-tokens", type=int, default=64)
|
| 128 |
+
parser.add_argument("--limit", type=int, default=0, help="Optional deterministic prefix for smoke tests")
|
| 129 |
+
parser.add_argument("--checkpoint-step", type=int, default=2000)
|
| 130 |
+
parser.add_argument("--process-name", default="H3_EVAL")
|
| 131 |
+
parser.add_argument("--swanlab", action="store_true")
|
| 132 |
+
parser.add_argument("--swanlab-project", default="unified-model")
|
| 133 |
+
parser.add_argument("--swanlab-run-name", default="H3_LoRA-ckpt2000-CVBench500")
|
| 134 |
+
args = parser.parse_args()
|
| 135 |
+
|
| 136 |
+
args.model_path = args.model_path.resolve()
|
| 137 |
+
args.manifest = args.manifest.resolve()
|
| 138 |
+
args.output_dir = args.output_dir.resolve()
|
| 139 |
+
_set_process_name(args.process_name)
|
| 140 |
+
rank, local_rank, world_size = _distributed()
|
| 141 |
+
|
| 142 |
+
if rank == 0:
|
| 143 |
+
if args.output_dir.exists() and any(args.output_dir.iterdir()):
|
| 144 |
+
raise FileExistsError(f"Evaluation output directory is not empty: {args.output_dir}")
|
| 145 |
+
args.output_dir.mkdir(parents=True, exist_ok=True)
|
| 146 |
+
_barrier()
|
| 147 |
+
|
| 148 |
+
dtype = torch.bfloat16 if args.dtype == "bfloat16" else torch.float16
|
| 149 |
+
processor = AutoProcessor.from_pretrained(
|
| 150 |
+
args.model_path,
|
| 151 |
+
local_files_only=True,
|
| 152 |
+
trust_remote_code=True,
|
| 153 |
+
)
|
| 154 |
+
model = CoVTVanForConditionalGeneration.from_pretrained(
|
| 155 |
+
args.model_path,
|
| 156 |
+
local_files_only=True,
|
| 157 |
+
torch_dtype=dtype,
|
| 158 |
+
attn_implementation=args.attn_implementation,
|
| 159 |
+
low_cpu_mem_usage=True,
|
| 160 |
+
device_map={"": local_rank},
|
| 161 |
+
)
|
| 162 |
+
model.get_anchor_model_ids(ANCHORS, load_anchor_models=False)
|
| 163 |
+
model.config.use_cache = True
|
| 164 |
+
model.eval()
|
| 165 |
+
token_ids = _validate_tokenizer(processor, model)
|
| 166 |
+
|
| 167 |
+
evaluator = CVBenchEvalCallback(
|
| 168 |
+
processor=processor,
|
| 169 |
+
manifest_path=str(args.manifest),
|
| 170 |
+
every_n_steps=1,
|
| 171 |
+
max_new_tokens=args.max_new_tokens,
|
| 172 |
+
fail_fast=False,
|
| 173 |
+
)
|
| 174 |
+
records = evaluator._load_records()
|
| 175 |
+
if args.limit:
|
| 176 |
+
if args.limit < 1 or args.limit > len(records):
|
| 177 |
+
raise ValueError(f"--limit must be in [1, {len(records)}], got {args.limit}")
|
| 178 |
+
records = records[: args.limit]
|
| 179 |
+
local_records = records[rank::world_size]
|
| 180 |
+
shard_path = args.output_dir / f"rank_{rank:02d}.jsonl"
|
| 181 |
+
local_results: list[dict] = []
|
| 182 |
+
started = time.perf_counter()
|
| 183 |
+
with shard_path.open("w", encoding="utf-8", buffering=1) as handle:
|
| 184 |
+
with torch.inference_mode():
|
| 185 |
+
for index, record in enumerate(local_records, start=1):
|
| 186 |
+
try:
|
| 187 |
+
result = evaluator._evaluate_one(model, record)
|
| 188 |
+
except Exception as exc: # keep every row auditable across ranks
|
| 189 |
+
result = {
|
| 190 |
+
"sample_id": record["sample_id"],
|
| 191 |
+
"config": record["config"],
|
| 192 |
+
"task": record["task"],
|
| 193 |
+
"row_index": record["row_index"],
|
| 194 |
+
"expected": _expected_choice(record["answer"]),
|
| 195 |
+
"predicted": None,
|
| 196 |
+
"correct": False,
|
| 197 |
+
"response": "",
|
| 198 |
+
"error": repr(exc),
|
| 199 |
+
}
|
| 200 |
+
local_results.append(result)
|
| 201 |
+
handle.write(json.dumps(result, ensure_ascii=False) + "\n")
|
| 202 |
+
if index % 10 == 0 or index == len(local_records):
|
| 203 |
+
print(
|
| 204 |
+
f"[cvbench][rank {rank}] {index}/{len(local_records)} "
|
| 205 |
+
f"correct={sum(bool(row['correct']) for row in local_results)}",
|
| 206 |
+
flush=True,
|
| 207 |
+
)
|
| 208 |
+
|
| 209 |
+
gathered: list[list[dict] | None] = [None] * world_size
|
| 210 |
+
if world_size > 1:
|
| 211 |
+
dist.all_gather_object(gathered, local_results)
|
| 212 |
+
else:
|
| 213 |
+
gathered = [local_results]
|
| 214 |
+
results = [row for shard in gathered if shard is not None for row in shard]
|
| 215 |
+
results.sort(key=lambda row: (row["config"], int(row["row_index"])))
|
| 216 |
+
elapsed = time.perf_counter() - started
|
| 217 |
+
|
| 218 |
+
expected_count = len(records)
|
| 219 |
+
if len(results) != expected_count or len({row["sample_id"] for row in results}) != expected_count:
|
| 220 |
+
raise RuntimeError(f"Expected {expected_count} unique results, got {len(results)} rows")
|
| 221 |
+
metrics = evaluator._metrics(results, elapsed)
|
| 222 |
+
metadata = {
|
| 223 |
+
"created_utc": datetime.now(timezone.utc).isoformat(),
|
| 224 |
+
"host": socket.gethostname(),
|
| 225 |
+
"model_path": str(args.model_path),
|
| 226 |
+
"manifest": str(args.manifest),
|
| 227 |
+
"checkpoint_step": args.checkpoint_step,
|
| 228 |
+
"world_size": world_size,
|
| 229 |
+
"dtype": args.dtype,
|
| 230 |
+
"attention": args.attn_implementation,
|
| 231 |
+
"max_new_tokens": args.max_new_tokens,
|
| 232 |
+
"sample_limit": args.limit or None,
|
| 233 |
+
"decoding": "greedy",
|
| 234 |
+
"scoring": "deterministic option exact-match; no LLM judge",
|
| 235 |
+
"tokenizer_length": len(processor.tokenizer),
|
| 236 |
+
"embedding_rows": int(model.get_input_embeddings().weight.shape[0]),
|
| 237 |
+
"required_token_ids": token_ids,
|
| 238 |
+
}
|
| 239 |
+
|
| 240 |
+
if rank == 0:
|
| 241 |
+
with (args.output_dir / "results.jsonl").open("w", encoding="utf-8") as handle:
|
| 242 |
+
for row in results:
|
| 243 |
+
handle.write(json.dumps(row, ensure_ascii=False) + "\n")
|
| 244 |
+
_write_json(args.output_dir / "metrics.json", {"metadata": metadata, "metrics": metrics})
|
| 245 |
+
try:
|
| 246 |
+
swanlab_status = _swanlab_log(args, metrics, metadata)
|
| 247 |
+
except Exception as exc:
|
| 248 |
+
swanlab_status = {"enabled": True, "error": repr(exc)}
|
| 249 |
+
print(f"[cvbench] SwanLab logging failed: {exc!r}", flush=True)
|
| 250 |
+
_write_json(args.output_dir / "swanlab.json", swanlab_status)
|
| 251 |
+
print(f"[cvbench] final_metrics={json.dumps(metrics, sort_keys=True)}", flush=True)
|
| 252 |
+
|
| 253 |
+
error_count = sum(bool(row["error"]) for row in results)
|
| 254 |
+
_barrier()
|
| 255 |
+
if dist.is_available() and dist.is_initialized():
|
| 256 |
+
dist.destroy_process_group()
|
| 257 |
+
if error_count:
|
| 258 |
+
first_error = next(row["error"] for row in results if row["error"])
|
| 259 |
+
raise RuntimeError(f"CV-Bench had {error_count} inference errors; first={first_error}")
|
| 260 |
+
|
| 261 |
+
|
| 262 |
+
if __name__ == "__main__":
|
| 263 |
+
main()
|
code/umm/stage2_covt/eval_cvbench_base.py
ADDED
|
@@ -0,0 +1,390 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""Evaluate raw or Stage-1-aligned Qwen3-VL on fixed CV-Bench-500."""
|
| 3 |
+
|
| 4 |
+
from __future__ import annotations
|
| 5 |
+
|
| 6 |
+
import argparse
|
| 7 |
+
import ctypes
|
| 8 |
+
import hashlib
|
| 9 |
+
import json
|
| 10 |
+
import os
|
| 11 |
+
import socket
|
| 12 |
+
import time
|
| 13 |
+
from datetime import datetime, timezone
|
| 14 |
+
from pathlib import Path
|
| 15 |
+
|
| 16 |
+
import torch
|
| 17 |
+
import torch.distributed as dist
|
| 18 |
+
from PIL import Image
|
| 19 |
+
from transformers import AutoProcessor, Qwen3VLForConditionalGeneration
|
| 20 |
+
|
| 21 |
+
from cvbench_eval import CVBenchEvalCallback, _expected_choice, extract_choice
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
ANCHOR_TOKENS = {
|
| 25 |
+
"sam": "<|sam_pad|>",
|
| 26 |
+
"dino": "<|dino_pad|>",
|
| 27 |
+
"depth": "<|depth_pad|>",
|
| 28 |
+
"pidinet": "<|pidinet_pad|>",
|
| 29 |
+
"siglip": "<|siglip_pad|>",
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
def _set_process_name(name: str) -> None:
|
| 34 |
+
try:
|
| 35 |
+
ctypes.CDLL(None).prctl(15, name.encode()[:15], 0, 0, 0)
|
| 36 |
+
except Exception:
|
| 37 |
+
pass
|
| 38 |
+
|
| 39 |
+
|
| 40 |
+
def _distributed() -> tuple[int, int, int]:
|
| 41 |
+
local_rank = int(os.environ.get("LOCAL_RANK", "0"))
|
| 42 |
+
if int(os.environ.get("WORLD_SIZE", "1")) > 1 and not dist.is_initialized():
|
| 43 |
+
torch.cuda.set_device(local_rank)
|
| 44 |
+
dist.init_process_group(backend="nccl")
|
| 45 |
+
rank = dist.get_rank() if dist.is_initialized() else 0
|
| 46 |
+
world_size = dist.get_world_size() if dist.is_initialized() else 1
|
| 47 |
+
return rank, local_rank, world_size
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
def _barrier() -> None:
|
| 51 |
+
if dist.is_initialized():
|
| 52 |
+
dist.barrier()
|
| 53 |
+
|
| 54 |
+
|
| 55 |
+
def _write_json(path: Path, value: dict) -> None:
|
| 56 |
+
path.write_text(
|
| 57 |
+
json.dumps(value, ensure_ascii=False, indent=2, sort_keys=True) + "\n",
|
| 58 |
+
encoding="utf-8",
|
| 59 |
+
)
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
def _sha256(path: Path) -> str:
|
| 63 |
+
digest = hashlib.sha256()
|
| 64 |
+
with path.open("rb") as handle:
|
| 65 |
+
for chunk in iter(lambda: handle.read(8 * 1024 * 1024), b""):
|
| 66 |
+
digest.update(chunk)
|
| 67 |
+
return digest.hexdigest()
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
def _apply_stage1_alignment(model, processor, checkpoint_path: Path) -> dict:
|
| 71 |
+
"""Reproduce Stage-1's 258-token vocabulary extension and row restore.
|
| 72 |
+
|
| 73 |
+
The checkpoint's generation down-projector is deliberately not instantiated:
|
| 74 |
+
CV-Bench uses only the image-understanding forward/generation path. The two
|
| 75 |
+
tensors that can affect text generation are restored exactly.
|
| 76 |
+
"""
|
| 77 |
+
query_tokens = ["<begin_of_img>", "<end_of_img>"] + [
|
| 78 |
+
f"<img{index}>" for index in range(256)
|
| 79 |
+
]
|
| 80 |
+
old_vocab_size = len(processor.tokenizer)
|
| 81 |
+
added = processor.tokenizer.add_special_tokens(
|
| 82 |
+
{"additional_special_tokens": query_tokens}
|
| 83 |
+
)
|
| 84 |
+
if added != len(query_tokens):
|
| 85 |
+
raise RuntimeError(
|
| 86 |
+
f"Expected to add {len(query_tokens)} Stage-1 tokens, added {added}"
|
| 87 |
+
)
|
| 88 |
+
model.resize_token_embeddings(len(processor.tokenizer))
|
| 89 |
+
try:
|
| 90 |
+
state = torch.load(
|
| 91 |
+
checkpoint_path, map_location="cpu", mmap=True, weights_only=True
|
| 92 |
+
)
|
| 93 |
+
except TypeError:
|
| 94 |
+
state = torch.load(checkpoint_path, map_location="cpu")
|
| 95 |
+
row_count = len(query_tokens)
|
| 96 |
+
head_rows = state["lm_head.weight"][-row_count:]
|
| 97 |
+
embed_rows = state["model.language_model.embed_tokens.weight"][-row_count:]
|
| 98 |
+
if tuple(head_rows.shape) != (row_count, model.get_output_embeddings().weight.shape[1]):
|
| 99 |
+
raise ValueError(f"Unexpected Stage-1 lm_head rows: {tuple(head_rows.shape)}")
|
| 100 |
+
if tuple(embed_rows.shape) != (row_count, model.get_input_embeddings().weight.shape[1]):
|
| 101 |
+
raise ValueError(f"Unexpected Stage-1 embedding rows: {tuple(embed_rows.shape)}")
|
| 102 |
+
with torch.no_grad():
|
| 103 |
+
model.get_output_embeddings().weight[-row_count:].copy_(
|
| 104 |
+
head_rows.to(
|
| 105 |
+
device=model.get_output_embeddings().weight.device,
|
| 106 |
+
dtype=model.get_output_embeddings().weight.dtype,
|
| 107 |
+
)
|
| 108 |
+
)
|
| 109 |
+
model.get_input_embeddings().weight[-row_count:].copy_(
|
| 110 |
+
embed_rows.to(
|
| 111 |
+
device=model.get_input_embeddings().weight.device,
|
| 112 |
+
dtype=model.get_input_embeddings().weight.dtype,
|
| 113 |
+
)
|
| 114 |
+
)
|
| 115 |
+
del state, head_rows, embed_rows
|
| 116 |
+
return {
|
| 117 |
+
"old_tokenizer_length": old_vocab_size,
|
| 118 |
+
"new_tokenizer_length": len(processor.tokenizer),
|
| 119 |
+
"stage1_query_token_count": row_count,
|
| 120 |
+
"stage1_query_token_id_start": int(
|
| 121 |
+
processor.tokenizer.convert_tokens_to_ids("<begin_of_img>")
|
| 122 |
+
),
|
| 123 |
+
}
|
| 124 |
+
|
| 125 |
+
|
| 126 |
+
def _evaluate_one(model, evaluator: CVBenchEvalCallback, processor, record: dict, max_new_tokens: int) -> dict:
|
| 127 |
+
prompt = (
|
| 128 |
+
str(record["prompt"])
|
| 129 |
+
+ "\nReturn the selected option in <answer> tags, for example "
|
| 130 |
+
+ "<answer>(A)</answer>."
|
| 131 |
+
)
|
| 132 |
+
with Image.open(record["_image_path"]) as opened:
|
| 133 |
+
inputs = evaluator._tokenize(prompt, opened.convert("RGB"))
|
| 134 |
+
device = next(model.parameters()).device
|
| 135 |
+
dtype = next(model.parameters()).dtype
|
| 136 |
+
inputs = {key: value.to(device) for key, value in inputs.items()}
|
| 137 |
+
if "pixel_values" in inputs:
|
| 138 |
+
inputs["pixel_values"] = inputs["pixel_values"].to(dtype=dtype)
|
| 139 |
+
generation_inputs = {
|
| 140 |
+
key: value
|
| 141 |
+
for key, value in inputs.items()
|
| 142 |
+
if key
|
| 143 |
+
in {
|
| 144 |
+
"input_ids",
|
| 145 |
+
"attention_mask",
|
| 146 |
+
"pixel_values",
|
| 147 |
+
"image_grid_thw",
|
| 148 |
+
"pixel_values_videos",
|
| 149 |
+
"video_grid_thw",
|
| 150 |
+
"mm_token_type_ids",
|
| 151 |
+
}
|
| 152 |
+
}
|
| 153 |
+
prompt_length = int(inputs["input_ids"].shape[1])
|
| 154 |
+
previous_rope_deltas = getattr(model, "rope_deltas", None)
|
| 155 |
+
if hasattr(model, "rope_deltas"):
|
| 156 |
+
model.rope_deltas = None
|
| 157 |
+
try:
|
| 158 |
+
generated = model.generate(
|
| 159 |
+
**generation_inputs,
|
| 160 |
+
max_new_tokens=max_new_tokens,
|
| 161 |
+
do_sample=False,
|
| 162 |
+
use_cache=True,
|
| 163 |
+
temperature=1.0,
|
| 164 |
+
top_p=1.0,
|
| 165 |
+
top_k=50,
|
| 166 |
+
pad_token_id=processor.tokenizer.pad_token_id
|
| 167 |
+
or processor.tokenizer.eos_token_id,
|
| 168 |
+
eos_token_id=processor.tokenizer.eos_token_id,
|
| 169 |
+
)
|
| 170 |
+
finally:
|
| 171 |
+
if hasattr(model, "rope_deltas"):
|
| 172 |
+
model.rope_deltas = previous_rope_deltas
|
| 173 |
+
token_ids = [int(value) for value in generated[0, prompt_length:].tolist()]
|
| 174 |
+
raw_text = processor.tokenizer.decode(
|
| 175 |
+
token_ids, skip_special_tokens=False, clean_up_tokenization_spaces=False
|
| 176 |
+
)
|
| 177 |
+
visible_text = processor.tokenizer.decode(
|
| 178 |
+
token_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False
|
| 179 |
+
)
|
| 180 |
+
predicted = extract_choice(raw_text, record["choices"])
|
| 181 |
+
expected = _expected_choice(record["answer"])
|
| 182 |
+
anchor_counts = {name: raw_text.count(token) for name, token in ANCHOR_TOKENS.items()}
|
| 183 |
+
return {
|
| 184 |
+
"sample_id": record["sample_id"],
|
| 185 |
+
"config": record["config"],
|
| 186 |
+
"task": record["task"],
|
| 187 |
+
"row_index": record["row_index"],
|
| 188 |
+
"expected": expected,
|
| 189 |
+
"predicted": predicted,
|
| 190 |
+
"correct": predicted == expected,
|
| 191 |
+
"response": visible_text,
|
| 192 |
+
"raw_response": raw_text,
|
| 193 |
+
"generated_token_ids": token_ids,
|
| 194 |
+
"covt_has_think": "<think>" in raw_text and "</think>" in raw_text,
|
| 195 |
+
"covt_has_answer": "<answer>" in raw_text and "</answer>" in raw_text,
|
| 196 |
+
"covt_anchor_counts": anchor_counts,
|
| 197 |
+
"covt_has_any_anchor": any(anchor_counts.values()),
|
| 198 |
+
"error": None,
|
| 199 |
+
}
|
| 200 |
+
|
| 201 |
+
|
| 202 |
+
def main() -> None:
|
| 203 |
+
parser = argparse.ArgumentParser()
|
| 204 |
+
parser.add_argument("--model-path", type=Path, required=True)
|
| 205 |
+
parser.add_argument(
|
| 206 |
+
"--variant", choices=("raw", "stage1-aligned"), required=True
|
| 207 |
+
)
|
| 208 |
+
parser.add_argument("--stage1-checkpoint", type=Path)
|
| 209 |
+
parser.add_argument("--manifest", type=Path, required=True)
|
| 210 |
+
parser.add_argument("--output-dir", type=Path, required=True)
|
| 211 |
+
parser.add_argument("--max-new-tokens", type=int, default=64)
|
| 212 |
+
parser.add_argument("--limit", type=int, default=0)
|
| 213 |
+
parser.add_argument("--process-name", default="H3_BASE_EVAL")
|
| 214 |
+
parser.add_argument("--swanlab-project", default="unified-model")
|
| 215 |
+
parser.add_argument("--swanlab-run-name", default="H3-Stage1Base-CVBench500")
|
| 216 |
+
args = parser.parse_args()
|
| 217 |
+
|
| 218 |
+
_set_process_name(args.process_name)
|
| 219 |
+
rank, local_rank, world_size = _distributed()
|
| 220 |
+
model_path = args.model_path.resolve()
|
| 221 |
+
stage1_checkpoint = (
|
| 222 |
+
args.stage1_checkpoint.resolve() if args.stage1_checkpoint is not None else None
|
| 223 |
+
)
|
| 224 |
+
if args.variant == "stage1-aligned" and stage1_checkpoint is None:
|
| 225 |
+
raise ValueError("--stage1-checkpoint is required for --variant stage1-aligned")
|
| 226 |
+
manifest = args.manifest.resolve()
|
| 227 |
+
output_dir = args.output_dir.resolve()
|
| 228 |
+
if rank == 0:
|
| 229 |
+
if output_dir.exists() and any(output_dir.iterdir()):
|
| 230 |
+
raise FileExistsError(f"Evaluation output directory is not empty: {output_dir}")
|
| 231 |
+
output_dir.mkdir(parents=True, exist_ok=True)
|
| 232 |
+
_barrier()
|
| 233 |
+
|
| 234 |
+
processor = AutoProcessor.from_pretrained(model_path, local_files_only=True)
|
| 235 |
+
model = Qwen3VLForConditionalGeneration.from_pretrained(
|
| 236 |
+
model_path,
|
| 237 |
+
local_files_only=True,
|
| 238 |
+
torch_dtype=torch.bfloat16,
|
| 239 |
+
attn_implementation="flash_attention_2",
|
| 240 |
+
low_cpu_mem_usage=True,
|
| 241 |
+
device_map={"": local_rank},
|
| 242 |
+
)
|
| 243 |
+
alignment_info = {}
|
| 244 |
+
if args.variant == "stage1-aligned":
|
| 245 |
+
alignment_info = _apply_stage1_alignment(
|
| 246 |
+
model, processor, stage1_checkpoint
|
| 247 |
+
)
|
| 248 |
+
model.config.use_cache = True
|
| 249 |
+
model.eval()
|
| 250 |
+
|
| 251 |
+
evaluator = CVBenchEvalCallback(
|
| 252 |
+
processor=processor,
|
| 253 |
+
manifest_path=str(manifest),
|
| 254 |
+
every_n_steps=1,
|
| 255 |
+
max_new_tokens=args.max_new_tokens,
|
| 256 |
+
fail_fast=False,
|
| 257 |
+
)
|
| 258 |
+
records = evaluator._load_records()
|
| 259 |
+
if args.limit:
|
| 260 |
+
records = records[: args.limit]
|
| 261 |
+
local_records = records[rank::world_size]
|
| 262 |
+
local_results = []
|
| 263 |
+
shard_path = output_dir / f"rank_{rank:02d}.jsonl"
|
| 264 |
+
started = time.perf_counter()
|
| 265 |
+
with shard_path.open("w", encoding="utf-8", buffering=1) as handle:
|
| 266 |
+
with torch.inference_mode():
|
| 267 |
+
for index, record in enumerate(local_records, start=1):
|
| 268 |
+
try:
|
| 269 |
+
result = _evaluate_one(
|
| 270 |
+
model, evaluator, processor, record, args.max_new_tokens
|
| 271 |
+
)
|
| 272 |
+
except Exception as exc: # noqa: BLE001
|
| 273 |
+
result = {
|
| 274 |
+
"sample_id": record["sample_id"],
|
| 275 |
+
"config": record["config"],
|
| 276 |
+
"task": record["task"],
|
| 277 |
+
"row_index": record["row_index"],
|
| 278 |
+
"expected": _expected_choice(record["answer"]),
|
| 279 |
+
"predicted": None,
|
| 280 |
+
"correct": False,
|
| 281 |
+
"response": "",
|
| 282 |
+
"raw_response": "",
|
| 283 |
+
"generated_token_ids": [],
|
| 284 |
+
"covt_has_think": False,
|
| 285 |
+
"covt_has_answer": False,
|
| 286 |
+
"covt_anchor_counts": {name: 0 for name in ANCHOR_TOKENS},
|
| 287 |
+
"covt_has_any_anchor": False,
|
| 288 |
+
"error": repr(exc),
|
| 289 |
+
}
|
| 290 |
+
local_results.append(result)
|
| 291 |
+
handle.write(json.dumps(result, ensure_ascii=False) + "\n")
|
| 292 |
+
if index % 10 == 0 or index == len(local_records):
|
| 293 |
+
print(
|
| 294 |
+
f"[stage1-base][rank {rank}] {index}/{len(local_records)} "
|
| 295 |
+
f"correct={sum(bool(row['correct']) for row in local_results)}",
|
| 296 |
+
flush=True,
|
| 297 |
+
)
|
| 298 |
+
|
| 299 |
+
gathered = [None] * world_size
|
| 300 |
+
if dist.is_initialized():
|
| 301 |
+
dist.all_gather_object(gathered, local_results)
|
| 302 |
+
else:
|
| 303 |
+
gathered = [local_results]
|
| 304 |
+
results = [row for shard in gathered if shard is not None for row in shard]
|
| 305 |
+
results.sort(key=lambda row: (row["config"], int(row["row_index"])))
|
| 306 |
+
expected_count = len(records)
|
| 307 |
+
unique_ids = {row["sample_id"] for row in results}
|
| 308 |
+
if len(results) != expected_count or len(unique_ids) != expected_count:
|
| 309 |
+
raise RuntimeError(
|
| 310 |
+
"Distributed result completeness failure: "
|
| 311 |
+
f"rows={len(results)} unique_ids={len(unique_ids)} expected={expected_count}"
|
| 312 |
+
)
|
| 313 |
+
elapsed = time.perf_counter() - started
|
| 314 |
+
metrics = evaluator._metrics(results, elapsed)
|
| 315 |
+
stage1_sha256 = (
|
| 316 |
+
_sha256(stage1_checkpoint)
|
| 317 |
+
if rank == 0 and stage1_checkpoint is not None
|
| 318 |
+
else None
|
| 319 |
+
)
|
| 320 |
+
metadata = {
|
| 321 |
+
"created_utc": datetime.now(timezone.utc).isoformat(),
|
| 322 |
+
"host": socket.gethostname(),
|
| 323 |
+
"variant": args.variant,
|
| 324 |
+
"baseline": (
|
| 325 |
+
"Qwen3-VL-4B-Instruct + Stage-1 alignment checkpoint-32000"
|
| 326 |
+
if args.variant == "stage1-aligned"
|
| 327 |
+
else "raw Qwen3-VL-4B-Instruct"
|
| 328 |
+
),
|
| 329 |
+
"model_path": str(model_path),
|
| 330 |
+
"stage1_alignment_checkpoint": (
|
| 331 |
+
str(stage1_checkpoint) if stage1_checkpoint is not None else None
|
| 332 |
+
),
|
| 333 |
+
"stage1_alignment_sha256": stage1_sha256,
|
| 334 |
+
"stage1_restore_scope": (
|
| 335 |
+
"Restored all 258 Stage-1 input-embedding and lm-head rows. The "
|
| 336 |
+
"generation down-projector is not instantiated because CV-Bench does not "
|
| 337 |
+
"invoke the image-generation branch."
|
| 338 |
+
if args.variant == "stage1-aligned"
|
| 339 |
+
else None
|
| 340 |
+
),
|
| 341 |
+
"alignment_info": alignment_info,
|
| 342 |
+
"manifest": str(manifest),
|
| 343 |
+
"world_size": world_size,
|
| 344 |
+
"dtype": "bfloat16",
|
| 345 |
+
"attention": "flash_attention_2",
|
| 346 |
+
"max_new_tokens": args.max_new_tokens,
|
| 347 |
+
"decoding": "greedy",
|
| 348 |
+
"scoring": "deterministic option exact-match; no LLM judge",
|
| 349 |
+
"tokenizer_length": len(processor.tokenizer),
|
| 350 |
+
}
|
| 351 |
+
if rank == 0:
|
| 352 |
+
with (output_dir / "results.jsonl").open("w", encoding="utf-8") as handle:
|
| 353 |
+
for row in results:
|
| 354 |
+
handle.write(json.dumps(row, ensure_ascii=False) + "\n")
|
| 355 |
+
_write_json(output_dir / "metrics.json", {"metadata": metadata, "metrics": metrics})
|
| 356 |
+
try:
|
| 357 |
+
import swanlab
|
| 358 |
+
|
| 359 |
+
run = swanlab.init(
|
| 360 |
+
project=args.swanlab_project,
|
| 361 |
+
name=args.swanlab_run_name,
|
| 362 |
+
log_dir=str(output_dir / "swanlab"),
|
| 363 |
+
config=metadata,
|
| 364 |
+
tags=["CV-Bench", args.variant, "base-model", "8GPU"],
|
| 365 |
+
description=f"{metadata['baseline']} on fixed CV-Bench-500.",
|
| 366 |
+
)
|
| 367 |
+
swanlab.log(metrics, step=0)
|
| 368 |
+
swanlab_status = {
|
| 369 |
+
"enabled": True,
|
| 370 |
+
"run_id": getattr(run, "id", None),
|
| 371 |
+
"run_url": str(getattr(run, "url", "") or "") or None,
|
| 372 |
+
}
|
| 373 |
+
swanlab.finish()
|
| 374 |
+
except Exception as exc: # local artifacts remain authoritative
|
| 375 |
+
swanlab_status = {"enabled": True, "error": repr(exc)}
|
| 376 |
+
_write_json(output_dir / "swanlab.json", swanlab_status)
|
| 377 |
+
print(
|
| 378 |
+
f"[{args.variant}] final_metrics={json.dumps(metrics, sort_keys=True)}",
|
| 379 |
+
flush=True,
|
| 380 |
+
)
|
| 381 |
+
_barrier()
|
| 382 |
+
error_count = sum(row["error"] is not None for row in results)
|
| 383 |
+
if dist.is_initialized():
|
| 384 |
+
dist.destroy_process_group()
|
| 385 |
+
if error_count:
|
| 386 |
+
raise RuntimeError(f"Evaluation completed with {error_count} sample errors")
|
| 387 |
+
|
| 388 |
+
|
| 389 |
+
if __name__ == "__main__":
|
| 390 |
+
main()
|
code/umm/stage2_covt/eval_multibench.py
ADDED
|
@@ -0,0 +1,551 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""Distributed, judge-free evaluation for normalized multi-image MCQ manifests."""
|
| 3 |
+
|
| 4 |
+
from __future__ import annotations
|
| 5 |
+
|
| 6 |
+
import argparse
|
| 7 |
+
import ctypes
|
| 8 |
+
import hashlib
|
| 9 |
+
import json
|
| 10 |
+
import os
|
| 11 |
+
import re
|
| 12 |
+
import socket
|
| 13 |
+
import time
|
| 14 |
+
from collections import Counter, defaultdict
|
| 15 |
+
from datetime import datetime, timezone
|
| 16 |
+
from pathlib import Path
|
| 17 |
+
|
| 18 |
+
import torch
|
| 19 |
+
import torch.distributed as dist
|
| 20 |
+
from PIL import Image
|
| 21 |
+
from transformers import AutoProcessor
|
| 22 |
+
|
| 23 |
+
from cvbench_eval import extract_choice
|
| 24 |
+
from models.blip3o.constants import (
|
| 25 |
+
DEPTH_PAD_TOKEN,
|
| 26 |
+
DINO_PAD_TOKEN,
|
| 27 |
+
PIDINET_PAD_TOKEN,
|
| 28 |
+
SAM_PAD_TOKEN,
|
| 29 |
+
SIGLIP_PAD_TOKEN,
|
| 30 |
+
SYSTEM_MESSAGE,
|
| 31 |
+
)
|
| 32 |
+
from models.blip3o.data.covt_data_van import get_image_info
|
| 33 |
+
from models.blip3o.model.language_model.covt_qwen_stage2_van import (
|
| 34 |
+
CoVTVanForConditionalGeneration,
|
| 35 |
+
)
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
ANCHORS = ["sam", "dino", "depth", "pidinet", "siglip"]
|
| 39 |
+
ANCHOR_TOKENS = {
|
| 40 |
+
"sam": SAM_PAD_TOKEN,
|
| 41 |
+
"dino": DINO_PAD_TOKEN,
|
| 42 |
+
"depth": DEPTH_PAD_TOKEN,
|
| 43 |
+
"pidinet": PIDINET_PAD_TOKEN,
|
| 44 |
+
"siglip": SIGLIP_PAD_TOKEN,
|
| 45 |
+
}
|
| 46 |
+
REQUIRED_SPECIAL_TOKENS = [
|
| 47 |
+
*ANCHOR_TOKENS.values(),
|
| 48 |
+
"<think>",
|
| 49 |
+
"</think>",
|
| 50 |
+
"<answer>",
|
| 51 |
+
"</answer>",
|
| 52 |
+
]
|
| 53 |
+
ANSWER_RE = re.compile(r"^\s*\(?([A-Z])\)?\s*$", re.IGNORECASE)
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
def _set_process_name(name: str) -> None:
|
| 57 |
+
try:
|
| 58 |
+
ctypes.CDLL(None).prctl(15, name.encode()[:15], 0, 0, 0)
|
| 59 |
+
except Exception:
|
| 60 |
+
pass
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
def _distributed() -> tuple[int, int, int]:
|
| 64 |
+
world_size = int(os.environ.get("WORLD_SIZE", "1"))
|
| 65 |
+
rank = int(os.environ.get("RANK", "0"))
|
| 66 |
+
local_rank = int(os.environ.get("LOCAL_RANK", "0"))
|
| 67 |
+
torch.cuda.set_device(local_rank)
|
| 68 |
+
if world_size > 1:
|
| 69 |
+
dist.init_process_group(backend="nccl", device_id=torch.device("cuda", local_rank))
|
| 70 |
+
return rank, local_rank, world_size
|
| 71 |
+
|
| 72 |
+
|
| 73 |
+
def _barrier() -> None:
|
| 74 |
+
if dist.is_available() and dist.is_initialized():
|
| 75 |
+
dist.barrier(device_ids=[torch.cuda.current_device()])
|
| 76 |
+
|
| 77 |
+
|
| 78 |
+
def _write_json(path: Path, payload: dict) -> None:
|
| 79 |
+
temporary = path.with_suffix(path.suffix + ".tmp")
|
| 80 |
+
temporary.write_text(
|
| 81 |
+
json.dumps(payload, ensure_ascii=False, indent=2, sort_keys=True) + "\n",
|
| 82 |
+
encoding="utf-8",
|
| 83 |
+
)
|
| 84 |
+
temporary.replace(path)
|
| 85 |
+
|
| 86 |
+
|
| 87 |
+
def _sha256(path: Path) -> str:
|
| 88 |
+
digest = hashlib.sha256()
|
| 89 |
+
with path.open("rb") as handle:
|
| 90 |
+
for chunk in iter(lambda: handle.read(8 * 1024 * 1024), b""):
|
| 91 |
+
digest.update(chunk)
|
| 92 |
+
return digest.hexdigest()
|
| 93 |
+
|
| 94 |
+
|
| 95 |
+
def _slug(value: str) -> str:
|
| 96 |
+
return re.sub(r"[^a-zA-Z0-9]+", "_", value).strip("_").lower()
|
| 97 |
+
|
| 98 |
+
|
| 99 |
+
def _expected_choice(answer: str, choices: list[str]) -> str:
|
| 100 |
+
match = ANSWER_RE.fullmatch(str(answer))
|
| 101 |
+
if not match:
|
| 102 |
+
raise ValueError(f"Answer is not an option letter: {answer!r}")
|
| 103 |
+
letter = match.group(1).upper()
|
| 104 |
+
if ord(letter) - ord("A") >= len(choices):
|
| 105 |
+
raise ValueError(f"Answer {letter} is outside {len(choices)} choices")
|
| 106 |
+
return letter
|
| 107 |
+
|
| 108 |
+
|
| 109 |
+
def _validate_tokenizer(processor, model) -> dict[str, int]:
|
| 110 |
+
result: dict[str, int] = {}
|
| 111 |
+
unknown = processor.tokenizer.unk_token_id
|
| 112 |
+
for token in REQUIRED_SPECIAL_TOKENS:
|
| 113 |
+
ids = processor.tokenizer(token, add_special_tokens=False).input_ids
|
| 114 |
+
if len(ids) != 1 or ids[0] == unknown:
|
| 115 |
+
raise ValueError(f"Required token is not one vocabulary row: {token!r} -> {ids}")
|
| 116 |
+
result[token] = int(ids[0])
|
| 117 |
+
embedding_rows = int(model.get_input_embeddings().weight.shape[0])
|
| 118 |
+
if len(processor.tokenizer) > embedding_rows:
|
| 119 |
+
raise ValueError(
|
| 120 |
+
f"Tokenizer/model vocabulary mismatch: tokenizer={len(processor.tokenizer)}, "
|
| 121 |
+
f"embedding_rows={embedding_rows}"
|
| 122 |
+
)
|
| 123 |
+
return result
|
| 124 |
+
|
| 125 |
+
|
| 126 |
+
class MultiBenchEvaluator:
|
| 127 |
+
def __init__(
|
| 128 |
+
self,
|
| 129 |
+
processor,
|
| 130 |
+
manifest: Path,
|
| 131 |
+
max_new_tokens: int,
|
| 132 |
+
image_min_pixels: int = 200704,
|
| 133 |
+
image_max_pixels: int = 802816,
|
| 134 |
+
image_resized_width: int | None = 448,
|
| 135 |
+
image_resized_height: int | None = 448,
|
| 136 |
+
vstar_oracle_crop: bool = False,
|
| 137 |
+
vstar_raw_root: Path | None = None,
|
| 138 |
+
oracle_context_scale: float = 2.0,
|
| 139 |
+
):
|
| 140 |
+
self.processor = processor
|
| 141 |
+
self.manifest = manifest
|
| 142 |
+
self.max_new_tokens = max_new_tokens
|
| 143 |
+
self.image_min_pixels = image_min_pixels
|
| 144 |
+
self.image_max_pixels = image_max_pixels
|
| 145 |
+
self.image_resized_width = image_resized_width
|
| 146 |
+
self.image_resized_height = image_resized_height
|
| 147 |
+
self.vstar_oracle_crop = vstar_oracle_crop
|
| 148 |
+
self.vstar_raw_root = vstar_raw_root
|
| 149 |
+
self.oracle_context_scale = oracle_context_scale
|
| 150 |
+
if self.vstar_oracle_crop and self.vstar_raw_root is None:
|
| 151 |
+
raise ValueError("--vstar-raw-root is required with --vstar-oracle-crop")
|
| 152 |
+
|
| 153 |
+
def load_records(self) -> list[dict]:
|
| 154 |
+
records = [
|
| 155 |
+
json.loads(line)
|
| 156 |
+
for line in self.manifest.read_text(encoding="utf-8").splitlines()
|
| 157 |
+
if line.strip()
|
| 158 |
+
]
|
| 159 |
+
if not records:
|
| 160 |
+
raise ValueError(f"Manifest is empty: {self.manifest}")
|
| 161 |
+
if len({str(row["sample_id"]) for row in records}) != len(records):
|
| 162 |
+
raise ValueError("Manifest sample_id values are not unique")
|
| 163 |
+
for record in records:
|
| 164 |
+
image_paths = []
|
| 165 |
+
for value in record["images"]:
|
| 166 |
+
path = Path(value)
|
| 167 |
+
if not path.is_absolute():
|
| 168 |
+
path = self.manifest.parent / path
|
| 169 |
+
path = path.resolve()
|
| 170 |
+
if not path.is_file():
|
| 171 |
+
raise FileNotFoundError(path)
|
| 172 |
+
image_paths.append(str(path))
|
| 173 |
+
if not image_paths:
|
| 174 |
+
raise ValueError(f"Sample has no images: {record['sample_id']}")
|
| 175 |
+
record["_image_paths"] = image_paths
|
| 176 |
+
_expected_choice(record["answer"], record["choices"])
|
| 177 |
+
return records
|
| 178 |
+
|
| 179 |
+
def tokenize(self, prompt: str, images: list[Image.Image]) -> dict[str, torch.Tensor]:
|
| 180 |
+
content = [{"type": "image", "image": image} for image in images]
|
| 181 |
+
content.append({"type": "text", "text": prompt})
|
| 182 |
+
messages = []
|
| 183 |
+
if SYSTEM_MESSAGE:
|
| 184 |
+
messages.append({"role": "system", "content": SYSTEM_MESSAGE})
|
| 185 |
+
messages.append({"role": "user", "content": content})
|
| 186 |
+
rendered = self.processor.apply_chat_template(
|
| 187 |
+
messages, tokenize=False, add_generation_prompt=True
|
| 188 |
+
)
|
| 189 |
+
vision_inputs = [
|
| 190 |
+
get_image_info(
|
| 191 |
+
image,
|
| 192 |
+
self.image_min_pixels,
|
| 193 |
+
self.image_max_pixels,
|
| 194 |
+
self.image_resized_width,
|
| 195 |
+
self.image_resized_height,
|
| 196 |
+
)
|
| 197 |
+
for image in images
|
| 198 |
+
]
|
| 199 |
+
kwargs = {
|
| 200 |
+
"text": [rendered],
|
| 201 |
+
"images": vision_inputs,
|
| 202 |
+
"padding": False,
|
| 203 |
+
"return_tensors": "pt",
|
| 204 |
+
}
|
| 205 |
+
if hasattr(self.processor, "create_mm_token_type_ids"):
|
| 206 |
+
kwargs["return_mm_token_type_ids"] = True
|
| 207 |
+
try:
|
| 208 |
+
inputs = self.processor(**kwargs)
|
| 209 |
+
except TypeError:
|
| 210 |
+
kwargs.pop("return_mm_token_type_ids", None)
|
| 211 |
+
inputs = self.processor(**kwargs)
|
| 212 |
+
if "mm_token_type_ids" not in inputs and hasattr(self.processor, "create_mm_token_type_ids"):
|
| 213 |
+
inputs["mm_token_type_ids"] = torch.tensor(
|
| 214 |
+
self.processor.create_mm_token_type_ids(inputs["input_ids"].tolist()),
|
| 215 |
+
dtype=torch.long,
|
| 216 |
+
)
|
| 217 |
+
return {key: value for key, value in inputs.items() if torch.is_tensor(value)}
|
| 218 |
+
|
| 219 |
+
def _oracle_crop(self, image: Image.Image, record: dict) -> Image.Image:
|
| 220 |
+
assert self.vstar_raw_root is not None
|
| 221 |
+
image_path = Path(record["_image_paths"][0])
|
| 222 |
+
annotation_path = self.vstar_raw_root / str(record["config"]) / f"{image_path.stem}.json"
|
| 223 |
+
annotation = json.loads(annotation_path.read_text(encoding="utf-8"))
|
| 224 |
+
boxes = annotation["bbox"]
|
| 225 |
+
x1 = min(float(x) for x, _, _, _ in boxes)
|
| 226 |
+
y1 = min(float(y) for _, y, _, _ in boxes)
|
| 227 |
+
x2 = max(float(x) + float(width) for x, _, width, _ in boxes)
|
| 228 |
+
y2 = max(float(y) + float(height) for _, y, _, height in boxes)
|
| 229 |
+
center_x = (x1 + x2) / 2
|
| 230 |
+
center_y = (y1 + y2) / 2
|
| 231 |
+
crop_width = max(x2 - x1, y2 - y1) * self.oracle_context_scale
|
| 232 |
+
crop_width = max(crop_width, 32.0)
|
| 233 |
+
left = max(0.0, center_x - crop_width / 2)
|
| 234 |
+
top = max(0.0, center_y - crop_width / 2)
|
| 235 |
+
right = min(float(image.width), center_x + crop_width / 2)
|
| 236 |
+
bottom = min(float(image.height), center_y + crop_width / 2)
|
| 237 |
+
return image.crop((round(left), round(top), round(right), round(bottom)))
|
| 238 |
+
|
| 239 |
+
def evaluate_one(self, model, record: dict) -> dict:
|
| 240 |
+
prompt = (
|
| 241 |
+
str(record["prompt"]).rstrip()
|
| 242 |
+
+ "\nReturn the selected option in <answer> tags, for example <answer>(A)</answer>."
|
| 243 |
+
)
|
| 244 |
+
images: list[Image.Image] = []
|
| 245 |
+
try:
|
| 246 |
+
for image_path in record["_image_paths"]:
|
| 247 |
+
with Image.open(image_path) as opened:
|
| 248 |
+
images.append(opened.convert("RGB"))
|
| 249 |
+
if self.vstar_oracle_crop:
|
| 250 |
+
if len(images) != 1:
|
| 251 |
+
raise ValueError("V* oracle-crop diagnostic expects exactly one source image")
|
| 252 |
+
cropped = self._oracle_crop(images[0], record)
|
| 253 |
+
images[0].close()
|
| 254 |
+
images = [cropped]
|
| 255 |
+
inputs = self.tokenize(prompt, images)
|
| 256 |
+
finally:
|
| 257 |
+
for image in images:
|
| 258 |
+
image.close()
|
| 259 |
+
device = next(model.parameters()).device
|
| 260 |
+
inputs = {key: value.to(device) for key, value in inputs.items()}
|
| 261 |
+
texts, generated_ids = model.forward_llm_decode_text(
|
| 262 |
+
self.processor.tokenizer,
|
| 263 |
+
self.processor,
|
| 264 |
+
max_new_tokens=self.max_new_tokens,
|
| 265 |
+
do_sample=False,
|
| 266 |
+
use_cache=True,
|
| 267 |
+
return_generated_ids=True,
|
| 268 |
+
**inputs,
|
| 269 |
+
)
|
| 270 |
+
token_ids = [int(value) for value in generated_ids[0].tolist()]
|
| 271 |
+
raw_text = self.processor.tokenizer.decode(
|
| 272 |
+
token_ids,
|
| 273 |
+
skip_special_tokens=False,
|
| 274 |
+
clean_up_tokenization_spaces=False,
|
| 275 |
+
)
|
| 276 |
+
predicted = extract_choice(raw_text, record["choices"])
|
| 277 |
+
expected = _expected_choice(record["answer"], record["choices"])
|
| 278 |
+
anchor_counts = {
|
| 279 |
+
name: raw_text.count(token) for name, token in ANCHOR_TOKENS.items()
|
| 280 |
+
}
|
| 281 |
+
return {
|
| 282 |
+
"sample_id": record["sample_id"],
|
| 283 |
+
"benchmark": record["benchmark"],
|
| 284 |
+
"split": record["split"],
|
| 285 |
+
"config": record["config"],
|
| 286 |
+
"task": record["task"],
|
| 287 |
+
"row_index": record["row_index"],
|
| 288 |
+
"image_count": len(record["_image_paths"]),
|
| 289 |
+
"eval_image_mode": "vstar_oracle_crop" if self.vstar_oracle_crop else "global",
|
| 290 |
+
"expected": expected,
|
| 291 |
+
"predicted": predicted,
|
| 292 |
+
"correct": predicted == expected,
|
| 293 |
+
"response": str(texts[0]),
|
| 294 |
+
"raw_response": raw_text,
|
| 295 |
+
"generated_token_ids": token_ids,
|
| 296 |
+
"covt_has_think": "<think>" in raw_text and "</think>" in raw_text,
|
| 297 |
+
"covt_has_answer": "<answer>" in raw_text and "</answer>" in raw_text,
|
| 298 |
+
"covt_anchor_counts": anchor_counts,
|
| 299 |
+
"covt_has_any_anchor": any(anchor_counts.values()),
|
| 300 |
+
"error": None,
|
| 301 |
+
}
|
| 302 |
+
|
| 303 |
+
|
| 304 |
+
def _metrics(results: list[dict], benchmark: str, elapsed: float) -> dict[str, float]:
|
| 305 |
+
prefix = f"eval/{benchmark}"
|
| 306 |
+
count = max(len(results), 1)
|
| 307 |
+
metrics: dict[str, float] = {
|
| 308 |
+
f"{prefix}_seconds": float(elapsed),
|
| 309 |
+
f"{prefix}_samples": float(len(results)),
|
| 310 |
+
f"{prefix}_errors": float(sum(bool(row["error"]) for row in results)),
|
| 311 |
+
f"{prefix}_parse_rate": sum(row["predicted"] is not None for row in results) / count,
|
| 312 |
+
f"{prefix}_accuracy": sum(bool(row["correct"]) for row in results) / count,
|
| 313 |
+
f"{prefix}_covt_think_rate": sum(bool(row["covt_has_think"]) for row in results) / count,
|
| 314 |
+
f"{prefix}_covt_answer_tag_rate": sum(bool(row["covt_has_answer"]) for row in results) / count,
|
| 315 |
+
f"{prefix}_covt_any_anchor_rate": sum(bool(row["covt_has_any_anchor"]) for row in results) / count,
|
| 316 |
+
}
|
| 317 |
+
for name in ANCHOR_TOKENS:
|
| 318 |
+
metrics[f"{prefix}_covt_{name}_tokens_mean"] = sum(
|
| 319 |
+
int(row["covt_anchor_counts"].get(name, 0)) for row in results
|
| 320 |
+
) / count
|
| 321 |
+
config_groups: dict[str, list[dict]] = defaultdict(list)
|
| 322 |
+
task_groups: dict[str, list[dict]] = defaultdict(list)
|
| 323 |
+
for row in results:
|
| 324 |
+
config_groups[str(row["config"])].append(row)
|
| 325 |
+
task_groups[str(row["task"])].append(row)
|
| 326 |
+
for name, rows in sorted(config_groups.items()):
|
| 327 |
+
metrics[f"{prefix}_{_slug(name)}_accuracy"] = sum(row["correct"] for row in rows) / len(rows)
|
| 328 |
+
metrics[f"{prefix}_{_slug(name)}_samples"] = float(len(rows))
|
| 329 |
+
if len(config_groups) > 1:
|
| 330 |
+
metrics[f"{prefix}_config_macro_accuracy"] = sum(
|
| 331 |
+
sum(row["correct"] for row in rows) / len(rows)
|
| 332 |
+
for rows in config_groups.values()
|
| 333 |
+
) / len(config_groups)
|
| 334 |
+
for name, rows in sorted(task_groups.items()):
|
| 335 |
+
key = f"{prefix}_task_{_slug(name)}_accuracy"
|
| 336 |
+
if key not in metrics:
|
| 337 |
+
metrics[key] = sum(row["correct"] for row in rows) / len(rows)
|
| 338 |
+
if len(task_groups) > 1:
|
| 339 |
+
metrics[f"{prefix}_task_macro_accuracy"] = sum(
|
| 340 |
+
sum(row["correct"] for row in rows) / len(rows)
|
| 341 |
+
for rows in task_groups.values()
|
| 342 |
+
) / len(task_groups)
|
| 343 |
+
return metrics
|
| 344 |
+
|
| 345 |
+
|
| 346 |
+
def _swanlab_log(args, metrics: dict, metadata: dict) -> dict:
|
| 347 |
+
import swanlab
|
| 348 |
+
|
| 349 |
+
run = swanlab.init(
|
| 350 |
+
project=args.swanlab_project,
|
| 351 |
+
name=args.swanlab_run_name,
|
| 352 |
+
log_dir=str(args.output_dir / "swanlab"),
|
| 353 |
+
config=metadata,
|
| 354 |
+
tags=[args.benchmark, "evaluation", f"checkpoint-{args.checkpoint_step}", "8GPU"],
|
| 355 |
+
description=f"Judge-free exact-match evaluation on {args.benchmark}.",
|
| 356 |
+
)
|
| 357 |
+
swanlab.log(metrics, step=args.checkpoint_step)
|
| 358 |
+
status = {
|
| 359 |
+
"enabled": True,
|
| 360 |
+
"run_id": getattr(run, "id", None),
|
| 361 |
+
"run_url": str(getattr(run, "url", "") or "") or None,
|
| 362 |
+
}
|
| 363 |
+
swanlab.finish()
|
| 364 |
+
return status
|
| 365 |
+
|
| 366 |
+
|
| 367 |
+
def main() -> None:
|
| 368 |
+
parser = argparse.ArgumentParser()
|
| 369 |
+
parser.add_argument("--model-path", type=Path, required=True)
|
| 370 |
+
parser.add_argument("--manifest", type=Path, required=True)
|
| 371 |
+
parser.add_argument("--output-dir", type=Path, required=True)
|
| 372 |
+
parser.add_argument("--benchmark", choices=("cvbench", "blink", "vstar"), required=True)
|
| 373 |
+
parser.add_argument("--checkpoint-step", type=int, default=7000)
|
| 374 |
+
parser.add_argument("--max-new-tokens", type=int, default=256)
|
| 375 |
+
parser.add_argument("--image-min-pixels", type=int, default=200704)
|
| 376 |
+
parser.add_argument("--image-max-pixels", type=int, default=802816)
|
| 377 |
+
parser.add_argument("--image-resized-width", type=int, default=448)
|
| 378 |
+
parser.add_argument("--image-resized-height", type=int, default=448)
|
| 379 |
+
parser.add_argument("--vstar-oracle-crop", action="store_true")
|
| 380 |
+
parser.add_argument("--vstar-raw-root", type=Path)
|
| 381 |
+
parser.add_argument("--oracle-context-scale", type=float, default=2.0)
|
| 382 |
+
parser.add_argument("--limit", type=int, default=0)
|
| 383 |
+
parser.add_argument("--process-name", default="H3_EVAL_7K")
|
| 384 |
+
parser.add_argument("--swanlab", action="store_true")
|
| 385 |
+
parser.add_argument("--swanlab-project", default="unified-model")
|
| 386 |
+
parser.add_argument("--swanlab-run-name", default="H3_LoRA-ckpt7000-eval")
|
| 387 |
+
args = parser.parse_args()
|
| 388 |
+
|
| 389 |
+
args.model_path = args.model_path.resolve()
|
| 390 |
+
args.manifest = args.manifest.resolve()
|
| 391 |
+
args.output_dir = args.output_dir.resolve()
|
| 392 |
+
if args.vstar_raw_root is not None:
|
| 393 |
+
args.vstar_raw_root = args.vstar_raw_root.resolve()
|
| 394 |
+
if args.vstar_oracle_crop and args.benchmark != "vstar":
|
| 395 |
+
raise ValueError("--vstar-oracle-crop is only valid for --benchmark vstar")
|
| 396 |
+
if (args.image_resized_width == 0) != (args.image_resized_height == 0):
|
| 397 |
+
raise ValueError("Set both resized dimensions to zero for dynamic resolution")
|
| 398 |
+
resized_width = args.image_resized_width or None
|
| 399 |
+
resized_height = args.image_resized_height or None
|
| 400 |
+
_set_process_name(args.process_name)
|
| 401 |
+
rank, local_rank, world_size = _distributed()
|
| 402 |
+
if rank == 0:
|
| 403 |
+
if args.output_dir.exists() and any(args.output_dir.iterdir()):
|
| 404 |
+
raise FileExistsError(f"Evaluation output directory is not empty: {args.output_dir}")
|
| 405 |
+
args.output_dir.mkdir(parents=True, exist_ok=True)
|
| 406 |
+
_barrier()
|
| 407 |
+
|
| 408 |
+
processor = AutoProcessor.from_pretrained(
|
| 409 |
+
args.model_path, local_files_only=True, trust_remote_code=True
|
| 410 |
+
)
|
| 411 |
+
model = CoVTVanForConditionalGeneration.from_pretrained(
|
| 412 |
+
args.model_path,
|
| 413 |
+
local_files_only=True,
|
| 414 |
+
torch_dtype=torch.bfloat16,
|
| 415 |
+
attn_implementation="flash_attention_2",
|
| 416 |
+
low_cpu_mem_usage=True,
|
| 417 |
+
device_map={"": local_rank},
|
| 418 |
+
)
|
| 419 |
+
model.get_anchor_model_ids(ANCHORS, load_anchor_models=False)
|
| 420 |
+
model.config.use_cache = True
|
| 421 |
+
model.eval()
|
| 422 |
+
token_ids = _validate_tokenizer(processor, model)
|
| 423 |
+
|
| 424 |
+
evaluator = MultiBenchEvaluator(
|
| 425 |
+
processor,
|
| 426 |
+
args.manifest,
|
| 427 |
+
args.max_new_tokens,
|
| 428 |
+
image_min_pixels=args.image_min_pixels,
|
| 429 |
+
image_max_pixels=args.image_max_pixels,
|
| 430 |
+
image_resized_width=resized_width,
|
| 431 |
+
image_resized_height=resized_height,
|
| 432 |
+
vstar_oracle_crop=args.vstar_oracle_crop,
|
| 433 |
+
vstar_raw_root=args.vstar_raw_root,
|
| 434 |
+
oracle_context_scale=args.oracle_context_scale,
|
| 435 |
+
)
|
| 436 |
+
records = evaluator.load_records()
|
| 437 |
+
if any(row["benchmark"] != args.benchmark for row in records):
|
| 438 |
+
raise ValueError("Manifest benchmark does not match --benchmark")
|
| 439 |
+
if args.limit:
|
| 440 |
+
if not 1 <= args.limit <= len(records):
|
| 441 |
+
raise ValueError(f"--limit must be in [1, {len(records)}]")
|
| 442 |
+
records = records[: args.limit]
|
| 443 |
+
local_records = records[rank::world_size]
|
| 444 |
+
local_results: list[dict] = []
|
| 445 |
+
shard_path = args.output_dir / f"rank_{rank:02d}.jsonl"
|
| 446 |
+
started = time.perf_counter()
|
| 447 |
+
with shard_path.open("w", encoding="utf-8", buffering=1) as handle:
|
| 448 |
+
with torch.inference_mode():
|
| 449 |
+
for index, record in enumerate(local_records, start=1):
|
| 450 |
+
try:
|
| 451 |
+
result = evaluator.evaluate_one(model, record)
|
| 452 |
+
except Exception as exc:
|
| 453 |
+
result = {
|
| 454 |
+
"sample_id": record["sample_id"],
|
| 455 |
+
"benchmark": record["benchmark"],
|
| 456 |
+
"split": record["split"],
|
| 457 |
+
"config": record["config"],
|
| 458 |
+
"task": record["task"],
|
| 459 |
+
"row_index": record["row_index"],
|
| 460 |
+
"image_count": len(record["_image_paths"]),
|
| 461 |
+
"expected": _expected_choice(record["answer"], record["choices"]),
|
| 462 |
+
"predicted": None,
|
| 463 |
+
"correct": False,
|
| 464 |
+
"response": "",
|
| 465 |
+
"raw_response": "",
|
| 466 |
+
"generated_token_ids": [],
|
| 467 |
+
"covt_has_think": False,
|
| 468 |
+
"covt_has_answer": False,
|
| 469 |
+
"covt_anchor_counts": {name: 0 for name in ANCHOR_TOKENS},
|
| 470 |
+
"covt_has_any_anchor": False,
|
| 471 |
+
"error": repr(exc),
|
| 472 |
+
}
|
| 473 |
+
local_results.append(result)
|
| 474 |
+
handle.write(json.dumps(result, ensure_ascii=False) + "\n")
|
| 475 |
+
if index % 10 == 0 or index == len(local_records):
|
| 476 |
+
correct = sum(bool(row["correct"]) for row in local_results)
|
| 477 |
+
print(
|
| 478 |
+
f"[{args.benchmark}][rank {rank}] {index}/{len(local_records)} correct={correct}",
|
| 479 |
+
flush=True,
|
| 480 |
+
)
|
| 481 |
+
|
| 482 |
+
gathered: list[list[dict] | None] = [None] * world_size
|
| 483 |
+
if world_size > 1:
|
| 484 |
+
dist.all_gather_object(gathered, local_results)
|
| 485 |
+
else:
|
| 486 |
+
gathered = [local_results]
|
| 487 |
+
results = [row for shard in gathered if shard is not None for row in shard]
|
| 488 |
+
results.sort(key=lambda row: int(row["row_index"]))
|
| 489 |
+
elapsed = time.perf_counter() - started
|
| 490 |
+
expected_count = len(records)
|
| 491 |
+
if len(results) != expected_count or len({row["sample_id"] for row in results}) != expected_count:
|
| 492 |
+
raise RuntimeError(f"Expected {expected_count} unique results, got {len(results)}")
|
| 493 |
+
metrics = _metrics(results, args.benchmark, elapsed)
|
| 494 |
+
metadata = {
|
| 495 |
+
"created_utc": datetime.now(timezone.utc).isoformat(),
|
| 496 |
+
"host": socket.gethostname(),
|
| 497 |
+
"model_path": str(args.model_path),
|
| 498 |
+
"manifest": str(args.manifest),
|
| 499 |
+
"manifest_sha256": _sha256(args.manifest),
|
| 500 |
+
"benchmark": args.benchmark,
|
| 501 |
+
"split": records[0]["split"],
|
| 502 |
+
"checkpoint_step": args.checkpoint_step,
|
| 503 |
+
"world_size": world_size,
|
| 504 |
+
"dtype": "bfloat16",
|
| 505 |
+
"attention": "flash_attention_2",
|
| 506 |
+
"max_new_tokens": args.max_new_tokens,
|
| 507 |
+
"image_min_pixels": args.image_min_pixels,
|
| 508 |
+
"image_max_pixels": args.image_max_pixels,
|
| 509 |
+
"image_resized_width": resized_width,
|
| 510 |
+
"image_resized_height": resized_height,
|
| 511 |
+
"eval_image_mode": "vstar_oracle_crop" if args.vstar_oracle_crop else "global",
|
| 512 |
+
"oracle_context_scale": args.oracle_context_scale if args.vstar_oracle_crop else None,
|
| 513 |
+
"sample_limit": args.limit or None,
|
| 514 |
+
"decoding": "greedy",
|
| 515 |
+
"scoring": "deterministic option exact-match; no LLM judge",
|
| 516 |
+
"tokenizer_length": len(processor.tokenizer),
|
| 517 |
+
"embedding_rows": int(model.get_input_embeddings().weight.shape[0]),
|
| 518 |
+
"required_token_ids": token_ids,
|
| 519 |
+
"input_image_count_distribution": dict(
|
| 520 |
+
sorted(Counter(row["image_count"] for row in results).items())
|
| 521 |
+
),
|
| 522 |
+
}
|
| 523 |
+
if rank == 0:
|
| 524 |
+
with (args.output_dir / "results.jsonl").open("w", encoding="utf-8") as handle:
|
| 525 |
+
for row in results:
|
| 526 |
+
handle.write(json.dumps(row, ensure_ascii=False) + "\n")
|
| 527 |
+
_write_json(args.output_dir / "metrics.json", {"metadata": metadata, "metrics": metrics})
|
| 528 |
+
if args.swanlab:
|
| 529 |
+
try:
|
| 530 |
+
status = _swanlab_log(args, metrics, metadata)
|
| 531 |
+
except Exception as exc:
|
| 532 |
+
status = {"enabled": True, "error": repr(exc)}
|
| 533 |
+
print(f"[{args.benchmark}] SwanLab logging failed: {exc!r}", flush=True)
|
| 534 |
+
else:
|
| 535 |
+
status = {"enabled": False}
|
| 536 |
+
_write_json(args.output_dir / "swanlab.json", status)
|
| 537 |
+
print(f"[{args.benchmark}] final_metrics={json.dumps(metrics, sort_keys=True)}", flush=True)
|
| 538 |
+
|
| 539 |
+
error_count = sum(bool(row["error"]) for row in results)
|
| 540 |
+
_barrier()
|
| 541 |
+
if dist.is_available() and dist.is_initialized():
|
| 542 |
+
dist.destroy_process_group()
|
| 543 |
+
if error_count:
|
| 544 |
+
first_error = next(row["error"] for row in results if row["error"])
|
| 545 |
+
raise RuntimeError(
|
| 546 |
+
f"{args.benchmark} had {error_count} inference errors; first={first_error}"
|
| 547 |
+
)
|
| 548 |
+
|
| 549 |
+
|
| 550 |
+
if __name__ == "__main__":
|
| 551 |
+
main()
|
code/umm/stage2_covt/merge.py
CHANGED
|
@@ -47,9 +47,18 @@ from models.blip3o.model.language_model.covt_qwen_stage2_van import ( # noqa: E
|
|
| 47 |
|
| 48 |
|
| 49 |
def _normalize_non_lora_keys(state: Dict[str, Any]) -> Dict[str, Any]:
|
| 50 |
-
out: Dict[str, Any] = {
|
| 51 |
-
|
| 52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
if any(k.startswith("model.model.") for k in out):
|
| 54 |
out = {(k[6:] if k.startswith("model.") else k): v for k, v in out.items()}
|
| 55 |
return out
|
|
@@ -242,7 +251,17 @@ def load_pretrained_model_for_merge(
|
|
| 242 |
|
| 243 |
print("[lora_weight_merge] load non_lora_state_dict.bin …")
|
| 244 |
non_lora_trainables = _normalize_non_lora_keys(non_lora_trainables)
|
| 245 |
-
model.load_state_dict(non_lora_trainables, strict=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 246 |
|
| 247 |
print("[lora_weight_merge] load PEFT adapter …")
|
| 248 |
model = PeftModel.from_pretrained(model, model_path)
|
|
|
|
| 47 |
|
| 48 |
|
| 49 |
def _normalize_non_lora_keys(state: Dict[str, Any]) -> Dict[str, Any]:
|
| 50 |
+
out: Dict[str, Any] = {}
|
| 51 |
+
for original_key, value in state.items():
|
| 52 |
+
key = original_key[11:] if original_key.startswith("base_model.") else original_key
|
| 53 |
+
# The sidecar is captured after get_peft_model(), so every LoRA target's
|
| 54 |
+
# dense weight is named ``*.base_layer.weight``. At this point the
|
| 55 |
+
# destination is the unwrapped base model and expects ``*.weight``.
|
| 56 |
+
key = key.replace(".base_layer.", ".")
|
| 57 |
+
if key in out:
|
| 58 |
+
raise KeyError(
|
| 59 |
+
f"Non-LoRA key normalization collision: {original_key!r} -> {key!r}"
|
| 60 |
+
)
|
| 61 |
+
out[key] = value
|
| 62 |
if any(k.startswith("model.model.") for k in out):
|
| 63 |
out = {(k[6:] if k.startswith("model.") else k): v for k, v in out.items()}
|
| 64 |
return out
|
|
|
|
| 251 |
|
| 252 |
print("[lora_weight_merge] load non_lora_state_dict.bin …")
|
| 253 |
non_lora_trainables = _normalize_non_lora_keys(non_lora_trainables)
|
| 254 |
+
load_result = model.load_state_dict(non_lora_trainables, strict=False)
|
| 255 |
+
if load_result.unexpected_keys:
|
| 256 |
+
raise RuntimeError(
|
| 257 |
+
"Dense sidecar contains keys that were not loaded; refusing a partial merge: "
|
| 258 |
+
f"{load_result.unexpected_keys[:20]}"
|
| 259 |
+
)
|
| 260 |
+
print(
|
| 261 |
+
"[lora_weight_merge] loaded "
|
| 262 |
+
f"{len(non_lora_trainables)} dense tensors; "
|
| 263 |
+
f"base-only missing tensors={len(load_result.missing_keys)}."
|
| 264 |
+
)
|
| 265 |
|
| 266 |
print("[lora_weight_merge] load PEFT adapter …")
|
| 267 |
model = PeftModel.from_pretrained(model, model_path)
|
code/umm/stage2_covt/run_train.sh
CHANGED
|
@@ -18,6 +18,7 @@ export COVT_PIDINET_MODEL_PATH="${COVT_PIDINET_MODEL_PATH:-${UMM_ROOT}/models/te
|
|
| 18 |
export UMM_AGENT_DEBUG_LOG="${UMM_AGENT_DEBUG_LOG:-${UMM_ROOT}/outputs/stage2_agent_debug.ndjson}"
|
| 19 |
export SWANLAB_PROJ_NAME="${SWANLAB_PROJ_NAME:-unified-model}"
|
| 20 |
export SWANLAB_LOG_DIR="${SWANLAB_LOG_DIR:-${UMM_ROOT}/outputs/swanlab}"
|
|
|
|
| 21 |
|
| 22 |
mkdir -p "${HF_HOME}" "${TORCH_HOME}" "${TMPDIR}" "${SWANLAB_LOG_DIR}" "${UMM_ROOT}/outputs"
|
| 23 |
|
|
@@ -56,4 +57,7 @@ if [[ "${DRY_RUN:-0}" == "1" ]]; then
|
|
| 56 |
exit 0
|
| 57 |
fi
|
| 58 |
|
|
|
|
|
|
|
|
|
|
| 59 |
exec "${CMD[@]}"
|
|
|
|
| 18 |
export UMM_AGENT_DEBUG_LOG="${UMM_AGENT_DEBUG_LOG:-${UMM_ROOT}/outputs/stage2_agent_debug.ndjson}"
|
| 19 |
export SWANLAB_PROJ_NAME="${SWANLAB_PROJ_NAME:-unified-model}"
|
| 20 |
export SWANLAB_LOG_DIR="${SWANLAB_LOG_DIR:-${UMM_ROOT}/outputs/swanlab}"
|
| 21 |
+
export UMM_PROCESS_NAME="${UMM_PROCESS_NAME:-H3_LoRA}"
|
| 22 |
|
| 23 |
mkdir -p "${HF_HOME}" "${TORCH_HOME}" "${TMPDIR}" "${SWANLAB_LOG_DIR}" "${UMM_ROOT}/outputs"
|
| 24 |
|
|
|
|
| 57 |
exit 0
|
| 58 |
fi
|
| 59 |
|
| 60 |
+
# A conda-packed/relocatable Python resolves its stdlib from argv[0]; changing
|
| 61 |
+
# argv[0] with `exec -a` breaks startup before Python can import `encodings`.
|
| 62 |
+
# Each DeepSpeed worker sets PR_SET_NAME to UMM_PROCESS_NAME inside train.py.
|
| 63 |
exec "${CMD[@]}"
|
code/umm/stage2_covt/train.py
CHANGED
|
@@ -26,6 +26,7 @@ from models.blip3o.train_utils import (
|
|
| 26 |
from transformers.trainer_utils import sort_checkpoints
|
| 27 |
import pathlib
|
| 28 |
import sys
|
|
|
|
| 29 |
# from liger_kernel.transformers import apply_liger_kernel_to_qwen2_vl
|
| 30 |
# from monkey_patch_forward import replace_qwen2_5_with_mixed_modality_forward, replace_qwen_2_with_mixed_modality_forward
|
| 31 |
|
|
@@ -34,10 +35,20 @@ from models.blip3o.model.language_model.covt_qwen_stage2_van import (
|
|
| 34 |
CoVTVanForConditionalGeneration,
|
| 35 |
)
|
| 36 |
from models.blip3o.constants import *
|
|
|
|
| 37 |
|
| 38 |
local_rank = None
|
| 39 |
|
| 40 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
def _yaml_to_argv(config_path: str) -> List[str]:
|
| 42 |
"""Flatten this stage's model/data/training YAML into HfArgumentParser args."""
|
| 43 |
try:
|
|
@@ -446,6 +457,16 @@ class TrainingArguments(transformers.TrainingArguments):
|
|
| 446 |
und_eval_repetition_penalty: float = field(
|
| 447 |
default=1.0, metadata={"help": "run_und repetition_penalty."}
|
| 448 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 449 |
|
| 450 |
@dataclass
|
| 451 |
class DataArguments:
|
|
@@ -619,6 +640,8 @@ def configure_llm(model, training_args):
|
|
| 619 |
def train():
|
| 620 |
global local_rank
|
| 621 |
|
|
|
|
|
|
|
| 622 |
parser = HfArgumentParser(
|
| 623 |
(ModelArguments, DataArguments, TrainingArguments))
|
| 624 |
|
|
@@ -1005,6 +1028,26 @@ def train():
|
|
| 1005 |
"[und_eval] und_eval_every_n_steps > 0 but und_eval_image_paths is empty; "
|
| 1006 |
"UndEvalDuringTrainingCallback not registered."
|
| 1007 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1008 |
|
| 1009 |
_initialize_swanlab_compat(training_args)
|
| 1010 |
_dist_barrier()
|
|
|
|
| 26 |
from transformers.trainer_utils import sort_checkpoints
|
| 27 |
import pathlib
|
| 28 |
import sys
|
| 29 |
+
import ctypes
|
| 30 |
# from liger_kernel.transformers import apply_liger_kernel_to_qwen2_vl
|
| 31 |
# from monkey_patch_forward import replace_qwen2_5_with_mixed_modality_forward, replace_qwen_2_with_mixed_modality_forward
|
| 32 |
|
|
|
|
| 35 |
CoVTVanForConditionalGeneration,
|
| 36 |
)
|
| 37 |
from models.blip3o.constants import *
|
| 38 |
+
from cvbench_eval import CVBenchEvalCallback
|
| 39 |
|
| 40 |
local_rank = None
|
| 41 |
|
| 42 |
|
| 43 |
+
def _set_process_name() -> None:
|
| 44 |
+
"""Give every DeepSpeed worker an identifiable Linux process name."""
|
| 45 |
+
name = os.environ.get("UMM_PROCESS_NAME", "H3_LoRA")[:15]
|
| 46 |
+
try:
|
| 47 |
+
ctypes.CDLL(None).prctl(15, name.encode(), 0, 0, 0)
|
| 48 |
+
except Exception as exc: # noqa: BLE001 - process naming must not block training
|
| 49 |
+
print(f"[stage2_covt] unable to set process name to {name!r}: {exc!r}")
|
| 50 |
+
|
| 51 |
+
|
| 52 |
def _yaml_to_argv(config_path: str) -> List[str]:
|
| 53 |
"""Flatten this stage's model/data/training YAML into HfArgumentParser args."""
|
| 54 |
try:
|
|
|
|
| 457 |
und_eval_repetition_penalty: float = field(
|
| 458 |
default=1.0, metadata={"help": "run_und repetition_penalty."}
|
| 459 |
)
|
| 460 |
+
cvbench_eval_path: Optional[str] = field(
|
| 461 |
+
default=None,
|
| 462 |
+
metadata={"help": "Path to the 500-row CV-Bench validation.jsonl."},
|
| 463 |
+
)
|
| 464 |
+
cvbench_eval_every_n_steps: int = field(
|
| 465 |
+
default=0,
|
| 466 |
+
metadata={"help": "Run distributed judge-free CV-Bench matching every N steps."},
|
| 467 |
+
)
|
| 468 |
+
cvbench_eval_max_new_tokens: int = field(default=64)
|
| 469 |
+
cvbench_eval_fail_fast: bool = field(default=True)
|
| 470 |
|
| 471 |
@dataclass
|
| 472 |
class DataArguments:
|
|
|
|
| 640 |
def train():
|
| 641 |
global local_rank
|
| 642 |
|
| 643 |
+
_set_process_name()
|
| 644 |
+
|
| 645 |
parser = HfArgumentParser(
|
| 646 |
(ModelArguments, DataArguments, TrainingArguments))
|
| 647 |
|
|
|
|
| 1028 |
"[und_eval] und_eval_every_n_steps > 0 but und_eval_image_paths is empty; "
|
| 1029 |
"UndEvalDuringTrainingCallback not registered."
|
| 1030 |
)
|
| 1031 |
+
_cvbench_every = int(getattr(training_args, "cvbench_eval_every_n_steps", 0) or 0)
|
| 1032 |
+
_cvbench_path = (getattr(training_args, "cvbench_eval_path", None) or "").strip()
|
| 1033 |
+
if _cvbench_every > 0:
|
| 1034 |
+
if not _cvbench_path:
|
| 1035 |
+
raise ValueError(
|
| 1036 |
+
"cvbench_eval_every_n_steps > 0 requires cvbench_eval_path"
|
| 1037 |
+
)
|
| 1038 |
+
callbacks.append(
|
| 1039 |
+
CVBenchEvalCallback(
|
| 1040 |
+
processor=processor,
|
| 1041 |
+
manifest_path=_cvbench_path,
|
| 1042 |
+
every_n_steps=_cvbench_every,
|
| 1043 |
+
max_new_tokens=int(training_args.cvbench_eval_max_new_tokens),
|
| 1044 |
+
image_min_pixels=int(data_args.image_min_pixels),
|
| 1045 |
+
image_max_pixels=int(data_args.image_max_pixels),
|
| 1046 |
+
image_resized_width=int(data_args.image_resized_width),
|
| 1047 |
+
image_resized_height=int(data_args.image_resized_height),
|
| 1048 |
+
fail_fast=bool(training_args.cvbench_eval_fail_fast),
|
| 1049 |
+
)
|
| 1050 |
+
)
|
| 1051 |
|
| 1052 |
_initialize_swanlab_compat(training_args)
|
| 1053 |
_dist_barrier()
|
code/umm/stage2_covt/validate_checkpoint.py
CHANGED
|
@@ -9,9 +9,11 @@ from __future__ import annotations
|
|
| 9 |
|
| 10 |
import argparse
|
| 11 |
import json
|
|
|
|
| 12 |
from pathlib import Path
|
| 13 |
|
| 14 |
import torch
|
|
|
|
| 15 |
|
| 16 |
|
| 17 |
GEOMETRY_FRAGMENT = "depth_geometry_projector"
|
|
@@ -35,6 +37,25 @@ def _geometry_keys(state: dict[str, torch.Tensor]) -> list[str]:
|
|
| 35 |
return sorted(key for key in state if GEOMETRY_FRAGMENT in key)
|
| 36 |
|
| 37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
def main() -> None:
|
| 39 |
parser = argparse.ArgumentParser()
|
| 40 |
parser.add_argument("checkpoint", type=Path)
|
|
@@ -42,7 +63,6 @@ def main() -> None:
|
|
| 42 |
root = args.checkpoint.resolve()
|
| 43 |
|
| 44 |
required = (
|
| 45 |
-
"config.json",
|
| 46 |
"adapter_config.json",
|
| 47 |
"adapter_model.safetensors",
|
| 48 |
"non_lora_state_dict.bin",
|
|
@@ -52,11 +72,23 @@ def main() -> None:
|
|
| 52 |
if missing:
|
| 53 |
raise FileNotFoundError(f"Missing Stage-B artifacts under {root}: {missing}")
|
| 54 |
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
|
| 61 |
expert_state = _load_state(root / "covt_van_expert_heads_trainable.bin")
|
| 62 |
if not isinstance(expert_state, dict):
|
|
@@ -64,36 +96,59 @@ def main() -> None:
|
|
| 64 |
expert_geometry = _geometry_keys(expert_state)
|
| 65 |
if not expert_geometry:
|
| 66 |
raise AssertionError("Expert-head sidecar contains no VGGT geometry projector")
|
| 67 |
-
for key in
|
| 68 |
-
|
| 69 |
-
if not torch.is_tensor(value) or value.numel() == 0:
|
| 70 |
-
raise AssertionError(f"Invalid expert tensor {key!r}")
|
| 71 |
-
if not bool(torch.isfinite(value).all().item()):
|
| 72 |
-
raise FloatingPointError(f"Non-finite expert tensor {key!r}")
|
| 73 |
|
| 74 |
# The dense merge consumes non_lora_state_dict.bin. Loading it with mmap
|
| 75 |
# checks the serialization and key coverage without copying the ~9 GB file.
|
| 76 |
non_lora_state = _load_state(root / "non_lora_state_dict.bin")
|
| 77 |
if not isinstance(non_lora_state, dict):
|
| 78 |
raise TypeError("non_lora_state_dict.bin is not a state dict")
|
| 79 |
-
|
| 80 |
-
if
|
| 81 |
-
missing_from_merge = sorted(set(expert_geometry) - set(non_lora_geometry))
|
| 82 |
-
extra_in_merge = sorted(set(non_lora_geometry) - set(expert_geometry))
|
| 83 |
raise AssertionError(
|
| 84 |
-
"
|
| 85 |
-
f"
|
| 86 |
)
|
| 87 |
-
for key in
|
| 88 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
raise AssertionError(
|
| 90 |
-
f"
|
| 91 |
-
f"expert={tuple(expert_state[key].shape)}, "
|
| 92 |
-
f"non_lora={tuple(non_lora_state[key].shape)}"
|
| 93 |
)
|
| 94 |
|
| 95 |
print("Stage-B checkpoint validation passed")
|
| 96 |
print(f"checkpoint={root}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
print(f"geometry_tensors={len(expert_geometry)}")
|
| 98 |
print(
|
| 99 |
"geometry_contract="
|
|
|
|
| 9 |
|
| 10 |
import argparse
|
| 11 |
import json
|
| 12 |
+
import re
|
| 13 |
from pathlib import Path
|
| 14 |
|
| 15 |
import torch
|
| 16 |
+
from safetensors import safe_open
|
| 17 |
|
| 18 |
|
| 19 |
GEOMETRY_FRAGMENT = "depth_geometry_projector"
|
|
|
|
| 37 |
return sorted(key for key in state if GEOMETRY_FRAGMENT in key)
|
| 38 |
|
| 39 |
|
| 40 |
+
def _check_tensor(name: str, value: torch.Tensor) -> None:
|
| 41 |
+
if not torch.is_tensor(value) or value.numel() == 0:
|
| 42 |
+
raise AssertionError(f"Invalid tensor {name!r}")
|
| 43 |
+
if not bool(torch.isfinite(value).all().item()):
|
| 44 |
+
raise FloatingPointError(f"Non-finite tensor {name!r}")
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
def _validate_adapter(path: Path) -> int:
|
| 48 |
+
count = 0
|
| 49 |
+
with safe_open(path, framework="pt", device="cpu") as handle:
|
| 50 |
+
keys = list(handle.keys())
|
| 51 |
+
if not keys:
|
| 52 |
+
raise AssertionError("PEFT adapter contains no tensors")
|
| 53 |
+
for key in keys:
|
| 54 |
+
_check_tensor(f"adapter:{key}", handle.get_tensor(key))
|
| 55 |
+
count += 1
|
| 56 |
+
return count
|
| 57 |
+
|
| 58 |
+
|
| 59 |
def main() -> None:
|
| 60 |
parser = argparse.ArgumentParser()
|
| 61 |
parser.add_argument("checkpoint", type=Path)
|
|
|
|
| 63 |
root = args.checkpoint.resolve()
|
| 64 |
|
| 65 |
required = (
|
|
|
|
| 66 |
"adapter_config.json",
|
| 67 |
"adapter_model.safetensors",
|
| 68 |
"non_lora_state_dict.bin",
|
|
|
|
| 72 |
if missing:
|
| 73 |
raise FileNotFoundError(f"Missing Stage-B artifacts under {root}: {missing}")
|
| 74 |
|
| 75 |
+
config_path = root / "config.json"
|
| 76 |
+
if config_path.is_file():
|
| 77 |
+
config = json.loads(config_path.read_text(encoding="utf-8"))
|
| 78 |
+
config_source = str(config_path)
|
| 79 |
+
for name, expected in EXPECTED_GEOMETRY.items():
|
| 80 |
+
actual = config.get(name)
|
| 81 |
+
if actual != expected:
|
| 82 |
+
raise AssertionError(f"config.{name}={actual!r}, expected {expected!r}")
|
| 83 |
+
else:
|
| 84 |
+
# QwenTrainer checkpoints save PEFT + student sidecars, but not a full
|
| 85 |
+
# config.json. The merge reconstructs the Stage-B config from the base
|
| 86 |
+
# model and the fixed deployment geometry below; tensor validation then
|
| 87 |
+
# proves that the sidecar actually implements that contract.
|
| 88 |
+
config = dict(EXPECTED_GEOMETRY)
|
| 89 |
+
config_source = "deployed Stage-B contract (checkpoint has no config.json)"
|
| 90 |
+
|
| 91 |
+
adapter_tensors = _validate_adapter(root / "adapter_model.safetensors")
|
| 92 |
|
| 93 |
expert_state = _load_state(root / "covt_van_expert_heads_trainable.bin")
|
| 94 |
if not isinstance(expert_state, dict):
|
|
|
|
| 96 |
expert_geometry = _geometry_keys(expert_state)
|
| 97 |
if not expert_geometry:
|
| 98 |
raise AssertionError("Expert-head sidecar contains no VGGT geometry projector")
|
| 99 |
+
for key, value in expert_state.items():
|
| 100 |
+
_check_tensor(f"expert:{key}", value)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
|
| 102 |
# The dense merge consumes non_lora_state_dict.bin. Loading it with mmap
|
| 103 |
# checks the serialization and key coverage without copying the ~9 GB file.
|
| 104 |
non_lora_state = _load_state(root / "non_lora_state_dict.bin")
|
| 105 |
if not isinstance(non_lora_state, dict):
|
| 106 |
raise TypeError("non_lora_state_dict.bin is not a state dict")
|
| 107 |
+
missing_from_merge = sorted(set(expert_state) - set(non_lora_state))
|
| 108 |
+
if missing_from_merge:
|
|
|
|
|
|
|
| 109 |
raise AssertionError(
|
| 110 |
+
"Expert tensors missing from merge sidecar: "
|
| 111 |
+
f"{missing_from_merge}"
|
| 112 |
)
|
| 113 |
+
for key, expert_value in expert_state.items():
|
| 114 |
+
merge_value = non_lora_state[key]
|
| 115 |
+
if expert_value.shape != merge_value.shape or expert_value.dtype != merge_value.dtype:
|
| 116 |
+
raise AssertionError(
|
| 117 |
+
f"Expert tensor metadata mismatch for {key}: "
|
| 118 |
+
f"expert={tuple(expert_value.shape)}/{expert_value.dtype}, "
|
| 119 |
+
f"non_lora={tuple(merge_value.shape)}/{merge_value.dtype}"
|
| 120 |
+
)
|
| 121 |
+
if not torch.equal(expert_value, merge_value):
|
| 122 |
+
raise AssertionError(f"Expert tensor differs from merge sidecar: {key}")
|
| 123 |
+
|
| 124 |
+
# The trained tokenizer is padded to 151936 rows. Verify that merge.py can
|
| 125 |
+
# recover the expanded vocabulary from the dense sidecar.
|
| 126 |
+
embedding_rows = {
|
| 127 |
+
int(value.shape[0])
|
| 128 |
+
for key, value in non_lora_state.items()
|
| 129 |
+
if key.endswith(("embed_tokens.weight", "lm_head.weight")) and value.ndim == 2
|
| 130 |
+
}
|
| 131 |
+
if embedding_rows != {151936}:
|
| 132 |
+
raise AssertionError(f"Unexpected Stage-B embedding rows: {sorted(embedding_rows)}")
|
| 133 |
+
|
| 134 |
+
step_match = re.fullmatch(r"checkpoint-(\d+)", root.name)
|
| 135 |
+
trainer_state_path = root / "trainer_state.json"
|
| 136 |
+
if step_match and trainer_state_path.is_file():
|
| 137 |
+
trainer_state = json.loads(trainer_state_path.read_text(encoding="utf-8"))
|
| 138 |
+
actual_step = int(trainer_state.get("global_step", -1))
|
| 139 |
+
expected_step = int(step_match.group(1))
|
| 140 |
+
if actual_step != expected_step:
|
| 141 |
raise AssertionError(
|
| 142 |
+
f"trainer_state.global_step={actual_step}, directory step={expected_step}"
|
|
|
|
|
|
|
| 143 |
)
|
| 144 |
|
| 145 |
print("Stage-B checkpoint validation passed")
|
| 146 |
print(f"checkpoint={root}")
|
| 147 |
+
print(f"config_source={config_source}")
|
| 148 |
+
print(f"adapter_tensors={adapter_tensors}")
|
| 149 |
+
print(f"expert_tensors={len(expert_state)} (all bit-identical in non_lora sidecar)")
|
| 150 |
+
print(f"non_lora_tensors={len(non_lora_state)}")
|
| 151 |
+
print(f"embedding_rows={next(iter(embedding_rows))}")
|
| 152 |
print(f"geometry_tensors={len(expert_geometry)}")
|
| 153 |
print(
|
| 154 |
"geometry_contract="
|
code/umm/stage2_covt/validate_merged.py
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""Validate a dense Stage-B merge against its exact PEFT checkpoint."""
|
| 3 |
+
|
| 4 |
+
from __future__ import annotations
|
| 5 |
+
|
| 6 |
+
import argparse
|
| 7 |
+
import json
|
| 8 |
+
from pathlib import Path
|
| 9 |
+
|
| 10 |
+
import torch
|
| 11 |
+
from safetensors import safe_open
|
| 12 |
+
|
| 13 |
+
from merge import _normalize_non_lora_keys
|
| 14 |
+
from validate_checkpoint import EXPECTED_GEOMETRY
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
def _load_state(path: Path):
|
| 18 |
+
try:
|
| 19 |
+
return torch.load(path, map_location="cpu", mmap=True, weights_only=True)
|
| 20 |
+
except TypeError:
|
| 21 |
+
return torch.load(path, map_location="cpu")
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
def _merged_key_from_adapter(key: str) -> str:
|
| 25 |
+
if not key.endswith(".lora_A.weight"):
|
| 26 |
+
raise ValueError(key)
|
| 27 |
+
if key.startswith("base_model."):
|
| 28 |
+
key = key[11:]
|
| 29 |
+
if key.startswith("model.model."):
|
| 30 |
+
key = key[6:]
|
| 31 |
+
return key.removesuffix(".lora_A.weight") + ".weight"
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
def main() -> None:
|
| 35 |
+
parser = argparse.ArgumentParser()
|
| 36 |
+
parser.add_argument("--merged", type=Path, required=True)
|
| 37 |
+
parser.add_argument("--source-checkpoint", type=Path, required=True)
|
| 38 |
+
args = parser.parse_args()
|
| 39 |
+
merged = args.merged.resolve()
|
| 40 |
+
source = args.source_checkpoint.resolve()
|
| 41 |
+
|
| 42 |
+
config = json.loads((merged / "config.json").read_text(encoding="utf-8"))
|
| 43 |
+
for key, expected in EXPECTED_GEOMETRY.items():
|
| 44 |
+
if config.get(key) != expected:
|
| 45 |
+
raise AssertionError(f"config.{key}={config.get(key)!r}, expected {expected!r}")
|
| 46 |
+
if config.get("dtype") != "bfloat16":
|
| 47 |
+
raise AssertionError(f"Merged dtype is not bfloat16: {config.get('dtype')!r}")
|
| 48 |
+
if config.get("text_config", {}).get("vocab_size") != 151936:
|
| 49 |
+
raise AssertionError("Merged vocabulary is not 151936 rows")
|
| 50 |
+
|
| 51 |
+
dense_source = _load_state(source / "non_lora_state_dict.bin")
|
| 52 |
+
normalized_source = _normalize_non_lora_keys(dense_source)
|
| 53 |
+
expert_source = _load_state(source / "covt_van_expert_heads_trainable.bin")
|
| 54 |
+
adapter_path = source / "adapter_model.safetensors"
|
| 55 |
+
model_path = merged / "model.safetensors"
|
| 56 |
+
|
| 57 |
+
with safe_open(model_path, framework="pt", device="cpu") as model_file:
|
| 58 |
+
model_keys = set(model_file.keys())
|
| 59 |
+
if model_keys != set(normalized_source):
|
| 60 |
+
raise AssertionError(
|
| 61 |
+
"Merged/source key contract differs: "
|
| 62 |
+
f"missing={sorted(set(normalized_source) - model_keys)[:20]}, "
|
| 63 |
+
f"extra={sorted(model_keys - set(normalized_source))[:20]}"
|
| 64 |
+
)
|
| 65 |
+
if any("lora_" in key for key in model_keys):
|
| 66 |
+
raise AssertionError("Merged model still contains LoRA tensors")
|
| 67 |
+
|
| 68 |
+
for source_key, expected in expert_source.items():
|
| 69 |
+
normalized_key = next(
|
| 70 |
+
key for key, value in normalized_source.items() if value is dense_source[source_key]
|
| 71 |
+
)
|
| 72 |
+
actual = model_file.get_tensor(normalized_key)
|
| 73 |
+
if not torch.equal(actual, expected.to(actual.dtype)):
|
| 74 |
+
raise AssertionError(f"Merged expert tensor differs: {normalized_key}")
|
| 75 |
+
|
| 76 |
+
# Scan every tensor, not only headers, so truncated/corrupt/non-finite
|
| 77 |
+
# model files cannot pass this gate.
|
| 78 |
+
for key in sorted(model_keys):
|
| 79 |
+
value = model_file.get_tensor(key)
|
| 80 |
+
if value.numel() == 0 or not bool(torch.isfinite(value).all().item()):
|
| 81 |
+
raise FloatingPointError(f"Invalid merged tensor: {key}")
|
| 82 |
+
|
| 83 |
+
with safe_open(adapter_path, framework="pt", device="cpu") as adapter_file:
|
| 84 |
+
probe_a_key = next(
|
| 85 |
+
key
|
| 86 |
+
for key in adapter_file.keys()
|
| 87 |
+
if key.endswith("language_model.layers.0.mlp.down_proj.lora_A.weight")
|
| 88 |
+
)
|
| 89 |
+
probe_b_key = probe_a_key.replace(".lora_A.weight", ".lora_B.weight")
|
| 90 |
+
merged_key = _merged_key_from_adapter(probe_a_key)
|
| 91 |
+
source_key = next(
|
| 92 |
+
key
|
| 93 |
+
for key in dense_source
|
| 94 |
+
if key.endswith("language_model.layers.0.mlp.down_proj.base_layer.weight")
|
| 95 |
+
)
|
| 96 |
+
base = dense_source[source_key]
|
| 97 |
+
lora_a = adapter_file.get_tensor(probe_a_key)
|
| 98 |
+
lora_b = adapter_file.get_tensor(probe_b_key)
|
| 99 |
+
actual = model_file.get_tensor(merged_key)
|
| 100 |
+
# adapter_config: alpha/rank = 32/16 = 2. PEFT computes the
|
| 101 |
+
# matmul in float32 and casts the merged result back to bfloat16.
|
| 102 |
+
expected = (base.float() + (lora_b.float() @ lora_a.float()) * 2.0).to(base.dtype)
|
| 103 |
+
if torch.equal(actual, base):
|
| 104 |
+
raise AssertionError("LoRA probe did not change the dense base weight")
|
| 105 |
+
if not torch.equal(actual, expected):
|
| 106 |
+
raise AssertionError("LoRA probe is not the exact expected alpha/rank merge")
|
| 107 |
+
|
| 108 |
+
print("Merged Stage-B validation passed")
|
| 109 |
+
print(f"merged={merged}")
|
| 110 |
+
print(f"source_checkpoint={source}")
|
| 111 |
+
print(f"dense_tensors={len(model_keys)}")
|
| 112 |
+
print(f"expert_tensors={len(expert_source)} (exact)")
|
| 113 |
+
print(f"lora_probe={merged_key} (exact float32 delta -> bfloat16)")
|
| 114 |
+
print("all_tensors_finite=true")
|
| 115 |
+
|
| 116 |
+
|
| 117 |
+
if __name__ == "__main__":
|
| 118 |
+
main()
|
configs/stage2_covt.template.yaml
CHANGED
|
@@ -74,4 +74,8 @@ training:
|
|
| 74 |
dataloader_num_workers: 0
|
| 75 |
run_name: stage2-covt-sam-vggt-covt4-v2
|
| 76 |
report_to: swanlab
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
deepspeed: __UMM_ROOT__/code/umm/runtime/deepspeed_configs/zero2.json
|
|
|
|
| 74 |
dataloader_num_workers: 0
|
| 75 |
run_name: stage2-covt-sam-vggt-covt4-v2
|
| 76 |
report_to: swanlab
|
| 77 |
+
cvbench_eval_path: __UMM_ROOT__/data/cvbench_500/validation.jsonl
|
| 78 |
+
cvbench_eval_every_n_steps: 1000
|
| 79 |
+
cvbench_eval_max_new_tokens: 64
|
| 80 |
+
cvbench_eval_fail_fast: true
|
| 81 |
deepspeed: __UMM_ROOT__/code/umm/runtime/deepspeed_configs/zero2.json
|
configs/stage2_covt_from3k_bcd_2k.template.yaml
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
model:
|
| 2 |
+
model_id: __UMM_ROOT__/models/base/Qwen3-VL-4B-Instruct
|
| 3 |
+
model_path: __UMM_ROOT__/models/base/Qwen3-VL-4B-Instruct
|
| 4 |
+
stage1_align_checkpoint: __UMM_ROOT__/checkpoints/stage1/checkpoint-32000.bin
|
| 5 |
+
gen_vision_tower: null
|
| 6 |
+
diffuser_model_id: null
|
| 7 |
+
down_projector_type: time_context
|
| 8 |
+
num_metaqueries: 256
|
| 9 |
+
anchor_model_id: [sam, dino, depth, pidinet, siglip]
|
| 10 |
+
anchor_loss_weight: [1.0, 1.0, 1.0, 1.0, 1.0]
|
| 11 |
+
sam_checkpoint: __UMM_ROOT__/models/teachers/sam_vit_h_4b8939.pth
|
| 12 |
+
sam_model_type: vit_h
|
| 13 |
+
sam_num_masks: 8
|
| 14 |
+
sam_points_per_side: 32
|
| 15 |
+
sam_points_per_batch: 256
|
| 16 |
+
sam_pred_iou_thresh: 0.88
|
| 17 |
+
sam_stability_score_thresh: 0.95
|
| 18 |
+
sam_min_area_ratio: 0.0025
|
| 19 |
+
sam_max_area_ratio: 0.90
|
| 20 |
+
sam_max_pair_iou: 0.92
|
| 21 |
+
vggt_checkpoint: __UMM_ROOT__/models/teachers/VGGT-1B/model.pt
|
| 22 |
+
vggt_num_latent_tokens: 4
|
| 23 |
+
vggt_image_size: 518
|
| 24 |
+
vggt_projector_dim: 512
|
| 25 |
+
vggt_max_image_context_tokens: 512
|
| 26 |
+
vggt_teacher_micro_batch_size: 1
|
| 27 |
+
vggt_teacher_dtype: bfloat16
|
| 28 |
+
vggt_cosine_loss_weight: 0.1
|
| 29 |
+
|
| 30 |
+
data:
|
| 31 |
+
data_path: __UMM_ROOT__/data/covt/data.json
|
| 32 |
+
image_folder: __UMM_ROOT__/data/covt/images
|
| 33 |
+
lazy_preprocess: true
|
| 34 |
+
# Resume global_step=3000 directly into B; B/C/D each last 2,000 steps.
|
| 35 |
+
stage_0_step: 3000
|
| 36 |
+
stage_1_step: 5000
|
| 37 |
+
stage_2_step: 7000
|
| 38 |
+
image_min_pixels: 200704
|
| 39 |
+
image_max_pixels: 802816
|
| 40 |
+
image_resized_width: 448
|
| 41 |
+
image_resized_height: 448
|
| 42 |
+
|
| 43 |
+
training:
|
| 44 |
+
output_dir: __UMM_ROOT__/models/ckpts/stage2_covt_from3k_bcd_2k
|
| 45 |
+
bf16: true
|
| 46 |
+
fp16: false
|
| 47 |
+
freeze_llm: true
|
| 48 |
+
freeze_vision_tower: true
|
| 49 |
+
tune_merger: false
|
| 50 |
+
lora_enable: true
|
| 51 |
+
vision_lora: true
|
| 52 |
+
lora_rank: 16
|
| 53 |
+
lora_alpha: 32
|
| 54 |
+
lora_dropout: 0.01
|
| 55 |
+
lora_namespan_exclude: [embed_tokens, lm_head, sam, dino, depth, vggt, geometry, pidinet, siglip]
|
| 56 |
+
num_lora_modules: -1
|
| 57 |
+
training_stage: full
|
| 58 |
+
align_anchor_task_only_stage: 0
|
| 59 |
+
vqa_only_stage: 9000
|
| 60 |
+
max_steps: 9000
|
| 61 |
+
per_device_train_batch_size: 4
|
| 62 |
+
gradient_accumulation_steps: 1
|
| 63 |
+
learning_rate: 5.0e-5
|
| 64 |
+
projection_layer_lr: 1.0e-5
|
| 65 |
+
weight_decay: 0.1
|
| 66 |
+
warmup_ratio: 0.05
|
| 67 |
+
lr_scheduler_type: cosine
|
| 68 |
+
model_max_length: 1024
|
| 69 |
+
remove_unused_columns: false
|
| 70 |
+
gradient_checkpointing: true
|
| 71 |
+
logging_steps: 1
|
| 72 |
+
save_strategy: steps
|
| 73 |
+
save_steps: 1000
|
| 74 |
+
save_total_limit: 6
|
| 75 |
+
dataloader_num_workers: 0
|
| 76 |
+
run_name: H3_LoRA-from3k-B2k-C2k-D2k
|
| 77 |
+
report_to: swanlab
|
| 78 |
+
cvbench_eval_path: __UMM_ROOT__/data/cvbench_500/validation.jsonl
|
| 79 |
+
cvbench_eval_every_n_steps: 500
|
| 80 |
+
cvbench_eval_max_new_tokens: 128
|
| 81 |
+
cvbench_eval_fail_fast: true
|
| 82 |
+
deepspeed: __UMM_ROOT__/code/umm/runtime/deepspeed_configs/zero2.json
|
models/ckpts/stage2_covt_from3k_bcd_2k/merged/README.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Published dense checkpoints
|
| 2 |
+
|
| 3 |
+
This directory contains inference-ready dense merges from the Stage-2
|
| 4 |
+
continuation run that started at Phase-A checkpoint 3000.
|
| 5 |
+
|
| 6 |
+
| Directory | Training state | Evaluation state |
|
| 7 |
+
|---|---|---|
|
| 8 |
+
| `checkpoint-7000-merged` | End of Phase C | Full CV-Bench, BLINK and V* results are under `reports/evaluations/checkpoint-7000/` |
|
| 9 |
+
| `checkpoint-9000-merged` | End of Phase D; final optimizer step | Merge and weight-integrity checks passed; full benchmarks remain to be run |
|
| 10 |
+
|
| 11 |
+
Each model directory is self-contained for inference and includes a
|
| 12 |
+
`SHA256SUMS` file. Verify a download from inside that directory with:
|
| 13 |
+
|
| 14 |
+
```bash
|
| 15 |
+
sha256sum -c SHA256SUMS
|
| 16 |
+
```
|
| 17 |
+
|
| 18 |
+
These dense models do not contain optimizer, scheduler, RNG, or DeepSpeed
|
| 19 |
+
state, so they cannot resume training. See `reports/PROGRESS_2026-08-11.md` for
|
| 20 |
+
the training contract, metrics, caveats, and reproduction entrypoints.
|
reports/PROGRESS_2026-08-11.md
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# UMM Stage-2 progress handoff — 2026-08-11
|
| 2 |
+
|
| 3 |
+
This document is the canonical handoff for the work completed after the initial
|
| 4 |
+
`Orangerl/umm` bundle was downloaded on the source machine. Paths are relative
|
| 5 |
+
to the repository root so the handoff remains portable.
|
| 6 |
+
|
| 7 |
+
## Executive state
|
| 8 |
+
|
| 9 |
+
- The original portable data bundle is unchanged: 889,489 CoVT conversations
|
| 10 |
+
and 756,894 source images. No dataset shard needs to be replaced.
|
| 11 |
+
- The Stage-2 continuation run is complete at optimizer step 9,000.
|
| 12 |
+
- The continuation started from the original Phase-A `checkpoint-3000` and ran
|
| 13 |
+
2,000 steps for each remaining phase:
|
| 14 |
+
- Phase B: `[3000, 5000)` — anchor generation;
|
| 15 |
+
- Phase C: `[5000, 7000)` — full CoVT;
|
| 16 |
+
- Phase D: `[7000, 9000)` — mixed CoVT.
|
| 17 |
+
- Validation frequency for that run was one CV-Bench-500 evaluation every 500
|
| 18 |
+
optimizer steps. Checkpoints were saved every 1,000 steps.
|
| 19 |
+
- Dense bfloat16 checkpoints for steps 7,000 and 9,000 are published under
|
| 20 |
+
`models/ckpts/stage2_covt_from3k_bcd_2k/merged/`.
|
| 21 |
+
- Step 7,000 has full CV-Bench, BLINK and V* evaluations. Step 9,000 has been
|
| 22 |
+
merged and exhaustively validated, but has not yet been benchmarked. Do not
|
| 23 |
+
report step 9,000 as better or worse until the same evaluation suite is run.
|
| 24 |
+
|
| 25 |
+
## Training contract
|
| 26 |
+
|
| 27 |
+
The active architecture remains:
|
| 28 |
+
|
| 29 |
+
- base model: Qwen3-VL-4B-Instruct plus Stage-1 alignment checkpoint-32000;
|
| 30 |
+
- frozen teachers: SAM, DINOv2, VGGT, PiDiNet and SigLIP;
|
| 31 |
+
- visual token counts `[SAM,DINO,VGGT-depth,PiDiNet,SigLIP] = [8,4,4,4,4]`;
|
| 32 |
+
- `vggt_num_latent_tokens=4` and geometry target `[1374,2048]`;
|
| 33 |
+
- frozen Qwen language/vision towers with LoRA rank 16, alpha 32;
|
| 34 |
+
- bfloat16, DeepSpeed ZeRO-2, 8 GPUs, per-rank batch 4;
|
| 35 |
+
- deterministic, judge-free multiple-choice validation.
|
| 36 |
+
|
| 37 |
+
The portable continuation template is
|
| 38 |
+
`configs/stage2_covt_from3k_bcd_2k.template.yaml`. It renders to
|
| 39 |
+
`configs/stage2_covt_from3k_bcd_2k.yaml` through `scripts/render_config.py`.
|
| 40 |
+
The original raw Phase-A checkpoint-3000 is required only if the continuation
|
| 41 |
+
training itself must be reproduced; the published dense 7k/9k checkpoints are
|
| 42 |
+
for inference and evaluation and do not contain optimizer state.
|
| 43 |
+
|
| 44 |
+
## Published dense checkpoints
|
| 45 |
+
|
| 46 |
+
| Checkpoint | Meaning | Validation |
|
| 47 |
+
|---|---|---|
|
| 48 |
+
| `checkpoint-7000-merged` | End of Phase C | 767 dense tensors; 54 expert tensors exact; LoRA probe exact; all finite |
|
| 49 |
+
| `checkpoint-9000-merged` | End of Phase D / final run state | 767 dense tensors; 54 expert tensors exact; LoRA probe exact; all finite |
|
| 50 |
+
|
| 51 |
+
Both checkpoints have a 151,936-row vocabulary and preserve the four-token
|
| 52 |
+
VGGT geometry contract. Each directory includes `SHA256SUMS`. Step 9,000 was
|
| 53 |
+
freshly re-merged on 2026-08-11 from
|
| 54 |
+
`models/ckpts/stage2_covt_from3k_bcd_2k/checkpoint-9000`; the trainer state
|
| 55 |
+
reports `global_step=9000` and `max_steps=9000`.
|
| 56 |
+
|
| 57 |
+
To revalidate a downloaded dense checkpoint when the corresponding raw source
|
| 58 |
+
checkpoint is available:
|
| 59 |
+
|
| 60 |
+
```bash
|
| 61 |
+
.env/unvideo/bin/python code/umm/stage2_covt/validate_merged.py \
|
| 62 |
+
--merged models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-9000-merged \
|
| 63 |
+
--source-checkpoint models/ckpts/stage2_covt_from3k_bcd_2k/checkpoint-9000
|
| 64 |
+
```
|
| 65 |
+
|
| 66 |
+
Without the raw source, run `sha256sum -c SHA256SUMS` inside the merged model
|
| 67 |
+
directory and load it with the local CoVT runtime.
|
| 68 |
+
|
| 69 |
+
## Main checkpoint-7000 benchmark results
|
| 70 |
+
|
| 71 |
+
All main evaluations used 8 distributed ranks, bfloat16, greedy decoding,
|
| 72 |
+
deterministic option matching and no LLM judge. There were 4,730 scored samples,
|
| 73 |
+
zero inference errors, 100% answer parsing, and no generation hit the 256-token
|
| 74 |
+
cap.
|
| 75 |
+
|
| 76 |
+
| Benchmark | Split / N | Primary result | Supplemental result |
|
| 77 |
+
|---|---:|---:|---:|
|
| 78 |
+
| CV-Bench | full test / 2,638 | **83.9596% official score** | 83.7377% micro |
|
| 79 |
+
| BLINK | full labelled val / 1,901 | **58.2787% 14-task macro** | 58.0747% micro |
|
| 80 |
+
| V* fixed 448 | core test / 191 | 53.4031% micro | 54.6110% 2-category macro |
|
| 81 |
+
| V* dynamic global | core test / 191 | **83.2461% micro** | 88.6957% attributes / 75.0000% spatial |
|
| 82 |
+
| V* oracle crop | core test / 191 | 91.6230% micro | diagnostic only; not a valid benchmark score |
|
| 83 |
+
|
| 84 |
+
CV-Bench official components:
|
| 85 |
+
|
| 86 |
+
| Component | Result |
|
| 87 |
+
|---|---:|
|
| 88 |
+
| ADE20K | 443/633 = 69.9842% |
|
| 89 |
+
| COCO | 671/805 = 83.3540% |
|
| 90 |
+
| Official 2D macro | 76.6691% |
|
| 91 |
+
| Omni3D / official 3D | 1,095/1,200 = 91.2500% |
|
| 92 |
+
| Official formula | `((ADE20K + COCO)/2 + Omni3D)/2 = 83.9596%` |
|
| 93 |
+
|
| 94 |
+
BLINK task strengths include spatial relation 87.4126%, visual similarity
|
| 95 |
+
84.4444%, relative depth 83.8710% and jigsaw 79.3333%. The weakest tasks were
|
| 96 |
+
functional correspondence 24.6154%, IQ test 28.6667%, semantic correspondence
|
| 97 |
+
32.3741% and multi-view reasoning 37.5940%.
|
| 98 |
+
|
| 99 |
+
## V* root-cause correction
|
| 100 |
+
|
| 101 |
+
The original V* evaluator forced every high-resolution image to 448×448. The
|
| 102 |
+
191 source images average approximately 2246×1583, and the median target became
|
| 103 |
+
only 7.96 pixels on its shortest side. One hundred samples had a target shortest
|
| 104 |
+
side of at most 8 pixels.
|
| 105 |
+
|
| 106 |
+
Controlled reruns on the same model and same questions established the cause:
|
| 107 |
+
|
| 108 |
+
- fixed 448: 53.4031%;
|
| 109 |
+
- aspect-preserving dynamic input capped near 0.8MP: 83.2461% (`+29.84 pp`);
|
| 110 |
+
- ground-truth oracle target crop: 91.6230% (`+38.22 pp`, diagnostic only).
|
| 111 |
+
|
| 112 |
+
The dynamic rerun corrected 62 fixed-448 errors and introduced only 5 new
|
| 113 |
+
errors (`McNemar p=1.42e-13`). This proves the low fixed-448 score was primarily
|
| 114 |
+
an evaluation-resolution failure, not the checkpoint's capability ceiling.
|
| 115 |
+
|
| 116 |
+
Use `dynamic-global / generation-match` when reporting 83.2461%. It is not a
|
| 117 |
+
strict reproduction of the official V* visual-search and option-likelihood
|
| 118 |
+
protocol. The full diagnosis is in
|
| 119 |
+
`reports/evaluations/checkpoint-7000/vstar_diagnosis/VSTAR_ROOT_CAUSE_REPORT.md`.
|
| 120 |
+
|
| 121 |
+
## Historical CV-Bench-500 results
|
| 122 |
+
|
| 123 |
+
These results use the fixed 500-row validation subset (250 2D + 250 3D):
|
| 124 |
+
|
| 125 |
+
| Model | Overall | 2D | 3D |
|
| 126 |
+
|---|---:|---:|---:|
|
| 127 |
+
| Raw Qwen3-VL-4B-Instruct | 68.80% | 80.40% | 57.20% |
|
| 128 |
+
| Qwen3-VL + Stage-1 alignment | 69.00% | 80.40% | 57.60% |
|
| 129 |
+
| Legacy Stage-2 checkpoint-2000 | 84.60% | 80.40% | 88.80% |
|
| 130 |
+
| Legacy Stage-2 checkpoint-3000 | **84.80%** | 80.00% | 89.60% |
|
| 131 |
+
| Legacy Stage-2 checkpoint-8000 | 83.20% | 77.60% | 88.80% |
|
| 132 |
+
|
| 133 |
+
## Code added or changed after the original HF snapshot
|
| 134 |
+
|
| 135 |
+
The update includes:
|
| 136 |
+
|
| 137 |
+
- resumable Phase-B/C/D training launcher and portable config template;
|
| 138 |
+
- Linux process naming (`H3_LoRA*`) without breaking the packed Python prefix;
|
| 139 |
+
- distributed CV-Bench callback during training;
|
| 140 |
+
- checkpoint and dense-merge validation, including exact expert and LoRA probes;
|
| 141 |
+
- CV-Bench, BLINK and V* preparation/evaluation/audit scripts;
|
| 142 |
+
- CoVT output tracing and deterministic answer extraction;
|
| 143 |
+
- dynamic-resolution and oracle-crop V* diagnostic modes;
|
| 144 |
+
- progress, benchmark and root-cause reports.
|
| 145 |
+
|
| 146 |
+
The data shards, base model, teachers and packed environment were not modified.
|
| 147 |
+
No SwanLab or Hugging Face token is committed.
|
| 148 |
+
|
| 149 |
+
## Reproduction entrypoints
|
| 150 |
+
|
| 151 |
+
```bash
|
| 152 |
+
# Deploy the complete portable bundle (always direct; no proxy).
|
| 153 |
+
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY
|
| 154 |
+
hf download Orangerl/umm --local-dir umm
|
| 155 |
+
cd umm
|
| 156 |
+
bash scripts/bootstrap.sh
|
| 157 |
+
|
| 158 |
+
# Evaluate a published dense checkpoint on all prepared benchmark manifests.
|
| 159 |
+
MODEL_PATH="$PWD/models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged" \
|
| 160 |
+
bash scripts/run_ckpt7000_three_benchmarks.sh
|
| 161 |
+
|
| 162 |
+
# Reproduce V* resolution diagnostics.
|
| 163 |
+
bash scripts/run_vstar_diagnostic_sensitivity.sh
|
| 164 |
+
```
|
| 165 |
+
|
| 166 |
+
Raw benchmark files are not duplicated into the HF bundle because they are
|
| 167 |
+
independently versioned upstream. Prepared manifests, metrics, audits, reports
|
| 168 |
+
and selected logs are published under `reports/`.
|
| 169 |
+
|
| 170 |
+
## Remaining work
|
| 171 |
+
|
| 172 |
+
1. Run the exact same full CV-Bench, BLINK and dynamic-global V* suite on the
|
| 173 |
+
final 9k dense checkpoint.
|
| 174 |
+
2. For strict V* cross-paper comparison, implement per-option conditional NLL
|
| 175 |
+
and a non-oracle multi-scale search/tile pipeline.
|
| 176 |
+
3. Compare 7k versus 9k per sample before selecting the final paper checkpoint.
|
| 177 |
+
4. If training must resume beyond 9k, separately archive a raw trainer
|
| 178 |
+
checkpoint with optimizer/scheduler/RNG state; merged checkpoints cannot
|
| 179 |
+
resume DeepSpeed training.
|
| 180 |
+
|
| 181 |
+
## Selected logs and evidence
|
| 182 |
+
|
| 183 |
+
- `reports/logs/H3_LoRA_from3k_BCD_train.log`
|
| 184 |
+
- `reports/logs/H3_merge_checkpoint-7000.log`
|
| 185 |
+
- `reports/logs/H3_merge_checkpoint-9000.log`
|
| 186 |
+
- `reports/logs/H3_ckpt7000_three_benchmarks.log`
|
| 187 |
+
- `reports/logs/H3_hash_merged_7k_9k.log`
|
| 188 |
+
- `reports/logs/H3_code_upload_qa_final.log`
|
| 189 |
+
- `reports/evaluations/checkpoint-7000/`
|
| 190 |
+
- `reports/cvbench_2k_3k_8k/`
|
reports/README.md
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# UMM reports index
|
| 2 |
+
|
| 3 |
+
- [`PROGRESS_2026-08-11.md`](PROGRESS_2026-08-11.md): canonical current-state
|
| 4 |
+
handoff, checkpoint inventory, benchmark results and remaining work.
|
| 5 |
+
- `evaluations/checkpoint-7000/`: full CV-Bench, BLINK and V* metrics, audits,
|
| 6 |
+
per-sample outputs and V* resolution diagnosis.
|
| 7 |
+
- `cvbench_2k_3k_8k/`: historical CV-Bench-500 comparison and presentation
|
| 8 |
+
material.
|
| 9 |
+
- `logs/`: selected training, merge and evaluation logs. Credentials are never
|
| 10 |
+
included.
|
reports/cvbench_2k_3k_8k/01_experiment_summary.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Stage-2 CoVT:CV-Bench Checkpoint 对比
|
| 2 |
+
|
| 3 |
+
## Executive Summary
|
| 4 |
+
|
| 5 |
+
- **checkpoint-3000 在当前固定子集上表现最好。** 总体准确率为 84.80%(424/500),比 checkpoint-2000 高 0.20 个百分点,仅多答对 1 条。
|
| 6 |
+
- **checkpoint-8000 没有延续增长。** 总体准确率降至 83.20%(416/500),比 checkpoint-3000 低 1.60 个百分点;主要损失来自 2D Relation 和 3D Depth。
|
| 7 |
+
- **模型在 3D 类任务上的整体表现高于 2D。** 三个 checkpoint 的 3D 准确率均为 88.8%–89.6%,2D 为 77.6%–80.4%。
|
| 8 |
+
- **结果可以用于阶段性汇报,但不宜过度解读 checkpoint 排名。** 三次评测均覆盖相同的 500 条样本,解析率 100%、推理错误 0;paired McNemar 检验未发现显著差异。
|
| 9 |
+
|
| 10 |
+
## 三个 checkpoint 的总体表现
|
| 11 |
+
|
| 12 |
+
本次比较使用完全相同的 CV-Bench-500:2D 250 条、3D 250 条。模型采用
|
| 13 |
+
bf16、FlashAttention 2、greedy decoding,答案通过选择题字母直接匹配,不使用
|
| 14 |
+
LLM judge。
|
| 15 |
+
|
| 16 |
+
| Checkpoint | 正确数 | 总准确率 | 2D | 3D | 四任务宏平均 |
|
| 17 |
+
|---|---:|---:|---:|---:|---:|
|
| 18 |
+
| 2000 | 423/500 | 84.60% | **80.40%** | 88.80% | 85.11% |
|
| 19 |
+
| **3000** | **424/500** | **84.80%** | 80.00% | **89.60%** | **85.33%** |
|
| 20 |
+
| 8000 | 416/500 | 83.20% | 77.60% | 88.80% | 83.48% |
|
| 21 |
+
|
| 22 |
+
**解读:** checkpoint-3000 是当前子集上的最佳点,但与 checkpoint-2000 基本持平。
|
| 23 |
+
checkpoint-8000 的下降说明继续训练并未在所有视觉能力上产生单调收益,后续模型选择应看验证集而不是只看训练步数。
|
| 24 |
+
|
| 25 |
+
## 8k 的下降集中在 Relation 和 Depth
|
| 26 |
+
|
| 27 |
+
| Checkpoint | 2D Count | 2D Relation | 3D Depth | 3D Distance |
|
| 28 |
+
|---|---:|---:|---:|---:|
|
| 29 |
+
| 2000 | 70.80% | **92.04%** | 92.00% | 85.60% |
|
| 30 |
+
| 3000 | 70.07% | **92.04%** | **95.20%** | 84.00% |
|
| 31 |
+
| 8000 | **72.26%** | 84.07% | 91.20% | **86.40%** |
|
| 32 |
+
|
| 33 |
+
从 checkpoint-3000 到 checkpoint-8000:
|
| 34 |
+
|
| 35 |
+
- Count 上升 2.19 个百分点;
|
| 36 |
+
- Distance 上升 2.40 个百分点;
|
| 37 |
+
- Relation 下降 7.97 个百分点;
|
| 38 |
+
- Depth 下降 4.00 个百分点。
|
| 39 |
+
|
| 40 |
+
**解读:** 8k 并非整体能力均匀退化,而是能力结构发生了变化:计数和距离判断略有改善,空间关系与深度判断明显下降。这提示后续训练可能需要监控不同任务之间的权衡。
|
| 41 |
+
|
| 42 |
+
## 样本级比较显示差异有限
|
| 43 |
+
|
| 44 |
+
| 对比 | 后者新答对 | 后者新答错 | 净变化 | 总准确率变化 | Paired p-value |
|
| 45 |
+
|---|---:|---:|---:|---:|---:|
|
| 46 |
+
| 2k → 3k | 9 | 8 | +1 | +0.20 pp | 1.000 |
|
| 47 |
+
| 2k → 8k | 11 | 18 | -7 | -1.40 pp | 0.265 |
|
| 48 |
+
| 3k → 8k | 13 | 21 | -8 | -1.60 pp | 0.229 |
|
| 49 |
+
|
| 50 |
+
**解读:** 3k 与 2k 的结果几乎等价;8k 的净下降值得关注,但在 500 条样本下尚未达到统计显著。当前证据适合确定“优先继续研究 3k”,不适合声称“3k 在完整 CV-Bench 上确定优于其他 checkpoint”。
|
| 51 |
+
|
| 52 |
+
## 建议的下一步
|
| 53 |
+
|
| 54 |
+
1. **当前候选模型优先使用 checkpoint-3000。** 它在总体准确率、3D 和四任务宏平均上均为当前最佳。
|
| 55 |
+
2. **将 Relation 和 Depth 设为后续训练监控项。** 尤其关注 3k 之后是否出现持续下降,以及是否与课程阶段或数据配比有关。
|
| 56 |
+
3. **最终模型选择前扩大验证样本。** 可以使用更大的固定子集或完整 CV-Bench,确认 1–2 个百分点的差异是否稳定。
|
| 57 |
+
4. **保留多 checkpoint early-stopping 策略。** 当前结果已经表明“更晚 checkpoint”不等于“更优验证表现”。
|
| 58 |
+
|
| 59 |
+
## 进一步问题
|
| 60 |
+
|
| 61 |
+
- 3k 到 8k 之间的 Relation/Depth 下降从哪个具体训练阶段开始?
|
| 62 |
+
- 下降是否集中于某些图像来源、答案位置或场景类型?
|
| 63 |
+
- 使用完整 benchmark 后,3k 的领先是否仍然存在?
|
| 64 |
+
|
| 65 |
+
## 限制与假设
|
| 66 |
+
|
| 67 |
+
- 本结果来自固定 CV-Bench-500,而非完整 CV-Bench;2D/3D 各 250 条。
|
| 68 |
+
- 2D 内部 Count 137 条、Relation 113 条,因此总体准确率是样本微平均;四任务宏平均另行报告。
|
| 69 |
+
- 所有 checkpoint 使用同一数据、提示、处理器、生成参数与 matcher,横向比较口径一致。
|
| 70 |
+
- 结果是选择题 exact match,不评估开放式回答质量,也不使用 LLM judge。
|
| 71 |
+
|
| 72 |
+
## 结果入口
|
| 73 |
+
|
| 74 |
+
- [完整对比结果](../../outputs/evals/cvbench/checkpoint-comparison-2000-3000-8000.json)
|
| 75 |
+
- [2k 验证报告](../../outputs/evals/cvbench/stage2_covt_sam_vggt_covt4_v2-checkpoint-2000/validation_report.json)
|
| 76 |
+
- [3k 验证报告](../../outputs/evals/cvbench/stage2_covt_sam_vggt_covt4_v2-checkpoint-3000/validation_report.json)
|
| 77 |
+
- [8k 验证报告](../../outputs/evals/cvbench/stage2_covt_sam_vggt_covt4_v2-checkpoint-8000/validation_report.json)
|
| 78 |
+
- SwanLab:[2k](https://swanlab.cn/@Oranger/unified-model/runs/b6e8mzzs) · [3k](https://swanlab.cn/@Oranger/unified-model/runs/vxdbj1r3) · [8k](https://swanlab.cn/@Oranger/unified-model/runs/keobxg3o)
|
| 79 |
+
|
reports/cvbench_2k_3k_8k/02_text_output_cases.md
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 可观测推理轨迹与真实 Case
|
| 2 |
+
|
| 3 |
+
## 结论先行
|
| 4 |
+
|
| 5 |
+
- 本文记录的是 checkpoint-3000 在 CV-Bench 上**实际发射的逐 token 轨迹**,包括 token ID、条件概率和 top 候选;不是只展示最终 answer。
|
| 6 |
+
- 当前评测提示下,模型没有生成 `<think>`、`<answer>` 或任何 CoVT anchor token。原始解码(`skip_special_tokens=False`)确认它直接生成 `(选项) 内容` 后结束。
|
| 7 |
+
- 即使加入项目 `CoVTVan.tokenize_fn` 中定义的完整 CoVT 格式要求,模型仍直接生成 `The answer is ...`,没有进入训练模板期望的视觉 CoT。
|
| 8 |
+
- 因此,现阶段不能对外展示一段自然语言或 anchor 序列并称其为该模型的真实推理过程。可严谨汇报的轨迹是下列自回归 token 决策序列。
|
| 9 |
+
|
| 10 |
+
> 口径说明:本文的“轨迹”指输出层可观测的 emitted-token trajectory。它不能还原模型隐藏状态中的因果推理,也不把事后编写的解释冒充内部思考。
|
| 11 |
+
|
| 12 |
+
## 采集条件
|
| 13 |
+
|
| 14 |
+
| 项目 | 设置 |
|
| 15 |
+
|---|---|
|
| 16 |
+
| 模型 | checkpoint-3000 merged |
|
| 17 |
+
| 数据 | 固定 CV-Bench-500 中的代表样本 |
|
| 18 |
+
| 精度 | bfloat16 |
|
| 19 |
+
| Attention | FlashAttention 2 |
|
| 20 |
+
| 解码 | greedy,`do_sample=False` |
|
| 21 |
+
| 轨迹内容 | 原始 special-token decode、逐步 token ID、selected probability、top-5 |
|
| 22 |
+
| 当前评测提示 | 原题后追加 `Return the selected option in <answer> tags...` |
|
| 23 |
+
| CoVT 格式提示 | 与 `CoVTVan.tokenize_fn` 内的 wrapper 保持一致 |
|
| 24 |
+
|
| 25 |
+
概率是每一步在当前前缀条件下对词表 logits 做 softmax 后的值。它是 token 概率,不等同于经过所有可能文本格式归并后的“选项概率”。
|
| 26 |
+
|
| 27 |
+
## Case 1:正确的 3D Depth 判断
|
| 28 |
+
|
| 29 |
+
样本:`3D-058`;标准答案:B(printer);预测:B。
|
| 30 |
+
|
| 31 |
+

|
| 32 |
+
|
| 33 |
+
问题:bin(红框)和 printer(蓝框)哪一个更靠近相机?
|
| 34 |
+
|
| 35 |
+
原始生成序列:
|
| 36 |
+
|
| 37 |
+
```text
|
| 38 |
+
(B) printer
|
| 39 |
+
<|im_end|>
|
| 40 |
+
```
|
| 41 |
+
|
| 42 |
+
逐 token 轨迹:
|
| 43 |
+
|
| 44 |
+
| 步 | token ID | 实际发射 | 条件概率 | 主要候选 |
|
| 45 |
+
|---:|---:|---|---:|---|
|
| 46 |
+
| 1 | 5349 | `(B` | 65.0142% | `(B` 65.0142%;`(A` 34.7996% |
|
| 47 |
+
| 2 | 8 | `)` | 99.9289% | `)` 99.9289%;`)\n` 0.0710% |
|
| 48 |
+
| 3 | 22380 | ` printer` | 99.9947% | ` printer` 99.9947%;` bin` 0.0009% |
|
| 49 |
+
| 4 | 198 | `\n` | 99.9363% | `\n` 99.9363%;`<|im_end|>` 0.0626% |
|
| 50 |
+
| 5 | 151645 | `<|im_end|>` | 97.5117% | `<|im_end|>` 97.5117%;`<|endoftext|>` 2.2933% |
|
| 51 |
+
|
| 52 |
+
解读:决定答案的主要分叉发生在第 1 步:B 为 65.01%,A 仍有 34.80%。选定 B 后,后续 `printer` 基本是确定性的格式与选项文本补全。这是一个可观察的决策轨迹,但没有显式 rationale。
|
| 53 |
+
|
| 54 |
+
## Case 2:高置信度但错误的 3D Distance 判断
|
| 55 |
+
|
| 56 |
+
样本:`3D-158`;标准答案:B(table);预测:A(bookcase)。
|
| 57 |
+
|
| 58 |
+

|
| 59 |
+
|
| 60 |
+
问题:bookcase(蓝框)和 table(绿框)哪一个更靠近 books?
|
| 61 |
+
|
| 62 |
+
原始生成序列:
|
| 63 |
+
|
| 64 |
+
```text
|
| 65 |
+
(A) bookcase
|
| 66 |
+
<|im_end|>
|
| 67 |
+
```
|
| 68 |
+
|
| 69 |
+
逐 token 轨迹:
|
| 70 |
+
|
| 71 |
+
| 步 | token ID | 实际发射 | 条件概率 | 主要候选 |
|
| 72 |
+
|---:|---:|---|---:|---|
|
| 73 |
+
| 1 | 4346 | `(A` | 82.3289% | `(A` 82.3289%;`(B` 16.2115% |
|
| 74 |
+
| 2 | 8 | `)` | 99.9840% | `)` 99.9840%;`)\n` 0.0158% |
|
| 75 |
+
| 3 | 2311 | ` book` | 99.9966% | ` book` 99.9966%;`book` 0.0011% |
|
| 76 |
+
| 4 | 5638 | `case` | 100.0000% | `case` 100.0000% |
|
| 77 |
+
| 5 | 198 | `\n` | 99.8066% | `\n` 99.8066%;`<|im_end|>` 0.1927% |
|
| 78 |
+
| 6 | 151645 | `<|im_end|>` | 97.8663% | `<|im_end|>` 97.8663%;`<|endoftext|>` 2.0311% |
|
| 79 |
+
|
| 80 |
+
解读:错误在第 1 步已经形成,而且模型对错误的 A 明显偏向。后续 token 只是把 A 对应的 `bookcase` 补全,不能视为纠错或几何推理过程。
|
| 81 |
+
|
| 82 |
+
## Case 3:正确计数,但首 token 存在格式竞争
|
| 83 |
+
|
| 84 |
+
样本:`2D-002`;标准答案:C(2);预测:C。
|
| 85 |
+
|
| 86 |
+

|
| 87 |
+
|
| 88 |
+
问题:图中有多少个 curtains?
|
| 89 |
+
|
| 90 |
+
原始生成序列:
|
| 91 |
+
|
| 92 |
+
```text
|
| 93 |
+
(C) 2
|
| 94 |
+
<|im_end|>
|
| 95 |
+
```
|
| 96 |
+
|
| 97 |
+
逐 token 轨迹:
|
| 98 |
+
|
| 99 |
+
| 步 | token ID | 实际发射 | 条件概率 | 主要候选 |
|
| 100 |
+
|---:|---:|---|---:|---|
|
| 101 |
+
| 1 | 3025 | `(C` | 44.2959% | `(C` 44.2959%;`(B` 23.7099%;`<tool_call>` 11.9221%;`(A` 10.5212%;`C` 0.5936% |
|
| 102 |
+
| 2 | 8 | `)` | 99.7525% | `)` 99.7525%;`)\n` 0.2473% |
|
| 103 |
+
| 3 | 220 | 空格 | 99.9996% | 空格 99.9996% |
|
| 104 |
+
| 4 | 17 | `2` | 99.9985% | `2` 99.9985%;`1` 0.0006%;`3` 0.0004% |
|
| 105 |
+
| 5 | 198 | `\n` | 99.9958% | `\n` 99.9958%;`<|im_end|>` 0.0040% |
|
| 106 |
+
| 6 | 151645 | `<|im_end|>` | 96.2034% | `<|im_end|>` 96.2034%;`<|endoftext|>` 3.2919% |
|
| 107 |
+
|
| 108 |
+
解读:第 1 步既包含答案竞争,也包含输出格式竞争,例如 `(C` 与裸 `C` 是同一答案的不同字符串路径。因此不能直接把 44.30% 当作归并后的答案 C 概率。
|
| 109 |
+
|
| 110 |
+
## Case 4:显式要求 CoVT 后的真实轨迹
|
| 111 |
+
|
| 112 |
+
样本仍使用 `3D-058`。提示词明确要求:
|
| 113 |
+
|
| 114 |
+
```text
|
| 115 |
+
output your reasoning process within <think></think> tags ...
|
| 116 |
+
include ... <|dino_pad|>, <|depth_pad|>, <|pidinet_pad|>, and <|siglip_pad|> ...
|
| 117 |
+
```
|
| 118 |
+
|
| 119 |
+
模型实际仍生成:
|
| 120 |
+
|
| 121 |
+
```text
|
| 122 |
+
The answer is B
|
| 123 |
+
<|im_end|>
|
| 124 |
+
```
|
| 125 |
+
|
| 126 |
+
逐 token 轨迹:
|
| 127 |
+
|
| 128 |
+
| 步 | token ID | 实际发射 | 条件概率 | 主要候选 |
|
| 129 |
+
|---:|---:|---|---:|---|
|
| 130 |
+
| 1 | 785 | `The` | 74.9403% | `The` 74.9403%;`Based` 6.1515%;`To` 2.5643%;`I` 2.2630%;`First` 1.9971% |
|
| 131 |
+
| 2 | 4226 | ` answer` | 59.3041% | ` answer` 59.3041%;` image` 21.8168%;` user` 3.3457%;` reasoning` 2.2995% |
|
| 132 |
+
| 3 | 374 | ` is` | 97.9204% | ` is` 97.9204%;` should` 0.9600% |
|
| 133 |
+
| 4 | 425 | ` B` | 51.6459% | ` B` 51.6459%;` A` 31.3248%;` (` 16.7670% |
|
| 134 |
+
| 5 | 198 | `\n` | 94.5593% | `\n` 94.5593%;`<|im_end|>` 2.5199% |
|
| 135 |
+
| 6 | 151645 | `<|im_end|>` | 92.7612% | `<|im_end|>` 92.7612%;`<|endoftext|>` 5.2332% |
|
| 136 |
+
|
| 137 |
+
这里没有 `<think>`、`<answer>`、`<|anchor_start|>`、SAM、DINO、depth、PiDiNet 或 SigLIP token。由于采集使用 `skip_special_tokens=False`,这不是“special token 被解码器隐藏”的结果,而是模型根本没有发射这些 token。
|
| 138 |
+
|
| 139 |
+
## 训练目标与当前推理的差异
|
| 140 |
+
|
| 141 |
+
训练数据构造代码期望类似:
|
| 142 |
+
|
| 143 |
+
```text
|
| 144 |
+
<think>
|
| 145 |
+
<|anchor_start|><|depth_pad|>...<|anchor_end|>
|
| 146 |
+
Using the 3D geometry above, ...
|
| 147 |
+
<|anchor_start|><|sam_pad|>...<|anchor_end|>
|
| 148 |
+
...
|
| 149 |
+
</think>
|
| 150 |
+
<answer>最终回答</answer>
|
| 151 |
+
```
|
| 152 |
+
|
| 153 |
+
其中 token 数设计为 SAM=8、DINO=4、VGGT/depth=4、PiDiNet=4、SigLIP=4。但本次真实推理轨迹没有触发该输出结构。这一观察修正了此前“CoVT token 已生成、只是被 `skip_special_tokens=True` 隐藏”的推断。
|
| 154 |
+
|
| 155 |
+
目前能支持的结论是:模型在 CV-Bench 上有较高的选择题准确率,但**尚不能从当前生成行为证明它在推理时显式执行并输出了训练模板定义的视觉 CoT**。若汇报重点是可解释轨迹,下一步应单独修复/验证 CoVT 格式遵循,再重新评测答案准确率与轨迹完整率。
|
| 156 |
+
|
| 157 |
+
## 原始轨迹与复现入口
|
| 158 |
+
|
| 159 |
+
- [当前 eval 与原题提示两种轨迹(JSON)](../../outputs/inference_traces/cvbench/checkpoint-3000/cases.json)
|
| 160 |
+
- [显式 CoVT 格式提示轨迹(JSON)](../../outputs/inference_traces/cvbench/checkpoint-3000/covt_cases.json)
|
| 161 |
+
- [轨迹采集脚本](../../scripts/trace_cvbench_cases.py)
|
| 162 |
+
- [checkpoint-3000 的 500 条最终评测结果](../../outputs/evals/cvbench/stage2_covt_sam_vggt_covt4_v2-checkpoint-3000/results.jsonl)
|
reports/cvbench_2k_3k_8k/03_methodology_and_validation.md
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 评测方法与可信度说明
|
| 2 |
+
|
| 3 |
+
## Technical Summary
|
| 4 |
+
|
| 5 |
+
checkpoint-2000、checkpoint-3000 和 checkpoint-8000 均使用同一 merge 实现、同一
|
| 6 |
+
CV-Bench-500 数据、同一 8 卡推理配置与同一 exact-match 评分器。三个结果都通过了
|
| 7 |
+
checkpoint sidecar 检查、merged tensor 检查、逐样本覆盖检查和独立指标复算,可以在
|
| 8 |
+
“固定 500 条子集”的范围内进行公平横向比较。
|
| 9 |
+
|
| 10 |
+
## 模型合并
|
| 11 |
+
|
| 12 |
+
三个 checkpoint 均合并为 bf16 safetensors,保存在:
|
| 13 |
+
|
| 14 |
+
```text
|
| 15 |
+
models/ckpts/stage2_covt_sam_vggt_covt4_v2/checkpoint-2000-merged/
|
| 16 |
+
models/ckpts/stage2_covt_sam_vggt_covt4_v2/checkpoint-3000-merged/
|
| 17 |
+
models/ckpts/stage2_covt_sam_vggt_covt4_v2/checkpoint-8000-merged/
|
| 18 |
+
```
|
| 19 |
+
|
| 20 |
+
每个模型约 8.4 GB,验证内容包括:
|
| 21 |
+
|
| 22 |
+
- 767 个 dense tensor 均存在且 finite;
|
| 23 |
+
- 54 个视觉 expert tensor 与源 checkpoint 精确一致;
|
| 24 |
+
- 词表 embedding rows 为 151936;
|
| 25 |
+
- VGGT 几何契约为 4 latent tokens → `[1374, 2048]`;
|
| 26 |
+
- LoRA 探针严格符合 `base + (B @ A) × (alpha / rank)`;
|
| 27 |
+
- merged 文件中不再残留 LoRA tensor;
|
| 28 |
+
- 模型、配置、处理器和 merge metadata 均有 SHA256 校验。
|
| 29 |
+
|
| 30 |
+
模型 SHA256:
|
| 31 |
+
|
| 32 |
+
| Checkpoint | model.safetensors SHA256 |
|
| 33 |
+
|---|---|
|
| 34 |
+
| 2k | `c0a006c4994a2b92436f5770fdb50bfa198bb417c17896fdf1beb862cd8a76af` |
|
| 35 |
+
| 3k | `1edbce69803abaa7438bb53085b2b985370ecf1cd8ea0216dc2410279a03cca2` |
|
| 36 |
+
| 8k | `56cb46a74549fa33b0c479eccd31ce5cbcde826cf0dde3a00b4462d18d64f282` |
|
| 37 |
+
|
| 38 |
+
## 验证集
|
| 39 |
+
|
| 40 |
+
数据来源为 `nyu-visionx/CV-Bench`,固定 commit:
|
| 41 |
+
|
| 42 |
+
```text
|
| 43 |
+
bc284db50d036958861cb60cdd7b77612052ce0d
|
| 44 |
+
```
|
| 45 |
+
|
| 46 |
+
抽样 seed 为 42,按 task 比例分层、无放回抽样,并保证图片字节唯一。
|
| 47 |
+
|
| 48 |
+
| 分组 | 样本数 |
|
| 49 |
+
|---|---:|
|
| 50 |
+
| 2D / Count | 137 |
|
| 51 |
+
| 2D / Relation | 113 |
|
| 52 |
+
| 3D / Depth | 125 |
|
| 53 |
+
| 3D / Distance | 125 |
|
| 54 |
+
| 总计 | 500 |
|
| 55 |
+
|
| 56 |
+
选择指纹:
|
| 57 |
+
|
| 58 |
+
```text
|
| 59 |
+
da5ca19b4a65b4df7f45bea069db43c76e48d9a33adc5a224d1abc64dfce1b92
|
| 60 |
+
```
|
| 61 |
+
|
| 62 |
+
质量检查确认:500 个 sample ID 唯一、500 份图片字节唯一、所有图片可解码且尺寸与
|
| 63 |
+
manifest 一致、所有答案均落在对应 choices 范围内。
|
| 64 |
+
|
| 65 |
+
## 推理与评分配置
|
| 66 |
+
|
| 67 |
+
| 项目 | 配置 |
|
| 68 |
+
|---|---|
|
| 69 |
+
| GPU | 8×NVIDIA H200 |
|
| 70 |
+
| 精度 | bfloat16 |
|
| 71 |
+
| Attention | FlashAttention 2 |
|
| 72 |
+
| 解码 | greedy,`do_sample=False` |
|
| 73 |
+
| 最大生成长度 | 64 tokens |
|
| 74 |
+
| 数据分片 | 8 rank,按 `records[rank::world_size]` |
|
| 75 |
+
| 评分 | 选择题字母 deterministic exact match |
|
| 76 |
+
| LLM judge | 不使用 |
|
| 77 |
+
| SwanLab project | `unified-model` |
|
| 78 |
+
|
| 79 |
+
每个 rank 将结果持续写入独立 JSONL shard;rank 0 汇总 500 条结果并写出
|
| 80 |
+
`results.jsonl`、`metrics.json` 和 SwanLab run。该设计保证即使中断,也能检查已完成的样本。
|
| 81 |
+
|
| 82 |
+
## 指标复核
|
| 83 |
+
|
| 84 |
+
独立验证脚本不信任汇总指标,而是从 manifest 和 500 条结果重新计算:
|
| 85 |
+
|
| 86 |
+
- sample ID 一一覆盖;
|
| 87 |
+
- expected 与源 answer 一致;
|
| 88 |
+
- predicted 位于合法 choices;
|
| 89 |
+
- correct 等于 `predicted == expected`;
|
| 90 |
+
- 8 个 rank shard 的并集等于最终结果;
|
| 91 |
+
- 总体、2D、3D、各 task 和宏平均均按原始分子/分母复算;
|
| 92 |
+
- SwanLab run ID 存在且上传无错误。
|
| 93 |
+
|
| 94 |
+
三个 checkpoint 的复核状态均为 `ready_to_share`,解析率均为 100%,推理错误均为 0。
|
| 95 |
+
|
| 96 |
+
## 复现命令
|
| 97 |
+
|
| 98 |
+
合并指定 checkpoint:
|
| 99 |
+
|
| 100 |
+
```bash
|
| 101 |
+
MODEL_PATH="$PWD/outputs/stage2_covt_sam_vggt_covt4_v2/checkpoint-3000" \
|
| 102 |
+
SAVE_MODEL_PATH="$PWD/models/ckpts/stage2_covt_sam_vggt_covt4_v2/checkpoint-3000-merged" \
|
| 103 |
+
DTYPE=bfloat16 DEVICE_MAP=cpu \
|
| 104 |
+
bash code/umm/stage2_covt/run_merge.sh
|
| 105 |
+
```
|
| 106 |
+
|
| 107 |
+
8 卡评测:
|
| 108 |
+
|
| 109 |
+
```bash
|
| 110 |
+
CHECKPOINT_STEP=3000 MASTER_PORT=29630 bash scripts/eval_cvbench_8gpu.sh
|
| 111 |
+
```
|
| 112 |
+
|
| 113 |
+
独立复算:
|
| 114 |
+
|
| 115 |
+
```bash
|
| 116 |
+
.env/unvideo/bin/python scripts/validate_cvbench_results.py \
|
| 117 |
+
--dataset-dir data/cvbench_500 \
|
| 118 |
+
--eval-dir outputs/evals/cvbench/stage2_covt_sam_vggt_covt4_v2-checkpoint-3000
|
| 119 |
+
```
|
| 120 |
+
|
| 121 |
+
跨 checkpoint 比较:
|
| 122 |
+
|
| 123 |
+
```bash
|
| 124 |
+
.env/unvideo/bin/python scripts/compare_cvbench_results.py \
|
| 125 |
+
--eval-root outputs/evals/cvbench \
|
| 126 |
+
--steps 2000 3000 8000 \
|
| 127 |
+
--output outputs/evals/cvbench/checkpoint-comparison-2000-3000-8000.json
|
| 128 |
+
```
|
| 129 |
+
|
| 130 |
+
## 限制
|
| 131 |
+
|
| 132 |
+
- 这是固定 CV-Bench-500 子集,不代表完整 benchmark 的最终排名。
|
| 133 |
+
- 样本量不足以证明 0.2–1.6 个百分点的 checkpoint 差异具有统计显著性。
|
| 134 |
+
- 选择题 exact match 只衡量选项正确性,不衡量回答解释质量。
|
| 135 |
+
- 常规评测结果使用 `skip_special_tokens=True`,只保存用户可见 continuation。为验证是否确有
|
| 136 |
+
special token 被隐藏,另行使用 `skip_special_tokens=False` 和 `output_scores=True` 采集了
|
| 137 |
+
checkpoint-3000 的逐 token 轨迹;结果显示模型没有发射 `<think>` 或 CoVT anchor token。
|
| 138 |
+
- 轨迹采集覆盖代表性 case,不等同于对全部 500 条样本的 CoVT 格式遵循率审计。
|
| 139 |
+
|
| 140 |
+
## 审计入口
|
| 141 |
+
|
| 142 |
+
- [部署说明](../../DEPLOYMENT_LOCAL.md)
|
| 143 |
+
- [2k merge metadata](../../models/ckpts/stage2_covt_sam_vggt_covt4_v2/checkpoint-2000-merged/MERGE_METADATA.json)
|
| 144 |
+
- [3k merge metadata](../../models/ckpts/stage2_covt_sam_vggt_covt4_v2/checkpoint-3000-merged/MERGE_METADATA.json)
|
| 145 |
+
- [8k merge metadata](../../models/ckpts/stage2_covt_sam_vggt_covt4_v2/checkpoint-8000-merged/MERGE_METADATA.json)
|
| 146 |
+
- [评测入口脚本](../../scripts/eval_cvbench_8gpu.sh)
|
| 147 |
+
- [结果验证脚本](../../scripts/validate_cvbench_results.py)
|
| 148 |
+
- [跨 checkpoint 比较脚本](../../scripts/compare_cvbench_results.py)
|
| 149 |
+
- [逐 token 轨迹采集脚本](../../scripts/trace_cvbench_cases.py)
|
| 150 |
+
- [代表性样本轨迹](../../outputs/inference_traces/cvbench/checkpoint-3000/cases.json)
|
| 151 |
+
- [显式 CoVT 提示轨迹](../../outputs/inference_traces/cvbench/checkpoint-3000/covt_cases.json)
|
reports/cvbench_2k_3k_8k/04_presentation_talking_points.md
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# CV-Bench 实验口头汇报提纲
|
| 2 |
+
|
| 3 |
+
## 一分钟版本
|
| 4 |
+
|
| 5 |
+
我们对 Stage-2 CoVT 的 2k、3k 和 8k 三个 checkpoint 做了统一的 CV-Bench
|
| 6 |
+
评测。为了控制成本,使用固定的 500 条验证集,其中 2D 和 3D 各 250 条,三个模型
|
| 7 |
+
使用完全相同的 8 卡 greedy 推理和选择题 exact-match 评分。
|
| 8 |
+
|
| 9 |
+
结果上,3k 最好,总准确率 84.8%;2k 为 84.6%,两者基本持平;8k 降到
|
| 10 |
+
83.2%。8k 的下降主要发生在 2D 空间关系和 3D 深度判断,而 Count 和 Distance
|
| 11 |
+
反而略有提升。这说明训练继续进行时,不同视觉能力之间可能存在权衡,验证性能并不是
|
| 12 |
+
随 step 单调上升。
|
| 13 |
+
|
| 14 |
+
目前建议将 3k 作为优先候选,同时扩大验证规模,并重点追踪 Relation 和 Depth,避免
|
| 15 |
+
只按照训练步数选择最终模型。
|
| 16 |
+
|
| 17 |
+
## 三分钟版本
|
| 18 |
+
|
| 19 |
+
### 1. 实验目的
|
| 20 |
+
|
| 21 |
+
这次实验主要回答两个问题:第一,Stage-2 模型在 CV-Bench 的 2D 和 3D 任务上达到
|
| 22 |
+
什么水平;第二,随着训练从 2k 进行到 3k 和 8k,能力是否持续提升。
|
| 23 |
+
|
| 24 |
+
### 2. 评测设计
|
| 25 |
+
|
| 26 |
+
我们从 CV-Bench 固定抽取了 500 条数据,2D 和 3D 各 250 条。2D 包括 Count 和
|
| 27 |
+
Relation,3D 包括 Depth 和 Distance。三个 checkpoint 使用完全相同的数据、提示、
|
| 28 |
+
处理器和生成参数,答案直接匹配选项字母,不使用 LLM judge,因此横向对比口径一致。
|
| 29 |
+
|
| 30 |
+
### 3. 主要结果
|
| 31 |
+
|
| 32 |
+
2k 总准确率是 84.6%,3k 是 84.8%,8k 是 83.2%。当前最高点是 3k,但它只比
|
| 33 |
+
2k 多答对 1 条,所以两者可以认为非常接近。8k 相比 3k 少答对 8 条,下降 1.6 个
|
| 34 |
+
百分点。
|
| 35 |
+
|
| 36 |
+
分任务看,3k 的 3D Depth 达到 95.2%,是三个 checkpoint 中最高的。8k 的 Count
|
| 37 |
+
和 Distance 有小幅提升,但 Relation 从 92.0% 降到 84.1%,Depth 从 95.2% 降到
|
| 38 |
+
91.2%,最终拉低了整体结果。
|
| 39 |
+
|
| 40 |
+
### 4. 如何理解
|
| 41 |
+
|
| 42 |
+
这个结果说明更长训练并不一定带来所有能力的同步提升。8k 的变化更像能力结构重新分配,
|
| 43 |
+
而不是简单的整体变差。另一方面,固定验证集只有 500 条,paired 检验没有达到显著性,
|
| 44 |
+
所以当前结论应表述为“3k 在该固定子集上最好”,不能直接外推到完整 CV-Bench。
|
| 45 |
+
|
| 46 |
+
### 5. 建议
|
| 47 |
+
|
| 48 |
+
短期将 3k 作为候选模型;训练侧继续监控 Relation 和 Depth;最终定版前扩大验证集,
|
| 49 |
+
并保留多 checkpoint 比较与 early stopping,而不是默认选择最后一个 checkpoint。
|
| 50 |
+
|
| 51 |
+
## 常见问题与建议回答
|
| 52 |
+
|
| 53 |
+
### 为什么不用完整 CV-Bench?
|
| 54 |
+
|
| 55 |
+
完整 benchmark 成本较高,本轮目标是快速、稳定地比较 checkpoint,因此采用固定的
|
| 56 |
+
500 条分层子集。所有模型使用同一批样本,适合做相对比较,但最终对外报告仍应补充更大规模验证。
|
| 57 |
+
|
| 58 |
+
### 为什么 8k 反而更差?
|
| 59 |
+
|
| 60 |
+
8k 不是所有任务都差。Count 和 Distance 有提升,但 Relation 和 Depth 的下降更大,
|
| 61 |
+
说明不同视觉能力可能在后续训练阶段发生权衡。需要结合课程阶段、数据配比和中间 checkpoint
|
| 62 |
+
进一步定位,而不能仅凭本次结果断定过拟合原因。
|
| 63 |
+
|
| 64 |
+
### 3k 是否显著优于 2k?
|
| 65 |
+
|
| 66 |
+
不是。3k 只多答对 1 条,paired p-value 为 1.0。当前可以把 3k 作为数值最优候选,
|
| 67 |
+
但不能声称它在统计意义上优于 2k。
|
| 68 |
+
|
| 69 |
+
### 模型实际输出什么?
|
| 70 |
+
|
| 71 |
+
绝大多数样本输出 `(选项字母) 选项内容`,例如 `(B) printer`。训练目标中的
|
| 72 |
+
`<think>` 和视觉 anchor token 并非只是被当前解码隐藏:我们对 3k 代表样本做了
|
| 73 |
+
`skip_special_tokens=False` 的逐 token 审计,模型实际没有发射它们。即使显式要求 CoVT
|
| 74 |
+
格式,模型也直接输出 `The answer is ...`。因此当前可汇报的是答案 token 的自回归轨迹,
|
| 75 |
+
不能声称已经观测到显式视觉 CoT;三个 checkpoint 的选项解析率仍均为 100%。
|
| 76 |
+
|
| 77 |
+
### 评测是否使用 LLM judge?
|
| 78 |
+
|
| 79 |
+
没有。CV-Bench 全部是选择题,评测器直接提取选项字母并与标签比较,结果确定、可复现。
|
reports/cvbench_2k_3k_8k/05_base_baseline_comparison.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# CV-Bench 原始 Base 与 Stage-1 Alignment 基线
|
| 2 |
+
|
| 3 |
+
## 结论
|
| 4 |
+
|
| 5 |
+
在固定 CV-Bench-500 上,`Qwen3-VL-4B-Instruct + Stage-1 alignment
|
| 6 |
+
checkpoint-32000` 得到 **69.00%(345/500)**,原始
|
| 7 |
+
`Qwen3-VL-4B-Instruct` 得到 **68.80%(344/500)**。对齐版仅高 0.20 个
|
| 8 |
+
百分点;两次推理有 499/500 条生成序列完全一致,因此 Stage-1 alignment 对本次
|
| 9 |
+
图像理解选择题的影响可以视为极小。
|
| 10 |
+
|
| 11 |
+
## 严格对照结果
|
| 12 |
+
|
| 13 |
+
| 模型 | 正确数 | 总准确率 | 2D | 3D | 解析率 | 推理错误 |
|
| 14 |
+
|---|---:|---:|---:|---:|---:|---:|
|
| 15 |
+
| 原始 Qwen3-VL-4B-Instruct | 344/500 | 68.80% | 80.40% | 57.20% | 88.40% | 0 |
|
| 16 |
+
| Qwen3-VL-4B-Instruct + Stage-1 alignment-32000 | 345/500 | 69.00% | 80.40% | 57.60% | 88.60% | 0 |
|
| 17 |
+
|
| 18 |
+
| 模型 | 2D Count | 2D Relation | 3D Depth | 3D Distance |
|
| 19 |
+
|---|---:|---:|---:|---:|
|
| 20 |
+
| 原始 Qwen | 70.80% | 92.04% | 78.40% | 36.00% |
|
| 21 |
+
| Stage-1 alignment | 70.80% | 92.04% | 78.40% | 36.80% |
|
| 22 |
+
|
| 23 |
+
两者的 2D Count、2D Relation 和 3D Depth 完全相同。唯一的分数差异来自
|
| 24 |
+
3D Distance 的 1 条样本。
|
| 25 |
+
|
| 26 |
+
## 唯一发生变化的样本
|
| 27 |
+
|
| 28 |
+
`3D-176` 的标准答案为 A:
|
| 29 |
+
|
| 30 |
+
- Stage-1 alignment 输出完成了 `<answer>(A)</answer>`,计为正确;
|
| 31 |
+
- 原始 Qwen 的回答在解释过程中触及 64-token 上限,尚未输出选项,因此 matcher
|
| 32 |
+
无法解析并计为错误。
|
| 33 |
+
|
| 34 |
+
这说明 +0.20 pp 更接近扩展词表/lm-head 后造成的生成长度与格式边界变化,不能据此
|
| 35 |
+
声称 Stage-1 alignment 显著提升了 CV-Bench 视觉理解能力。
|
| 36 |
+
|
| 37 |
+
## 与 Stage-2 checkpoint 的位置关系
|
| 38 |
+
|
| 39 |
+
| 模型 | 总准确率 | 相对 Stage-1 alignment |
|
| 40 |
+
|---|---:|---:|
|
| 41 |
+
| 原始 Qwen | 68.80% | -0.20 pp |
|
| 42 |
+
| Stage-1 alignment-32000 | 69.00% | 基线 |
|
| 43 |
+
| Stage-2 checkpoint-2000 | 84.60% | +15.60 pp |
|
| 44 |
+
| Stage-2 checkpoint-3000 | **84.80%** | **+15.80 pp** |
|
| 45 |
+
| Stage-2 checkpoint-8000 | 83.20% | +14.20 pp |
|
| 46 |
+
|
| 47 |
+
Stage-2 的主要增益来自 3D:checkpoint-3000 的 3D 准确率为 89.60%,相比
|
| 48 |
+
Stage-1 alignment 的 57.60% 高 32.00 pp;2D 则为 80.00% vs 80.40%,基本持平。
|
| 49 |
+
|
| 50 |
+
## 复现实验口径
|
| 51 |
+
|
| 52 |
+
- 数据:固定 CV-Bench-500,2D/3D 各 250 条;选择指纹
|
| 53 |
+
`da5ca19b4a65b4df7f45bea069db43c76e48d9a33adc5a224d1abc64dfce1b92`。
|
| 54 |
+
- 推理:8×H200 共享运行,bf16、FlashAttention 2、greedy decoding、最多 64
|
| 55 |
+
个新 token。
|
| 56 |
+
- 评分:选择题字母 deterministic exact match,不使用 LLM judge。
|
| 57 |
+
- Stage-1 对齐版:词表从 151669 扩至 151927,恢复 checkpoint 中全部 258 个
|
| 58 |
+
input-embedding 与 lm-head 行。图像生成 down-projector 未实例化,因为
|
| 59 |
+
CV-Bench 不调用图像生成分支。
|
| 60 |
+
- 原始 base:不扩词表,不加载 Stage-1 checkpoint。
|
| 61 |
+
- 两个结果均通过 500 个 sample ID、500 份唯一图片、8 个 rank shard、答案标签、
|
| 62 |
+
correct 标志和汇总指标的独立复算,状态均为 `ready_to_share`。
|
| 63 |
+
|
| 64 |
+
## 结果入口
|
| 65 |
+
|
| 66 |
+
- [基线对比 JSON](../../outputs/evals/cvbench/base-comparison-stage1-aligned-vs-raw.json)
|
| 67 |
+
- [Stage-1 alignment 指标](../../outputs/evals/cvbench/stage1-base-qwen3vl4b/metrics.json)
|
| 68 |
+
- [Stage-1 alignment 审计报告](../../outputs/evals/cvbench/stage1-base-qwen3vl4b/validation_report.json)
|
| 69 |
+
- [原始 Qwen 指标](../../outputs/evals/cvbench/qwen3vl4b-instruct-raw/metrics.json)
|
| 70 |
+
- [原始 Qwen 审计报告](../../outputs/evals/cvbench/qwen3vl4b-instruct-raw/validation_report.json)
|
| 71 |
+
- SwanLab:[Stage-1 alignment](https://swanlab.cn/@Oranger/unified-model/runs/mwbu5w3h) · [原始 Qwen](https://swanlab.cn/@Oranger/unified-model/runs/7sicgze8)
|
reports/cvbench_2k_3k_8k/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# CV-Bench 2k/3k/8k 汇报材料
|
| 2 |
+
|
| 3 |
+
本目录整理了 Stage-2 CoVT checkpoint-2000、checkpoint-3000 和
|
| 4 |
+
checkpoint-8000 在固定 CV-Bench-500 子集上的实验结果,生成日期为 2026-08-09。
|
| 5 |
+
|
| 6 |
+
## 文档目录
|
| 7 |
+
|
| 8 |
+
1. [实验结果汇报](01_experiment_summary.md):适合作为正式汇报正文,包含总体结论、分任务结果、趋势解释和限制。
|
| 9 |
+
2. [可观测推理轨迹与真实案例](02_text_output_cases.md):展示 checkpoint-3000 的逐 token 生成概率,并审计 CoVT trace 是否实际出现。
|
| 10 |
+
3. [评测方法与可信度说明](03_methodology_and_validation.md):记录 merge、数据、推理配置、验证项和复现命令。
|
| 11 |
+
4. [口头汇报提纲](04_presentation_talking_points.md):提供一分钟版、三分钟版和建议回答。
|
| 12 |
+
5. [原始 Base 与 Stage-1 Alignment 基线](05_base_baseline_comparison.md):给出两个训练前基线的严格对照、唯一差异样本及其与 Stage-2 checkpoint 的增益关系。
|
| 13 |
+
|
| 14 |
+
## 一句话结论
|
| 15 |
+
|
| 16 |
+
在同一个固定 CV-Bench-500 子集上,checkpoint-3000 取得当前最高总体准确率
|
| 17 |
+
84.80%(424/500);checkpoint-8000 降至 83.20%(416/500),主要下降发生在
|
| 18 |
+
2D Relation 和 3D Depth,但受 500 条样本规模限制,checkpoint 间差异尚不显著。
|
| 19 |
+
|
| 20 |
+
## 权威结果文件
|
| 21 |
+
|
| 22 |
+
- [三 checkpoint 对比 JSON](../../outputs/evals/cvbench/checkpoint-comparison-2000-3000-8000.json)
|
| 23 |
+
- [checkpoint-2000 指标](../../outputs/evals/cvbench/stage2_covt_sam_vggt_covt4_v2-checkpoint-2000/metrics.json)
|
| 24 |
+
- [checkpoint-3000 指标](../../outputs/evals/cvbench/stage2_covt_sam_vggt_covt4_v2-checkpoint-3000/metrics.json)
|
| 25 |
+
- [checkpoint-8000 指标](../../outputs/evals/cvbench/stage2_covt_sam_vggt_covt4_v2-checkpoint-8000/metrics.json)
|
| 26 |
+
- [checkpoint-3000 推理轨迹](../../outputs/inference_traces/cvbench/checkpoint-3000/cases.json)
|
| 27 |
+
- [checkpoint-3000 CoVT 格式轨迹](../../outputs/inference_traces/cvbench/checkpoint-3000/covt_cases.json)
|
| 28 |
+
- [Base 基线对比 JSON](../../outputs/evals/cvbench/base-comparison-stage1-aligned-vs-raw.json)
|
reports/cvbench_2k_3k_8k/SHA256SUMS
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
8390855e1e9ed232c5411e366b5f824984e3065ec36145783a4b3bfa82dbfee0 README.md
|
| 2 |
+
f9712f4adccfab30ad0b3c1f841b4b4614e138bf93af586a8d8bfd67bf724f5d 01_experiment_summary.md
|
| 3 |
+
36beb0f71ad4868151a944d61891ef4aca27fcdbc048c0409606c57339060553 02_text_output_cases.md
|
| 4 |
+
4a318aca15bc7835e3a104d4d84c9bfb0d370ce3030e5b48297a2140192b2dfa 03_methodology_and_validation.md
|
| 5 |
+
34fa57ac5c436611bd91437243c34047c37b9d80479506b4c1d574d516c9d6f8 04_presentation_talking_points.md
|
| 6 |
+
00ee1e0a3c6b2071fbfe77eef50aa67938abc3e8e1751f47be7190fa4ba683b7 05_base_baseline_comparison.md
|
reports/evaluations/checkpoint-7000/REPORT.md
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# checkpoint-7000 三项视觉 Benchmark 评测报告
|
| 2 |
+
|
| 3 |
+
生成日期:2026-08-10(UTC)
|
| 4 |
+
|
| 5 |
+
## 模型与评测设置
|
| 6 |
+
|
| 7 |
+
- 源 checkpoint:`models/ckpts/stage2_covt_from3k_bcd_2k/checkpoint-7000`
|
| 8 |
+
- merged 模型:`models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged`
|
| 9 |
+
- merge 校验:767 个 dense tensors、54 个 expert tensors 精确通过;LoRA float32 delta 到 bfloat16 探针精确通过;全部 tensors 为有限值。
|
| 10 |
+
- 硬件:8 × NVIDIA H200;每个 benchmark 使用 8 个 distributed ranks。
|
| 11 |
+
- 推理:bfloat16、FlashAttention-2、greedy decoding、`max_new_tokens=256`。
|
| 12 |
+
- 输出:完整保留 `raw_response`、CoVT anchor、token IDs、预测选项和逐条错误。
|
| 13 |
+
- 评分:确定性选项字母 exact match;不使用 LLM judge。
|
| 14 |
+
- 完整性:共 4,730 条,0 inference error,100% option parse rate,0 条命中 256-token 截断上限。
|
| 15 |
+
|
| 16 |
+
## 主结果
|
| 17 |
+
|
| 18 |
+
| Benchmark | Split / 样本数 | 主结果 | 补充口径 |
|
| 19 |
+
|---|---:|---:|---:|
|
| 20 |
+
| CV-Bench | full test / 2,638 | **83.9596% 官方分数** | 83.7377% micro accuracy |
|
| 21 |
+
| BLINK | full val / 1,901 | **58.2787% 14-task macro** | 58.0747% micro accuracy |
|
| 22 |
+
| VStar | full test / 191 | **53.4031% micro accuracy** | 54.6110% 2-category macro |
|
| 23 |
+
|
| 24 |
+
BLINK 的公开 test 共 1,907 条,但答案字段为 `hidden`,无法在本地得到真实准确率。因此本报告使用官方完整、有标签的 val 1,901 条;没有抽样。
|
| 25 |
+
|
| 26 |
+
## CV-Bench
|
| 27 |
+
|
| 28 |
+
官方公式:`((ADE20K accuracy + COCO accuracy) / 2 + Omni3D accuracy) / 2`。
|
| 29 |
+
|
| 30 |
+
| 分项 | Correct / Samples | Accuracy |
|
| 31 |
+
|---|---:|---:|
|
| 32 |
+
| ADE20K | 443 / 633 | 69.9842% |
|
| 33 |
+
| COCO | 671 / 805 | 83.3540% |
|
| 34 |
+
| Official 2D(ADE/COCO macro) | — | 76.6691% |
|
| 35 |
+
| Omni3D / Official 3D | 1,095 / 1,200 | 91.2500% |
|
| 36 |
+
| **Official CV-Bench** | — | **83.9596%** |
|
| 37 |
+
| All-sample micro | 2,209 / 2,638 | 83.7377% |
|
| 38 |
+
|
| 39 |
+
按任务:
|
| 40 |
+
|
| 41 |
+
| Task | Correct / Samples | Accuracy |
|
| 42 |
+
|---|---:|---:|
|
| 43 |
+
| Count | 532 / 788 | 67.5127% |
|
| 44 |
+
| Relation | 582 / 650 | 89.5385% |
|
| 45 |
+
| Depth | 569 / 600 | 94.8333% |
|
| 46 |
+
| Distance | 526 / 600 | 87.6667% |
|
| 47 |
+
|
| 48 |
+
## BLINK
|
| 49 |
+
|
| 50 |
+
| Task | Correct / Samples | Accuracy |
|
| 51 |
+
|---|---:|---:|
|
| 52 |
+
| Art Style | 88 / 117 | 75.2137% |
|
| 53 |
+
| Counting | 80 / 120 | 66.6667% |
|
| 54 |
+
| Forensic Detection | 64 / 132 | 48.4848% |
|
| 55 |
+
| Functional Correspondence | 32 / 130 | 24.6154% |
|
| 56 |
+
| IQ Test | 43 / 150 | 28.6667% |
|
| 57 |
+
| Jigsaw | 119 / 150 | 79.3333% |
|
| 58 |
+
| Multi-view Reasoning | 50 / 133 | 37.5940% |
|
| 59 |
+
| Object Localization | 74 / 122 | 60.6557% |
|
| 60 |
+
| Relative Depth | 104 / 124 | 83.8710% |
|
| 61 |
+
| Relative Reflectance | 61 / 134 | 45.5224% |
|
| 62 |
+
| Semantic Correspondence | 45 / 139 | 32.3741% |
|
| 63 |
+
| Spatial Relation | 125 / 143 | 87.4126% |
|
| 64 |
+
| Visual Correspondence | 105 / 172 | 61.0465% |
|
| 65 |
+
| Visual Similarity | 114 / 135 | 84.4444% |
|
| 66 |
+
| **14-task macro** | — | **58.2787%** |
|
| 67 |
+
| **All-sample micro** | **1,104 / 1,901** | **58.0747%** |
|
| 68 |
+
|
| 69 |
+
## VStar
|
| 70 |
+
|
| 71 |
+
| Category | Correct / Samples | Accuracy |
|
| 72 |
+
|---|---:|---:|
|
| 73 |
+
| direct_attributes | 56 / 115 | 48.6957% |
|
| 74 |
+
| relative_position | 46 / 76 | 60.5263% |
|
| 75 |
+
| **2-category macro** | — | **54.6110%** |
|
| 76 |
+
| **All-sample micro** | **102 / 191** | **53.4031%** |
|
| 77 |
+
|
| 78 |
+
## CoVT 输出与质量检查
|
| 79 |
+
|
| 80 |
+
| Benchmark | Parse rate | Error | `<think>` 闭合率 | `<answer>` 闭合率 | 任意 CoVT anchor | Token 范围 / 命中上限 |
|
| 81 |
+
|---|---:|---:|---:|---:|---:|---:|
|
| 82 |
+
| CV-Bench | 100% | 0 | 99.9621% | 99.9242% | 100% | 88–94 / 0 |
|
| 83 |
+
| BLINK | 100% | 0 | 100% | 100% | 100% | 88–93 / 0 |
|
| 84 |
+
| VStar | 100% | 0 | 100% | 100% | 100% | 88–91 / 0 |
|
| 85 |
+
|
| 86 |
+
典型完整输出结构为:`<think>` + depth/SAM/DINO/PiDiNet/SigLIP anchors + `</think>` + `<answer>(X)</answer>`。CV-Bench 中极少数输出缺少一个闭合标签,但 2,638 条答案均可由确定性选项匹配解析,且无样本因长度上限截断。
|
| 87 |
+
|
| 88 |
+
## 数据版本
|
| 89 |
+
|
| 90 |
+
| Dataset | Revision |
|
| 91 |
+
|---|---|
|
| 92 |
+
| `nyu-visionx/CV-Bench` | `bc284db50d036958861cb60cdd7b77612052ce0d` |
|
| 93 |
+
| `BLINK-Benchmark/BLINK` | `a3666eb249237ba3d5eca8db21176cc47967e040` |
|
| 94 |
+
| `craigwu/vstar_bench` | `d9ae62c903da0c98336e85c5ee89cd863b04b4da` |
|
| 95 |
+
|
| 96 |
+
所有下载均在显式清空 `http_proxy`、`https_proxy`、`all_proxy` 及其大写变量后直连完成。
|
| 97 |
+
|
| 98 |
+
## SwanLab
|
| 99 |
+
|
| 100 |
+
- CV-Bench:<https://swanlab.cn/@Oranger/unified-model/runs/t5gafmyt>
|
| 101 |
+
- BLINK:<https://swanlab.cn/@Oranger/unified-model/runs/fbdon9l7>
|
| 102 |
+
- VStar:<https://swanlab.cn/@Oranger/unified-model/runs/0abcgyj9>
|
| 103 |
+
|
| 104 |
+
## 本地产物
|
| 105 |
+
|
| 106 |
+
- `audit_summary.json`:三项独立重算审计总表。
|
| 107 |
+
- `cvbench_full_test/{metrics.json,results.jsonl,audit.json}`。
|
| 108 |
+
- `blink_full_val/{metrics.json,results.jsonl,audit.json}`。
|
| 109 |
+
- `vstar_full_test/{metrics.json,results.jsonl,audit.json}`。
|
| 110 |
+
- 日志:`logs/H3_merge_checkpoint-7000.log`、`logs/H3_ckpt7000_three_benchmarks.log`、`logs/H3_ckpt7000_vstar.log`、`logs/H3_ckpt7000_multibench_audit.log`。
|
reports/evaluations/checkpoint-7000/audit_summary.json
ADDED
|
@@ -0,0 +1,302 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"blink": {
|
| 3 |
+
"accuracy": 0.5807469752761705,
|
| 4 |
+
"benchmark": "blink",
|
| 5 |
+
"checks": {
|
| 6 |
+
"all_inference_errors_zero": true,
|
| 7 |
+
"correct_flags_recomputed": true,
|
| 8 |
+
"expected_answers_exact": true,
|
| 9 |
+
"manifest_result_ids_exact": true,
|
| 10 |
+
"no_generation_hit_cap": true,
|
| 11 |
+
"published_core_metrics_recomputed": true
|
| 12 |
+
},
|
| 13 |
+
"config_scores": {
|
| 14 |
+
"Art_Style": {
|
| 15 |
+
"accuracy": 0.7521367521367521,
|
| 16 |
+
"correct": 88,
|
| 17 |
+
"samples": 117
|
| 18 |
+
},
|
| 19 |
+
"Counting": {
|
| 20 |
+
"accuracy": 0.6666666666666666,
|
| 21 |
+
"correct": 80,
|
| 22 |
+
"samples": 120
|
| 23 |
+
},
|
| 24 |
+
"Forensic_Detection": {
|
| 25 |
+
"accuracy": 0.48484848484848486,
|
| 26 |
+
"correct": 64,
|
| 27 |
+
"samples": 132
|
| 28 |
+
},
|
| 29 |
+
"Functional_Correspondence": {
|
| 30 |
+
"accuracy": 0.24615384615384617,
|
| 31 |
+
"correct": 32,
|
| 32 |
+
"samples": 130
|
| 33 |
+
},
|
| 34 |
+
"IQ_Test": {
|
| 35 |
+
"accuracy": 0.2866666666666667,
|
| 36 |
+
"correct": 43,
|
| 37 |
+
"samples": 150
|
| 38 |
+
},
|
| 39 |
+
"Jigsaw": {
|
| 40 |
+
"accuracy": 0.7933333333333333,
|
| 41 |
+
"correct": 119,
|
| 42 |
+
"samples": 150
|
| 43 |
+
},
|
| 44 |
+
"Multi-view_Reasoning": {
|
| 45 |
+
"accuracy": 0.37593984962406013,
|
| 46 |
+
"correct": 50,
|
| 47 |
+
"samples": 133
|
| 48 |
+
},
|
| 49 |
+
"Object_Localization": {
|
| 50 |
+
"accuracy": 0.6065573770491803,
|
| 51 |
+
"correct": 74,
|
| 52 |
+
"samples": 122
|
| 53 |
+
},
|
| 54 |
+
"Relative_Depth": {
|
| 55 |
+
"accuracy": 0.8387096774193549,
|
| 56 |
+
"correct": 104,
|
| 57 |
+
"samples": 124
|
| 58 |
+
},
|
| 59 |
+
"Relative_Reflectance": {
|
| 60 |
+
"accuracy": 0.4552238805970149,
|
| 61 |
+
"correct": 61,
|
| 62 |
+
"samples": 134
|
| 63 |
+
},
|
| 64 |
+
"Semantic_Correspondence": {
|
| 65 |
+
"accuracy": 0.3237410071942446,
|
| 66 |
+
"correct": 45,
|
| 67 |
+
"samples": 139
|
| 68 |
+
},
|
| 69 |
+
"Spatial_Relation": {
|
| 70 |
+
"accuracy": 0.8741258741258742,
|
| 71 |
+
"correct": 125,
|
| 72 |
+
"samples": 143
|
| 73 |
+
},
|
| 74 |
+
"Visual_Correspondence": {
|
| 75 |
+
"accuracy": 0.6104651162790697,
|
| 76 |
+
"correct": 105,
|
| 77 |
+
"samples": 172
|
| 78 |
+
},
|
| 79 |
+
"Visual_Similarity": {
|
| 80 |
+
"accuracy": 0.8444444444444444,
|
| 81 |
+
"correct": 114,
|
| 82 |
+
"samples": 135
|
| 83 |
+
}
|
| 84 |
+
},
|
| 85 |
+
"correct": 1104,
|
| 86 |
+
"errors": 0,
|
| 87 |
+
"generated_tokens": {
|
| 88 |
+
"at_256_cap": 0,
|
| 89 |
+
"max": 93,
|
| 90 |
+
"median": 91,
|
| 91 |
+
"min": 88,
|
| 92 |
+
"p95": 92
|
| 93 |
+
},
|
| 94 |
+
"parse_rate": 1.0,
|
| 95 |
+
"parsed": 1901,
|
| 96 |
+
"samples": 1901,
|
| 97 |
+
"split": "val",
|
| 98 |
+
"task_scores": {
|
| 99 |
+
"Art Style": {
|
| 100 |
+
"accuracy": 0.7521367521367521,
|
| 101 |
+
"correct": 88,
|
| 102 |
+
"samples": 117
|
| 103 |
+
},
|
| 104 |
+
"Counting": {
|
| 105 |
+
"accuracy": 0.6666666666666666,
|
| 106 |
+
"correct": 80,
|
| 107 |
+
"samples": 120
|
| 108 |
+
},
|
| 109 |
+
"Forensic Detection": {
|
| 110 |
+
"accuracy": 0.48484848484848486,
|
| 111 |
+
"correct": 64,
|
| 112 |
+
"samples": 132
|
| 113 |
+
},
|
| 114 |
+
"Functional Correspondence": {
|
| 115 |
+
"accuracy": 0.24615384615384617,
|
| 116 |
+
"correct": 32,
|
| 117 |
+
"samples": 130
|
| 118 |
+
},
|
| 119 |
+
"IQ Test": {
|
| 120 |
+
"accuracy": 0.2866666666666667,
|
| 121 |
+
"correct": 43,
|
| 122 |
+
"samples": 150
|
| 123 |
+
},
|
| 124 |
+
"Jigsaw": {
|
| 125 |
+
"accuracy": 0.7933333333333333,
|
| 126 |
+
"correct": 119,
|
| 127 |
+
"samples": 150
|
| 128 |
+
},
|
| 129 |
+
"Multi-view Reasoning": {
|
| 130 |
+
"accuracy": 0.37593984962406013,
|
| 131 |
+
"correct": 50,
|
| 132 |
+
"samples": 133
|
| 133 |
+
},
|
| 134 |
+
"Object Localization": {
|
| 135 |
+
"accuracy": 0.6065573770491803,
|
| 136 |
+
"correct": 74,
|
| 137 |
+
"samples": 122
|
| 138 |
+
},
|
| 139 |
+
"Relative Depth": {
|
| 140 |
+
"accuracy": 0.8387096774193549,
|
| 141 |
+
"correct": 104,
|
| 142 |
+
"samples": 124
|
| 143 |
+
},
|
| 144 |
+
"Relative Reflectance": {
|
| 145 |
+
"accuracy": 0.4552238805970149,
|
| 146 |
+
"correct": 61,
|
| 147 |
+
"samples": 134
|
| 148 |
+
},
|
| 149 |
+
"Semantic Correspondence": {
|
| 150 |
+
"accuracy": 0.3237410071942446,
|
| 151 |
+
"correct": 45,
|
| 152 |
+
"samples": 139
|
| 153 |
+
},
|
| 154 |
+
"Spatial Relation": {
|
| 155 |
+
"accuracy": 0.8741258741258742,
|
| 156 |
+
"correct": 125,
|
| 157 |
+
"samples": 143
|
| 158 |
+
},
|
| 159 |
+
"Visual Correspondence": {
|
| 160 |
+
"accuracy": 0.6104651162790697,
|
| 161 |
+
"correct": 105,
|
| 162 |
+
"samples": 172
|
| 163 |
+
},
|
| 164 |
+
"Visual Similarity": {
|
| 165 |
+
"accuracy": 0.8444444444444444,
|
| 166 |
+
"correct": 114,
|
| 167 |
+
"samples": 135
|
| 168 |
+
}
|
| 169 |
+
}
|
| 170 |
+
},
|
| 171 |
+
"cvbench": {
|
| 172 |
+
"accuracy": 0.8373768006065201,
|
| 173 |
+
"benchmark": "cvbench",
|
| 174 |
+
"checks": {
|
| 175 |
+
"all_inference_errors_zero": true,
|
| 176 |
+
"correct_flags_recomputed": true,
|
| 177 |
+
"expected_answers_exact": true,
|
| 178 |
+
"manifest_result_ids_exact": true,
|
| 179 |
+
"no_generation_hit_cap": true,
|
| 180 |
+
"published_core_metrics_recomputed": true
|
| 181 |
+
},
|
| 182 |
+
"config_scores": {
|
| 183 |
+
"2D": {
|
| 184 |
+
"accuracy": 0.7746870653685675,
|
| 185 |
+
"correct": 1114,
|
| 186 |
+
"samples": 1438
|
| 187 |
+
},
|
| 188 |
+
"3D": {
|
| 189 |
+
"accuracy": 0.9125,
|
| 190 |
+
"correct": 1095,
|
| 191 |
+
"samples": 1200
|
| 192 |
+
}
|
| 193 |
+
},
|
| 194 |
+
"correct": 2209,
|
| 195 |
+
"errors": 0,
|
| 196 |
+
"generated_tokens": {
|
| 197 |
+
"at_256_cap": 0,
|
| 198 |
+
"max": 94,
|
| 199 |
+
"median": 91,
|
| 200 |
+
"min": 88,
|
| 201 |
+
"p95": 93
|
| 202 |
+
},
|
| 203 |
+
"official_scoring": {
|
| 204 |
+
"formula": "((ADE20K accuracy + COCO accuracy) / 2 + Omni3D accuracy) / 2",
|
| 205 |
+
"official_2d_accuracy": 0.7666911973938555,
|
| 206 |
+
"official_3d_accuracy": 0.9125,
|
| 207 |
+
"official_cvbench_accuracy": 0.8395955986969277,
|
| 208 |
+
"source_scores": {
|
| 209 |
+
"ADE20K": {
|
| 210 |
+
"accuracy": 0.6998420221169036,
|
| 211 |
+
"correct": 443,
|
| 212 |
+
"samples": 633
|
| 213 |
+
},
|
| 214 |
+
"COCO": {
|
| 215 |
+
"accuracy": 0.8335403726708075,
|
| 216 |
+
"correct": 671,
|
| 217 |
+
"samples": 805
|
| 218 |
+
},
|
| 219 |
+
"Omni3D": {
|
| 220 |
+
"accuracy": 0.9125,
|
| 221 |
+
"correct": 1095,
|
| 222 |
+
"samples": 1200
|
| 223 |
+
}
|
| 224 |
+
}
|
| 225 |
+
},
|
| 226 |
+
"parse_rate": 1.0,
|
| 227 |
+
"parsed": 2638,
|
| 228 |
+
"samples": 2638,
|
| 229 |
+
"split": "test",
|
| 230 |
+
"task_scores": {
|
| 231 |
+
"Count": {
|
| 232 |
+
"accuracy": 0.6751269035532995,
|
| 233 |
+
"correct": 532,
|
| 234 |
+
"samples": 788
|
| 235 |
+
},
|
| 236 |
+
"Depth": {
|
| 237 |
+
"accuracy": 0.9483333333333334,
|
| 238 |
+
"correct": 569,
|
| 239 |
+
"samples": 600
|
| 240 |
+
},
|
| 241 |
+
"Distance": {
|
| 242 |
+
"accuracy": 0.8766666666666667,
|
| 243 |
+
"correct": 526,
|
| 244 |
+
"samples": 600
|
| 245 |
+
},
|
| 246 |
+
"Relation": {
|
| 247 |
+
"accuracy": 0.8953846153846153,
|
| 248 |
+
"correct": 582,
|
| 249 |
+
"samples": 650
|
| 250 |
+
}
|
| 251 |
+
}
|
| 252 |
+
},
|
| 253 |
+
"vstar": {
|
| 254 |
+
"accuracy": 0.5340314136125655,
|
| 255 |
+
"benchmark": "vstar",
|
| 256 |
+
"checks": {
|
| 257 |
+
"all_inference_errors_zero": true,
|
| 258 |
+
"correct_flags_recomputed": true,
|
| 259 |
+
"expected_answers_exact": true,
|
| 260 |
+
"manifest_result_ids_exact": true,
|
| 261 |
+
"no_generation_hit_cap": true,
|
| 262 |
+
"published_core_metrics_recomputed": true
|
| 263 |
+
},
|
| 264 |
+
"config_scores": {
|
| 265 |
+
"direct_attributes": {
|
| 266 |
+
"accuracy": 0.48695652173913045,
|
| 267 |
+
"correct": 56,
|
| 268 |
+
"samples": 115
|
| 269 |
+
},
|
| 270 |
+
"relative_position": {
|
| 271 |
+
"accuracy": 0.6052631578947368,
|
| 272 |
+
"correct": 46,
|
| 273 |
+
"samples": 76
|
| 274 |
+
}
|
| 275 |
+
},
|
| 276 |
+
"correct": 102,
|
| 277 |
+
"errors": 0,
|
| 278 |
+
"generated_tokens": {
|
| 279 |
+
"at_256_cap": 0,
|
| 280 |
+
"max": 91,
|
| 281 |
+
"median": 90,
|
| 282 |
+
"min": 88,
|
| 283 |
+
"p95": 91
|
| 284 |
+
},
|
| 285 |
+
"parse_rate": 1.0,
|
| 286 |
+
"parsed": 191,
|
| 287 |
+
"samples": 191,
|
| 288 |
+
"split": "test",
|
| 289 |
+
"task_scores": {
|
| 290 |
+
"direct_attributes": {
|
| 291 |
+
"accuracy": 0.48695652173913045,
|
| 292 |
+
"correct": 56,
|
| 293 |
+
"samples": 115
|
| 294 |
+
},
|
| 295 |
+
"relative_position": {
|
| 296 |
+
"accuracy": 0.6052631578947368,
|
| 297 |
+
"correct": 46,
|
| 298 |
+
"samples": 76
|
| 299 |
+
}
|
| 300 |
+
}
|
| 301 |
+
}
|
| 302 |
+
}
|
reports/evaluations/checkpoint-7000/blink_full_val/audit.json
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"accuracy": 0.5807469752761705,
|
| 3 |
+
"benchmark": "blink",
|
| 4 |
+
"checks": {
|
| 5 |
+
"all_inference_errors_zero": true,
|
| 6 |
+
"correct_flags_recomputed": true,
|
| 7 |
+
"expected_answers_exact": true,
|
| 8 |
+
"manifest_result_ids_exact": true,
|
| 9 |
+
"no_generation_hit_cap": true,
|
| 10 |
+
"published_core_metrics_recomputed": true
|
| 11 |
+
},
|
| 12 |
+
"config_scores": {
|
| 13 |
+
"Art_Style": {
|
| 14 |
+
"accuracy": 0.7521367521367521,
|
| 15 |
+
"correct": 88,
|
| 16 |
+
"samples": 117
|
| 17 |
+
},
|
| 18 |
+
"Counting": {
|
| 19 |
+
"accuracy": 0.6666666666666666,
|
| 20 |
+
"correct": 80,
|
| 21 |
+
"samples": 120
|
| 22 |
+
},
|
| 23 |
+
"Forensic_Detection": {
|
| 24 |
+
"accuracy": 0.48484848484848486,
|
| 25 |
+
"correct": 64,
|
| 26 |
+
"samples": 132
|
| 27 |
+
},
|
| 28 |
+
"Functional_Correspondence": {
|
| 29 |
+
"accuracy": 0.24615384615384617,
|
| 30 |
+
"correct": 32,
|
| 31 |
+
"samples": 130
|
| 32 |
+
},
|
| 33 |
+
"IQ_Test": {
|
| 34 |
+
"accuracy": 0.2866666666666667,
|
| 35 |
+
"correct": 43,
|
| 36 |
+
"samples": 150
|
| 37 |
+
},
|
| 38 |
+
"Jigsaw": {
|
| 39 |
+
"accuracy": 0.7933333333333333,
|
| 40 |
+
"correct": 119,
|
| 41 |
+
"samples": 150
|
| 42 |
+
},
|
| 43 |
+
"Multi-view_Reasoning": {
|
| 44 |
+
"accuracy": 0.37593984962406013,
|
| 45 |
+
"correct": 50,
|
| 46 |
+
"samples": 133
|
| 47 |
+
},
|
| 48 |
+
"Object_Localization": {
|
| 49 |
+
"accuracy": 0.6065573770491803,
|
| 50 |
+
"correct": 74,
|
| 51 |
+
"samples": 122
|
| 52 |
+
},
|
| 53 |
+
"Relative_Depth": {
|
| 54 |
+
"accuracy": 0.8387096774193549,
|
| 55 |
+
"correct": 104,
|
| 56 |
+
"samples": 124
|
| 57 |
+
},
|
| 58 |
+
"Relative_Reflectance": {
|
| 59 |
+
"accuracy": 0.4552238805970149,
|
| 60 |
+
"correct": 61,
|
| 61 |
+
"samples": 134
|
| 62 |
+
},
|
| 63 |
+
"Semantic_Correspondence": {
|
| 64 |
+
"accuracy": 0.3237410071942446,
|
| 65 |
+
"correct": 45,
|
| 66 |
+
"samples": 139
|
| 67 |
+
},
|
| 68 |
+
"Spatial_Relation": {
|
| 69 |
+
"accuracy": 0.8741258741258742,
|
| 70 |
+
"correct": 125,
|
| 71 |
+
"samples": 143
|
| 72 |
+
},
|
| 73 |
+
"Visual_Correspondence": {
|
| 74 |
+
"accuracy": 0.6104651162790697,
|
| 75 |
+
"correct": 105,
|
| 76 |
+
"samples": 172
|
| 77 |
+
},
|
| 78 |
+
"Visual_Similarity": {
|
| 79 |
+
"accuracy": 0.8444444444444444,
|
| 80 |
+
"correct": 114,
|
| 81 |
+
"samples": 135
|
| 82 |
+
}
|
| 83 |
+
},
|
| 84 |
+
"correct": 1104,
|
| 85 |
+
"errors": 0,
|
| 86 |
+
"generated_tokens": {
|
| 87 |
+
"at_256_cap": 0,
|
| 88 |
+
"max": 93,
|
| 89 |
+
"median": 91,
|
| 90 |
+
"min": 88,
|
| 91 |
+
"p95": 92
|
| 92 |
+
},
|
| 93 |
+
"parse_rate": 1.0,
|
| 94 |
+
"parsed": 1901,
|
| 95 |
+
"samples": 1901,
|
| 96 |
+
"split": "val",
|
| 97 |
+
"task_scores": {
|
| 98 |
+
"Art Style": {
|
| 99 |
+
"accuracy": 0.7521367521367521,
|
| 100 |
+
"correct": 88,
|
| 101 |
+
"samples": 117
|
| 102 |
+
},
|
| 103 |
+
"Counting": {
|
| 104 |
+
"accuracy": 0.6666666666666666,
|
| 105 |
+
"correct": 80,
|
| 106 |
+
"samples": 120
|
| 107 |
+
},
|
| 108 |
+
"Forensic Detection": {
|
| 109 |
+
"accuracy": 0.48484848484848486,
|
| 110 |
+
"correct": 64,
|
| 111 |
+
"samples": 132
|
| 112 |
+
},
|
| 113 |
+
"Functional Correspondence": {
|
| 114 |
+
"accuracy": 0.24615384615384617,
|
| 115 |
+
"correct": 32,
|
| 116 |
+
"samples": 130
|
| 117 |
+
},
|
| 118 |
+
"IQ Test": {
|
| 119 |
+
"accuracy": 0.2866666666666667,
|
| 120 |
+
"correct": 43,
|
| 121 |
+
"samples": 150
|
| 122 |
+
},
|
| 123 |
+
"Jigsaw": {
|
| 124 |
+
"accuracy": 0.7933333333333333,
|
| 125 |
+
"correct": 119,
|
| 126 |
+
"samples": 150
|
| 127 |
+
},
|
| 128 |
+
"Multi-view Reasoning": {
|
| 129 |
+
"accuracy": 0.37593984962406013,
|
| 130 |
+
"correct": 50,
|
| 131 |
+
"samples": 133
|
| 132 |
+
},
|
| 133 |
+
"Object Localization": {
|
| 134 |
+
"accuracy": 0.6065573770491803,
|
| 135 |
+
"correct": 74,
|
| 136 |
+
"samples": 122
|
| 137 |
+
},
|
| 138 |
+
"Relative Depth": {
|
| 139 |
+
"accuracy": 0.8387096774193549,
|
| 140 |
+
"correct": 104,
|
| 141 |
+
"samples": 124
|
| 142 |
+
},
|
| 143 |
+
"Relative Reflectance": {
|
| 144 |
+
"accuracy": 0.4552238805970149,
|
| 145 |
+
"correct": 61,
|
| 146 |
+
"samples": 134
|
| 147 |
+
},
|
| 148 |
+
"Semantic Correspondence": {
|
| 149 |
+
"accuracy": 0.3237410071942446,
|
| 150 |
+
"correct": 45,
|
| 151 |
+
"samples": 139
|
| 152 |
+
},
|
| 153 |
+
"Spatial Relation": {
|
| 154 |
+
"accuracy": 0.8741258741258742,
|
| 155 |
+
"correct": 125,
|
| 156 |
+
"samples": 143
|
| 157 |
+
},
|
| 158 |
+
"Visual Correspondence": {
|
| 159 |
+
"accuracy": 0.6104651162790697,
|
| 160 |
+
"correct": 105,
|
| 161 |
+
"samples": 172
|
| 162 |
+
},
|
| 163 |
+
"Visual Similarity": {
|
| 164 |
+
"accuracy": 0.8444444444444444,
|
| 165 |
+
"correct": 114,
|
| 166 |
+
"samples": 135
|
| 167 |
+
}
|
| 168 |
+
}
|
| 169 |
+
}
|
reports/evaluations/checkpoint-7000/blink_full_val/metrics.json
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"metadata": {
|
| 3 |
+
"attention": "flash_attention_2",
|
| 4 |
+
"benchmark": "blink",
|
| 5 |
+
"checkpoint_step": 7000,
|
| 6 |
+
"created_utc": "2026-08-10T11:40:18.381579+00:00",
|
| 7 |
+
"decoding": "greedy",
|
| 8 |
+
"dtype": "bfloat16",
|
| 9 |
+
"embedding_rows": 151936,
|
| 10 |
+
"host": "dedicated-developjob-js-public-huvlx",
|
| 11 |
+
"input_image_count_distribution": {
|
| 12 |
+
"1": 793,
|
| 13 |
+
"2": 574,
|
| 14 |
+
"3": 402,
|
| 15 |
+
"4": 132
|
| 16 |
+
},
|
| 17 |
+
"manifest": "/private/codes/exp/haocheng_workspace/projects/Unified/src/umm/data/benchmarks/prepared/blink_val/manifest.jsonl",
|
| 18 |
+
"manifest_sha256": "1394ee1149d0669ad03c424bf4523940301d2c3bacfd7f41c2873b8b4fe136ab",
|
| 19 |
+
"max_new_tokens": 256,
|
| 20 |
+
"model_path": "/private/codes/exp/haocheng_workspace/projects/Unified/src/umm/models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged",
|
| 21 |
+
"required_token_ids": {
|
| 22 |
+
"</answer>": 151935,
|
| 23 |
+
"</think>": 151668,
|
| 24 |
+
"<answer>": 151934,
|
| 25 |
+
"<think>": 151667,
|
| 26 |
+
"<|depth_pad|>": 151931,
|
| 27 |
+
"<|dino_pad|>": 151930,
|
| 28 |
+
"<|pidinet_pad|>": 151932,
|
| 29 |
+
"<|sam_pad|>": 151929,
|
| 30 |
+
"<|siglip_pad|>": 151933
|
| 31 |
+
},
|
| 32 |
+
"sample_limit": null,
|
| 33 |
+
"scoring": "deterministic option exact-match; no LLM judge",
|
| 34 |
+
"split": "val",
|
| 35 |
+
"tokenizer_length": 151936,
|
| 36 |
+
"world_size": 8
|
| 37 |
+
},
|
| 38 |
+
"metrics": {
|
| 39 |
+
"eval/blink_accuracy": 0.5807469752761705,
|
| 40 |
+
"eval/blink_art_style_accuracy": 0.7521367521367521,
|
| 41 |
+
"eval/blink_art_style_samples": 117.0,
|
| 42 |
+
"eval/blink_config_macro_accuracy": 0.5827866411813566,
|
| 43 |
+
"eval/blink_counting_accuracy": 0.6666666666666666,
|
| 44 |
+
"eval/blink_counting_samples": 120.0,
|
| 45 |
+
"eval/blink_covt_answer_tag_rate": 1.0,
|
| 46 |
+
"eval/blink_covt_any_anchor_rate": 1.0,
|
| 47 |
+
"eval/blink_covt_depth_tokens_mean": 4.0,
|
| 48 |
+
"eval/blink_covt_dino_tokens_mean": 4.0,
|
| 49 |
+
"eval/blink_covt_pidinet_tokens_mean": 4.0,
|
| 50 |
+
"eval/blink_covt_sam_tokens_mean": 8.0,
|
| 51 |
+
"eval/blink_covt_siglip_tokens_mean": 4.0,
|
| 52 |
+
"eval/blink_covt_think_rate": 1.0,
|
| 53 |
+
"eval/blink_errors": 0.0,
|
| 54 |
+
"eval/blink_forensic_detection_accuracy": 0.48484848484848486,
|
| 55 |
+
"eval/blink_forensic_detection_samples": 132.0,
|
| 56 |
+
"eval/blink_functional_correspondence_accuracy": 0.24615384615384617,
|
| 57 |
+
"eval/blink_functional_correspondence_samples": 130.0,
|
| 58 |
+
"eval/blink_iq_test_accuracy": 0.2866666666666667,
|
| 59 |
+
"eval/blink_iq_test_samples": 150.0,
|
| 60 |
+
"eval/blink_jigsaw_accuracy": 0.7933333333333333,
|
| 61 |
+
"eval/blink_jigsaw_samples": 150.0,
|
| 62 |
+
"eval/blink_multi_view_reasoning_accuracy": 0.37593984962406013,
|
| 63 |
+
"eval/blink_multi_view_reasoning_samples": 133.0,
|
| 64 |
+
"eval/blink_object_localization_accuracy": 0.6065573770491803,
|
| 65 |
+
"eval/blink_object_localization_samples": 122.0,
|
| 66 |
+
"eval/blink_parse_rate": 1.0,
|
| 67 |
+
"eval/blink_relative_depth_accuracy": 0.8387096774193549,
|
| 68 |
+
"eval/blink_relative_depth_samples": 124.0,
|
| 69 |
+
"eval/blink_relative_reflectance_accuracy": 0.4552238805970149,
|
| 70 |
+
"eval/blink_relative_reflectance_samples": 134.0,
|
| 71 |
+
"eval/blink_samples": 1901.0,
|
| 72 |
+
"eval/blink_seconds": 657.6884629633278,
|
| 73 |
+
"eval/blink_semantic_correspondence_accuracy": 0.3237410071942446,
|
| 74 |
+
"eval/blink_semantic_correspondence_samples": 139.0,
|
| 75 |
+
"eval/blink_spatial_relation_accuracy": 0.8741258741258742,
|
| 76 |
+
"eval/blink_spatial_relation_samples": 143.0,
|
| 77 |
+
"eval/blink_task_art_style_accuracy": 0.7521367521367521,
|
| 78 |
+
"eval/blink_task_counting_accuracy": 0.6666666666666666,
|
| 79 |
+
"eval/blink_task_forensic_detection_accuracy": 0.48484848484848486,
|
| 80 |
+
"eval/blink_task_functional_correspondence_accuracy": 0.24615384615384617,
|
| 81 |
+
"eval/blink_task_iq_test_accuracy": 0.2866666666666667,
|
| 82 |
+
"eval/blink_task_jigsaw_accuracy": 0.7933333333333333,
|
| 83 |
+
"eval/blink_task_macro_accuracy": 0.5827866411813566,
|
| 84 |
+
"eval/blink_task_multi_view_reasoning_accuracy": 0.37593984962406013,
|
| 85 |
+
"eval/blink_task_object_localization_accuracy": 0.6065573770491803,
|
| 86 |
+
"eval/blink_task_relative_depth_accuracy": 0.8387096774193549,
|
| 87 |
+
"eval/blink_task_relative_reflectance_accuracy": 0.4552238805970149,
|
| 88 |
+
"eval/blink_task_semantic_correspondence_accuracy": 0.3237410071942446,
|
| 89 |
+
"eval/blink_task_spatial_relation_accuracy": 0.8741258741258742,
|
| 90 |
+
"eval/blink_task_visual_correspondence_accuracy": 0.6104651162790697,
|
| 91 |
+
"eval/blink_task_visual_similarity_accuracy": 0.8444444444444444,
|
| 92 |
+
"eval/blink_visual_correspondence_accuracy": 0.6104651162790697,
|
| 93 |
+
"eval/blink_visual_correspondence_samples": 172.0,
|
| 94 |
+
"eval/blink_visual_similarity_accuracy": 0.8444444444444444,
|
| 95 |
+
"eval/blink_visual_similarity_samples": 135.0
|
| 96 |
+
}
|
| 97 |
+
}
|
reports/evaluations/checkpoint-7000/blink_full_val/rank_00.jsonl
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
reports/evaluations/checkpoint-7000/blink_full_val/rank_01.jsonl
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
reports/evaluations/checkpoint-7000/blink_full_val/rank_02.jsonl
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
reports/evaluations/checkpoint-7000/blink_full_val/rank_03.jsonl
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
reports/evaluations/checkpoint-7000/blink_full_val/rank_04.jsonl
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
reports/evaluations/checkpoint-7000/blink_full_val/rank_05.jsonl
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
reports/evaluations/checkpoint-7000/blink_full_val/rank_06.jsonl
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
reports/evaluations/checkpoint-7000/blink_full_val/rank_07.jsonl
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
reports/evaluations/checkpoint-7000/blink_full_val/results.jsonl
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
reports/evaluations/checkpoint-7000/blink_full_val/swanlab.json
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"enabled": true,
|
| 3 |
+
"retry_upload": true,
|
| 4 |
+
"run_id": "fbdon9l7",
|
| 5 |
+
"run_url": "https://swanlab.cn/@Oranger/unified-model/runs/fbdon9l7"
|
| 6 |
+
}
|
reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
*
|
reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/debug/debug.log
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
Diagnostic log bound to file: /private/codes/exp/haocheng_workspace/projects/Unified/src/umm/outputs/evals/multibench/stage2_covt_from3k_bcd_2k-checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/debug/debug.log
|
reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/files/config.yaml
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
attention:
|
| 2 |
+
desc: ''
|
| 3 |
+
sort: 0
|
| 4 |
+
value: flash_attention_2
|
| 5 |
+
benchmark:
|
| 6 |
+
desc: ''
|
| 7 |
+
sort: 1
|
| 8 |
+
value: blink
|
| 9 |
+
checkpoint_step:
|
| 10 |
+
desc: ''
|
| 11 |
+
sort: 2
|
| 12 |
+
value: 7000
|
| 13 |
+
created_utc:
|
| 14 |
+
desc: ''
|
| 15 |
+
sort: 3
|
| 16 |
+
value: '2026-08-10T11:40:18.381579+00:00'
|
| 17 |
+
decoding:
|
| 18 |
+
desc: ''
|
| 19 |
+
sort: 4
|
| 20 |
+
value: greedy
|
| 21 |
+
dtype:
|
| 22 |
+
desc: ''
|
| 23 |
+
sort: 5
|
| 24 |
+
value: bfloat16
|
| 25 |
+
embedding_rows:
|
| 26 |
+
desc: ''
|
| 27 |
+
sort: 6
|
| 28 |
+
value: 151936
|
| 29 |
+
host:
|
| 30 |
+
desc: ''
|
| 31 |
+
sort: 7
|
| 32 |
+
value: dedicated-developjob-js-public-huvlx
|
| 33 |
+
input_image_count_distribution:
|
| 34 |
+
desc: ''
|
| 35 |
+
sort: 8
|
| 36 |
+
value:
|
| 37 |
+
'1': 793
|
| 38 |
+
'2': 574
|
| 39 |
+
'3': 402
|
| 40 |
+
'4': 132
|
| 41 |
+
manifest:
|
| 42 |
+
desc: ''
|
| 43 |
+
sort: 9
|
| 44 |
+
value: /private/codes/exp/haocheng_workspace/projects/Unified/src/umm/data/benchmarks/prepared/blink_val/manifest.jsonl
|
| 45 |
+
manifest_sha256:
|
| 46 |
+
desc: ''
|
| 47 |
+
sort: 10
|
| 48 |
+
value: 1394ee1149d0669ad03c424bf4523940301d2c3bacfd7f41c2873b8b4fe136ab
|
| 49 |
+
max_new_tokens:
|
| 50 |
+
desc: ''
|
| 51 |
+
sort: 11
|
| 52 |
+
value: 256
|
| 53 |
+
model_path:
|
| 54 |
+
desc: ''
|
| 55 |
+
sort: 12
|
| 56 |
+
value: /private/codes/exp/haocheng_workspace/projects/Unified/src/umm/models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged
|
| 57 |
+
required_token_ids:
|
| 58 |
+
desc: ''
|
| 59 |
+
sort: 13
|
| 60 |
+
value:
|
| 61 |
+
</answer>: 151935
|
| 62 |
+
</think>: 151668
|
| 63 |
+
<answer>: 151934
|
| 64 |
+
<think>: 151667
|
| 65 |
+
<|depth_pad|>: 151931
|
| 66 |
+
<|dino_pad|>: 151930
|
| 67 |
+
<|pidinet_pad|>: 151932
|
| 68 |
+
<|sam_pad|>: 151929
|
| 69 |
+
<|siglip_pad|>: 151933
|
| 70 |
+
sample_limit:
|
| 71 |
+
desc: ''
|
| 72 |
+
sort: 14
|
| 73 |
+
value: {}
|
| 74 |
+
scoring:
|
| 75 |
+
desc: ''
|
| 76 |
+
sort: 15
|
| 77 |
+
value: deterministic option exact-match; no LLM judge
|
| 78 |
+
split:
|
| 79 |
+
desc: ''
|
| 80 |
+
sort: 16
|
| 81 |
+
value: val
|
| 82 |
+
tokenizer_length:
|
| 83 |
+
desc: ''
|
| 84 |
+
sort: 17
|
| 85 |
+
value: 151936
|
| 86 |
+
world_size:
|
| 87 |
+
desc: ''
|
| 88 |
+
sort: 18
|
| 89 |
+
value: 8
|
reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/files/requirements.txt
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
absl-py==2.4.0
|
| 2 |
+
accelerate==1.10.0
|
| 3 |
+
addict==2.4.0
|
| 4 |
+
aiofiles==24.1.0
|
| 5 |
+
aiohappyeyeballs==2.6.1
|
| 6 |
+
aiohttp==3.13.3
|
| 7 |
+
aiosignal==1.4.0
|
| 8 |
+
albucore==0.0.24
|
| 9 |
+
albumentations==2.0.8
|
| 10 |
+
annotated-doc==0.0.4
|
| 11 |
+
annotated-types==0.6.0
|
| 12 |
+
anthropic==0.97.0
|
| 13 |
+
antlr4-python3-runtime==4.9.3
|
| 14 |
+
anyio==4.12.1
|
| 15 |
+
archspec==0.2.5
|
| 16 |
+
attrs==25.4.0
|
| 17 |
+
audioop-lts==0.2.2
|
| 18 |
+
audioread==3.1.0
|
| 19 |
+
av==16.1.0
|
| 20 |
+
backports-zstd==1.3.0
|
| 21 |
+
beautifulsoup4==4.14.3
|
| 22 |
+
blessed==1.38.0
|
| 23 |
+
bokeh==3.9.1
|
| 24 |
+
boltons==25.0.0
|
| 25 |
+
braceexpand==0.1.7
|
| 26 |
+
brotli==1.2.0
|
| 27 |
+
cairocffi==1.7.1
|
| 28 |
+
cairosvg==2.9.0
|
| 29 |
+
certifi==2026.6.17
|
| 30 |
+
cffi==2.0.0
|
| 31 |
+
charset-normalizer==3.4.4
|
| 32 |
+
charset-normalizer==3.4.9
|
| 33 |
+
clean-fid==0.1.35
|
| 34 |
+
click==8.2.1
|
| 35 |
+
coloredlogs==15.0.1
|
| 36 |
+
colorlog==6.10.1
|
| 37 |
+
conda==26.3.2
|
| 38 |
+
conda-libmamba-solver==25.11.0
|
| 39 |
+
conda-pack==0.9.2
|
| 40 |
+
conda-package-handling==2.4.0
|
| 41 |
+
conda-package-streaming==0.12.0
|
| 42 |
+
contourpy==1.2.1
|
| 43 |
+
cryptography==46.0.3
|
| 44 |
+
cssselect2==0.9.0
|
| 45 |
+
cuda-bindings==12.9.4
|
| 46 |
+
cuda-pathfinder==1.5.2
|
| 47 |
+
cycler==0.12.1
|
| 48 |
+
cyclopts==4.20.0
|
| 49 |
+
cython==3.2.4
|
| 50 |
+
dashscope==1.24.1
|
| 51 |
+
datasets==4.8.4
|
| 52 |
+
decorator==4.4.2
|
| 53 |
+
decord==0.6.0
|
| 54 |
+
deep-translator==1.11.4
|
| 55 |
+
defusedxml==0.7.1
|
| 56 |
+
diffusers==0.34.0
|
| 57 |
+
dill==0.4.1
|
| 58 |
+
distro==1.9.0
|
| 59 |
+
distvae==0.0.0b5
|
| 60 |
+
docstring-parser==0.18.0
|
| 61 |
+
drawsvg==2.4.1
|
| 62 |
+
easydict==1.13
|
| 63 |
+
einops==0.8.2
|
| 64 |
+
et-xmlfile==2.0.0
|
| 65 |
+
fastapi==0.135.1
|
| 66 |
+
ffmpeg-python==0.2.0
|
| 67 |
+
ffmpy==1.0.0
|
| 68 |
+
filelock==3.25.0
|
| 69 |
+
flatbuffers==25.12.19
|
| 70 |
+
fonttools==4.61.1
|
| 71 |
+
frozendict==2.4.6
|
| 72 |
+
frozendict==2.4.7
|
| 73 |
+
frozenlist==1.8.0
|
| 74 |
+
fsspec==2026.2.0
|
| 75 |
+
ftfy==6.3.1
|
| 76 |
+
future==1.0.0
|
| 77 |
+
fvcore==0.1.5.post20221221
|
| 78 |
+
gdown==6.0.0
|
| 79 |
+
gitdb==4.0.12
|
| 80 |
+
gitpython==3.1.46
|
| 81 |
+
gpustat==1.1.1
|
| 82 |
+
gradio==5.42.0
|
| 83 |
+
gradio-client==1.11.1
|
| 84 |
+
groovy==0.1.2
|
| 85 |
+
grpcio==1.78.0
|
| 86 |
+
h11==0.16.0
|
| 87 |
+
h2==4.3.0
|
| 88 |
+
h5py==3.15.1
|
| 89 |
+
hear21passt==0.0.26
|
| 90 |
+
hf-xet==1.5.0
|
| 91 |
+
hpack==4.1.0
|
| 92 |
+
httpcore==1.0.9
|
| 93 |
+
httpx==0.28.1
|
| 94 |
+
huggingface-hub==0.36.2
|
| 95 |
+
humanfriendly==10.0
|
| 96 |
+
hyperframe==6.1.0
|
| 97 |
+
idna==3.11
|
| 98 |
+
imagebind==0.1.0
|
| 99 |
+
imageio==2.37.0
|
| 100 |
+
imageio-ffmpeg==0.6.0
|
| 101 |
+
importlib-metadata==8.7.1
|
| 102 |
+
insightface==0.7.3
|
| 103 |
+
iopath==0.1.10
|
| 104 |
+
jinja2==3.1.6
|
| 105 |
+
jiter==0.14.0
|
| 106 |
+
joblib==1.5.3
|
| 107 |
+
json-repair==0.59.5
|
| 108 |
+
jsonpatch==1.33
|
| 109 |
+
jsonpointer==3.0.0
|
| 110 |
+
kiwisolver==1.4.9
|
| 111 |
+
laion-clap==1.1.7
|
| 112 |
+
lazy-loader==0.4
|
| 113 |
+
libmambapy==2.5.0
|
| 114 |
+
librosa==0.10.2.post1
|
| 115 |
+
lightning==2.5.2
|
| 116 |
+
lightning-utilities==0.15.3
|
| 117 |
+
linkify-it-py==2.1.0
|
| 118 |
+
llvmlite==0.46.0
|
| 119 |
+
ltx-core==1.0.0
|
| 120 |
+
ltx-pipelines==1.1.3
|
| 121 |
+
markdown==3.10.2
|
| 122 |
+
markdown-it-py==4.0.0
|
| 123 |
+
markupsafe==3.0.3
|
| 124 |
+
matplotlib==3.10.8
|
| 125 |
+
mdit-py-plugins==0.6.1
|
| 126 |
+
mdurl==0.1.2
|
| 127 |
+
menuinst==2.4.2
|
| 128 |
+
ml-dtypes==0.4.1
|
| 129 |
+
modelscope==1.35.3
|
| 130 |
+
more-itertools==10.8.0
|
| 131 |
+
moviepy==1.0.3
|
| 132 |
+
mpmath==1.3.0
|
| 133 |
+
msclap==1.3.4
|
| 134 |
+
msgpack==1.1.1
|
| 135 |
+
multidict==6.7.1
|
| 136 |
+
multiprocess==0.70.19
|
| 137 |
+
narwhals==2.23.0
|
| 138 |
+
networkx==3.2.1
|
| 139 |
+
nh3==0.3.6
|
| 140 |
+
numba==0.64.0
|
| 141 |
+
numpy==2.4.4
|
| 142 |
+
nvidia-cublas-cu12==12.8.4.1
|
| 143 |
+
nvidia-cuda-cupti-cu12==12.8.90
|
| 144 |
+
nvidia-cuda-nvrtc-cu12==12.8.93
|
| 145 |
+
nvidia-cuda-runtime-cu12==12.8.90
|
| 146 |
+
nvidia-cudnn-cu12==9.10.2.21
|
| 147 |
+
nvidia-cufft-cu12==11.3.3.83
|
| 148 |
+
nvidia-cufile-cu12==1.13.1.3
|
| 149 |
+
nvidia-curand-cu12==10.3.9.90
|
| 150 |
+
nvidia-cusolver-cu12==11.7.3.90
|
| 151 |
+
nvidia-cusparse-cu12==12.5.8.93
|
| 152 |
+
nvidia-cusparselt-cu12==0.7.1
|
| 153 |
+
nvidia-ml-py==13.590.48
|
| 154 |
+
nvidia-nccl-cu12==2.27.5
|
| 155 |
+
nvidia-nvjitlink-cu12==12.8.93
|
| 156 |
+
nvidia-nvshmem-cu12==3.4.5
|
| 157 |
+
nvidia-nvtx-cu12==12.8.90
|
| 158 |
+
nvitop==1.6.2
|
| 159 |
+
ollama==0.6.2
|
| 160 |
+
omegaconf==2.3.0
|
| 161 |
+
onnx==1.19.0
|
| 162 |
+
onnxruntime-gpu==1.22.0
|
| 163 |
+
open-clip-torch==3.2.0
|
| 164 |
+
openai==2.33.0
|
| 165 |
+
opencv-python==4.11.0.86
|
| 166 |
+
opencv-python-headless==4.11.0.86
|
| 167 |
+
openimageio==3.1.13.1
|
| 168 |
+
openpyxl==3.1.5
|
| 169 |
+
orjson==3.11.7
|
| 170 |
+
packaging==25.0
|
| 171 |
+
packaging==26.2
|
| 172 |
+
pandas==2.3.3
|
| 173 |
+
panel==1.9.3
|
| 174 |
+
panel-material-ui==0.13.0
|
| 175 |
+
param==2.4.1
|
| 176 |
+
parameterized==0.9.0
|
| 177 |
+
peft==0.18.0
|
| 178 |
+
pillow==11.3.0
|
| 179 |
+
pip==26.0.1
|
| 180 |
+
platformdirs==4.5.0
|
| 181 |
+
platformdirs==4.10.0
|
| 182 |
+
pluggy==1.5.0
|
| 183 |
+
pluggy==1.6.0
|
| 184 |
+
pooch==1.9.0
|
| 185 |
+
portalocker==3.2.0
|
| 186 |
+
prettytable==3.17.0
|
| 187 |
+
proglog==0.1.12
|
| 188 |
+
progressbar==2.5
|
| 189 |
+
propcache==0.4.1
|
| 190 |
+
protobuf==4.25.1
|
| 191 |
+
psutil==7.2.2
|
| 192 |
+
pyarrow==23.0.1
|
| 193 |
+
pycosat==0.6.6
|
| 194 |
+
pycparser==2.23
|
| 195 |
+
pydantic==2.11.10
|
| 196 |
+
pydantic-core==2.33.2
|
| 197 |
+
pydantic-settings==2.12.0
|
| 198 |
+
pydub==0.25.1
|
| 199 |
+
pygments==2.19.2
|
| 200 |
+
pyjwt==2.10.1
|
| 201 |
+
pynvml==13.0.1
|
| 202 |
+
pyparsing==3.3.2
|
| 203 |
+
pysocks==1.7.1
|
| 204 |
+
python-dateutil==2.9.0.post0
|
| 205 |
+
python-dotenv==1.1.0
|
| 206 |
+
python-multipart==0.0.22
|
| 207 |
+
pytorch-lightning==2.6.1
|
| 208 |
+
pytorchvideo==0.1.5
|
| 209 |
+
pytz==2026.1.post1
|
| 210 |
+
pyvista==0.48.4
|
| 211 |
+
pyviz-comms==3.0.6
|
| 212 |
+
pyyaml==6.0.3
|
| 213 |
+
qwen-vl-utils==0.0.14
|
| 214 |
+
readchar==4.2.1
|
| 215 |
+
regex==2026.2.28
|
| 216 |
+
requests==2.32.5
|
| 217 |
+
resampy==0.4.3
|
| 218 |
+
rich==14.2.0
|
| 219 |
+
rich-rst==2.1.0
|
| 220 |
+
ruamel-yaml==0.18.17
|
| 221 |
+
ruamel-yaml-clib==0.2.15
|
| 222 |
+
ruff==0.15.4
|
| 223 |
+
safehttpx==0.1.7
|
| 224 |
+
safetensors==0.7.0
|
| 225 |
+
scikit-image==0.25.0
|
| 226 |
+
scikit-learn==1.7.0
|
| 227 |
+
scipy==1.15.1
|
| 228 |
+
scooby==0.11.2
|
| 229 |
+
semantic-version==2.10.0
|
| 230 |
+
semver==3.0.4
|
| 231 |
+
sentencepiece==0.2.1
|
| 232 |
+
sentry-sdk==2.54.0
|
| 233 |
+
setuptools==80.9.0
|
| 234 |
+
setuptools==83.0.0
|
| 235 |
+
shellingham==1.5.4
|
| 236 |
+
simplejson==4.1.1
|
| 237 |
+
simsimd==6.5.15
|
| 238 |
+
six==1.17.0
|
| 239 |
+
smmap==5.0.2
|
| 240 |
+
sniffio==1.3.1
|
| 241 |
+
sortedcontainers==2.4.0
|
| 242 |
+
soundfile==0.13.1
|
| 243 |
+
soupsieve==2.8.3
|
| 244 |
+
soxr==1.0.0
|
| 245 |
+
standard-aifc==3.13.0
|
| 246 |
+
standard-chunk==3.13.0
|
| 247 |
+
standard-sunau==3.13.0
|
| 248 |
+
starlette==0.52.1
|
| 249 |
+
stringzilla==4.6.0
|
| 250 |
+
sty==1.0.6
|
| 251 |
+
sympy==1.13.3
|
| 252 |
+
tabulate==0.10.0
|
| 253 |
+
tensorboard==2.20.0
|
| 254 |
+
tensorboard-data-server==0.7.2
|
| 255 |
+
termcolor==3.3.0
|
| 256 |
+
threadpoolctl==3.6.0
|
| 257 |
+
tifffile==2025.5.10
|
| 258 |
+
timeout-decorator==0.5.0
|
| 259 |
+
timm==1.0.25
|
| 260 |
+
tinycss2==1.5.1
|
| 261 |
+
tokenizers==0.21.4
|
| 262 |
+
tomli==2.2.1
|
| 263 |
+
tomlkit==0.13.3
|
| 264 |
+
torch==2.10.0
|
| 265 |
+
torchaudio==2.10.0
|
| 266 |
+
torchcodec==0.11.0
|
| 267 |
+
torchlibrosa==0.1.0
|
| 268 |
+
torchmetrics==1.9.0
|
| 269 |
+
torchvision==0.25.0
|
| 270 |
+
tornado==6.5.7
|
| 271 |
+
tqdm==4.67.1
|
| 272 |
+
tqdm==4.68.4
|
| 273 |
+
transformers==4.52.0
|
| 274 |
+
triton==3.6.0
|
| 275 |
+
truststore==0.10.4
|
| 276 |
+
typer==0.20.0
|
| 277 |
+
typer-slim==0.20.0
|
| 278 |
+
types-regex==2026.2.28.20260301
|
| 279 |
+
typing-extensions==4.15.0
|
| 280 |
+
typing-inspection==0.4.2
|
| 281 |
+
tzdata==2025.3
|
| 282 |
+
uc-micro-py==2.0.0
|
| 283 |
+
urllib3==2.6.1
|
| 284 |
+
uv==0.10.0
|
| 285 |
+
uvicorn==0.41.0
|
| 286 |
+
validators==0.35.0
|
| 287 |
+
vtk==9.6.2
|
| 288 |
+
wandb==0.25.0
|
| 289 |
+
wcwidth==0.6.0
|
| 290 |
+
webdataset==1.0.2
|
| 291 |
+
webencodings==0.5.1
|
| 292 |
+
websocket-client==1.9.0
|
| 293 |
+
websockets==15.0.1
|
| 294 |
+
werkzeug==3.1.6
|
| 295 |
+
wget==3.2
|
| 296 |
+
wheel==0.45.1
|
| 297 |
+
xfuser==0.4.4
|
| 298 |
+
xlsxwriter==3.2.9
|
| 299 |
+
xxhash==3.6.0
|
| 300 |
+
xyzservices==2026.3.0
|
| 301 |
+
yacs==0.1.8
|
| 302 |
+
yarl==1.23.0
|
| 303 |
+
yunchang==0.6.3.post1
|
| 304 |
+
zipp==3.23.0
|
| 305 |
+
zstandard==0.25.0
|
reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/files/swanlab-metadata.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"_version":2,"hardware":{"apple_silicon":null,"cpu":{"brand":"INTEL(R) XEON(R) PLATINUM 8558","physical_count":96,"logical_count":192},"memory":{"total":2015,"total_unit":"GB"},"accelerators":[{"vendor":"nvidia","devices":[{"index":0,"name":"NVIDIA H200","memory":140,"memory_unit":"GB"},{"index":1,"name":"NVIDIA H200","memory":140,"memory_unit":"GB"},{"index":2,"name":"NVIDIA H200","memory":140,"memory_unit":"GB"},{"index":3,"name":"NVIDIA H200","memory":140,"memory_unit":"GB"},{"index":4,"name":"NVIDIA H200","memory":140,"memory_unit":"GB"},{"index":5,"name":"NVIDIA H200","memory":140,"memory_unit":"GB"},{"index":6,"name":"NVIDIA H200","memory":140,"memory_unit":"GB"},{"index":7,"name":"NVIDIA H200","memory":140,"memory_unit":"GB"}],"version":"570.124.06","cuda_version":"12.8","cann_version":null}]},"runtime":{"os":"Linux-5.15.0-119-generic-x86_64-with-glibc2.35","os_pretty":"Ubuntu 22.04.4 LTS","hostname":"dedicated-developjob-js-public-huvlx","pid":2475343,"cwd":"/private/codes/exp/haocheng_workspace/projects/Unified/src/umm","python_version":"3.10.0","python_verbose":"3.10.0 (default, Mar 3 2022, 09:58:08) [GCC 7.5.0]","python_executable":"/private/codes/exp/haocheng_workspace/projects/Unified/src/umm/.env/unvideo/bin/python","command":".env/unvideo/bin/python scripts/upload_eval_to_swanlab.py --result-dir outputs/evals/multibench/stage2_covt_from3k_bcd_2k-checkpoint-7000/blink_full_val --run-name H3_LoRA-ckpt7000-BLINK-val-retry"},"git":{"remote_url":null,"branch":null,"commit":null},"swanlab":{"version":"0.9.2","run_dir":"/private/codes/exp/haocheng_workspace/projects/Unified/src/umm/outputs/evals/multibench/stage2_covt_from3k_bcd_2k-checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7"}}
|
reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/run-fbdon9l7.swanlab
ADDED
|
Binary file (11.9 kB). View file
|
|
|
reports/evaluations/checkpoint-7000/cvbench_full_test/audit.json
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"accuracy": 0.8373768006065201,
|
| 3 |
+
"benchmark": "cvbench",
|
| 4 |
+
"checks": {
|
| 5 |
+
"all_inference_errors_zero": true,
|
| 6 |
+
"correct_flags_recomputed": true,
|
| 7 |
+
"expected_answers_exact": true,
|
| 8 |
+
"manifest_result_ids_exact": true,
|
| 9 |
+
"no_generation_hit_cap": true,
|
| 10 |
+
"published_core_metrics_recomputed": true
|
| 11 |
+
},
|
| 12 |
+
"config_scores": {
|
| 13 |
+
"2D": {
|
| 14 |
+
"accuracy": 0.7746870653685675,
|
| 15 |
+
"correct": 1114,
|
| 16 |
+
"samples": 1438
|
| 17 |
+
},
|
| 18 |
+
"3D": {
|
| 19 |
+
"accuracy": 0.9125,
|
| 20 |
+
"correct": 1095,
|
| 21 |
+
"samples": 1200
|
| 22 |
+
}
|
| 23 |
+
},
|
| 24 |
+
"correct": 2209,
|
| 25 |
+
"errors": 0,
|
| 26 |
+
"generated_tokens": {
|
| 27 |
+
"at_256_cap": 0,
|
| 28 |
+
"max": 94,
|
| 29 |
+
"median": 91,
|
| 30 |
+
"min": 88,
|
| 31 |
+
"p95": 93
|
| 32 |
+
},
|
| 33 |
+
"official_scoring": {
|
| 34 |
+
"formula": "((ADE20K accuracy + COCO accuracy) / 2 + Omni3D accuracy) / 2",
|
| 35 |
+
"official_2d_accuracy": 0.7666911973938555,
|
| 36 |
+
"official_3d_accuracy": 0.9125,
|
| 37 |
+
"official_cvbench_accuracy": 0.8395955986969277,
|
| 38 |
+
"source_scores": {
|
| 39 |
+
"ADE20K": {
|
| 40 |
+
"accuracy": 0.6998420221169036,
|
| 41 |
+
"correct": 443,
|
| 42 |
+
"samples": 633
|
| 43 |
+
},
|
| 44 |
+
"COCO": {
|
| 45 |
+
"accuracy": 0.8335403726708075,
|
| 46 |
+
"correct": 671,
|
| 47 |
+
"samples": 805
|
| 48 |
+
},
|
| 49 |
+
"Omni3D": {
|
| 50 |
+
"accuracy": 0.9125,
|
| 51 |
+
"correct": 1095,
|
| 52 |
+
"samples": 1200
|
| 53 |
+
}
|
| 54 |
+
}
|
| 55 |
+
},
|
| 56 |
+
"parse_rate": 1.0,
|
| 57 |
+
"parsed": 2638,
|
| 58 |
+
"samples": 2638,
|
| 59 |
+
"split": "test",
|
| 60 |
+
"task_scores": {
|
| 61 |
+
"Count": {
|
| 62 |
+
"accuracy": 0.6751269035532995,
|
| 63 |
+
"correct": 532,
|
| 64 |
+
"samples": 788
|
| 65 |
+
},
|
| 66 |
+
"Depth": {
|
| 67 |
+
"accuracy": 0.9483333333333334,
|
| 68 |
+
"correct": 569,
|
| 69 |
+
"samples": 600
|
| 70 |
+
},
|
| 71 |
+
"Distance": {
|
| 72 |
+
"accuracy": 0.8766666666666667,
|
| 73 |
+
"correct": 526,
|
| 74 |
+
"samples": 600
|
| 75 |
+
},
|
| 76 |
+
"Relation": {
|
| 77 |
+
"accuracy": 0.8953846153846153,
|
| 78 |
+
"correct": 582,
|
| 79 |
+
"samples": 650
|
| 80 |
+
}
|
| 81 |
+
}
|
| 82 |
+
}
|
reports/evaluations/checkpoint-7000/cvbench_full_test/metrics.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"metadata": {
|
| 3 |
+
"attention": "flash_attention_2",
|
| 4 |
+
"benchmark": "cvbench",
|
| 5 |
+
"checkpoint_step": 7000,
|
| 6 |
+
"created_utc": "2026-08-10T11:28:46.976887+00:00",
|
| 7 |
+
"decoding": "greedy",
|
| 8 |
+
"dtype": "bfloat16",
|
| 9 |
+
"embedding_rows": 151936,
|
| 10 |
+
"host": "dedicated-developjob-js-public-huvlx",
|
| 11 |
+
"input_image_count_distribution": {
|
| 12 |
+
"1": 2638
|
| 13 |
+
},
|
| 14 |
+
"manifest": "/private/codes/exp/haocheng_workspace/projects/Unified/src/umm/data/benchmarks/prepared/cvbench_full/manifest.jsonl",
|
| 15 |
+
"manifest_sha256": "2f2111f2dd3537bf39c495be5fe646e7c14bec825bd3b3a894697081b1709776",
|
| 16 |
+
"max_new_tokens": 256,
|
| 17 |
+
"model_path": "/private/codes/exp/haocheng_workspace/projects/Unified/src/umm/models/ckpts/stage2_covt_from3k_bcd_2k/merged/checkpoint-7000-merged",
|
| 18 |
+
"required_token_ids": {
|
| 19 |
+
"</answer>": 151935,
|
| 20 |
+
"</think>": 151668,
|
| 21 |
+
"<answer>": 151934,
|
| 22 |
+
"<think>": 151667,
|
| 23 |
+
"<|depth_pad|>": 151931,
|
| 24 |
+
"<|dino_pad|>": 151930,
|
| 25 |
+
"<|pidinet_pad|>": 151932,
|
| 26 |
+
"<|sam_pad|>": 151929,
|
| 27 |
+
"<|siglip_pad|>": 151933
|
| 28 |
+
},
|
| 29 |
+
"sample_limit": null,
|
| 30 |
+
"scoring": "deterministic option exact-match; no LLM judge",
|
| 31 |
+
"split": "test",
|
| 32 |
+
"tokenizer_length": 151936,
|
| 33 |
+
"world_size": 8
|
| 34 |
+
},
|
| 35 |
+
"metrics": {
|
| 36 |
+
"eval/cvbench_2d_accuracy": 0.7746870653685675,
|
| 37 |
+
"eval/cvbench_2d_samples": 1438.0,
|
| 38 |
+
"eval/cvbench_3d_accuracy": 0.9125,
|
| 39 |
+
"eval/cvbench_3d_samples": 1200.0,
|
| 40 |
+
"eval/cvbench_accuracy": 0.8373768006065201,
|
| 41 |
+
"eval/cvbench_config_macro_accuracy": 0.8435935326842837,
|
| 42 |
+
"eval/cvbench_covt_answer_tag_rate": 0.9992418498862775,
|
| 43 |
+
"eval/cvbench_covt_any_anchor_rate": 1.0,
|
| 44 |
+
"eval/cvbench_covt_depth_tokens_mean": 4.0,
|
| 45 |
+
"eval/cvbench_covt_dino_tokens_mean": 4.0,
|
| 46 |
+
"eval/cvbench_covt_pidinet_tokens_mean": 4.0,
|
| 47 |
+
"eval/cvbench_covt_sam_tokens_mean": 8.0,
|
| 48 |
+
"eval/cvbench_covt_siglip_tokens_mean": 4.0,
|
| 49 |
+
"eval/cvbench_covt_think_rate": 0.9996209249431387,
|
| 50 |
+
"eval/cvbench_errors": 0.0,
|
| 51 |
+
"eval/cvbench_parse_rate": 1.0,
|
| 52 |
+
"eval/cvbench_samples": 2638.0,
|
| 53 |
+
"eval/cvbench_seconds": 922.1189778796397,
|
| 54 |
+
"eval/cvbench_task_count_accuracy": 0.6751269035532995,
|
| 55 |
+
"eval/cvbench_task_depth_accuracy": 0.9483333333333334,
|
| 56 |
+
"eval/cvbench_task_distance_accuracy": 0.8766666666666667,
|
| 57 |
+
"eval/cvbench_task_macro_accuracy": 0.8488778797344787,
|
| 58 |
+
"eval/cvbench_task_relation_accuracy": 0.8953846153846153
|
| 59 |
+
}
|
| 60 |
+
}
|
reports/evaluations/checkpoint-7000/cvbench_full_test/rank_00.jsonl
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
reports/evaluations/checkpoint-7000/cvbench_full_test/rank_01.jsonl
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|