• 人工智能
  • 大模型
  • 计算机视觉
  • OCR
  • 多模态
  • 本地部署

【免费下载链接】ArmorOCR-GGUF

项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/ArmorOCR-GGUF
点击查看 免费下载

ArmorOCR-GGUF 是基于 Qwen3-VL-8B-Instruct 的对抗感知 OCR 模型(ArmorOCR)的 GGUF 量化发布版,为多模态推理同时提供主模型文件与 mmproj 视觉投影器文件,可配合 llama.cpp 以极低依赖本地部署图文 OCR 服务。本文带你弄懂这两个文件各自的角色,以及它们在部署时是如何被"拼"在一起的。

为什么多模态模型要拆成两个 GGUF 文件?

单模态大模型(纯文本 LLM)通常只需一个 GGUF 文件,但多模态模型天然由两套异构组件构成,llama.cpp 的 GGUF 格式选择把它们分别打包:

组件对应文件职责
语言模型(LLM)Qwen3VL-SafetyOCR-EP3-Q8_0.gguf"大脑",负责推理与文字生成
视觉投影器(mmproj)mmproj-Qwen3VL-SafetyOCR-EP3-Q8_0.gguf"眼睛+翻译官",把图片特征翻译成模型能读懂的 token 嵌入

主模型文件:模型的"大脑"

主模型 GGUF 保存的是 Transformer 语言模型的全部权重——即真正"思考"、输出识别文本的部分。它并不知道图片长什么样,只擅长处理一串向量。

mmproj 文件:视觉特征的"翻译官"

图片像素本身无法直接进入语言模型。mmproj(multimodal projector)内部包含视觉编码器与投影层:

  1. 视觉编码器把图片切块编码成图像特征向量;
  2. 投影层(Projector/MLP)将这些向量映射到语言模型词嵌入所在的同一空间;
  3. 映射后的向量作为"视觉 token"拼入上下文序列,与文本 token 一起喂给 LLM。

一句话:mmproj 让 LLM"看懂"图片,主模型负责"说出"答案,两者缺一不可,因此必须以两个文件分别存放。

仓库里四个文件是怎么配对的?

ArmorOCR-GGUF 提供两个量化档位,每档各有一对文件(主模型 + mmproj),命名一一对应:

量化档位主模型视觉投影器特点
Q8_0Qwen3VL-SafetyOCR-EP3-Q8_0.ggufmmproj-Qwen3VL-SafetyOCR-EP3-Q8_0.gguf精度优先,体积更大
Q4_K_MQwen3VL-SafetyOCR-EP3-Q4_K_M.ggufmmproj-Qwen3VL-SafetyOCR-EP3-Q4_K_M.gguf体积更小、更省显存

⚠️ 新手常见坑:两个文件必须同档位配对使用(Q8_0 配 Q8_0,Q4_K_M 配 Q4_K_M),跨档混搭没有意义,也可能导致结果异常。

部署原理:llama.cpp 如何把两个文件"拼"起来?

仓库自带的 serve_gguf.sh 脚本就是部署原理的最佳注脚。它的核心逻辑只有一行——启动 llama-server 时同时传入两个 GGUF:

llama-server \
    -m "${MAIN}" \              # 主模型
    --mmproj "${MMPROJ}" \      # 视觉投影器
    -ngl 999 -c 8192 --jinja

关键参数解读:

  • -m(main model):指定主语言模型文件;
  • --mmproj:指定视觉投影器文件。加载后,llama-server 收到带图片的请求时,会先在 mmproj 中完成"图像 → 视觉 token"的转换,再交给 LLM 续写文本;
  • -ngl 999:把所有层卸载到 GPU;
  • -c 8192:上下文长度 8192 token;
  • --jinja:启用模型自带的 Jinja 对话模板,保证多模态消息(图片 + 文本)的格式与训练时一致。

部署后服务暴露的是 OpenAI 兼容接口(默认 127.0.0.1:8080/v1/chat/completions),客户端把图片以 base64 data URL 放入 image_url 字段即可发起图文 OCR 请求——你无需关心底层双文件如何协作。

🔍 完整启动流程与推理示例见 README.md 的 Quickstart 章节。

三步快速部署 ArmorOCR-GGUF

第一步:构建支持 CUDA 的 llama.cpp(官方源码编译,启用 GGML_CUDA),得到 llama-server 可执行文件。

第二步:运行仓库内置脚本,一行命令启动服务:

bash serve_gguf.sh Q8_0 8080      # Q8_0 档位,端口 8080
# 或
bash serve_gguf.sh Q4_K_M         # Q4_K_M 档位,默认端口 8080

第三步:调用 OpenAI 兼容接口,在消息中同时发送图片(base64)与提示词(要求输出 <analyze> 推理过程和 <answer> 识别结果),即可拿到 ArmorOCR 的抗干扰 OCR 结果。

量化档位怎么选?Q8_0 还是 Q4_K_M?

根据 README.md 中 AdvSpot 基准的评测数据(单卡 A100 实测):

  • Q8_0:平均识别准确率 56.9,与原始模型(55.7)基本持平甚至略高;
  • Q4_K_M:平均准确率 54.2,IoU 从 63.3 降至 57.2,小幅下降。

选型建议:

场景推荐档位
显存充足(≥24GB),追求最高精度Q8_0
显存紧张、批量部署、够用即可Q4_K_M

需要说明:量化后 IoU(定位准确度)有轻微下降,这与视觉编码器/投影器被量化直接相关——mmproj 的精度对整体识别质量影响不小,这也是为什么它必须单独打包、单独选档位的原因。

常见问题 FAQ

Q:只下载了主模型,图片请求直接报错? A:因为缺少 mmproj 视觉投影器,服务无法把图片转为视觉 token。请补齐同档位的 mmproj 文件并用 --mmproj 传入。

Q:为什么不能把两个文件合并成一个? A:GGUF 格式以"单一模型"为单位组织权重,视觉投影器在结构上是独立模块,llama.cpp 通过 --mmproj 显式挂载,便于同一 LLM 搭配不同视觉塔、也便于分别量化。

Q:License 要注意什么? A:本仓库采用 Apache License 2.0 发布,同时受基础模型 Qwen3-VL-8B-Instruct 的许可条款约束。

小结

  • 多模态 GGUF 拆成两个文件:主模型管思考,mmproj 管看图,二者通过 llama-server -m ... --mmproj ... 组合工作;
  • ArmorOCR-GGUF 的 Q8_0 / Q4_K_M 两档均为"成对"发布,选档位时两个文件要同步选择;
  • 借助 serve_gguf.sh 一行命令即可拉起 OpenAI 兼容的本地 OCR 服务,无需复杂环境配置;
  • 面对旋转、镜像、低对比度、图案遮挡等对抗性场景,ArmorOCR 的量化版本仍保持了接近原版的识别水准,是本地部署对抗感知 OCR 的实用选择。
  • 人工智能
  • 大模型
  • 计算机视觉
  • OCR
  • 多模态
  • 本地部署

【免费下载链接】ArmorOCR-GGUF

项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/ArmorOCR-GGUF
点击查看 免费下载
Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐