Release v1.1.1#

Release notes for the medvision_bm codebase, v1.1.1. This is the version this documentation set describes; use the version switcher (bottom-right on Read the Docs) to read the docs for a different release.


New Model Evaluations#

  • Claude (Anthropic API / OpenRouter): adaptive thinking + a 28px-grid pre-resize so the prompt’s stated image/pixel size matches what the model perceives (ead5ae0); finalized eval scripts and pinned requirements_eval_claude.txt (91e14d9)

  • Gemini (Google Gemini API / OpenRouter): pass-through resize with a 3072px client-side guard and per-model image caps (47210fb)

  • OpenAI/GPT (OpenAI API / OpenRouter): patch-budget resize rule and per-model image caps (a0c5d84); added non-Pro GPT-5.5 scripts and capped --reasoning_effort/--max_tokens on all 6 GPT scripts to control runaway cost (cace62c)

  • Kimi K2.6: OpenAI-compatible API model with MoonViT floor-28 fixed-point resize and a per-model patch-budget table (e3cf881)

  • GLM-4.6V and GLM-4.6V-Flash: vLLM wrapper covering both the MoE and dense checkpoints, with reasoning-model sampling and a perceived-size resize probe (238f84b); fix GLM-4.6V environment setup (a76f382)

  • MiniMax-M3: vLLM wrapper with a perceived-size probe (a070f93); MiniMax-M3-INT4 (AWQ) on 4xH100 with CUDA-13 forward-compat fixes (1e67af7); experimental MiniMax-M3 (MXFP8) for >=8x80GB GPUs with a fail-fast aggregate-VRAM guard (91a0cc8)

  • Gemma 4 and Qwen3-VL(-Thinking): vLLM wrappers with thinking-mode support and reasoning-content merge (98b0aa9)

  • Unify HealthGPT-L14/XL32 into a single healthgpt model key, selectable via a new --model_choice CLI arg (cf52d7d, 7efb72a)

  • MedVision-V0-7B: benchmark eval scripts and environment (ae972d8); full HF model card covering the two-stage SFT+RFT recipe, <think>/<answer> output contract, and licensing, later revised for clarity and CC-BY 4.0 (575254e, 1002189, 84e8aa7)


New Metrics#

  • F1/Precision/Recall for Detection and per-sample nMAE for TL/AD added to the parsed JSONL output (1f4cc6c)

  • Step 1/2 raw L2 distance replaced by normalized L2 distance (÷√2) in the TL/AD process-accuracy scripts, making localization error comparable to the step 3/4 nMAE (986d4ea)

  • nMAE for -scaledPS files reconstructed via a BLAKE2B hash when pixel_size_scale wasn’t stored in the raw JSONL (677ccc4)


New Analyses#

  • Detection box-size analysis pipeline: per-bin Recall/Precision/F1 vs. a simulated random-detection baseline, plus a per-label × box-size visualization (4575d66, a9e2326, 9242e1b, 80508e0)

  • Removed-samples filtering added to the TL equation-/process-accuracy scripts to exclude samples dropped between dataset v1.0.0→v1.1.0 (a4a835f); later dropped from the response-visualization scripts as obsolete once dataset v1.1.1 changed which samples were removed (0719acb)


Visualization#

  • Per-sample overlay and response-visualization scripts for TL/AD/Detection tasks (c6bfea4, fcac4cf), made robust to missing or unparseable predictions (eb97ad0)

  • Radar-chart and cross-model comparison-grid compilation scripts with batch runners (4739c79, c4ca65f)

  • plot_utils extended with AD landmark plotting and a GT axis overlay for TL (130583f)

  • export_webpage_cases for the project webpage’s interactive case viewer, with dual-origin off-the-shelf rendering and a demo gallery seeded from MedVision-V0-7B (9a76fd4, 563e9c7, c205333, 6a9fbdf)

  • Image-vs-real-space ellipse-fit comparison figures illustrating the v1.1.1 TL bug (0a9ca53)

  • All figures capped at arXiv’s 34-megapixel per-image limit; transparent backgrounds and --save_as_png/--save_as_pdf output flags added (c0afb27, d4bc9d3)


Key Bugfixes — Image Perception & Generation Truncation#

  • Critical: get_resized_img_shape() returned a single shape used for both the stated image size and the pixel size; split into a (perceived-canvas, content) pair so padding models — LLaVA-OneVision, InternVL3, Llama-3.2-Vision, LLaVA-Med, HuatuoGPT-Vision, HealthGPT-L14 — report the correct TL/AD image size and pixel scale; off-the-shelf runs on non-square inputs should be re-evaluated (0a4c5e2)

  • Critical regression: lmms-eval’s fewshot-delimiter "\n\n" was being forwarded as a vLLM generation stop for every model, truncating CoT answers before <answer> (0% parseable answers observed for InternVL3-38B/Llama-3.2-Vision); removed the default until-forwarding and gated string stops on --stop_strings only, generalizing the earlier Gemma 4-specific fix (2eb7706, 18aa18a)

  • --stop_strings wired end-to-end through HuatuoGPT-Vision and LLaVA-Med to stop truncated outputs (de6ae15, a766b35)

  • min_new_tokens=16 floor prevents empty LLaVA-Med responses from greedy premature-EOS (556f0b1)

  • Fix scaledPS process-accuracy scoring against the scaled ground truth instead of the unscaled one; restore the missing MedVision-V0 scaledPS eval scripts (f6fc5e6)

  • Balance parentheses in the angle-formula CoT prompt (ae29149)


Key Bugfixes — Metrics & Summarization Pipeline#

  • Exit nonzero when lmms_eval swallows an evaluation error, so vLLM-driver eval scripts correctly mark crashed tasks as incomplete instead of “done” (813b350; paired with raising eval subprocess verbosity to INFO across the 9 remaining vLLM drivers in ee7d5f9)

  • Detection-metric parse failures now count as 0 (not NaN) in IoU/F1/Precision/Recall, matching the authoritative summarizer; fixed a crash in the no-CoT verl detection formatter (6e90af4)

  • Exclude _proc_acc/_eq_acc/_filtered sidecar JSONLs and cross-analysis outputs from the summarize/collection steps, preventing crashes and double-counted results (8644f91, 313ff45, 641517b, ba111a2)


Robustness Hardening (Audit-Driven)#

  • Replace exec() of model-generated code in tool-execution with an AST-restricted evaluator that rejects dunder/attribute/subscript/import escapes; redact secrets from evaluation-tracker logs; deterministic per-task dataset ordering to fix non-deterministic RFT crash-resume; report angle pixel size in millimeters, not degrees (742c484)

  • Replace eval() with ast.literal_eval for JSONL targets, add a robust numeric parser, and seed the weighted sampler and SFTConfig for reproducibility (28f6c67)


Dataset v1.1.1 Integration#

  • Release the MedVision dataset v1.1.1, fixing a TL anisotropic ellipse-fit bug (transposed in-plane voxel spacing); ~22% fewer TL samples on anisotropic data (fe27464)

  • Set MedVision_ACK_RELEASE=1.1.1 across benchmark/SFT scripts still pinned to older MedVision_PLANNER_VERSIONs, acknowledging the new release-acknowledgement gate (5f35017); set MedVision_PLANNER_VERSION explicitly in SFT training scripts, required since medvision_ds v1.1.0 (01557f3)

  • Add versioned v1.1.1 task lists (A/D, T/L, Detection) and a per-task pixel-size-distribution summarizer over MedVision configs (3673558, 77a00ea, a9947a3)

  • Share lmms_eval_specific_kwargs via a YAML include across landmark base configs; drop stale TL-OOD task lists (7a18805)


OOD Ablation#

  • Add MedVision-V0-7B eval scripts for plane-OOD and task-OOD ablation on TL and Detection tasks, evaluating generalization to unseen slicing planes and unseen anatomical targets; renamed the corresponding task-list JSONs to the -CoT-<split> naming convention used elsewhere (2673ce5)


SFT / RFT#

  • Fix: SFT loss masked to train only on the assistant response (not the full prompt+response sequence) in the Qwen2.5-VL collate (9945b05)

  • Feat (experimental): full-parameter and LoRA SFT scripts for MedGemma-27B, Gemma-4-31B, and Qwen3-VL-27B (0e2c0eb)

  • Feat: parquet dataset building scripts for RFT in verl (7f638e3)


Infrastructure / Install#

  • Persist per-sample model outputs to a resumable, prompt-hash-keyed JSONL cache so an interrupted eval run only re-does the in-flight sample (783dddb)

  • Build the medvision_bm wheel in a private temp dir instead of the repo tree, fixing intermittent build failures on shared CephFS checkouts (473a4fd)

  • Write task-status JSON atomically (temp file + fsync + os.replace) to survive full-disk writes (3c01bea)

  • Standardize install method and pin MedVision_PLANNER_VERSION='1.0.0' across all 38 benchmark eval scripts; rename eval script filenames to consistent Title Case and drop dead gemini keys (702c392, 7ba7f9a)

  • Relax scipy/nibabel/matplotlib version pins to fix environment setup conflicts (69f7afe)

  • Auto-format all Python and shell sources with black/isort/shfmt (cosmetic only) (bfcf773)


Documentation#

  • Add a Read the Docs documentation site (Sphinx + MyST) with autodoc/autosummary API reference over all importable modules (f1102c5)

  • Change codebase license to CC-BY 4.0 (3633fea, 1002189)

  • Document each model’s perceived-resolution strategy in docs/Model-Image-Processing.md; restructure the doc and drop the superseded perceived-size bugfix page (e930941, 8573eca)

  • Refresh README News, Quick Start, benchmarked-models list, and reference links throughout the release cycle (a168350, cb40b43, 7564b9a, 0b7106d, 58a63e3, 4a184f0, 9fe1f96, 6ffe47f, 0719acb)