From Pixels to Words — Towards Native One-Vision Models at Scale
Paper: arXiv:2605.28820 Code: EvolvingLMMs-Lab/NEO Code reference:
main@73257166(2026-05-28)
1. Motivation (研究动机)
当前主流 VLM 通常把视觉理解拆成“视觉编码器 + projector + LLM”:image / video encoder 先把像素压缩成视觉表示,再交给语言模型做推理。这条路线性能强,但论文指出它对“one-vision”能力有三个结构性瓶颈:第一,视觉侧被迫在 image encoder 与 video encoder 之间分工,前者擅长静态 frame-level 表征但缺少时序推理,后者强调 temporal dynamics 但对单图、多图、交错图文输入不够统一;第二,像素级信号在 encoder 边界处被提前压缩,早期 pixel-word interaction 被切断,多图比较、视频跨帧定位、空间几何关系都必须在后层间接补偿;第三,模块化系统的 scaling 需要平衡 VE 与 LLM 的容量、优化和部署,长视频或高分辨率输入还不能像 decoder-only LLM 那样自然复用 KV cache。
Native VLM 的目标是取消外部视觉编码器,让 image patches 与 text tokens 在同一个 decoder-only backbone 内从浅层开始交互。已有 Fuyu、EVE、NEO 等工作证明“直接把视觉 patch 放进 LLM”可行,但大多集中在单图或较窄的视频理解场景;论文认为真正困难的是把 single-image understanding、multi-image reasoning、video comprehension 与 spatial intelligence 同时统一到同一套 native primitive 中。
这篇论文要解决的具体问题是:在不依赖 pretrained visual encoder、auxiliary adapter 或 post-hoc fusion 的情况下,构建一个可扩展的 native one-vision foundation model,使视觉感知、跨帧对应、像素-文字对齐、空间几何推理都在一个 monolithic backbone 中端到端学习。若这条路线成立,VLM 的多模态能力可以更接近 LLM 的统一建模范式:输入形式从单图扩展到多图和视频时,不需要更换视觉塔或额外融合模块,而是只改变 serialization、position / attention 规则和训练数据配方。
2. Idea (核心思想)
核心 insight 是:one-vision 不应把“图像理解”和“视频理解”分别交给不同 encoder,而应把每张图像或每个采样帧视为同一序列中的 visual unit,让视觉 token 与文本 token 在同一个 decoder-only backbone 中共享位置编码、注意力规则和 next-token objective。这样,跨图比较和跨帧时序关系不是后接 projector 的副产物,而是从浅层开始与 pixel-pixel / pixel-word interaction 一起形成。
NEO-ov 的关键创新是把 NEO 的 native primitive 扩展成 one-vision primitive:轻量 patch embedding 把任意分辨率图像变成视觉 token;Unified Visual Serialization 把单图、多图、视频统一成 <img> ... </img> 片段;Unified Spatial-Temporal Attention 在同一 visual unit 内允许 bidirectional spatial attention,而跨 visual unit 与文本保持 autoregressive causal order;三阶段训练从 Pre-Buffer alignment 到 spatial-temporal mid-training 再到 instruction tuning,逐步打开模型能力。
与 InternVL / Qwen-VL 这类 modular VLM 的 fundamental difference 在于:modular VLM 的视觉 encoder 先独立产生压缩视觉特征,LLM 只能读取已经过边界处理的 token;NEO-ov 让视觉 patch、图像内空间位置、视频帧顺序和文本上下文共同进入同一 backbone,pixel-word alignment 与 pixel-pixel reasoning 都在主干内部发生。与早期 native VLM 相比,NEO-ov 的新焦点不是“能不能吃单图 patch”,而是让同一 primitive 支持多图、长视频和空间智能。
3. Method (方法)
3.1 Overall framework:encoder-free native one-vision backbone
Figure 1 解读:整套模型把 image / video 与 text 都转成 token sequence:图像或视频帧先经 lightweight patch embedding 变成 visual tokens,文本经原 LLM tokenizer 变成 word tokens;二者被 <img> 与 </img> 包住后送进同一个 decoder-only backbone。图中最重要的是没有外部 visual encoder、adapter 或 late fusion,所有 pixel-word alignment、pixel-pixel interaction 和 spatial-temporal reasoning 都由 stacked native primitives 在主干内完成。
直觉上,NEO-ov 想避免“视觉塔先压缩、语言塔后解释”的信息瓶颈。对于 OCR、空间关系、多图比较这类任务,关键信息往往存在于局部 patch、文字区域和跨图对应关系中;如果 visual encoder 在浅层就把它压缩成固定语义向量,后续 LLM 很难恢复细节。Native backbone 的好处是:每个视觉 token 从一开始就可以在同一层级与其他视觉 token 和文本 token 建立关系,模型可以把“看清局部”和“按语言问题筛选局部”合并成一个端到端过程。
3.2 Lightweight patch embedding 与 Pre-Buffer
论文把输入图像 编码为视觉 token:
其中 ,, 是 2D RoPE embedding。论文说明 的 stride 为 16, 的 stride 为 2,因此最终大约每个 图像区域产生一个 visual token。代码中对应 VLMTrainKit/neo/model/modeling_neo_vit.py:NEOVisionEmbeddings 先用 patch_embedding = nn.Conv2d(..., kernel_size=patch_size, stride=patch_size),再用 dense_embedding = nn.Conv2d(..., kernel_size=downsample_factor, stride=downsample_factor),默认 patch_size=16、downsample_ratio=0.5。
Pre-Buffer 是 native backbone 的前置缓冲层:论文写到 NEO-ov 初始化 Pre-Buffer 与 Post-LLM,语言 backbone 使用 Qwen3-1.7B 与 Qwen3-8B;Pre-Buffer 层数在 2B 版本为 12 层、9B 版本为 6 层。它的作用不是传统视觉编码器,而是在进入主 LLM 语义空间前保留更丰富的中间视觉上下文,使视觉 patch 的空间结构和局部文字线索不被过早压缩。
def neo_patch_embedding(pixel_values, grid_hw, vision_embed, llm_embed):
# Based on VLMTrainKit/neo/model/modeling_neo_vit.py
# pixel_values: concatenated native-resolution images after dynamic preprocessing
patch = vision_embed.patch_embedding(pixel_values) # Conv2d, kernel=stride=patch_size=16
patch = patch.view(-1, vision_embed.embed_dim) # flatten patch tokens
padded = pad_by_image_grid(patch, grid_hw) # keep each image/frame grid separate
dense = vision_embed.dense_embedding(padded) # Conv2d downsample to LLM hidden size
visual_tokens = unpad_and_flatten(dense, grid_hw) # one token per ~32x32 region
return visual_tokens3.3 Unified Visual Serialization:单图、多图、视频同一序列格式
单图时,NEO-ov 在 prompt 中相应 <img> 位置插入一个 visual segment。多图时,每个 <img> token 都被替换为一个独立 visual segment,并保持文本 prompt 中出现的顺序:
这里 表示第 张图像的 visual segment。每张图像可按原生分辨率独立编码,visual token 数随空间尺寸变化,而不是压成固定 token budget。代码中 VLMTrainKit/neo/data/data_processor.py 对 image / images 字段进行 native-resolution dynamic preprocessing;多图时还会把每张图的 max_pixels 按数量分摊,避免总视觉 token 爆炸。
视频时,论文把 sampled frames 当作按时间排序的 visual units,而不是单个全局视频 embedding。给定 个采样帧及时间戳 : 编码 video duration、sampled frame count 与 sampling rate;显式 timestamp 加 frame order 让 temporal localization 作为序列信息进入同一建模框架。
def serialize_one_vision(prompt_tokens, image_or_frame_tokens, timestamps=None):
# Paper-level serialization; released training code represents images/frames as image lists.
seq = []
if timestamps is not None:
seq.append(global_video_prefix(timestamps))
for k, visual in enumerate(image_or_frame_tokens):
if timestamps is not None:
seq.extend(tokenize(f"[{timestamps[k]}]:"))
seq.append(IMG_START)
seq.extend(visual)
seq.append(IMG_END)
seq.extend(prompt_tokens)
return seq论文公式与 released code 实现差异:论文显式描述 video serialization 的 、timestamps 与 up to 128 frames;当前 VLMTrainKit/neo/data/data_processor.py 主要处理 image / images 字段,并未在训练数据处理路径中显式看到 video 字段、timestamp prefix 或 frame-sampling 逻辑。评测端 VLMEvalKit_ov 通过 NEOChat / load_image_native 把 image paths 或视频抽帧结果送入模型,但训练端公开脚本更像通用模板而非论文完整数据管线。
3.4 Native RoPE 与 Unified Spatial-Temporal Attention
Figure 2 解读:上半部分展示 native rotary position embeddings:token 的位置不只是 1D 序列 index,而被拆成 相关的频率、通道和 index allocation;下半部分展示 attention 规则:同一图像或同一视频帧内部允许双向空间交互,不同 visual unit 之间仍保持 causal dependency。这个设计让单图内的空间结构不会被 causal mask 切断,同时又能保持多图/视频/文本整体的 autoregressive 顺序。
论文沿用 NEO 的 -decoupled head design:保留原 LLM head dimension 作为 temporal component ,再引入空间组件 与 。Native-RoPE 给每个 token 分配: 其中 表示 temporal 或 sequential position, 表示视觉 token 的二维空间位置。论文中的 RoPE base frequencies 固定为 。
Unified Spatial-Temporal Attention 的 mask 定义为:令 表示 token 的 visual unit index, 为文本 token, 为某张图或某个视频帧中的视觉 token:
这意味着:文本和跨 visual unit 的交互保持 causal;同一 visual unit 内的视觉 token 可以全连接双向 attention。代码中 VLMTrainKit/neo/model/modeling_neo_chat.py 的 create_flex_mask_padding 明确写了“within each document, causal attention; within a same image, full attention”,并用 sameimg_mask 与 samedoc_causal_mask 做 OR。NEOChatModel.forward 先用 img_start_token_id 构造 modality_indicators,再把 visual token 的 绝对位置写入 indexes,最后传给 language_model(..., indexes=indexes, attention_mask=attention_mask)。
def create_native_attention_mask(document_ids, modality_ids):
# Based on VLMTrainKit/neo/model/modeling_neo_chat.py:create_flex_mask_padding
# modality_ids > 0 means visual tokens inside one image/frame unit; -1 means text/padding.
def causal(q, k):
return q >= k
def same_document(q, k):
return document_ids[q] == document_ids[k]
def same_visual_unit(q, k):
return (
modality_ids[q] > 0
and modality_ids[q] == modality_ids[k]
and document_ids[q] == document_ids[k]
)
return lambda q, k: (causal(q, k) and same_document(q, k)) or same_visual_unit(q, k)3.5 Three-stage training recipe
Figure 3 解读:训练分三阶段递进:Stage 1 用大规模 image-text 数据把 Pre-Buffer 对齐到 post-LLM,同时尽量保留 pretrained LLM 的语言能力;Stage 2 用更复杂的 image / video / spatial-temporal 数据打开全模型训练,提升高分辨率感知和跨帧推理;Stage 3 用高质量 instruction tuning 数据进一步强化通用多模态理解、细粒度感知和 temporal dynamics。
Stage 1 Pre-Training:约 20M image-text pairs,包含描述性 captions 与 OCR-intensive 内容。为了稳定适配 pretrained LLM,优化范围限制在 patch embedding、Pre-Buffer layers 与新引入的 QK-related parameters;objective 是 autoregressive next-token prediction。论文报告三阶段 peak learning rate 分别为 、、。
Stage 2 Mid-Training:约 60M multimodal samples,覆盖 到 分辨率以及 up to 128 frames 的视频。此阶段全模型联合优化,context length 从 16K 扩展到 36K,混合 text-only、image-text、multi-image 与 video-text 数据,目标是提升 pixel-word 与 pixel-pixel 关系的上下文一致性。
Stage 3 Supervised Fine-Tuning:约 4M single-image、1M multi-image、1M video instruction samples,覆盖 VQA、OCR、fine-grained perception、temporal reasoning、mathematical analysis 和 complex dialogue。此阶段仍用 next-token prediction 端到端优化全模型。
def train_step(batch, model, optimizer):
# Based on VLMTrainKit/neo/model/modeling_neo_chat.py and neo/train/train.py
input_ids = batch["input_ids"]
labels = batch["labels"]
pixel_values = batch.get("pixel_values")
grid_hw = batch.get("image_grid_hw")
visual_embeds = model.extract_feature(pixel_values[0], grid_hw=grid_hw[0])
hidden = model.language_model.get_input_embeddings()(input_ids)
image_slots = input_ids == model.img_context_token_id
hidden[image_slots] = visual_embeds.reshape(-1, visual_embeds.shape[-1])
indexes = build_thw_indexes(input_ids, image_slots, grid_hw, model.downsample_ratio)
modality_ids = build_modality_indicators(input_ids, model.img_start_token_id, model.img_context_token_id)
attention_mask, pad_len = create_flex_mask_padding(document_ids(batch), modality_ids, div_num=128)
out = model.language_model(
inputs_embeds=hidden,
labels=labels,
indexes=indexes,
attention_mask=attention_mask,
padding_length=pad_len,
)
out.loss.backward()
optimizer.step()
optimizer.zero_grad()
return out.loss论文公式与 released code 实现差异:公开训练脚本 VLMTrainKit/scripts/2B_1PT.sh 与 8B_1PT.sh 设置 lr=8e-4、max_steps=200000、warmup_steps=1000、max_seq_length=16384、model_max_length=8192;2B_2MTsi.sh 设置 lr=5e-5、max_steps=50000、max_pixels=16777216、max_seq_length=32768;2B_3SFTsi.sh 设置 lr=6e-5、max_steps=4500。这与论文正文的 不完全一致,且公开脚本中的 datasets=""、mllm=""、llm="" 是占位符,因此笔记中的复现实验参数以论文正文为主、以 released code 脚本作为实现模板与差异提醒。
3.6 Released code mapping
Code reference:
main@73257166(2026-05-28) — pseudocode and mapping based on this commit
| Paper Concept | Source File | Key Class/Function |
|---|---|---|
| NEO-ov paper / weights / evaluation release | README.md | README news + citation for arXiv:2605.28820 |
| Lightweight patch embedding | VLMTrainKit/neo/model/modeling_neo_vit.py | NEOVisionEmbeddings, NEOVisionModel.forward |
| Native visual-token insertion into LLM stream | VLMTrainKit/neo/model/modeling_neo_chat.py | NEOChatModel.forward, extract_feature |
| Same-image full attention + document causal attention | VLMTrainKit/neo/model/modeling_neo_chat.py | create_flex_mask_padding |
| Decoder-only Qwen3 backbone with RoPE / LM loss | VLMTrainKit/neo/model/modeling_neo_qwen3.py | Qwen3RotaryEmbedding, Qwen3ForCausalLM.forward |
| Native-resolution image preprocessing | VLMTrainKit/neo/data/data_processor.py | LazySupervisedDataset._get_item, FlattenedDataCollatorForSupervisedDataset |
| Training entry and stage templates | VLMTrainKit/neo/train/train.py; VLMTrainKit/scripts/*.sh | train(), 2B_1PT.sh, 2B_2MTsi.sh, 2B_3SFTsi.sh, 8B_* |
| NEO-ov evaluation configs | VLMEvalKit_ov/vlmeval/config.py | neo_series, NEOov-2B-image/video/si, NEOov-9B-image/video/si |
| Evaluation model wrapper | VLMEvalKit_ov/vlmeval/vlm/neo/neo_chat.py | NEOChat, generate_inner, load_image_native |
4. Experimental Setup (实验设置)
训练数据与规模:Stage 1 使用约 20M large-scale image-text pairs,包含 web captions 与 OCR-intensive content;Stage 2 使用近 60M multimodal samples,覆盖 到 分辨率与 up to 128 frames 的视频;Stage 3 使用约 4M single-image、1M multi-image、1M video instruction-tuning samples。论文未逐项列出每个数据源的具体名称与采样比例;released code 的 VLMTrainKit/neo/data/__init__.py 只提供示例/占位数据注册(如 SBU_CAPTIONS、CAMBRIAN_737K、VIDEOCHATGPT),不足以还原论文完整数据配方。
模型与硬件:语言 backbone 为 Qwen3-1.7B 与 Qwen3-8B,对应 NEO-ov 2B 与 9B 系列;Pre-Buffer 层数分别为 12(2B)与 6(9B)。训练使用 16 个 8-GPU nodes,每张 GPU 80GB,即总计 128 张 80GB GPU。优化器为 AdamW,cosine learning-rate decay,warm-up ratio 为 0.01;论文 peak LR 为 、、。
released code launch templates:VLMTrainKit/scripts/2B_1PT.sh / 8B_1PT.sh 使用 torchrun --nproc_per_node=8、zero2.json、batch_size=64、grad_accum_steps=5、max_steps=200000、max_pixels=4194304、max_seq_length=16384;2B_2MTsi.sh 使用 zero3.json、grad_accum_steps=2、max_steps=50000、max_pixels=16777216、max_seq_length=32768;2B_3SFTsi.sh 使用 max_steps=4500、grad_accum_steps=1。这些是公开模板,不包含论文真实 dataset path。
Baselines:单图/OCR 对比包括 Qwen2-VL、InternVL3、InternVL3.5、Qwen3-VL、Mono-VL、Mono-VL1.5、HoVLE、OneCAT、NEO、Fuyu、EVE、EVEv2、Emu3、SAIL 等;多图/视频包括 VideoLLaMA3、LLaVA-Video、InternVL3.5、Qwen3-VL、ELVA、Fuyu、EVE;空间智能包括 Cambrian-S、Sensenova-SI、GeoThinker、InternVL3.5、Qwen3-VL。
Evaluation metrics / benchmarks:通用图像理解与 OCR 使用 MMMU、MMB、RWQA、MMStar、SEED-I、HallB、AI2D、DocVQA、ChartQA、TextVQA、OCRBench;多图/视频使用 BLINK、MUIRBENCH、VideoMME、MVBench、LVBench、MLVU、LongVideoBench、VideoMMMU;空间智能使用 VSI-Bench、MMSI、Mindcube、ViewSpatial、SITE、3DSR、EmbSpatial、SPAR、Omni-Spatial。论文表格以各 benchmark 的官方 score / accuracy 为主,未在正文为每个指标单独重定义。
5. Experimental Results (实验结果)
5.1 General VQA 与 OCR
| Scale | Model | MMMU | MMB | RWQA | MMStar | SEED-I | HallB | AI2D | DocVQA | ChartQA | TextVQA | OCRBench |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2B native | NEO | 48.6 | 76.0 | 63.1 | 54.2 | 74.2 | 43.1 | 80.1 | 89.9 | 81.2 | 74.0 | 77.1 |
| 2B native | NEO-ov | 54.7 | 80.0 | 64.4 | 58.6 | 76.2 | 54.5 | 81.4 | 91.2 | 83.1 | 77.3 | 81.2 |
| 8B modular | InternVL3.5 | 68.1 | 82.7 | 67.5 | 69.3 | 77.1 | 54.5 | 84.0 | 92.3 | 86.7 | 78.2 | 84.0 |
| 8B modular | Qwen3-VL | 69.6 | 84.5 | 71.5 | 70.9 | — | 61.1 | 85.7 | 96.1 | 89.6 | — | 89.6 |
| 8B native | NEO-ov | 68.1 | 85.1 | 67.8 | 67.3 | 76.6 | 59.8 | 85.4 | 91.9 | 86.2 | 78.5 | 81.6 |
NEO-ov 在 native VLM 内部提升明显:2B 版本相对 NEO 在 MMMU 从 48.6 到 54.7、HallB 从 43.1 到 54.5、OCRBench 从 77.1 到 81.2。8B 版本在 MMB 85.1、AI2D 85.4、HallB 59.8 上已经接近或超过部分 modular baseline;但 OCR-intensive benchmark 仍不是全面领先,尤其 DocVQA / OCRBench 与 Qwen3-VL 仍有差距。
5.2 Multi-image 与 Video Understanding
| Scale | Model | BLINK | MUIRBENCH | VideoMME | MVBench | LVBench | MLVU | LongVideoBench | VideoMMMU |
|---|---|---|---|---|---|---|---|---|---|
| 2B modular | InternVL3.5 | 51.3 | 44.0 | 58.4 | 65.9 | 37.6 | 64.4 | 57.4 | 42.7 |
| 2B modular | Qwen3-VL | 53.8 | 47.4 | 61.9 | 61.7 | 47.4 | 68.3 | 55.6 | 41.9 |
| 2B native | NEO-ov | 53.9 | 56.8 | 60.4 | 65.7 | 43.3 | 64.8 | 56.8 | 42.3 |
| 8B modular | InternVL3.5 | 59.5 | 55.8 | 66.0 | 72.1 | 45.9 | 70.2 | 62.1 | 54.9 |
| 8B modular | Qwen3-VL | 69.1 | 64.4 | 71.4 | 68.7 | 58.0 | 78.1 | 63.6 | 65.3 |
| 8B native | NEO-ov | 62.8 | 58.2 | 67.4 | 70.7 | 46.4 | 69.3 | 63.5 | 51.6 |
多图/视频表明 native backbone 能自然支持跨图和跨帧推理:2B NEO-ov 在 BLINK 53.9、MUIRBENCH 56.8、VideoMME 60.4 上接近或超过 2B modular baselines;8B NEO-ov 在 VideoMME 67.4、MVBench 70.7、LongVideoBench 63.5 上接近 InternVL3.5,但与 Qwen3-VL 在 LVBench、MLVU、VideoMMMU 上仍有明显差距。这说明统一 native attention 有竞争力,但长视频复杂推理仍受训练数据和 scale 限制。
5.3 Spatial Intelligence
| Scale | Model | VSI-Bench | MMSI | Mindcube | ViewSpatial | SITE | 3DSR | EmbSpatial | SPAR | Omni-Spatial |
|---|---|---|---|---|---|---|---|---|---|---|
| 2B general | InternVL3.5 | 53.8 | 25.6 | 42.1 | 37.9 | 34.8 | 31.4 | 61.5 | 32.4 | 44.4 |
| 2B general | Qwen3-VL | 53.9 | 27.8 | 34.2 | 36.7 | 35.8 | 47.6 | 69.2 | 34.1 | 36.3 |
| 2B native | NEO-ov | 58.4 | 33.6 | 77.2 | 52.8 | 38.4 | 52.9 | 63.8 | 41.2 | 43.1 |
| 8B specialist | GeoThinker | 72.6 | 30.9 | 83.0 | 45.9 | 55.9 | 51.9 | 78.8 | 68.2 | 40.1 |
| 8B general | Qwen3-VL | 59.4 | 31.2 | 29.6 | 41.9 | 45.4 | 52.9 | 77.8 | 40.3 | 47.0 |
| 8B native | NEO-ov | 64.8 | 41.3 | 90.0 | 55.2 | 54.3 | 61.7 | 78.8 | 48.8 | 45.0 |
空间智能是 NEO-ov 最有说服力的部分:8B NEO-ov 在 Mindcube 达到 90.0,超过 GeoThinker 的 83.0;在 MMSI 41.3、ViewSpatial 55.2、3DSR 61.7 也高于 Qwen3-VL。论文把这一点归因于 native interaction:像素-像素与像素-文字关系从浅层就共同演化,适合保留几何和局部空间结构。
5.4 Ablation:Pre-Buffer、SI finetuning、stage progression
Figure 4–6 解读:左侧比较 Pre-Buffer 与 conventional visual encoders,在 VQA、OCR、Video、SI 多类任务上 Pre-Buffer 更稳定,尤其 OCR 与 SI 受益明显;中间展示 SI 数据 finetuning 后 native architecture 的空间智能提升幅度更大,说明早期 pixel-pixel / pixel-word interaction 对空间任务更有效;右侧展示 Stage 1 到 Stage 2 的性能演化,2B 与 9B 在 single-image、multi-image、video、spatial intelligence 上都持续上升,且小模型收益更明显。
Ablation 的结论是:NEO-ov 的性能不只是来自更多数据或 Qwen3 backbone,而是来自三项相互配合的设计。Pre-Buffer 比随机初始化视觉 encoder 更适合保留中间视觉上下文;same-visual-unit full attention 让图像内部空间关系不被 causal mask 割裂;progressive training 先稳定对齐,再扩展到高分辨率和长视频,最后用 instruction tuning 强化任务泛化。
5.5 Limitations 与结论
论文明确指出,尽管 NEO-ov 在 native VLM 中取得强结果,它仍在 OCR-intensive tasks、复杂文字识别、文档/图表细节理解上落后顶级 modular VLM,尤其当任务需要高精度文字读取和版面结构解析时,外部视觉 encoder 的先验仍然有优势。公开代码也没有完整释放论文训练数据配方,因此复现三阶段规模训练仍需要额外数据和工程细节。
总体上,结果证明 fully native one-vision architecture 是可行且有竞争力的:NEO-ov 在单图、多图、视频、空间智能上都显著超过旧 native VLM,并在多个 benchmark 上接近强 modular VLM。它的真正价值不在于某一张表上全面击败 Qwen3-VL,而在于展示了“无视觉塔、同一 backbone、同一 serialization / attention primitive”可以覆盖 one-vision 任务谱。