# vlmtest **Repository Path**: ajian/vlmtest ## Basic Information - **Project Name**: vlmtest - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-17 - **Last Updated**: 2026-10-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # VlmOcrApp — PaddleOCR-VL-1.5 ONNX 图片转 Markdown(C# / .NET 8 / CPU) 基于 [onnx-community/PaddleOCR-VL-1.5-ONNX](https://huggingface.co/onnx-community/PaddleOCR-VL-1.5-ONNX) 的 INT8 量化模型,纯 C# 实现图片 → Markdown 推理管线。 ## 模型文件(放在模型目录,默认 `F:\git\VLM_onnx`) | 文件 | 作用 | |---|---| | `vision_encoder_q8.onnx` | 视觉塔:`pixel_values [1,N,3,14,14]` + `image_grid_thw [1,3]` → `image_embeds [M,1024]` | | `embedding.onnx`(+`.data`) | token 查表:`input_ids [1,L]` → `embeddings [1,L,1024]` | | `decoder_q8.onnx` | 18 层 LLM:`inputs_embeds` + `attention_mask` + 36 个 KV cache → `logits [1,L,103424]` | | `tokenizer.json` | SPM 风格 BPE 分词器(`VlmOcr.Core.SpmBpeTokenizer` 纯 C# 复刻) | ## 构建与运行 ```bash dotnet build src/VlmOcr.Cli -c Release # 输出: src/VlmOcr.Cli/bin/Release/net8.0/VlmOcr.Cli.exe VlmOcr.Cli.exe 图片.png -m F:\OCR\VLM_onnx # 选项: -o out.md --prompt "OCR:" --max-tokens 1024 ``` ## 任务指令(--prompt) 官方任务模板(来自 PaddleOCR-VL-1.5 README): | 指令 | 用途 | |---|---| | `OCR:`(默认) | 版面识别输出 Markdown | | `Table Recognition:` | 表格识别 | | `Formula Recognition:` | 公式识别 | | `Chart Recognition:` | 图表识别 | ## 结构 - `src/VlmOcr.Core` — 推理引擎类库 - `SpmBpeTokenizer` — 纯 C# SPM-BPE 分词(已与 Python `tokenizers` 库逐项对齐) - `ImagePreprocessor` — smart_resize(28 倍数, 112896~1003520 px) + 归一化 + patchify - `VlModel` — 三个 ONNX 会话封装 + KV cache 自回归解码 - `VlGenerator` — 完整管线编排 - `src/VlmOcr.Cli` — 命令行 - `tools/Probe` — ONNX I/O 元数据探针 - `tools/TokTest` — 分词器对标测试 ## 已验证 - 分词器:encode/decode 与 Python `tokenizers` 10/10 一致(含中文、emoji byte-fallback、特殊 token) - 端到端:测试图正确输出 Markdown(含表格结构识别),CPU 上约 9 token/s