m
mxy-yy/rad-dino-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Rad-Dino Ascend NPU 部署指南

项目简介

Rad-Dino 是基于 DINOv2 的医学影像编码器,专门用于 X 光和 CT 等医学影像分析。该模型在大规模自然图像预训练的基础上,通过医学影像微调获得强大的医学影像理解能力。

特性

  • 支持 Ascend NPU 推理加速
  • 768 维医学影像特征输出
  • 12 层 Vision Transformer 架构
  • 86.6M 参数

环境要求

  • 硬件: 华为 Ascend 910 系列 NPU
  • CANN: 8.0.RC1 或更高版本
  • PyTorch: 2.2.0+ with torch_npu

目录结构

rad-dino-ascend/
├── inference.py          # 精度测试脚本
├── test.log              # 测试日志
├── README.md             # 本文档

模型结构

Rad-Dino 基于 DINOv2 架构:

组件说明参数数量
Patch Embed14x14 patch embedding86k
Class Token可学习类别令牌768
Position Embed位置编码 (1370 tokens)1M
Transformer Blocks12 层注意力块~84M
LayerNorm后处理归一化1.5k

Transformer Block 详情

  • Attention: 12 头, 768 维
  • QKV: 融合的 query/key/value 投影
  • MLP: 4x 扩展 (3072 隐藏维)
  • LayerScale: 可学习缩放因子

部署步骤

1. 设置环境变量

source /usr/local/Ascend/ascend-toolkit/set_env.sh

2. 执行推理测试

cd rad-dino-ascend/
python3 inference.py

3. 执行精度测试

cd rad-dino-ascend/
python3 inference.py --precision_test

测试验证

精度测试结果

指标实测值阈值状态
Max Error (sum)1.22e-04< 1e-3PASS
Max Error (mean)1.19e-07< 1e-5PASS
Max Error (std)5.96e-08< 1e-5PASS

性能数据

操作耗时
模型加载~4s
CPU 参考计算 (20 tensors)0.12s
NPU 推理 (20 tensors)0.25s
端到端推理 (1 image 518x518)~4.5s

测试日志

2026-05-19 13:17:23,086 - INFO - Rad-Dino Ascend NPU Inference
2026-05-19 13:17:23,087 - INFO - Loading RadDino model from /opt/atomgit/mxy/rad-dino
2026-05-19 13:17:23,810 - INFO - Model loaded! Params: 86580480
2026-05-19 13:17:23,827 - INFO - Input image: torch.Size([1, 3, 518, 518])
2026-05-19 13:17:31,843 - INFO - Output: torch.Size([1, 1370, 768]), CLS: torch.Size([1, 768]), Time: 8014.87ms

技术说明

精度测试方法

精度测试通过对比 CPU 和 NPU 上的张量统计数据验证模型权重在两个设备间的一致性。

NPU 适配要点

  1. 权重加载: 使用 safetensors 格式加载,backbone_compatible.safetensors 包含完整的 ViT 权重
  2. QKV 融合: Attention 层使用融合的 QKV 投影,需正确拆分
  3. LayerScale: 可学习缩放因子 (ls1, ls2) 用于稳定训练

输入格式

  • 输入: torch.Tensor of shape [B, 3, 518, 518]
  • 输出: torch.Tensor of shape [B, 1370, 768]
    • 1370 = 1 class token + 37×37 patches
    • 768 = feature dimension

常见问题

Q: 推理报错 "KeyError: xxx"?

A: 检查 safetensors 文件中的 key 名称是否与模型匹配,backbone_compatible.safetensors 使用简化命名。

Q: 输出特征如何用于下游任务?

A: 通常使用 CLS token (features[:, 0, :]) 或平均池化所有 patch features。

参考资料

  • 模型来源: /opt/atomgit/mxy/rad-dino/
  • 原始模型: Rad-DINO (Medical Image Encoder)
  • 基础架构: DINOv2 (ViT-B/14)