DETR (DEtection TRansformer) 是 Facebook AI 提出的端到端目标检测模型,将 Transformer 架构引入目标检测领域,消除了对锚框、NMS 等手工设计组件的依赖。DETR 使用 CNN 骨干网络提取图像特征,然后通过 Transformer encoder-decoder 结构直接输出预测结果。
本仓库将 facebook/detr-resnet-101 模型适配到华为昇腾 Ascend NPU 上进行推理,验证其在 NPU 上的功能和精度。相比 DETR-ResNet-50,本模型使用更深层的 ResNet-101 骨干网络,参数量更大,检测精度更高(COCO AP 43.5 vs 42.0)。
模型信息
| 属性 | 值 |
|---|---|
| 模型名称 | DETR-ResNet-101 |
| 发布方 | Meta AI (Facebook) |
| 架构 | CNN + Transformer (ResNet-101 backbone) |
| 参数量 | 60.5M |
| 任务 | 目标检测 (Object Detection) |
| 数据集 | COCO 2017 |
| 原始权重 | https://huggingface.co/facebook/detr-resnet-101 |
| 组件 | 版本 |
|---|---|
| 操作系统 | Ubuntu (aarch64) |
| NPU | Ascend 910B4 |
| Python | 3.11.14 |
| torch | 2.5.x |
| torch_npu | 2.5.x |
| transformers | 4.x |
| timm | 1.x |
pip install torch torchvision transformers timm Pillow requests -i https://pypi.tuna.tsinghua.edu.cn/simple模型权重已包含在本仓库中,也可通过以下命令重新下载:
export HF_ENDPOINT=https://hf-mirror.com
python3 -c "
import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
from huggingface_hub import snapshot_download
snapshot_download('facebook/detr-resnet-101', local_dir='./')
"inference.py 支持在 CPU 和 NPU 上运行 DETR 目标检测推理。
# NPU 推理(默认)
python inference.py --image http://images.cocodataset.org/val2017/000000039769.jpg
# CPU 推理
python inference.py --device cpu --image http://images.cocodataset.org/val2017/000000039769.jpg
# 使用本地图片
python inference.py --image /path/to/your/image.jpg使用 COCO val2017 测试图片(两只猫和沙发),NPU 推理输出如下:
[INFO] 使用 NPU 设备: Ascend910B4
[INFO] 加载模型: /opt/atomgit/detr-resnet-101
[INFO] 模型参数: 60.5M
[INFO] 图片尺寸: (640, 480)
[RESULTS] 检测到 5 个目标:
cat 置信度=0.998 框=[330, 70, 370, 210]
cat 置信度=0.998 框=[15, 55, 330, 360]
couch 置信度=0.995 框=[0, 1, 640, 370]
remote 置信度=0.997 框=[35, 75, 190, 175]
remote 置信度=0.997 框=[330, 75, 370, 130]精度测试脚本 accuracy_test.py 在相同输入下对比 CPU (float32) 和 NPU (float32) 的输出差异,自动生成精度报告。
python accuracy_test.py测试条件:
000000039769.jpg (640×480)| 指标 | 数值 |
|---|---|
| Logits 形状 | [1, 100, 92] |
| 最大绝对误差 | 0.08356571 |
| 平均绝对误差 | 0.00242319 |
| 平均相对误差 | 0.040% |
| 要求 | < 1% |
| 结果 | PASS ✅ |
| 指标 | 数值 |
|---|---|
| Boxes 形状 | [1, 100, 4] |
| 最大绝对误差 | 0.00749397 |
| 平均绝对误差 | 0.00018876 |
| 平均相对误差 | < 0.001% |
CPU 和 NPU 检测结果完全一致(置信度阈值 0.5):
| 目标 | CPU 置信度 | NPU 置信度 |
|---|---|---|
| cat | 0.998 | 0.998 |
| cat | 0.998 | 0.998 |
| couch | 0.995 | 0.995 |
| remote | 0.997 | 0.997 |
| remote | 0.997 | 0.997 |
| 指标 | CPU | NPU | 加速比 |
|---|---|---|---|
| 推理时间 | ~1.5s | ~0.35s | ~4.3x |
运行 accuracy_test.py 后生成的 accuracy_report.json 包含完整精度指标:
{
"model": "facebook/detr-resnet-101",
"device_npu": "Ascend910B4",
"logits": {
"max_abs_diff": 0.08356571,
"mean_abs_diff": 0.00242319,
"mean_rel_diff": 0.00040417
},
"boxes": {
"max_abs_diff": 0.00749397,
"mean_abs_diff": 0.00018876
},
"passed": true
}DETR-ResNet-101 在华为昇腾 Ascend 910B4 NPU 上成功适配验证:
精度结论:NPU 与 CPU 输出检测结果一致,精度误差低于 1% 要求,精度验证通过。
timm 库,因为 DETR 的 CNN 骨干网络依赖它基于现有评测数据,CPU 与 NPU 的 平均相对误差 精度误差为 0.04%,小于 1% 的精度要求。
本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。