Orangerl commited on
Commit
bca45b0
·
verified ·
1 Parent(s): eb0c835

Update Stage-2 code, evaluations, handoff, and deployment skill

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. MANIFEST.sha256 +677 -16
  2. README.md +28 -0
  3. artifact_sources.yaml +21 -0
  4. code/umm/runtime/models/blip3o/data/covt_data_van.py +9 -1
  5. code/umm/runtime/models/blip3o/model/language_model/covt_qwen_stage2_van.py +9 -1
  6. code/umm/stage2_covt/cvbench_eval.py +366 -0
  7. code/umm/stage2_covt/eval_cvbench.py +263 -0
  8. code/umm/stage2_covt/eval_cvbench_base.py +390 -0
  9. code/umm/stage2_covt/eval_multibench.py +551 -0
  10. code/umm/stage2_covt/merge.py +23 -4
  11. code/umm/stage2_covt/run_train.sh +4 -0
  12. code/umm/stage2_covt/train.py +43 -0
  13. code/umm/stage2_covt/validate_checkpoint.py +78 -23
  14. code/umm/stage2_covt/validate_merged.py +118 -0
  15. configs/stage2_covt.template.yaml +4 -0
  16. configs/stage2_covt_from3k_bcd_2k.template.yaml +82 -0
  17. models/ckpts/stage2_covt_from3k_bcd_2k/merged/README.md +20 -0
  18. reports/PROGRESS_2026-08-11.md +190 -0
  19. reports/README.md +10 -0
  20. reports/cvbench_2k_3k_8k/01_experiment_summary.md +79 -0
  21. reports/cvbench_2k_3k_8k/02_text_output_cases.md +162 -0
  22. reports/cvbench_2k_3k_8k/03_methodology_and_validation.md +151 -0
  23. reports/cvbench_2k_3k_8k/04_presentation_talking_points.md +79 -0
  24. reports/cvbench_2k_3k_8k/05_base_baseline_comparison.md +71 -0
  25. reports/cvbench_2k_3k_8k/README.md +28 -0
  26. reports/cvbench_2k_3k_8k/SHA256SUMS +6 -0
  27. reports/evaluations/checkpoint-7000/REPORT.md +110 -0
  28. reports/evaluations/checkpoint-7000/audit_summary.json +302 -0
  29. reports/evaluations/checkpoint-7000/blink_full_val/audit.json +169 -0
  30. reports/evaluations/checkpoint-7000/blink_full_val/metrics.json +97 -0
  31. reports/evaluations/checkpoint-7000/blink_full_val/rank_00.jsonl +0 -0
  32. reports/evaluations/checkpoint-7000/blink_full_val/rank_01.jsonl +0 -0
  33. reports/evaluations/checkpoint-7000/blink_full_val/rank_02.jsonl +0 -0
  34. reports/evaluations/checkpoint-7000/blink_full_val/rank_03.jsonl +0 -0
  35. reports/evaluations/checkpoint-7000/blink_full_val/rank_04.jsonl +0 -0
  36. reports/evaluations/checkpoint-7000/blink_full_val/rank_05.jsonl +0 -0
  37. reports/evaluations/checkpoint-7000/blink_full_val/rank_06.jsonl +0 -0
  38. reports/evaluations/checkpoint-7000/blink_full_val/rank_07.jsonl +0 -0
  39. reports/evaluations/checkpoint-7000/blink_full_val/results.jsonl +0 -0
  40. reports/evaluations/checkpoint-7000/blink_full_val/swanlab.json +6 -0
  41. reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/.gitignore +1 -0
  42. reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/debug/debug.log +1 -0
  43. reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/files/config.yaml +89 -0
  44. reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/files/requirements.txt +305 -0
  45. reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/files/swanlab-metadata.json +1 -0
  46. reports/evaluations/checkpoint-7000/blink_full_val/swanlab_retry/run-20260810_115147-fbdon9l7/run-fbdon9l7.swanlab +0 -0
  47. reports/evaluations/checkpoint-7000/cvbench_full_test/audit.json +82 -0
  48. reports/evaluations/checkpoint-7000/cvbench_full_test/metrics.json +60 -0
  49. reports/evaluations/checkpoint-7000/cvbench_full_test/rank_00.jsonl +0 -0
  50. reports/evaluations/checkpoint-7000/cvbench_full_test/rank_01.jsonl +0 -0
MANIFEST.sha256 CHANGED
@@ -1,7 +1,19 @@
 
1
  d7652f9729f8fb44dc54e150b982b31272184a6f37e0100650e95a2ad0687bf5 .gitignore
2
- babc924b26c02a2d7a0f8f4937e501a4f4c9a6106dd6b6f60a51d12a5974ad41 README.md
3
- 195b715fa936543c5040aff8458654990ec4f0d57f2616a26ef4ec9c4028f3bc artifact_sources.yaml
 
 
 
 
 
 
 
 
 
 
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
- 74cc9685ecc2c85729bc316ef25f4e9dc5bcb29d7f2113414d8336d896f7289f code/umm/runtime/models/blip3o/data/covt_data_van.py
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
- 0ebfc7da6b74da65bf22595715a7a69f38da100d73668ce885868587fa0d1f0d code/umm/runtime/models/blip3o/model/language_model/covt_qwen_stage2_van.py
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
- 168635048ac0b43c6f0c1fa8fa66b781c4974accc429f9d71b7da92b0a7acab7 code/umm/stage2_covt/merge.py
422
  1d2a3cc935c47be2bbdc149296c75de099c8ba77bd2bd99602131b880a8a886e code/umm/stage2_covt/run_merge.sh
423
- 3463be53dad869b736938b4223161e640aaf0313338789167d8a9a5d2f1d83ed code/umm/stage2_covt/run_train.sh
424
  5b8cb57589b03e3789058cd340bd9663cdf20df43ee89649d3ae53977ccbce9d code/umm/stage2_covt/setup_umm_env.sh
425
  f8d2d9aefdd02bc37dd169284ab0c1b15d3b75f8c9987ea29de89fe5fc43cfe7 code/umm/stage2_covt/smoke_vggt_teacher.py
426
- eea0f75ba9259e797cecc8d14b9b77434d5dae6c49a29bbb00d5e68681add3f4 code/umm/stage2_covt/train.py
427
- 5dc8838fe92ad471e2a6be78bc50b0e403141a0c6b7a7a89f68781f65aacbe4f code/umm/stage2_covt/validate_checkpoint.py
 
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
- 7695038c3ff81bad0eacee47a134b8ab56516a15af297138cbd4b5c058078004 configs/stage2_covt.template.yaml
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- 8f6aa66d788e1d6215b9f4252f4272f627444328e6606ca3edd4c1c1ee2d1b33 scripts/bootstrap.sh
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- 501396830754493f51a2c370c82335b31d1a247705a4bf3c3e70149a18dd2c11 scripts/render_config.py
677
- 046bf608c7532e0c38f3280c15c7c1fdaae6a36c6318432b78d59b1492840a84 scripts/render_manifest.py
678
- f40bdc82dcd4f9864e76a2a85b1b88652a9274b7084b231748760d63821f4f2a scripts/upload_hf.sh
 
 
 
 
 
 
 
 
679
  577f75ad96f55302c32ee84805dad02ee988e796dcdc1642bc26382b3033c408 scripts/verify_bundle.py
680
- c4bba505dcfa5e6b269fa5f3639afbf886103a65e0079bc5ddd454d35ffa0230 skills/deploy-umm-stage2/SKILL.md
681
- d7d793c4e6d83fd6a5d8999413feee1512f432a302f10749e66e29dc7427fdb6 skills/deploy-umm-stage2/agents/openai.yaml
682
- 9dbf7964be5affc65a4f3b47bbb7189d1510ad776b4833b2b504ed5edf93e29d skills/deploy-umm-stage2/references/layout.md
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
- print(f"[Dataset] cur_step has been set to {step}")
 
 
 
 
 
 
 
 
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, skip_special_tokens=True, clean_up_tokenization_spaces=False
 
 
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
- (k[11:] if k.startswith("base_model.") else k): v for k, v in state.items()
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
- config = json.loads((root / "config.json").read_text(encoding="utf-8"))
56
- for name, expected in EXPECTED_GEOMETRY.items():
57
- actual = config.get(name)
58
- if actual != expected:
59
- raise AssertionError(f"config.{name}={actual!r}, expected {expected!r}")
 
 
 
 
 
 
 
 
 
 
 
 
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 expert_geometry:
68
- value = expert_state[key]
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
- non_lora_geometry = _geometry_keys(non_lora_state)
80
- if set(non_lora_geometry) != set(expert_geometry):
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
- "VGGT geometry keys differ between expert and merge sidecars: "
85
- f"missing={missing_from_merge}, extra={extra_in_merge}"
86
  )
87
- for key in expert_geometry:
88
- if expert_state[key].shape != non_lora_state[key].shape:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  raise AssertionError(
90
- f"VGGT tensor shape mismatch for {key}: "
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
+ ![3D-058](../../data/cvbench_500/images/3D_058_row0252.jpg)
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
+ ![3D-158](../../data/cvbench_500/images/3D_158_row0746.jpg)
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
+ ![2D-002](../../data/cvbench_500/images/2D_002_row0023.jpg)
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