本文档记录 microsoft/table-transformer-structure-recognition 表格结构识别模型在昇腾 NPU(Ascend 910B3)上的迁移适配、精度评测与性能验证结果。
Table Transformer(TATR)是 Microsoft 基于 DETR 架构的表格理解模型。Structure Recognition 变体专门识别表格的结构元素,支持 6 类检测:table(表格整体)、table column(列)、table row(行)、table column header(列标题)、table projected row header(投影行标题)、table spanning cell(跨行/跨列单元格)。
该模型使用 ResNet-18 backbone + Transformer Encoder-Decoder(类 DETR 架构),通过 100 个 object queries 并行预测表格元素的 bounding boxes 和类别。输入为包含表格的文档图片,输出结构化检测结果,是表格信息提取流水线的核心组件。
相关获取地址:
| 组件 | 版本 |
|---|---|
torch | 2.8.0 |
torch_npu | 2.8.0.post4 |
transformers | 5.8.1 |
timm | 1.0.27 |
CANN | 8.5.1 |
8 × Ascend 910B3timmTableTransformerForObjectDetection(非 DetrForObjectDetection)conda create -n table-transformer-structure-recognition python=3.11 -y
conda activate table-transformer-structure-recognition
pip install torch==2.8.0 torch_npu==2.8.0.post4 timm \
-i https://pypi.tuna.tsinghua.edu.cn/simple
pip install transformers torchvision pillow numpy \
-i https://pypi.tuna.tsinghua.edu.cn/simplepython inference.py --image table.jpg --device npu编程接口:
from inference import DetrDetector
detector = DetrDetector(
model_path="./table-transformer-structure-recognition", device="npu"
)
results = detector.detect(["table.jpg"], threshold=0.5)
# results[0] → boxes, scores, labels注意:推理脚本使用
TableTransformerForObjectDetection类加载,区别于 DETR 的DetrForObjectDetection。
python inference.py --image table.jpg --device npu预期输出:检测到的表格元素(列/行/标题/合并单元格等)的 bounding boxes 和置信度,无运行时错误。
测试条件:4 张合成图像,batch_size=2,NPU 预热 1 轮。
| 指标 | 数值 |
|---|---|
| CPU 吞吐量 | 0.7 img/s |
| NPU 吞吐量 | 20.3 img/s |
| CPU/NPU 加速比 | 29.1 × |
Table Transformer 的 ResNet-18 backbone + Transformer 在 NPU 上获得 29.1× 加速,适合离线批量文档表格结构分析。
分别在 CPU 和 NPU 上推理 4 张合成图像,比较 100 个 object query 的分类 logits 展平后余弦相似度。
| 指标 | 数值 |
|---|---|
| 平均余弦相似度 | 1.000000 |
| 精度误差率 | 0.0000% |
结论:精度误差率 0.0000%,NPU 与 CPU 输出完全一致,评测通过。
timm 的 TimmBackbone 加载),相对 ResNet-50 更轻量TableTransformerForObjectDetection.from_pretrained(),不能使用 DetrForObjectDetection。两者架构相似但类名不同,错用会导致 NaN logitsmodel.to("npu:0") 迁移,ResNet 卷积 + Transformer 注意力 NPU 原生加速AutoImageProcessor 在 CPU 端预处理(resize 到 800×800 + 标准化)processor.post_process_object_detection)在 CPU 过滤低置信度框timm 库支持 ResNet TimmBackboneimport torch, torch_npu
from transformers import AutoImageProcessor, TableTransformerForObjectDetection
model = TableTransformerForObjectDetection.from_pretrained(
"table-transformer-structure-recognition"
).to("npu:0")
processor = AutoImageProcessor.from_pretrained(
"table-transformer-structure-recognition"
)
from PIL import Image
image = Image.open("table.jpg").convert("RGB")
inputs = processor(images=image, return_tensors="pt")
inputs = {k: v.to("npu:0") for k, v in inputs.items()}
with torch.no_grad():
outputs = model(**inputs)
target_sizes = torch.tensor([image.size[::-1]])
results = processor.post_process_object_detection(
outputs, target_sizes=target_sizes, threshold=0.5
)TableTransformerForObjectDetection,使用 DetrForObjectDetection 会导致 NaN 输出。这是因为 Table Transformer 的分类头维度不同(6 类 vs DETR 的 2 类),权重加载策略也不同。timm 库加载(TimmBackbone),需 pip install timm。缺少 timm 报 TimmBackbone requires the timm library。size 参数调整。注意表格长宽比极端时(如极宽的表格),resize 可能导致结构扭曲。post_process_object_detection 的 NMS/阈值过滤/坐标映射在 CPU 执行,不在 NPU 加速范围内。