LLaVA-OneVision-2: Towards Next-Generation Perceptual Intelligence

Paper: arXiv:2605.25979 Code: EvolvingLMMs-Lab/LLaVA-OneVision-2 Code reference: main @ 67b01cf1 (2026-05-27)

1. Motivation (研究动机)

现有 8B 级 open video MLLM 在架构上已经形成固定范式:Vision Transformer backbone 把少量均匀采样帧编码成视觉 token,connector 投影到 LLM embedding space,再由 Qwen/LLaMA/InternLM 类 decoder 做 instruction following。这个范式在短视频问答和 image/document benchmark 上已经很强,但它把视频压缩问题简化成“选多少帧”:常见 8—32 帧均匀采样会丢掉时间轴上绝大多数证据;即使提高帧数,保留下来的每帧也通常要贡献整张图的 patch token,无法把有限 token budget 精确投给运动/变化最密集的局部区域。

本文要解决的核心问题是:在保持一个统一 image/video/spatial VLM 架构的前提下,如何让模型在长视频、细粒度 temporal grounding、spatial grounding 和 tracking 中看到更“事件相关”的视觉证据,而不是用固定 frame slot 平均分配 token。作者把这个问题称为 next-generation perceptual intelligence:模型不只是回答“视频里有什么”,还要在长时间跨度里定位“什么时候发生”、在局部空间里指出“哪里发生”、并在 robot manipulation trace 中维持物体轨迹。

这个问题值得研究,是因为 video MLLM 的瓶颈不只在语言模型容量,而在 observation interface。若观察接口只提供稀疏均匀帧,LLM 再强也难以恢复被采样器丢掉的高频动作边界;若每个高运动帧都整帧保留,又会迅速耗尽视觉 token。LLaVA-OneVision-2 的价值在于把压缩视频本身的 bit-cost / residual structure 变成视觉 token 分配信号:把 I/P codec stream 视为“哪里变化大、哪里值得看”的免费先验,从而让 8B 模型在 JumpScore、RVOS、spatial benchmark 上出现明显差异化。

Figure 1 解读:这张 roadmap 把 video understanding 的接口演化分成多个阶段:早期 hand-crafted visual feature / sparse frame sampling 只在时间轴上取少量点;后续方法做 heuristic token compression 或 learned token selection;LLaVA-OneVision-2 试图进入 codec-aligned paradigm,即利用压缩流中的 bit-cost 与 residual cue 决定 temporal group 和 spatial patch 选择。它强调本文的贡献不是单纯扩大训练集,而是改变视频进入 VLM 的观察单位。

2. Idea (核心思想)

核心洞察是:视频压缩流已经隐含了“哪些时间段预测困难、哪些区域运动/残差大”的信息,MLLM 不必先把视频均匀拆成帧再丢弃大部分 patch,而可以直接用 codec bit-cost 动态划分 temporal groups,并用 motion/residual saliency 选择 P-canvas 里的关键 patch。这样,在相同 token budget 下,视觉 token 更集中于 event-bearing content。

LLaVA-OneVision-2 的创新可以概括为三层:第一,用 OneVision-Encoder + shared 3D RoPE 统一 static image、uniform sampled video 和 codec-stream video;第二,用 codec-stream tokenization 将长视频转成 I/P visual canvases、token metadata 和 bit-cost-adaptive GOP;第三,用四阶段 data/training recipe 把短视频 caption、long video caption、spatial QA、point tracking 逐步注入同一个 8B model。

与 Qwen3-VL / InternVL-3.5 等同规模 baseline 的根本差异在于观察策略。它们主要依赖均匀采样或固定 frame budget;LLaVA-OneVision-2 在 Stage 4 中对 10—15 min caption corpus 做 codec-stream re-encoding,用 P/B packet bit-cost 触发 GOP boundary,并用局部 residual cue 选择 spatial evidence。因此它不是给 LLM 加一个 task-specific tracking head,而是改变进入视觉 encoder 的 token evidence distribution。

3. Method (方法)

3.1 Overall framework:统一 visual-token interface

LLaVA-OneVision-2 的模型路径仍然是标准 MLLM 三段式:OneVision-Encoder 产生 visual embeddings,two-layer MLP connector 投影到 language embedding space,autoregressive LLM decoder 做 next-token prediction。关键变化在 encoder 输入侧:sampled-frame videos、codec-stream videos 和 static images 都被表示为带 3D position 与 group assignment 的 visual tokens。connector 和 LLM 不读取 codec metadata;codec-stream 只通过“选择哪些视觉证据”和“哪些 token 在 encoder self-attention 中可见”影响模型。

Figure 2 解读:Figure 2 展示三类输入共享同一条 encoder—connector—decoder 路径。static image 退化为单一 temporal group;uniform sampled video 使用固定 frame/group;codec-stream video 则被转成 I/P canvases,并把来自同一 variable-length GOP 的 token 设为 group-visible。因为下游 connector 与 LLM 完全一致,模型能力差异主要来自视觉证据分配,而不是额外 task branch。

直觉上,这个设计把“compression”从事后丢 token 的补丁,前移成视觉编码的输入组织原则。长视频中真正稀缺的是注意力和 token budget;若先按时间均匀采样,模型会浪费大量 token 在静止帧或低信息区域。codec-stream 让高 bit-cost 时间段获得更细的 temporal segmentation,让高 residual patch 获得更多 spatial slots,再用 shared 3D RoPE 把这些不规则 token 放回统一时空坐标中。

3.2 Codec-stream tokenization:从压缩流到 I/P canvases

论文定义 codec front-end 为: 其中 是 I/P visual canvases, 记录每个 visual token 的 canvas index、source frame id、canvas coordinate、source-frame coordinate 与 group id 是 codec groups。packed canvas coordinate 用于把 patch 放进紧凑画布,source coordinate 用于保持真实空间来源。

GOP partition by bit-cost

作者先把视频划成 个时间 bin,每个 bin 聚合 P/B-frame packet size: 是 bin-level prediction bit-cost, 是目标 GOP 数 下的平均 bit-cost quota。I-frame packet 被排除,因为它更反映 intra-frame spatial complexity;P/B packet 更能暴露 motion 与 residual change。边界触发规则为: 触发后,边界还会向附近 bit-cost valley 对齐:

Figure 3 解读:Figure 3 用 448 个 sampled frames 的例子说明 cumulative bit-cost 如何决定 group boundary。蓝色峰值对应 rapid motion、viewpoint change 或 abrupt transition;橙色曲线在每个 group 内累积并接近红色阈值后重置;绿色虚线是最终 group boundary。该图说明 codec-stream 的 temporal granularity 由“预测难度”而非固定秒数决定。

P-canvas packing by stratified temporal allocation

对每个 codec group ,候选 2×2 patch block 写作 。若直接全局选择最高 ,会让一个高响应帧占满 P-canvas;因此作者先按帧内 rank 做衰减,再得到 frame-level allocation mass: 再按时间顺序构造累计 saliency curve: 若 group 分到 个 P-canvas,则第 个 canvas 从 对应的累计 saliency 区间抽取高分且不重复的 blocks;候选不足时向邻近帧扩展,最后回退到 group-level top candidates。这保证局部高响应帧不会完全支配 group,同时保留非常 localized 的关键区域。

Figure 4 解读:Figure 4 将 codec-stream tokenization 的流程可视化:从 compressed stream 提取 I-frame anchors 和 P/B residual cues,按 bit-cost 划分 temporal groups,再把 motion/residual-rich patch 打包成 P-canvases。图中最关键的是 I/P canvas 与 group-visible assignment 的配合:I-canvas 提供空间基准,P-canvas 提供变化区域,group id 决定 token 在 encoder 中的可见范围。

3.3 Shared 3D RoPE 与 group-visible attention

sampled-frame、codec-stream 和 static image 共享 patch embedding 与 3D positional encoding。区别在 group assignment:sampled-frame/IPPP-style 输入使用 fixed four-slot groups;codec-stream 使用 bit-cost-adaptive GOP id ,使同一个 variable-length GOP 中跨 P-canvases 的 token 互相可见;static image 则是 single-temporal group。这一设计让模型用同一组 OneVision-Encoder 参数处理不规则 codec token 与普通帧 token。

released code 中,transformers_impl/llavaonevision2/video_processing_llava_onevision2.py::build_patch_positions 会输出 [sum(T*H_p*W_p), 3](t,h,w) block-layout positions,并优先使用真实 source frame indices 作为 RoPE 的 坐标;modeling_llava_onevision2.py::VisionRotaryEmbedding.forward_from_positions 根据 explicit patch positions 计算频率;LlavaOnevision2VisionPretrainedModel.forward 再用 patch_positionsgrid_thw 进入 vision tower。这与论文“保留 source temporal coordinate”的目标一致。

论文公式与 released code 实现差异:截至 main@67b01cf1,仓库中未找到 bit-cost / GOP / codec-stream tokenization 的直接实现(全文搜索 bit-cost, bit_cost, codec-stream, gop 均无 Python 实现;codec stream 只在 README 出现)。公开代码提供了 LLaVA-OneVision-2 的 HF/Megatron 模型、uniform video processor、3D RoPE / patch position、训练脚本与 quick start;论文中的 codec-stream GOP partition 与 P-canvas packing 需要按论文算法另行实现或等待后续释放。因此下列第一段 pseudocode 是论文算法草图,后续 pseudocode 对应 released code。

3.4 Data and training recipe:四阶段逐步扩展视频长度与空间监督

Stage 1:从 LLaVA-OneVision-1.5 bootstrap video ability

Stage 1 从 image-pretrained LLaVA-OneVision-1.5 8B checkpoint 初始化,混合 LLaVA-OneVision-1.5-Mid-Training-85M 与新的 30s-Video-Caption-4.2M。每个视频 caption 覆盖 0—30s,按 1 fps、最多 30 frames 采样;此阶段不使用 codec-stream。

Stage 2:instruction tuning + 30—180s video captions

Stage 2 加入 LLaVA-OneVision-1.5-Instruct-Data(约 22M)、HuggingFaceM4/FineVision(约 24M)、30—60s-Video-Caption-2.7M,以及 60—180s-Video-Caption-700K。最大 frame budget 从 30 提到 90,仍使用 standard frame sampling。

Stage 3:long video understanding

Stage 3 加入 LLaVA-Video-178K、VideoChat-Flash-Training-Data 与 10min—15min-Video-Caption-350K,将最大 frame budget 提到 384。此阶段仍是 standard frame sampling,主要让模型先在长视频 caption/instruction 上获得时间连续性。

Stage 4:codec-stream + spatial supervision

Stage 4 对 10—15min caption corpus 使用 variable-length-GOP、bit-cost-scored codec pipeline,并在 384 与 768 frames 两种预算下复用同一 caption corpus;其余 instruction、spatial QA、Molmo2-VideoTrack 和 Molmo2-VideoPoint 仍按各自标准格式输入,不做全局 codec-stream preprocessing。空间监督来自 LLaVA-OneVision-2-Spatial-4M,覆盖 size、direction、count、distance、appearance order,来源包括 annotated indoor scans、embodied-simulator trajectories 和 pseudo-annotated web video frames。

Figure 5a–5b 解读:左图给出 video-caption corpus 的 token-volume composition:总计 7.96M clips、104.1B tokens,覆盖 30s 到 10—15min 四个时长 bucket;右图给出 4M spatial corpus 的组成,目标是把 video understanding 扩展到 2D/3D spatial relation、pointing、referring expression 和 embodied traces。这里的数据设计与模型接口相互配合:Stage 1—3 逐步拉长时间跨度,Stage 4 才引入 codec-stream 与空间监督。

3.5 JumpScore benchmark:高频重复动作的 temporal localization

JumpScore 针对 standard temporal grounding benchmark 不充分覆盖的场景:高频、重复、相邻 cycle 视觉近似的动作。它包含 189 个 in-the-wild jump-rope videos,标注每个 cycle start 的 decimal-second timestamp;cycle start 被定义为绳子从腿后通过的时刻。评估指标使用 JumpScore mAP,关注模型能否在高频重复运动中定位 cycle boundary,而不只是找到一个宏观 event interval。

Figure 6 解读:Figure 6 展示四个 JumpScore clip,每个 clip 展开成一个 jump-rope cycle 的五帧。第一帧和最后一帧都是 ground-truth cycle start,场景包括 warehouse、office、sports court 和 tiled corridor。该图说明 JumpScore 难点在于相邻周期外观高度相似,模型需要对时间边界和细微姿态变化敏感。

3.6 Pseudocode(paper algorithm + released code path)

3.6.1 Codec-stream tokenization(论文算法草图;released code 未找到对应实现)

import math
import torch
 
 
def codec_stream_tokenize(packets, frames, k_target, delta, t_min, t_max,
                          lambda_rank=0.5, alpha_peak=0.2, p_canvases_per_group=4):
    # packets: compressed video packets with {kind in {I,P,B}, pts, bytes}
    # frames: decoded frame/patch saliency source; returns 2x2 block scores A[t,i,j]
    B = math.ceil(max(p.pts for p in packets) / delta)
    e = torch.zeros(B)
    for q in packets:
        if q.kind in {"P", "B"}:
            b = int(q.pts // delta)
            e[b] += q.bytes
    theta = e.sum() / max(1, k_target)
 
    groups, s = [], 0
    l_min, l_max = math.ceil(t_min / delta), math.ceil(t_max / delta)
    while s < B:
        running, i = 0.0, s
        while i < B:
            running += float(e[i])
            span = i - s + 1
            if span >= l_max or (span >= l_min and running >= theta):
                break
            i += 1
        neighbors = range(max(s, i - 2), min(B, i + 3))
        c = min(neighbors, key=lambda b: (float(e[b]), abs(b - i)))
        groups.append((s, c))
        s = c + 1
 
    canvases, metadata = [], []
    for gid, (s, c) in enumerate(groups):
        candidates = collect_2x2_residual_blocks(frames, s, c)  # z=(t,i,j,A)
        per_frame = group_by_frame(candidates)
        weights = {}
        for t, zs in per_frame.items():
            zs = sorted(zs, key=lambda z: z.A, reverse=True)
            adjusted = [z.A / math.sqrt(1.0 + lambda_rank * rank) for rank, z in enumerate(zs)]
            weights[t] = sum(max(0.0, a) for a in adjusted) + alpha_peak * max(adjusted)
        selected = stratified_pick_by_cumulative_mass(per_frame, weights, p_canvases_per_group)
        for canvas_index, blocks in enumerate(selected):
            X = pack_blocks_into_canvas(blocks)
            canvases.append((X, "P"))
            metadata.extend(make_token_records(blocks, canvas_index, gid))
    return canvases, metadata, groups

3.6.2 Released video processor:uniform frame sampling + block-layout patch positions

import torch
 
 
def released_uniform_video_processor(video_path, image_processor, max_frames=32,
                                     fixed_num_frames=None, target_fps=None,
                                     spatial_merge_size=3):
    duration = probe_duration(video_path)
    if target_fps is not None and target_fps > 0:
        target_count = min(max(1, int(duration * target_fps)), max_frames)
    elif fixed_num_frames is not None:
        target_count = fixed_num_frames
    elif duration < 10:
        target_count = 8
    elif duration < 30:
        target_count = 16
    else:
        target_count = max_frames
 
    raw_indices = torch.linspace(0, frame_count(video_path) - 1, target_count).round().long()
    frames = decode_rgb_frames(video_path, raw_indices)
    pixel_values, grid_thw = image_processor(frames)  # [T*H*W, C, P, P], [1,3]
    patch_positions = build_block_layout_positions(grid_thw, raw_indices, spatial_merge_size)
    return {
        "pixel_values_videos": pixel_values,
        "video_grid_thw": grid_thw,
        "patch_positions": patch_positions,
    }

3.6.3 Released vision forward:explicit (t,h,w) positions drive 3D RoPE

import torch
 
 
def released_get_video_features(model, pixel_values_videos, video_grid_thw, patch_positions):
    pixel_values_videos = pixel_values_videos.type(model.visual.embeddings.patch_embedding.weight.dtype)
    vision_output = model.visual(
        pixel_values_videos,
        grid_thw=video_grid_thw,
        patch_positions=patch_positions,
    )
    video_embeds = vision_output.last_hidden_state
    split_sizes = (video_grid_thw.prod(-1) // model.visual.spatial_merge_size ** 2).tolist()
    return torch.split(video_embeds.view(-1, video_embeds.shape[-1]), split_sizes)

3.6.4 Released Megatron training step:packed multimodal batch + masked LM loss

import torch
 
 
def released_train_step(data_iterator, model):
    batch = get_batch(data_iterator)
    (images, image_grid_thw, pixel_values_videos, video_grid_thw,
     input_ids, position_ids, attention_mask, labels, loss_mask,
     attn_mask_type, packed_seq_params, patch_positions) = batch
 
    token_losses = model(
        images,
        image_grid_thw,
        input_ids,
        position_ids,
        attention_mask,
        attn_mask_type,
        labels,
        packed_seq_params,
        pixel_values_videos=pixel_values_videos,
        video_grid_thw=video_grid_thw,
        patch_positions=patch_positions,
    )
    total_tokens = loss_mask.view(-1).float().sum()
    loss_sum = (token_losses.float().view(-1) * loss_mask.view(-1).float()).sum()
    return loss_sum / total_tokens.clamp_min(1)

3.7 Code-to-paper mapping

Code reference: main @ 67b01cf1 (2026-05-27) — pseudocode and mapping based on this commit

Paper ConceptSource FileKey Class/Function
HF inference/release modeltransformers_impl/llavaonevision2/modeling_llava_onevision2.pyLlavaOnevision2Model, LlavaOnevision2ForConditionalGeneration, get_video_features, forward
Explicit 3D RoPE positionstransformers_impl/llavaonevision2/video_processing_llava_onevision2.py and transformers_impl/llavaonevision2/modeling_llava_onevision2.pybuild_patch_positions, VisionRotaryEmbedding.forward_from_positions
Uniform video decoding/sampling released pathtransformers_impl/llavaonevision2/video_processing_llava_onevision2.pychoose_target_frames, select_frame_indices, extract_video_frames, LlavaOnevision2VideoProcessor.__call__
Megatron training loopaiak_training_llm/train/pretrain/pretrain_llava_onevision2.pymodel_provider, get_batch, forward_step, loss_func
OneVision-Encoder Megatron pathaiak_training_llm/models/llava_onevision2/onevision_encoder_model.pyOneVisionEncoderModel, VideoRotaryEmbeddingSplit466, convert_rope_to_block_layout
Training launch configsexamples/llava_onevision2/qwen3_8b/alignment.sh; examples/llava_onevision2/qwen3_8b/mid_training.sh; examples/llava_onevision2/qwen3_8b/instruct_780k.shstage-specific SEQ_LEN, GBS, NSTEP, LR, optimizer and data path arguments
Paper codec-stream GOP / P-canvas algorithmNot found as Python implementation in main@67b01cf1; README describes methodreleased code gap documented above

4. Experimental Setup (实验设置)

4.1 Training data and scale

  • Inherited image/text foundation:LLaVA-OneVision-1.5-Mid-Training-85M(约 85M image—text pairs,20M ZH + 65M EN)、LLaVA-OneVision-1.5-Instruct-Data(约 22M samples),并加入 HuggingFaceM4/FineVision(约 24M instruction samples)。
  • Length-stratified video caption corpus:总计约 7.96M clips、104.1B tokens,覆盖 30s、30—60s、60—180s、10—15min 四个 bucket;392×392 input、ViT patch size 14、2×2 vision merge 时每帧 196 visual tokens。
  • New video caption components:30s-Video-Caption-4.2M、30—60s-Video-Caption-2.7M、60—180s-Video-Caption-700K、10min—15min-Video-Caption-350K。
  • Spatial / tracking supervision:LLaVA-OneVision-2-Spatial-4M(4M structured QA pairs)以及 Molmo2-VideoTrack、Molmo2-VideoPoint;Stage 3/4 还用 LLaVA-Video-178K 和 VideoChat-Flash-Training-Data。

4.2 Baselines and benchmarks

主要 8B-class baselines 包括 Qwen3-VL-8B、Keye-VL-1.5-8B、InternVL-3.5-8B、PLM-8B、LLaVA-OneVision-1.5-8B。评估覆盖三类:video understanding(MV-Bench、NextQA、TempCompass-MC、VideoMME、MLVU-dev、LVBench、LongVideoBench、VideoEval-Pro、MMOU 等 18 tasks)、tracking/RVOS(DAVIS、MeViS_U、ReVOS-ref、ReVOS-reason,J&F)、spatial/image/document(CRPE、MetaVQA、CV-Bench 2D/3D、CrossPoint、TraceSpatial-3D、MMStar、MMBench-en、DocVQA、ChartQA、OCRBench、InfoVQA 等)。专门的 codec-stream ablation 在 temporal grounding、long-form video QA、JumpScore 与 VideoMME-V2 上比较 Frame/Uniform sampling 和 Codec-stream。

4.3 Metrics

  • Accuracy / benchmark score:用于多数 video/image/document QA benchmark,表中数值越高越好。
  • JumpScore mAP:用于 189 个 jump-rope videos 的 cycle-boundary temporal localization,考察高频重复动作的边界定位。
  • J&F / HOTA / mIoU:tracking/RVOS 中使用;LLaVA-OneVision-2 输出 discrete point tracks 和 object IDs,再用 SAM2 point prompts 得到 mask,因此报告的是 point-prompted SAM2 mask quality。
  • Temporal grounding mIoU / task score:Charades-STA、ActivityNet Captions、QVHighlights 等,关注 event interval 或 moment localization。

4.4 Training config from released scripts

论文未在正文列出完整 GPU 型号;released configs 显示默认每节点 GPUS_PER_NODE=8examples/llava_onevision2/qwen3_8b/alignment.sh 默认 SEQ_LEN=32768, MBS=1, GBS=8, NSTEP=2500, LR 1.0e-5, min LR 1.0e-6, Adam, weight_decay=0, adam_beta1=0.9, adam_beta2=0.99, clip_grad=1.0qwen3_8b/mid_training.sh 默认 SEQ_LEN=32768, MBS=1, GBS=128, TOTAL_SAMPLES=9000000, NSTEP=ceil(9000000/128), data path /mnt/data/models/llava_onevision2_8b/ax_85m_image_5m_video.yaml, LR 1.0e-5, min LR 1.0e-6, Adam, weight_decay=0.01, adam_beta2=0.95qwen3_8b/instruct_780k.sh 默认 SEQ_LEN=32000, MBS=1, GBS=132, TOTAL_SAMPLES=740000, NSTEP=ceil(740000/132), data path /ov2/dataset_sft/webdataset_llava_next_740k, LR 1.0e-5, min LR 1.0e-6, Adam, weight_decay=0, save_interval=1000

5. Experimental Results (实验结果)

5.1 Main video / tracking results

LLaVA-OneVision-2-8B 在 18-task video understanding average 上为 62.5,高于 Qwen3-VL-8B 的 58.2、Keye-VL-1.5 的 53.6、InternVL-3.5 的 50.3、PLM 的 43.0 和 LLaVA-OV-1.5 的 40.1。单项中最突出的差异是 JumpScore:LLaVA-OV-2 74.9,Qwen3-VL 30.1,Keye-VL-1.5 39.6,InternVL-3.5 11.0,PLM 13.1,LLaVA-OV-1.5 2.1

Tracking/RVOS 上,LLaVA-OV-2 的 4-task J&F average 是 48.0,高于 Qwen3-VL 的 32.4 和 LLaVA-OV-1.5 的 8.2。具体为 DAVIS 58.7、MeViS_U 45.7、ReVOS-ref 58.2、ReVOS-reason 29.2。这说明 point-track + SAM2 prompt 的路径虽然不是新 segmentation head,但在 referring video object segmentation 上比 8B VLM baseline 更稳。

Figure 7 解读:Figure 7 对比 codec-stream 与 frame sampling,在 backbone、decoder、prompt、evaluation protocol 固定时隔离 observation interface 的影响。论文报告 codec-stream 在 JumpScore 上平均 +17.3 points,在三个 temporal-grounding benchmark 上平均 +9.7 points;长视频 QA 上则基本 parity 或小幅领先。这表明 codec-stream 的收益最集中在 event-level evidence 稀缺、均匀采样容易错过关键瞬间的任务。

Figure 8 解读:这张补充图把 codec-stream 和 frame sampling 放到 VideoMME-V2 setting 下比较。它的意义不是证明 codec-stream 在所有 semantic QA 上都大幅领先,而是说明在固定视觉预算下,codec-aware observation 不会明显牺牲 long-video QA 能力;其主要增益仍来自细粒度 temporal evidence allocation。

5.2 Spatial, image and document results

spatial reasoning 中,LLaVA-OV-2 在 CrossPoint 为 61.9,Qwen3-VL 为 26.9;TraceSpatial-3D 为 31.0,Qwen3-VL 为 8.0,接近 4×。spatial group average 为 63.5,高于 Qwen3-VL 的 58.2。CV-Bench 2D/3D 上分别为 82.6 / 92.8,VSI-Bench 为 70.9,ReVSI 为 57.6

image/document benchmark 上模型保持竞争力但并非全面第一:DocVQA 95.2、ChartQA 85.9、CountBench 89.0、Pixmo-Count 64.0、RealWorldQA 69.7,并在 V*Bench 达到 85.9。但它在 text-dense 或 diagram-heavy tasks 上仍落后专门 baseline:Keye-VL-1.5 领先 MMStar/OCRBench,Qwen3-VL 领先 InfoVQA,PLM-8B 领先 AI2D。这说明 long-video + spatial recipe 没有把模型变成 OCR/document-specialist。

Figure 9 解读:Figure 9 展示 2D spatial grounding case,重点是模型是否能把 textual relation 映射到图像平面上的具体区域/点,而不只是输出自然语言描述。它支撑了 CrossPoint、VSI-Bench 等指标中的“pointing / grounding”能力解释。

Figure 10 解读:Figure 10 展示 3D spatial grounding case,强调 depth、layout、object relation 等 3D-aware reasoning。相比普通 image QA,这类问题需要模型保留空间状态与相对关系;这也是 Stage 4 spatial corpus 设计的目标。

5.3 Codec-stream ablation and token efficiency

LVBench 392px frame-budget sweep 中,Codec-aligned 在 16/32/64/128 frames 分别为 40.7 / 42.8 / 44.2 / 47.4,Uniform 为 38.3 / 41.8 / 43.8 / 47.2;到 256 frames 时 Codec 为 50.2,Uniform 为 50.7,差距收敛到 -0.5。扩展 long-video sweep 中,Codec 在低预算下通常持平或领先:例如 16-frame setting 下 VideoMME-Long(w/ sub) 56.9 vs Frame 50.7,VideoEval-Pro 46.2 vs 43.1;128-frame setting 下 VideoMME-V2(w/ sub) 19.9 vs 17.6

shared 3D-RoPE 下的 token-efficiency ablation 更能说明 codec-stream 的定位价值:4/8 tokens 时 codec-stream 低于 uniform(24.1 vs 32.1, 29.1 vs 35.0),到 16 tokens 开始超过(40.2 vs 37.4),32/64/128 tokens 时分别领先 +14.1 / +21.4 / +19.0。作者的解释是 codec token 数量太少时 I/P canvas 还不足以覆盖事件;一旦超过最低覆盖阈值,codec-stream 就能把 token 投给高 bit-cost interval,而 uniform sampling 会在约 40 分附近 plateau。

Figure 11 解读:Figure 11 用单个 85-cycle clip 说明 uniform vs codec-stream 的差异。uniform sampling 容易把 token 均匀摊到重复周期里,错过 cycle boundary;codec-stream 借助 bit-cost peak 与 shared 3D RoPE,让 token 既集中于变化时刻,又保持在统一时空坐标中。

5.4 Qualitative cases: temporal grounding, RVOS, robot manipulation

Figure 12 解读:Figure 12 汇总 TimeLens-Bench 上 Charades-STA、ActivityNet-Captions、QVHighlights 的 temporal grounding cases,每行报告五次运行的 mean IoU。它展示 codec-aware observation 在多种 event type 上能更稳定地对齐 temporal interval,而不只是 jump-rope 这种单一动作。

Figure 13 解读:Figure 13 是 ReasonVOS “Track the animal moving forward” case。上方是 RGB frames,下方是由模型输出 point sequence 再经 SAM2 得到的 dense mask;论文报告该 36-frame clip 的 、HOTA 。这说明模型学到的是 temporally associated point/object identity,而不是直接生成 mask。

Figure 14 解读:Figure 14 是 Ref-DAVIS17 “Track a sport car” case。场景包含 tire smoke、motion blur 和 viewpoint change,论文报告 、HOTA 。这类 case 强调点轨迹在遮挡/模糊下仍要保持 object association。

Figure 15 解读:Figure 15 把原论文的两个 robot manipulation tasks 合成一个 grouped view:Task 1 是把 apple 放到 green plate,Task 2 是把 bread 放进 oven。每个 task 展示不同时间点与 waypoint count,说明模型输出的 perception trace 可以服务于 manipulation planning,但论文并未声称训练了完整 robot policy;这里评估的是视觉轨迹/空间状态理解。

5.5 Limitations and conclusions

本文最强结论是:在 8B open MLLM scale 下,LLaVA-OneVision-2 通过 codec-aligned observation、shared 3D RoPE、长视频/空间数据 recipe,把 video、temporal grounding、spatial reasoning、tracking 放进一个统一模型中,并在 JumpScore、CrossPoint、TraceSpatial-3D、RVOS 等任务上显著优于同级 baseline。

限制也很明确。第一,训练可见帧预算最高到 768,hour-scale 或更密集 streaming 仍是 extrapolation regime。第二,codec-stream 在 Stage 4 中只作用于 10—15min caption component,不是所有视频数据的全局 preprocessing。第三,released code 当前缺少论文中 codec-stream bit-cost/GOP/P-canvas 的实现锚点,复现者需要自行实现或等待补齐。第四,模型不引入 segmentation head,RVOS mask 质量依赖 SAM2 point prompting。第五,image/document task 仍不是全面 SOTA,OCRBench、InfoVQA、AI2D 等 text-dense/diagram-heavy tasks 仍由专门 baseline 领先。