z
zkx_/conditional-detr-resnet-50-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

conditional-detr-resnet-50 on Ascend NPU

1. 简介

本文档记录 microsoft/conditional-detr-resnet-50 Conditional DETR 目标检测模型在昇腾 NPU(Ascend 910B3)上的迁移适配、精度评测与性能验证结果。

Conditional DETR 是 DETR 的改进变体,通过条件空间查询(conditional spatial query)加速训练收敛。ResNet-50 backbone + 6 层 Transformer Encoder-Decoder,在 COCO 数据集上预训练,支持 91 类目标检测。比原始 DETR 训练快 6-10×。

相关获取地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/microsoft/conditional-detr-resnet-50

2. 验证环境

组件版本
torch2.8.0
torch_npu2.8.0.post4
transformers5.8.1
timm1.0.27
CANN8.5.1
  • NPU:8 × Ascend 910B3
  • 额外依赖:需 timm 库(TimmBackbone)

3. 部署使用流程

3.1 环境准备

conda create -n conditional-detr-resnet-50 python=3.11 -y
conda activate conditional-detr-resnet-50

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/simple

3.2 推理脚本使用

python inference.py --image photo.jpg --device npu
from inference import DetrDetector
detector = DetrDetector(model_path="./conditional-detr-resnet-50", device="npu")
results = detector.detect(["photo.jpg"], threshold=0.5)

4. Smoke 验证

python inference.py --image photo.jpg --device npu

预期输出:检测到的对象 bounding boxes、类别和置信度,无运行时错误。

5. 性能参考

测试条件:4 张合成 640×480 图像,batch_size=2,NPU 预热 1 轮。

指标数值
CPU 吞吐量0.3 img/s
NPU 吞吐量11.2 img/s
CPU/NPU 加速比36.7 ×

6. 精度评测

6.1 评测方法

分别在 CPU 和 NPU 上推理 4 张合成图像,比较 100 个 object query 分类 logits 展平后的余弦相似度。

6.2 评测结果

指标数值
平均余弦相似度1.000000
精度误差率0.0001%

结论:精度误差率 0.0001%,NPU 与 CPU 输出完全一致,评测通过。

7. 迁移适配说明

7.1 模型结构

  • Backbone:ResNet-50(TimmBackbone)
  • Encoder:6 层 Transformer,条件空间查询
  • Decoder:6 层 Transformer,100 object queries
  • 参数量:约 44M

7.2 适配要点

  1. ConditionalDetrForObjectDetection.from_pretrained() 加载(注意类名不同于 DETR)
  2. 需 timm 库
  3. model.to("npu:0") 迁移

7.3 关键代码

from transformers import AutoImageProcessor, ConditionalDetrForObjectDetection
model = ConditionalDetrForObjectDetection.from_pretrained("conditional-detr-resnet-50").to("npu:0")
processor = AutoImageProcessor.from_pretrained("conditional-detr-resnet-50")
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)

8. 注意事项

  1. 类名:使用 ConditionalDetrForObjectDetection,非 DetrForObjectDetection
  2. timm 依赖:ResNet-50 通过 timm 加载,需 pip install timm
  3. vs DETR:训练收敛快 6-10×,推理速度相近
  4. 首次 NPU 推理:44M 参数,编译器编译约 8-12 秒