EmergentTwilight/MMCoT / docs /visual_quality.md
EmergentTwilight's picture
|
download
raw
3.69 kB

Offline Rollout Visual Quality

zebra_sft.score_visual_quality is a standalone analysis workflow for saved Visual-Jigsaw interleaved rollouts. It is intentionally not part of canonical task evaluation and never changes an eval run.

Pairing contract

The join key is (sample_id, one_based_generated_state_index). The eval arguments.json selects the packed cache; sample_id resolves its exact manifest shard/index and source Parquet coordinate. Image index follows the ordered assistant generated_state events. Paired metrics are emitted only when expected and generated image counts match. This is a positional protocol alignment, not proof that the model assigned the same semantics to each step.

Raw BSQ comparison additionally requires identical code topology. Pixel and perceptual metrics require relative aspect-ratio error at most 10%; the generated RGB is then bicubic-resized to fixed reference coordinates. Larger mismatches remain explicit geometry failures and receive semantic metrics only.

Metrics

  • Native: BSQ bit accuracy, fractional/absolute Hamming distance, exact visual token agreement.
  • Pixel: MSE, PSNR, SSIM, adaptive-level MS-SSIM.
  • Perceptual: LPIPS and DISTS from PIQ 0.8.0.
  • Semantic: image-image cosine from DINOv2-base and CLIP ViT-B/32.
  • Completeness: image-count match, blank-image rate, resolution/aspect diagnostics, and adjacent near-duplicate rate. A near duplicate requires DINO cosine at least 0.995 and LPIPS at most 0.02.

Every metric is reported both image-weighted and trajectory-balanced; the latter first averages image indices within a sample so four-image trajectories do not receive four times the weight.

Fixed dependencies

Install the analysis-only dependency without changing the training package:

mamba run -n UniAR python -m pip install -r experiments/requirements-visual-quality.txt

Local semantic checkpoints are fixed to:

  • facebook/dinov2-base at f9e44c814b77203eaa57a6bdbbd535f21ede1415;
  • openai/clip-vit-base-patch32 at 3d74acf9a28c67741b2f4f2ea7635f0aaf6f0268.

Command

Run on a scheduler-assigned CUDA device. Decode and scoring are separately resumable phases; all performs both while unloading the diffusion decoder before loading metric networks.

PYTHONPATH=OURS/src:experiments/src mamba run -n UniAR \
  python -m zebra_sft.score_visual_quality \
  --eval-run experiments/output/zebra-cot-visual-jigsaw/runs/eval/<eval-run> \
  --output-dir experiments/output/uniar-sft/zebra-cot-visual-jigsaw/unversioned/runs/visual-quality/<run> \
  --phase all --resume

The output contains deterministic decoded PNGs, atomic per-sample metrics, sample_metrics.jsonl, summary.json, report.md, and COMPLETE. Existing eval artifacts remain read-only.

A campaign containing one child output per eval can be aggregated on CPU:

PYTHONPATH=OURS/src:experiments/src mamba run -n UniAR \
  python -m zebra_sft.summarize_visual_quality \
  --campaign-dir experiments/output/uniar-sft/zebra-cot-visual-jigsaw/unversioned/runs/visual-quality/<campaign>

This writes comparison.json, comparison.csv, and a compact comparison.md table using trajectory-balanced headline metrics.

For many eval runs, zebra_sft.roll_visual_quality_campaign first freezes one source snapshot per child, submits them through Delta's regular gpuA100x4 partition, polls completion, resubmits incomplete/time-limited children from their exact snapshots, and invokes the campaign summary when all are complete. The interactive partition is intentionally not used for campaigns because its partition QoS permits only one running and two submitted jobs per user.

Xet Storage Details

Size:
3.69 kB
·
Xet hash:
0592910d79db55f22238ba89f833a586bd3f77fe7f63474e6b4d9a421584a6ff

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.