CVPR 2026

M3Grounder

Mask-Based Multi-Span and Multi-Granular Grounding for Document QA

Venkata Kesav Venna* · Sai Madhusudan Gunda* · Jyothi Swaroopa Jinka† · Hrithik Sagar Rachakonda† · Anirudh Srinivasan · Ravi Kiran Sarvadevabhatla
*, † equal contribution  ·  BharatGen · IIIT Hyderabad  ·  m3grounder.github.io

M3Grounder · In one picture

Any shape of evidence — one span or many

Single-span grounding on a map
(A) one span: <e>River Thames</e>[GROUND] → the curved river itself — no box could do this.
Multi-span grounding on a chart
(B) multi-span: the logo and three city rows each get their own mask, in one answer.
M3Grounder · In one picture

…and the same evidence at three granularities

Phrase, line and block granularity on a bank statement
(C1)–(C3) phrase ⊂ line ⊂ block on a bank statement — cite the number, redact the transaction row, or chunk the whole table. Same [GROUND] token, three nested masks.
M3Grounder · Task

What the model actually outputs

Q: “Which value is abnormal, and what does it indicate?”

A: "The report shows a low <e>MCV of 72.0 fL</e>[GROUND] which indicates <e>Microcytic anemia</e>[GROUND]"

phrase line block

fθ(x, q) → (â, {M̂k(i)}k=1…K)
each [GROUND] k → three nested masks, i ∈ {p, l, b}

Multi-span

K is free — one answer, many disjoint regions. K = 0 → M̂ = ∅, a plain answer.

Multi-granular

Different uses need different scopes: cite a number, redact a row, chunk a section.

M3Grounder · Architecture

VLM + three MLP heads + promptable segmenter

M3Grounder architecture

① VLM encodes page + question · ② answer with interleaved [GROUND] · ③ hidden states h̃k · ④ 3 granularity MLP heads
⑤ dense features z, encoded once · ⑥ mask decoder → hierarchical masks

Backbones: InternVL3.5-8B (-I) / Qwen3-VL-8B (-Q) · segmenter: SAM, backbone-agnostic · grounding adds +63 ms per sample (508 vs 445 ms, 1×H100)

M3Grounder · Interactive

The forward pass, animated — a lab report walks through the model

Click inside to drive it · Space pause · R restart · F fit — then use ‹ › to continue the talk open standalone ↗
M3Grounder · Training objective

One objective, four losses

λlm𝓛lm
+
λseg𝓛seg
+
λbleed𝓛bleed
+
λhier𝓛hier

𝓛lm

next-token cross-entropy — the answer text itself

𝓛seg

Dice + BCE on every mask, at each granularity

𝓛bleed NOVEL

stay on the text — no spilling into graphics

𝓛hier NOVEL

the three masks must nest: p ⊂ l ⊂ b

The two novel losses encode document priors the generic segmentation losses don't know about — next two slides.

M3Grounder · Novel loss ①

𝓛bleed — don't spill off the text

without 𝓛bleed: spills into the icon with 𝓛bleed: hugs the evidence
𝓛bleed =
mask mass off the text
whole mask

= Σ M̂ ⊙ (1 − Mtext) / (Σ M̂ + ε)  ·  Mtext = union of all text pixels

A fraction — a small mask is policed as strictly as a large one.

M3Grounder · Novel loss ②

𝓛hier — make the masks nest

block (GT) line (GT) phrase (pred.) escaped → penalized goal 𝓛hier → 0   ⇒   phrase ⊂ line ⊂ block
𝓛hier =
finer mask outside the coarser
finer mask

the coarser mask is the ground truth of the next level up · applied to (phrase→line) and (line→block)

74.0 → 78.2
GDQA F1g, phrase — from adding 𝓛hier alone

Charts are single-level — no line/block, so no 𝓛hier there.

M3Grounder · Data engine · pipeline ①

GroundingDocQA: 200K docs · 2M QA — no hand-drawn masks

Layout-aware documents pipeline

① 140K layout-aware documents

REPLICA rebuilds each page as ID-tagged "Fid-HTML" (1A–1C) → an LLM writes QA citing element IDs, never coordinates (1D) → post-processing maps IDs back to boxes, Hi-SAM turns them into masks (1E) → grounded QA pairs (1F–1G). Hallucinated geometry is impossible by construction.

M3Grounder · Data engine · pipeline ②

Curved text: highlight, then ask

Curved text pipeline

② 10K curved-text documents

curvature detection (2A) → the curved mask is overlaid on the page as a Set-of-Mark highlight (2B) → a VLM (2C) writes QA strictly about the highlighted region — the mask exists before the question does, so grounding is exact by construction.

M3Grounder · Data engine · pipeline ③

Charts: intercept the renderer

Charts pipeline

③ 50K charts

Renderer interception: execute the plot script (3A), record every element's true position at render time — axes, ticks, bars, legends (3B–3D) → a VLM writes QA against the ID-tagged elements → IDs map back to exact masks. No detection step, no guessing.

Every pair verified twice: E5-embedding similarity (span ↔ OCR of region) + LLM-judge (DeepSeek-R1) vs the source HTML · 52% single-span / 48% multi-span

M3Grounder · Benchmark

GDQA-Bench — human-verified evaluation

2.5K
documents — charts, reports, forms, tables, webpages, infographics
5K
QA pairs, manually curated & verified
3
mask granularities: phrase · line · block

Composition

geometry

70% straight
30% curved

spans

56.4% single
43.6% multi-span

Scoring

F1g at IoU > 0.5 — single-span, multi-span (bipartite matching), and a separate curved/skewed split · AQ by G-Eval judge.

Fairness: predictions are converted to each benchmark's native annotation format — boxes rasterized to masks, masks tightly boxed.

M3Grounder · Results

Boxes plateau. Masks jump.

Grounding F1 on GDQA-Bench

higher is better · 0–100

0255075100 GPT-5Qwen3-VL-8BGemini-2.5-ProQwen3-VL-8B ftM3Grounder-Q GPT-5 · 4.5 Qwen3-VL-8B · 12.8 Gemini-2.5-Pro · 43.4 Qwen3-VL-8B fine-tuned · 60.6 M3Grounder-Q · 79.0 4.512.843.460.679.0

…and vs the best prior on every other benchmark:

70.0 → 81.4
BoundingDocs-Test (vs Gemini-2.5-Pro)
66.4 → 73.3
DOGR-Bench (vs DOGR, same 8B scale)
49.4 → 68.2
MMDocBench IoU (vs Gemini-2.5-Pro)

Answers stay top-tier: AQ 88.8 on BoundingDocs (GPT-5: 89.3 with F1g 5.4).

M3Grounder · Ablations

Ablations

Setting (F1g ↑)BD-TDR-BMD-BGDQA-Bench
phraselineblock
w/o hierarchy (train phrase only)74.858.254.771.3
1× shared MLP + SAM64.261.753.563.669.377.6
𝓛lm + 𝓛seg78.370.165.674.077.684.4
+ 𝓛hier80.172.867.478.279.184.7
+ 𝓛bleed79.672.467.777.378.786.5
LoRA instead of full fine-tune62.454.852.761.567.375.7
M3Grounder-Q (all four losses)81.473.368.279.081.487.5

BD-T = BoundingDocs-Test · DR-B = DOGR-Bench · MD-B = MMDocBench, all at phrase level. Higher is better.

Three heads > one

A single shared prompt MLP drops phrase F1g to 63.6 (vs 79.0).

Hierarchy helps phrases

Training all 3 levels lifts phrase-only training from 71.3 → 79.0.

The two losses are complementary

Alone: +𝓛hier 78.2, +𝓛bleed 77.3. Together: 79.0.

LoRA can't localize

Fine-grained grounding needs full parameter updates: 61.5 vs 79.0.

M3Grounder · In the wild

Grounded answers, live — finance, legal, transcripts, charts

Takeaway #1SAM for documents: the VLM points via [GROUND], SAM turns it into a mask. · Tabs switch examples · Phrase / Line / Block = granularity open standalone ↗
M3Grounder · the team

Built by

VKVenkata Kesav Venna
Venkata Kesav Venna*
SMSai Madhusudan Gunda
Sai Madhusudan Gunda*
JSJyothi Swaroopa Jinka
Jyothi Swaroopa Jinka
HSHrithik Sagar Rachakonda
Hrithik Sagar Rachakonda
ASAnirudh Srinivasan
Anirudh Srinivasan
RKRavi Kiran Sarvadevabhatla
Ravi Kiran Sarvadevabhatla
BharatGen · IIIT Hyderabad   * equal contribution · † equal contribution

Thank you — questions?

M3Grounder project page QR
M3Grounder
m3grounder.github.io
BharatGenIIIT Hyderabad

M3Grounder (CVPR 2026)
BharatGen · IIIT Hyderabad