|
|
@@ -1,4 +1,69 @@
|
|
|
-确认完毕,给你结论和可执行方案。
|
|
|
+# 从 HF safetensors 到 GGUF 的转换
|
|
|
+## 原理
|
|
|
+语言模型本体是什么
|
|
|
+本体是 Qwen2-VL 系列里的 Qwen2 语言模型(约 1.2B 参数,BF16)。
|
|
|
+
|
|
|
+具体说明:
|
|
|
+
|
|
|
+MinerU2.5-Pro 是个视觉-语言文档解析模型(PDF→Markdown),整体属于 Qwen2-VL 家族。
|
|
|
+它由两部分组成:
|
|
|
+语言主干:Qwen2(decoder-only LLM,1.2B)
|
|
|
+视觉编码器 + 投影器:Qwen2-VL 的 ViT(mmproj 部分)
|
|
|
+
|
|
|
+关键在于理解**数据流的顺序**:视觉编码器+投影器是在语言主干**之前**工作的,它们提供的是语言模型的**输入**,而不是后处理。
|
|
|
+
|
|
|
+## 核心误区澄清
|
|
|
+
|
|
|
+语言主干(LLM)本身**看不懂图像像素**。它只能处理一串「token 向量」(embedding)。一张图片的原始像素(比如 1024×1024×3 的数字矩阵)对 LLM 来说是完全无法理解的东西。
|
|
|
+
|
|
|
+所以 OCR/文档解析的实际流程是这样的:
|
|
|
+
|
|
|
+```
|
|
|
+图片像素
|
|
|
+ │
|
|
|
+ ▼
|
|
|
+[视觉编码器 ViT] ──► 一堆图像特征向量(维度 = 视觉模型的隐藏维度)
|
|
|
+ │
|
|
|
+ ▼
|
|
|
+[投影器 Projector] ──► 把视觉向量"翻译"成 LLM 能理解的 token embedding
|
|
|
+ │
|
|
|
+ ▼
|
|
|
+[语言主干 LLM] ──► 把这些"图像 token" + 文本提示词一起处理,自回归生成文字
|
|
|
+ │
|
|
|
+ ▼
|
|
|
+输出文本(Markdown / OCR 结果)
|
|
|
+```
|
|
|
+
|
|
|
+也就是说:**语言主干能输出内容,正是因为视觉编码器+投影器先把图片转成了它能"读"的输入。** 没有这两个部件,LLM 面对一张图片只能干瞪眼,根本无从生成内容。
|
|
|
+
|
|
|
+## 三个部件各自的职责
|
|
|
+
|
|
|
+### 1. 视觉编码器(ViT,Vision Transformer)
|
|
|
+- 输入:图片像素。
|
|
|
+- 输出:把图片切成小块(patch),每块编码成一个高维向量,捕捉「这里是文字、这里是表格线、这里是公式符号」等视觉特征。
|
|
|
+- 但它输出的向量维度和语义空间,跟 LLM 的词向量空间是**对不上的**——两个模型是分别训练的。
|
|
|
+
|
|
|
+### 2. 投影器(Projector / mmproj)
|
|
|
+- 作用:一个「适配器/翻译层」(通常是 MLP 或几层线性变换)。
|
|
|
+- 把视觉编码器输出的向量,**映射到 LLM 的 embedding 空间**,使其在数值维度和语义上「冒充」成 LLM 能接受的 token。
|
|
|
+- 这就是为什么在 llama.cpp 里它叫 **mmproj**(multimodal projector),需要单独转换成一个 GGUF 文件——它是连接视觉和语言两个世界的桥。
|
|
|
+
|
|
|
+### 3. 语言主干(Qwen2 LLM)
|
|
|
+- 接收:投影器产出的「图像 token」+ 文本提示(例如 "把这张图转成 Markdown")。
|
|
|
+- 输出:自回归地生成结果文本。
|
|
|
+- 它的强大语言/排版/结构化能力,正是把零散的视觉特征组织成通顺 Markdown 的关键。
|
|
|
+
|
|
|
+## 类比
|
|
|
+
|
|
|
+可以把它想成翻译会议:
|
|
|
+
|
|
|
+- **视觉编码器** = 一个只懂「图像语」的观察员,把看到的画面记录成图像语笔记。
|
|
|
+- **投影器** = 翻译,把图像语笔记翻成 LLM 听得懂的语言。
|
|
|
+- **语言主干** = 真正做总结发言的人,但他没亲眼看图,全靠翻译转述的内容来组织最终输出。
|
|
|
+
|
|
|
+所以三者是**串行协作、缺一不可**的:投影器和编码器决定 LLM「看到了什么」,LLM 决定「怎么把看到的说出来」。这也是 MinerU2.5-Pro、PaddleOCR-VL 转换时必须同时导出主体模型和 `mmproj` 两个 GGUF 的原因——少了 mmproj,模型就「瞎」了。
|
|
|
+
|
|
|
+---
|
|
|
|
|
|
## 关键事实
|
|
|
|