引言
多模态大语言模型(MLLM)在 STEM 视觉推理上的表现长期不尽如人意。面对一张立体几何截面图或函数图像,模型往往能给出看似合理的推理步骤,却在关键的空间关系、数量属性上犯下低级错误——根本没"看准"图。
这引出了一个根本性问题:瓶颈到底在感知还是推理?
当前主流的改进路径几乎都在卷推理——更长的思维链、更强的推理模型、更多的强化学习。但 CVPR 2026 论文 CodePercept 给出了一个反直觉的答案:扩展感知始终优于扩展推理。当感知模块从 4B 扩展到 32B 时,带来的性能提升远超将推理模块做同样扩展。基于这一发现,论文提出了一种全新范式——用可执行代码替代自然语言作为感知媒介,构建百万级三元组数据集 ICC-1M,仅 8B 参数的模型即可超越 72B 的 Qwen2.5-VL。
一、感知 vs 推理:谁才是瓶颈?
1.1 Captioner-Solver 解耦框架
要回答"瓶颈在哪",首先需要将感知和推理从端到端的黑盒中拆解出来。CodePercept 采用了 Captioner-Solver 框架:
其中 Captioner 负责将图像 转化为文本描述 (感知阶段),Solver 基于描述 和问题 生成答案 (推理阶段)。这种解耦允许独立缩放两个组件,从而精确定位瓶颈。
1.2 四组缩放实验
论文设计了两组基线(4B 和 8B),每组进行两个方向的缩放:
实验一:固定 Perception,缩放 Reasoning
固定感知模块为 4B,将推理模块从 4B 逐步扩展到 8B、32B。
实验二:固定 Reasoning,缩放 Perception
固定推理模块为 4B,将感知模块从 4B 逐步扩展到 8B、32B。
在 8B 基线上重复同样的实验。
1.3 核心发现
所有实验指向同一个结论:
一个 32B 的感知模块配 4B 的推理模块,性能远超 4B 感知配 32B 推理。这意味着当前 STEM 视觉推理的边际收益最大处不在推理侧,而在感知侧。
下表展示了 Captioner-Solver 框架下(Solver 固定为 Qwen3-30A3-Thinking)CodePercept 感知增强对推理的传导效果:
| Captioner | MathVision | MathVista | MathVerse | DynaMath | WeMath | LogicVista | Avg |
|---|---|---|---|---|---|---|---|
| Qwen3-VL-4B | 54.21 | 67.30 | 64.59 | 69.40 | 46.10 | 54.14 | 59.29 |
| CodePercept-4B-S1 | 57.63 | 69.60 | 65.59 | 71.38 | 47.81 | 60.40 | 62.07 |
| Qwen3-VL-32B | 58.55 | 72.20 | 71.09 | 75.78 | 48.00 | 62.19 | 64.63 |
| CodePercept-32B-S1 | 62.27 | 72.90 | 71.70 | 77.41 | 54.19 | 65.33 | 67.30 |
感知增强为 4B 模型带来平均 +2.78 的提升,为 32B 模型带来 +2.67 的提升。WeMath 维度的跃升最为显著:32B 模型从 48.00 提升到 54.19(+6.19),说明代码驱动的感知对涉及多步逻辑的数学推理帮助最大。
二、自然语言的"描述失语"
2.1 几何空间关系的模糊性
自然语言在描述 STEM 视觉内容时存在系统性缺陷。考虑一个简单的例子:描述一个正四面体被平面截得的截面形状。
自然语言描述:
一个正四面体,底面水平,顶点在上方。一个平行于底面的平面从高度 h 处截切,截面为等边三角形,边长与 h 成正比。
这段描述看似完整,但隐藏了大量模糊性:“高度 h” 的参考系是什么?“成正比"的比例系数是多少?截面的具体顶点坐标是什么?当 h 趋近于底面时截面退化为什么?
Python 代码描述:
| |
代码消除了所有歧义:坐标系统、比例关系、参数定义都是确定的。这就是 CodePercept 选择代码作为感知媒介的核心动机——可执行代码提供了精确的语义,天然与 STEM 视觉内容的结构化特征对齐。
2.2 代码作为 Ground Truth 的确定性优势
在知识蒸馏范式中,教师模型生成的自然语言描述可能包含幻觉(hallucination)——凭空捏造不存在的对象、错误描述空间关系。而代码的验证是确定性的:执行一次,结果即知。一段 matplotlib 代码如果声称绘制了一个红色圆,执行后画出的就是一个红色圆,不存在"描述失语"的空间。
三、CodePercept 方法:代码驱动的双通道感知
CodePercept 提出两个互补的感知增强维度:Code-Grounded Caption Generation 和 STEM Image-to-Code Translation。前者用代码修正文本描述,后者直接将图像翻译为可执行代码。
flowchart LR
subgraph D1["维度一:Code-Grounded Caption"]
X1["图像 x"] --> S1["Native Caption"]
S1 --> T_draft["描述草稿 t_draft"]
C1["代码 c"] --> S2["Code Analysis
+ Execution Tracer"]
S2 --> T_code["验证事实 t_code"]
T_draft --> S3["Code-Grounded
Refinement"]
T_code --> S3
S3 --> T_new["修正字幕 t_new"]
end
subgraph D2["维度二:Image-to-Code"]
X2["图像 x"] --> S4["Explanatory Draft
Generation"]
S4 --> C_draft["代码草稿 c_draft"]
C_draft --> S5["Code-Grounded
Refinement"]
C2["GT 代码 c"] --> S5
S5 --> C_new["修正代码 c_new"]
end
style D1 fill:#f0f4ff,stroke:#4a6fa5
style D2 fill:#fff4f0,stroke:#a54a4a3.1 维度一:Code-Grounded Caption Generation
该维度解决的核心问题是:现有知识蒸馏方法中,教师模型生成的字幕包含幻觉,而代码提供了可验证的 ground truth。流程分为三步:
Step 1: Native Caption
模型首先对图像 生成自然语言描述草稿。语言风格自然流畅,但可能包含事实错误——数量、位置、空间关系等细节可能被臆造。
Step 2: Code Analysis + Enhanced Execution Tracer
对图像对应的可执行代码 进行分析,提取精确的视觉事实。这里的关键创新是 Enhanced Execution Tracer :即使代码包含深层递归和嵌套循环,执行日志仍能提供确定性的渲染信息——精确坐标、维度参数、z-order 层级关系。这些信息构成了"代码对图像说了什么"的可靠事实来源。
Step 3: Code-Grounded Refinement
将描述草稿与代码验证事实对齐,进行"外科手术式"修正:纠正数量错误、空间关系错误,同时保持原有的自然语言风格。最终输出既准确又可读的修正字幕。
3.2 维度二:STEM Image-to-Code Translation
如果说维度一是"用代码纠正文字”,维度二则是"直接生成代码"。流程分为两步:
Step 1: Explanatory Draft Generation
模型观察图像后,生成一段带有逐步分解和参数解释的代码草稿。解释性注释使代码更易理解,但参数值可能存在错误。
Step 2: Code-Grounded Refinement
用 ground-truth 代码 修正草稿中的错误,同时保留解释性结构。这一步确保最终代码既可执行又具有教学价值。
两个维度形成互补:Caption 通道生成人类可读的文本描述,Code 通道生成机器可验证的可执行代码。联合训练使模型同时掌握两种"语言"来表达对图像的理解。
四、ICC-1M:百万级三元组数据集
为实现上述双通道训练,论文构建了 ICC-1M 数据集——超过 100 万条高质量的 Image-Caption-Code 三元组。数据合成通过三条互补的流水线完成。
4.1 三条合成流水线
流水线一:Image Reproduction()
从种子图像出发,生成详细描述和 matplotlib 复现代码。受限于源图像多样性,此流水线的数据覆盖面有限。
流水线二:Image Diversity()——核心创新
这是数据多样性的关键突破。核心思路是"抽象原理,重新实例化":从种子图像中提取底层科学原理 (如多米诺排列规律),然后基于同一原理生成 个不同的视觉实例化代码。
例如,从一道多米诺骨牌谜题出发,同一抽象原理可以重新实例化为圆形轮盘排列、三角形组合、网格图等变体。这使数据量在原理层面实现了乘法级增长,突破了种子图像多样性的瓶颈。
流水线三:Solid Geometry Synthesis()
针对 LLM 在立体几何代码生成上的根本缺陷,构建参数化模板库。8 类模板涵盖:立方体展开/折叠、正投影三视图、截面分析、多面体构造等。通过参数采样 批量生成训练数据。
4.2 三级复合质量控制
每条数据需通过三级质量过滤:
| 质量级别 | 指标 | 含义 |
|---|---|---|
| 图像质量 | 图像是否清晰、无渲染错误 | |
| 代码质量 | 代码是否可执行、符合 Python 规范 | |
| 图像-代码一致性 | 代码执行结果是否与图像视觉一致 |
只有同时通过三级过滤的样本才会进入最终数据集,确保每条三元组的内部一致性。
五、从 SFT 到 RL:两阶段训练与三层递增奖励
5.1 Stage 1:联合监督微调(S1)
S1 阶段基于 Qwen3-VL 架构,使用 ICC-1M 数据集对 Image2Caption 和 Image2Code 两个任务进行联合优化:
| 配置项 | 值 |
|---|---|
| 基座模型 | Qwen3-VL(4B / 8B / 32B) |
| 训练数据 | ICC-1M(100 万+ 三元组) |
| 训练任务 | Image2Caption + Image2Code 联合训练 |
| 训练轮次 | 1 epoch |
| GPU 配置 | 32 A100 |
联合训练的关键意义:消融实验表明,CodeCap 和 ImCode 两个任务是互补的——只用字幕或只用代码训练效果都不如联合训练,完整配置达到最高。
5.2 Stage 2:GRPO 强化学习(R1)
S1 之后,论文进一步采用 Group Relative Policy Optimization(GRPO) 进行强化学习,但仅应用于代码生成任务。
| 配置项 | 值 |
|---|---|
| RL 算法 | GRPO |
| 训练任务 | 仅 Image-to-Code |
| 训练样本 | 10,000 |
5.3 三层递增奖励设计
奖励函数由格式奖励和内容奖励两部分组成,内容奖励内部呈三层递进结构:
第一层:Format Reward(格式奖励)
通过正则表达式验证生成代码的格式是否正确——是否包含完整的 Python 代码块、是否具备基本语法结构。
第二层:Execution Reward(执行奖励)
验证代码能否成功执行。这是代码相对于自然语言的核心优势:验证是确定性的,不存在灰色地带。
第三层:Code-level + Image-level Reward(语义与视觉奖励)
- Code-level:通过 GPT-4o 判断生成代码与 ground-truth 代码在语义上是否等价
- Image-level:执行生成代码并渲染图像,计算与原图的视觉相似度
三层递进设计确保模型不仅生成格式正确的代码,还要生成语义等价、视觉一致的代码。
5.4 RL 的惊人效果
强化学习的效果远超预期。以 4B 模型为例:
| 指标 | S1 前 | S1 后 | R1 后 | R1 提升幅度 |
|---|---|---|---|---|
| Image Score | 24.55 | 38.13 | 47.17 | +92%(vs S1 前) |
| Exec Rate | 79.4% | 80.7% | 91.3% | +11.9 pp |
仅用 10,000 个样本的 RL 训练,4B 模型的 Image Score 从 S1 后的 38.13 提升到 47.17(+23.7%),执行率从 80.7% 飙升至 91.3%。这验证了一个重要假设:代码生成任务天然适合 RL——奖励信号是确定且可验证的,不像自然语言生成那样需要模糊的人工评判。
六、实验结果:8B 如何超越 72B
6.1 STEM 推理基准
CodePercept-8B-S1 在 6 个 STEM 推理基准上一致超越 Qwen2.5-VL-72B,平均优势 +6.2%。一个仅 8B 参数的模型,仅通过增强感知能力,就超越了比自己大近 10 倍的模型。这有力地验证了"感知瓶颈"假说——当感知足够准确时,推理不需要那么大的模型。
更值得关注的是,CodePercept-8B-S1 甚至逼近了 Claude-Opus 4.1-Thinking 和 GPT5-Thinking 这样的闭源前沿模型。
6.2 STEM2Code-Eval:代码重建基准
论文提出 STEM2Code-Eval——一种全新的感知评估基准,包含 1000 张人工标注图像。与传统基准通过问题求解准确率间接评估不同,STEM2Code-Eval 要求模型生成可执行代码来重建原始图像,提供确定性和可验证的评估。
| 模型 | Image Score | Code Score | Avg | Exec Rate |
|---|---|---|---|---|
| Gemini2.5-Pro-Thinking | 68.89 | 75.41 | 72.15 | 91.7% |
| GPT5-Thinking | 64.97 | 64.98 | 64.98 | 96.6% |
| Qwen3-VL-4B-Instruct | 24.55 | 26.42 | 25.49 | 79.4% |
| CodePercept-4B-S1 | 38.13 | 43.43 | 40.78 | 80.7% |
| CodePercept-4B-R1 | 47.17 | 45.86 | 46.52 | 91.3% |
| Qwen3-VL-8B-Instruct | — | — | ~47.34 | — |
| CodePercept-8B-S1 | — | — | 59.64 | — |
| CodePercept-8B-R1 | — | — | 63.56 | — |
| Qwen3-VL-32B-Instruct | 36.85 | 39.98 | 38.42 | 81.8% |
| CodePercept-32B-R1 | 68.97 | 62.53 | 65.75 | 95.9% |
关键发现:
- CodePercept-32B-R1(65.75)超越 GPT5-Thinking(64.98),开源模型首次在此基准上超越闭源旗舰
- CodePercept-8B-R1(63.56)超越 Qwen3-VL-Plus 等超大参数规模旗舰模型
- 执行率从基线的 ~80% 提升到 RL 后的 91-96%,接近闭源模型水平
七、局限与反思
CodePercept 的范式并非没有边界。
matplotlib 依赖。当前方法仅限于可用 matplotlib 渲染的 STEM 图像,无法泛化到真实照片、TikZ 绘图、手绘草图等更广泛的视觉场景。这意味着 ICC-1M 数据集的领域覆盖存在系统性偏差。
GPT-4o 奖励偏差。RL 阶段的语义等价性评估依赖 GPT-4o 评分,引入了外部模型的价值判断偏差。当 GPT-4o 自身对某些代码模式的偏好与任务目标不一致时,这种偏差会被放大。
与最强模型的差距。CodePercept-32B-R1 在 STEM2Code-Eval 上与 Gemini2.5-Pro-Thinking 仍有 6.40 分差距(65.75 vs 72.15),说明感知增强虽是关键杠杆,但并非万能解——推理能力的提升仍然不可忽视。
可复现性。论文截至发表时,训练代码和数据均未公开,仅提供了推理权重和基准数据。这对于社区验证和后续研究而言是一个显著的阻碍。
相关概念
- Dense Feature退化 — 感知瓶颈本质是dense feature质量问题,详见V-JEPA 2.1
- 视觉原语锚定 — 坐标锚定与visual primitives是同一思路的不同实现,详见DeepSeek视觉原语
参考文献
本文部分 reference 的 arXiv ID 为 2026 年预占位编号,待论文正式公开后将更新链接。
- Guan T, Yang Z, Wan J, et al. CodePercept: Code-Grounded Visual STEM Perception for MLLMs[C]. CVPR, 2026. arXiv:2603.10757
- Guo D, Yang D, Zhang H, et al. DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning[J]. arXiv preprint arXiv:2501.12948, 2025.
- Bai S, Chen K, Liu X, et al. Qwen3-VL: Thinking with Visual Perception[J]. arXiv preprint, 2025.
- Shi J, Yu Z, Wang Y, et al. GRPO: Group Relative Policy Optimization for Alignment[J]. arXiv preprint, 2024.
- Yang A, Yang B, Hui B, et al. Qwen2.5-VL Technical Report[J]. arXiv preprint, 2025.
- Lu P, Bansal H, Xia T, et al. MathVista: Evaluating Mathematical Reasoning of Foundation Models in Visual Contexts[C]. ICLR, 2024.