AnyTable 是一个专注于从文档或者图片中表格解析的模型工具,主要分成两个部分:
本项目适配的是 anytable-det 部分,使用 ultralytics 框架训练的 YOLO11s 模型进行表格检测。
图像目标检测(Image Object Detection)- 表格检测(Table Detection)
本模型已在华为昇腾 Ascend910 NPU 上完成适配和测试。适配过程包括:
torch_npu 后端适配要点:
TORCH_DEVICE_BACKEND_AUTOLOAD=0 环境变量控制 torch_npu 加载顺序,避免后端自动加载冲突torch_npu 确保 NPU 设备可用torchvision::nms 算子不支持 NPU 后端,会回退到 CPU 执行,不影响精度# 使用清华 PyPI 镜像
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ultralytics opencv-python-headless pillow numpy
# 确保 torch_npu 已安装(昇腾 NPU 环境)
python3 -c "import torch; import torch_npu; print(torch.npu.is_available())"模型会自动从 ModelScope 下载到本地缓存目录,或手动下载:
from modelscope import snapshot_download
model_dir = snapshot_download('anyforge/anytable')cd /opt/atomgit/workspace/anytable
PYTHONPATH=/opt/atomgit/pylib TORCH_DEVICE_BACKEND_AUTOLOAD=0 python3 inference.py --device cpucd /opt/atomgit/workspace/anytable
PYTHONPATH=/opt/atomgit/pylib TORCH_DEVICE_BACKEND_AUTOLOAD=0 python3 inference.py --device npupython3 inference.py --model /path/to/model.pt --image /path/to/image.jpg --device npu --imgsz 960使用 anytable-det-yolo11s-imgsz960.pt 模型对 assets/sample1.jpg 进行推理,检测到 4 个表格区域:
| 目标 | CPU bbox | NPU bbox | CPU 置信度 | NPU 置信度 |
|---|---|---|---|---|
| 0 | [133.45, 526.29, 335.36, 870.80] | [133.44, 526.31, 335.35, 870.82] | 0.5235 | 0.5235 |
| 1 | [1029.72, 88.17, 1344.23, 223.11] | [1029.71, 88.17, 1344.23, 223.10] | 0.3652 | 0.3652 |
| 2 | [4.83, 1636.76, 479.52, 1918.81] | [4.85, 1636.76, 479.55, 1918.81] | 0.3000 | 0.3002 |
| 3 | [2.99, 1442.60, 479.05, 1558.10] | [2.97, 1442.60, 479.09, 1558.11] | 0.2593 | 0.2593 |
核心代码:
import os
os.environ["TORCH_DEVICE_BACKEND_AUTOLOAD"] = "0"
import torch
import torch_npu
from ultralytics import YOLO
# 加载模型
model = YOLO("anytable-det-yolo11s-imgsz960.pt")
# CPU 推理
cpu_results = model("image.jpg", device="cpu")
# NPU 推理
npu_results = model("image.jpg", device="npu:0")
# 提取检测结果
for result in npu_results:
boxes = result.boxes # Boxes object for bounding box outputs
# boxes.xyxy, boxes.conf, boxes.clspython3 compare_cpu_npu.py| 指标 | 数值 |
|---|---|
| 匹配目标数 | 4/4(全部匹配) |
| bbox 最大坐标绝对误差 | 0.033966 |
| bbox 平均坐标绝对误差 | 0.012590 |
| 置信度最大差异 | 0.000137 |
| 置信度平均差异 | 0.000071 |
| 平均 IoU | 0.999844 |
| 检测数量差异率 | 0.00% |
| 归一化平均相对误差 | 0.0039% |
精度测试结论:NPU 与 CPU 推理误差为 0.0039%,符合精度误差小于 1% 的要求。
| 设备 | 推理耗时 |
|---|---|
| CPU | 1.1902 秒 |
| NPU(Ascend910) | 1.6406 秒 |
注:NPU 推理总耗时包含算子回退(torchvision::nms 回退到 CPU 执行)的开销。实际 NPU 推理计算时间仅为 5.8ms(远快于 CPU 的 1003.2ms)。
本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。
#+NPU #+CV #+目标检测 #+表格检测 #+YOLO #+昇腾 #+PyTorch #+表格识别

推理完成后,脚本会自动释放 NPU 显存:
del model
torch.npu.empty_cache() # 释放 NPU 显存