基于 OFA (One-For-All) 的中文手写体文字识别模型,已完成华为昇腾 Ascend 910 NPU 适配。
OFA-OCR 是阿里达摩院提出的通用多模态预训练模型 OFA (One-For-All) 在手写文字识别任务上的应用。该模型使用序列到序列的学习框架统一多模态和多个任务,在手写文字识别公开数据集上达到了业界领先的准确率。
本仓库提供了该模型在华为昇腾 Ascend 910 NPU 上的推理适配代码与评测结果。
| 属性 | 值 |
|---|---|
| 模型名称 | ofa_ocr-recognition_handwriting_base_zh |
| 模型来源 | ModelScope (iic/ofa_ocr-recognition_handwriting_base_zh) |
| 模型类型 | OFA (ResNet101 + Transformer Encoder-Decoder) |
| 参数量 | ~300M |
| 输入 | 手写文字图片 (480x480) |
| 输出 | 识别文字字符串 |
| 提示词 | "图片上的文字是什么?" |
# 安装 ModelScope
pip install modelscope
# 安装依赖
pip install zhconv unicodedata2 torchvision Pillow numpymodelscope download --model iic/ofa_ocr-recognition_handwriting_base_zh --local_dir ./ofa_ocr_model# NPU 单次推理
python3 inference.py --device npu:0 --image "https://modelscope.oss-cn-beijing.aliyuncs.com/demo/images/ocr_handwriting_demo.png"
# NPU vs CPU 精度对比
python3 inference.py --device npu:0 --compare
# NPU 性能基准测试
python3 inference.py --device npu:0 --benchmarkfrom inference import OFAOCRInference
# 初始化 (自动加载到 NPU)
infer = OFAOCRInference("/path/to/ofa_ocr_model", device="npu:0")
# 推理
result = infer.inference("path/to/image.png")
print(result['text']) # 输出: "这 件 好 事 像 节 日"NPU 推理结果与 CPU 基线进行对比,确保推理精度一致。
| 测试项 | CPU 输出 | NPU 输出 | 文本匹配 | Token匹配 | 结论 |
|---|---|---|---|---|---|
| handwriting_demo | 这 件 好 事 像 节 日 | 这 件 好 事 像 节 日 | True | 100.00% | ✓ PASS |
精度结论: NPU 输出与 CPU 基线完全一致,误差 < 1%,满足精度要求。
测试环境: Ascend 910 NPU × 2
| 指标 | 值 |
|---|---|
| 平均延迟 | 274.0 ms |
| 中位延迟 | 266.6 ms |
| 最小延迟 | 260.3 ms |
| 最大延迟 | 301.2 ms |
| 吞吐量 | 3.65 samples/s |
| vs CPU 加速比 | 10.21x |
| 文件 | 说明 |
|---|---|
inference.py | NPU 推理脚本,支持单次推理/精度对比/性能基准测试 |
evaluate.py | 精度评测脚本,生成评测报告 JSON |
README.md | 模型部署文档 (本文件) |
evaluation_results.json | 评测结果数据 |
npu_inference.log | NPU 推理运行日志 |
本模型来自 ModelScope:
@article{wang2022ofa,
author = {Peng Wang and An Yang and Rui Men and Junyang Lin and Shuai Bai and
Zhikang Li and Jianxin Ma and Chang Zhou and Jingren Zhou and Hongxia Yang},
title = {OFA: Unifying Architectures, Tasks, and Modalities Through a
Simple Sequence-to-Sequence Learning Framework},
journal = {CoRR},
volume = {abs/2202.03052},
year = {2022}
}Apache License 2.0