Eval bug: InternVL3 vision model produces weird outputs on images with text

用户通过 llama-server 加载 InternVL3-14B-UD-Q4_K_XL.gguf 及对应的 mmproj-InternVL3-14B-BF16.gguf 视觉项目文件,处理一张含有文字的图片并给出描述。输出结果与原始图片内容严重不符(看不清文字、丢失细节),而在 OpenRout

Eval bug: InternVL3 vision model produces weird outputs on images with text

Eval bug: InternVL3 vision model produces weird outputs on images with text

快速结论:该报错通常在使用 llama-server 搭配 --mmproj 运行 InternVL3 系列 GGUF 模型(如 2B、8B、14B)处理含文字的图片时触发。优先排查是否启用了动态分辨率支持——目前 llama.cpp 尚未实现该功能,模型仅能“看到”输入的降采样版本图片,导致输出信息失真。

问题场景

用户通过 llama-server 加载 InternVL3-14B-UD-Q4_K_XL.gguf 及对应的 mmproj-InternVL3-14B-BF16.gguf 视觉项目文件,处理一张含有文字的图片并给出描述。输出结果与原始图片内容严重不符(看不清文字、丢失细节),而在 OpenRouter 上使用相同模型则正常。该问题也在 2B、8B 版本中复现,与后端(Vulkan/BLAS/OpenBLAS)、-fa 标志、--jinja 开关无关。

报错原文

没有直接的 Python 异常报错,模型正常推理但输出语义错误。关键记录来自用户描述:

InternVL3 models in llama.cpp seems to not be able to "see" images very well, especially when extracting text from an image.
Based on the text outputs, it feels as if the images that the model sees is distorted in some way.

启动日志(仅截取关键行,无报错):

build: 6204 (67f09a3a)
ggml_vulkan: 0 = AMD Radeon RX 6700 XT (RADV NAVI22) | uma: 0 | fp16: 1 | bf16: 0
llama_model_loader: loaded meta data with 45 key-value pairs and 579 tensors from InternVL3-14B-UD-Q4_K_XL.gguf (version GGUF V3 (latest))
llama_model_loader: - kv   0:    general.architecture str = qwen2

原因分析

已知原因:llama.cpp 目前未实现 InternVL3 模型的动态分辨率(dynamic resolution)支持。该模型在推理时会对输入图片进行降采样,导致传入视觉编码器的分辨率远低于原始图片,文字信息因分辨率不足而丢失。开发者在 Issue 中确认:

“The dynamic resolution is not yet supported, the model can only see a downscaled version of the input image”
“I haven’t had time to implement and test it.”

注意:同一用户测试 Qwen2.5-VL 时动态分辨率已被支持,故 InternVL3 表现异常并非其他环境问题(如 Python 版本、CUDA 等),而是特定模型架构中的功能缺失。

环境排查

  • llama.cpp 版本:build 6204 (commit 67f09a3a)
  • CPU:Intel i5-9400F
  • GPU:AMD Radeon RX 6700 XT (RADV NAVI22),Vulkan 后端
  • 模型文件:InternVL3 系列 GGUF(2B/8B/14B) + 对应 mmproj 文件
  • 无关环境:其余常见版本(Python、CUDA、PyTorch)不在本 Issue 讨论范围内,该问题非 GPU 驱动或 Vulkan 后端特有。

解决步骤

  1. 确认模型不支持性:如果遇到 InternVL3 解析含文字图片的输出异常,首先确认视觉项目文件 (mmproj) 已正确加载(日志中可见 loaded meta data 且无报错)。
  2. 已知当前无补丁:截至 Issue 关闭,动态分辨率尚未实现。可替换为同样支持动态分辨率且已在 llama.cpp 中实现该特性的模型,如 Qwen2.5-VL(用户已验证)。
  3. 持续跟踪社区:关注 ggml-org/llama.cpp 的 Pull Requests 或新 Issue,搜索关键词 InternVL3 dynamic resolution 以获取实现状态的最权威信息。
  4. (可选)降低期望:如果坚持使用 InternVL3,仅处理无文字图片时模型可得到“大致氛围”的描述,但细节仍可能有损失。

验证方法

选取一张含文字的图片,使用与 Issue 相同的命令行参数运行 llama-server,观察输出结果是否准确提取出图片中的文字信息。动态分辨率实现后,输出应与 OpenRouter 上的 InternVL3 行为一致。

参考来源

ggml-org/llama.cpp #15528

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 13569

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注