e
gcw_GSiqzzLf/anytable-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

AnyTable-NPU

模型介绍

AnyTable 是一个专注于从文档或者图片中表格解析的模型工具,主要分成两个部分:

  • anytable-det:用于表格区域检测
  • anytable-rec:用于表格结构识别(未来开放)

本项目适配的是 anytable-det 部分,使用 ultralytics 框架训练的 YOLO11s 模型进行表格检测。

原始模型地址

  • ModelScope: anyforge/anytable
  • Hugging Face: anyforge/anytable
  • GitHub: AnyTable

任务类型

图像目标检测(Image Object Detection)- 表格检测(Table Detection)

模型框架

  • PyTorch 2.9.0
  • Ultralytics 8.4.51
  • YOLO11s

输入格式

  • 图片文件(支持 JPG、PNG 等常见格式)
  • 输入尺寸:960x960(模型要求)

输出格式

  • 检测到的表格区域边界框(Bounding Box)
  • 每个边界框包含:x1, y1, x2, y2 坐标
  • 置信度分数(Confidence Score)
  • 类别 ID

依赖环境

  • Python >= 3.8
  • PyTorch >= 1.8.0
  • torch_npu(昇腾 NPU 支持)
  • Ultralytics >= 8.0.0
  • OpenCV
  • Pillow
  • NumPy

NPU 适配说明

本模型已在华为昇腾 Ascend910 NPU 上完成适配和测试。适配过程包括:

  1. 使用 ultralytics YOLO 框架加载预训练模型权重
  2. 在 CPU 上运行推理,保存基准结果
  3. 在 NPU(Ascend910)上运行推理,使用 torch_npu 后端
  4. 对比 CPU 和 NPU 的推理结果,验证精度一致性

适配要点:

  • 通过 TORCH_DEVICE_BACKEND_AUTOLOAD=0 环境变量控制 torch_npu 加载顺序,避免后端自动加载冲突
  • 手动导入 torch_npu 确保 NPU 设备可用
  • YOLO 模型的 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')

推理命令

CPU 推理

cd /opt/atomgit/workspace/anytable
PYTHONPATH=/opt/atomgit/pylib TORCH_DEVICE_BACKEND_AUTOLOAD=0 python3 inference.py --device cpu

NPU 推理

cd /opt/atomgit/workspace/anytable
PYTHONPATH=/opt/atomgit/pylib TORCH_DEVICE_BACKEND_AUTOLOAD=0 python3 inference.py --device npu

自定义输入

python3 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 bboxNPU bboxCPU 置信度NPU 置信度
0[133.45, 526.29, 335.36, 870.80][133.44, 526.31, 335.35, 870.82]0.52350.5235
1[1029.72, 88.17, 1344.23, 223.11][1029.71, 88.17, 1344.23, 223.10]0.36520.3652
2[4.83, 1636.76, 479.52, 1918.81][4.85, 1636.76, 479.55, 1918.81]0.30000.3002
3[2.99, 1442.60, 479.05, 1558.10][2.97, 1442.60, 479.09, 1558.11]0.25930.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.cls

CPU/NPU 精度测试方法

  1. 分别使用 CPU 和 NPU 对同一张图片进行推理
  2. 保存推理结果到 JSON 文件
  3. 运行对比脚本,计算以下指标:
    • bbox 坐标差异(绝对误差和相对误差)
    • 置信度差异
    • 检测数量一致率
    • IoU(交并比)
python3 compare_cpu_npu.py

CPU/NPU 精度测试结果

指标数值
匹配目标数4/4(全部匹配)
bbox 最大坐标绝对误差0.033966
bbox 平均坐标绝对误差0.012590
置信度最大差异0.000137
置信度平均差异0.000071
平均 IoU0.999844
检测数量差异率0.00%
归一化平均相对误差0.0039%

精度测试结论:NPU 与 CPU 推理误差为 0.0039%,符合精度误差小于 1% 的要求。

性能测试结果

设备推理耗时
CPU1.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 显存