--- license: apache-2.0 library_name: ncnn tags: - ocr - image-to-text - ncnn - cpp - multimodal - vision - hunyuan - tencent base_model: tencent/HunyuanOCR --- # HunyuanOCR-ncnn 腾讯 [HunyuanOCR](https://huggingface.co/tencent/HunyuanOCR) 的 ncnn 推理权重。基于 stock ncnn(上游原版,不做任何代码修改),通过 `add_bin_headers.py` 后处理适配 ncnn 的权重加载格式。 需要配合 C++ 推理框架 [hunyuan-ocr-ncnn](https://github.com/YOUR_USERNAME/HunyuanOCR-ncnn) 使用。 ## 模型信息 | 属性 | 值 | |------|-----| | 原始模型 | [tencent/HunyuanOCR](https://huggingface.co/tencent/HunyuanOCR)(~1B 参数) | | 架构 | HunYuanVL(ViT + LLM 多模态) | | 视觉编码器 | 27 层 ViT,hidden=1152,16 heads,patch_size=16 | | PatchMerger | RMSNorm → Conv2d(stride=2) → GELU → Conv2d(1x1) → GELU → Linear → RMSNorm | | LLM Decoder | 24 层 GQA,hidden=1024,16 heads / 8 kv heads,head_dim=128,intermediate=3584 | | LM Head | 1024 → 120818(词嵌入权重共享) | | 位置编码 | XD-RoPE(4 轴 mRoPE,sections=[16,16,16,16])+ 64 维标准 1D RoPE | | Tokenizer | SentencePiece BPE(ByteLevel,120818 词表) | | 最大位置 | 32768 tokens | | 数据类型 | float32(未做 fp16 量化) | ## 文件说明 | 文件 | 大小 | 说明 | |------|------|------| | `model.json` | ~1 KB | 运行时配置(层数、维度、文件映射) | | `vision_encoder.ncnn.param` | ~25 KB | ViT 网络结构 | | `vision_encoder.ncnn.bin` | ~1.7 GB | ViT 权重(已添加 flag_struct 头) | | `decoder.ncnn.param` | ~85 KB | LLM 网络结构(已移除 Cast 层) | | `decoder.ncnn.bin` | ~1.6 GB | LLM 权重(已添加 flag_struct 头) | | `embed.ncnn.param` | ~165 B | 词嵌入结构 | | `embed.ncnn.bin` | ~472 MB | 词嵌入权重(120818 x 1024) | | `lm_head.ncnn.param` | ~179 B | LM head 结构 | | `lm_head.ncnn.bin` | ~472 MB | LM head 权重 | | `projector.ncnn.param` | ~178 B | 投影层结构 | | `projector.ncnn.bin` | ~4 MB | 投影层权重 | | `perceptron_weights.bin` | ~117 MB | PatchMerger 权重(C++ 直读) | | `pos_embed_32x32.bin` | ~5 MB | ViT 位置嵌入(32x32 网格) | | `image_begin.bin` | 4 KB | 图像开始标记嵌入 | | `image_end.bin` | 4 KB | 图像结束标记嵌入 | | `image_newline.bin` | 4 KB | 图像换行标记嵌入 | | `vocab.txt` | ~1.6 MB | Tokenizer 词表(120818 tokens) | | `merges.txt` | ~1.6 MB | BPE 合并规则(119758 条) | **总计:约 4.5 GB** ## 转换流程 原始 PyTorch 模型经过以下步骤转换为 ncnn 格式: 1. **ONNX 导出**:`torch.onnx.export` 将各子模型导出为 ONNX 2. **pnnx 转换**:ONNX → ncnn param/bin(flat 图,避免 torchscript inline 崩溃) 3. **权重后处理**:`add_bin_headers.py` 为 type=0 权重添加 4 字节 flag_struct 头,适配 stock ncnn 的 `ModelBin` 加载格式 4. **Param 修补**:删除 decoder 中 fp16 导出产生的 Cast 层(stock ncnn 的 Cast 层会丢失 batch 维度) 所有处理步骤均在推理框架仓库的 `tools/` 和 `export/` 目录下。 ## 使用方法 ### 1. 下载权重 ```bash pip install huggingface_hub huggingface-cli download xxzigou/HunyuanOCR-ncnn --local-dir assets/hunyuan_ocr_ncnn ``` ### 2. 编译推理框架 详见 [hunyuan-ocr-ncnn 仓库](https://github.com/YOUR_USERNAME/HunyuanOCR-ncnn) 的 README。简要步骤: ```powershell # 编译 stock ncnn cd ncnn cmake -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DNCNN_AVX=OFF -DNCNN_OPENMP=ON cmake --build build --config Release -j8 cmake --install build --config Release # 编译推理框架 cd hunyuan-ocr-ncnn cmake -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -Dncnn_DIR=C:/ncnn/build/install/lib/cmake/ncnn -DNCNN_SRC_DIR=C:/ncnn cmake --build build --config Release -j8 ``` ### 3. 运行 OCR ```powershell .\build\hunyuan_ocr.exe --model assets/hunyuan_ocr_ncnn --image document.png --threads 4 --stream ``` ## 性能参考 | 配置 | 生成速度 | |------|---------| | CPU 4 线程,full-forward(无 KV cache) | ~6 s/tok | 当前 decoder 为 full-forward 模式(每步重算完整序列),无 KV cache。长序列性能随序列长度二次增长。 ## 已知限制 - 无 KV cache,长序列生成较慢 - float32 推理,未做量化(int8/fp16) - AVX 关闭以保证数值正确性 - 静态序列长度 512(超出需重新导出) ## 致谢 本权重基于腾讯 [HunyuanOCR](https://huggingface.co/tencent/HunyuanOCR) 模型转换而来。感谢腾讯开源的 OCR 模型和 [ncnn](https://github.com/Tencent/ncnn) 推理框架。 ## 许可 权重文件继承原始模型的 [Apache-2.0](https://opensource.org/licenses/Apache-2.0) 许可。