sheepss/microsoft-trocr-small-handwritten-NPU
模型介绍
文件和版本
Pull Requests
讨论
分析

microsoft/trocr-small-handwritten on Ascend NPU

#NPU

1. 模型简介

  • 模型:microsoft/trocr-small-handwritten (revision b4648cfa171985a6745f37ddd637e98c0da958ac)
  • 任务:手写文本识别(OCR,image-to-text 生成)
  • 架构:VisionEncoderDecoderModel = DeiT-S 风格 ViT 图像编码器(hidden 384,12 层,输入 384×384, patch 16)+ TrOCR/RoBERTa 风格文本解码器(d_model 256,6 层,词表 64044),自回归 greedy 生成文本。
  • 权重:pytorch_model.bin,FP32,约 234 MB;无需 trust_remote_code。

本仓库将该模型适配到华为昇腾单卡 npu:0(Ascend910_9362)上完成真实推理、CPU-NPU 一致性验证与性能测试。

2. 验证环境

项目值
硬件Ascend910(Ascend910_9362),HBM 64 GB
CANN8.5.1
torch2.9.0+cpu
torch_npu2.9.0.post1
transformers4.46.3
推理设备 / dtypenpu:0 / float32

3. 安装依赖

pip install -r requirements.txt

模型权重通过 huggingface_hub.snapshot_download("microsoft/trocr-small-handwritten") 下载到本地 HF 缓存后离线加载;已配置 HF_ENDPOINT=https://hf-mirror.com 时自动走国内镜像。

4. NPU 推理

仓库自带 8 个固定的 IAM 手写单词测试图(samples/,含真实标注 labels.json)。默认命令即完成 「CPU 参考推理 + npu:0 真实推理 + 一致性校验 + CER 统计 + 性能基准」:

python inference.py

仅跑性能基准:

python inference.py --mode benchmark

5. 真实推理结果

python inference.py 在 npu:0 上的固定样例输出(完整日志见 assets/model_result.png 所渲染内容):

model       : microsoft/trocr-small-handwritten
task        : handwritten text recognition (OCR, image-to-text)
backend     : transformers VisionEncoderDecoderModel + torch_npu
dtype       : float32
input       : 8 fixed IAM handwriting word images (e.g. sample_00.png [118, 112])
      model parameters on : npu:0
  sample_00.png: gt='little'    | cpu='lifts'     | npu='lifts'     | CER=0.500 | cpu==npu: True
  sample_01.png: gt='always'    | cpu='always ,'  | npu='always ,'  | CER=0.333 | cpu==npu: True
  sample_02.png: gt='It'        | cpu='r t'       | npu='r t'       | CER=1.000 | cpu==npu: True
  sample_03.png: gt='endeavour' | cpu='gmclea von :' | npu='gmclea von :' | CER=0.889 | cpu==npu: True
  sample_04.png: gt='For'       | cpu='for'       | npu='for'       | CER=0.333 | cpu==npu: True
  sample_05.png: gt='in'        | cpu='jn'        | npu='jn'        | CER=0.500 | cpu==npu: True
  sample_06.png: gt='happened'  | cpu='happened'  | npu='happened'  | CER=0.000 | cpu==npu: True
  sample_07.png: gt='an'        | cpu='cm'        | npu='cm'        | CER=1.000 | cpu==npu: True
RESULT: PASS

6. CPU-NPU 一致性验证

  • 验证方式:同一 FP32 权重、同一 8 张固定样例,分别在 CPU 与 npu:0 上执行官方 greedy generate(), 对解码文本做逐字符精确比较。
  • 结果:CPU-NPU exact text consistency : 8/8,全部样例 NPU 输出与 CPU 完全一致。
  • 说明:这是固定样例的 smoke consistency 验证,不是完整 IAM 测试集精度评测。
  • 任务参考指标:mean CER vs ground truth = 0.5694(8 样例小样本,含难例)。TrOCR-small 为该系列最小规格, 论文级完整 IAM 测试集 CER 约 15%;上述小样本 CER 明显偏高属于 small 规格在难例上的正常表现, 不影响设备适配正确性判定(一致性为准绳)。

7. 性能测试

计时区间为单张图端到端 model.generate()(含编码器 forward 与解码器自回归循环), 前后调用 torch.npu.synchronize();预热 3 次、正式计时 10 次。

[benchmark] single-image end-to-end generate() on npu:0 (Ascend910_9362), dtype=float32, batch=1, input 384x384
  latency ms: avg=67.3 min=67.2 max=67.4 p50=67.3 p90=67.4 p95=67.4
  throughput: 14.85 images/s
  peak NPU memory allocated: 387.6 MB

8. 自验证截图

  • assets/agent_workflow.png — 下载、侦察、加载、NPU 推理、验证、性能各阶段真实日志
  • assets/npu_device_call.png — npu-smi info、torch.npu.is_available()、设备名与模型参数所在设备
  • assets/model_result.png — 默认 python inference.py 的真实输出与 PASS 判定

9. 已知限制

  • 本模型面向单个手写单词/短行图像;整页文档需先做行/词切分。
  • TrOCR-small 是该系列最小规格,识别准确率显著低于 base/large 版本;部分手写风格上输出偏差较大。
  • 当前以 FP32 提交;FP16 可进一步降低时延,但未纳入本次验证范围。
  • config.json 中 use_cache=false(沿用上游配置),解码速度存在优化空间。

10. 标签

NPU Ascend Ascend910 Hardware: NPU OCR 计算机视觉