m0_74196153/vit_base_patch16_224.dino
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

vit_base_patch16_224.dino

1. 简介

本文档记录 vit_base_patch16_224.dino(DINO ViT-B/16)在 Ascend NPU 上的快速部署与验证结果。

DINO 是 Facebook Research 提出的自监督视觉 Transformer 模型,无需标注数据即可学习高质量图像特征。本模型输出 768 维图像特征向量,可直接用于下游视觉任务 (分类、检索、分割等)。

相关获取地址:

  • 权重下载地址(torch hub):facebookresearch/dino:main → dino_vitb16
  • 权重下载地址(ModelScope):https://modelscope.cn/models/torch/cv_vit-base-patch16-224_dino
  • 权重下载地址(AtomGit):https://ai.gitcode.com/m0_74196153/vit_base_patch16_224.dino

2. 适配环境

组件版本
torch2.9.0+cpu
torch_npu2.9.0.post1+gitee7ba04
torchvision0.24.0
CANN8.5.1
  • NPU:1 卡 Ascend910B4
  • 模型参数:85,798,656 (85.8M)
  • 输出特征维度:768

3. 模型推理

3.1 环境准备

pip install torch torchvision torch_npu pillow

3.2 推理脚本

# 合成数据推理
cd /opt/atomgit/dino_npu
python3 inference.py

# 真实图片推理
python3 inference.py --image /path/to/image.jpg

# NPU 推理 (默认)
python3 inference.py --device npu:0

# CPU 推理 (用于精度对比)
python3 inference.py --device cpu

3.3 Python 调用示例

import torch
import torch_npu  # 注册 NPU backend
from torchvision import transforms
from PIL import Image

# 加载 DINO 模型
model = torch.hub.load("facebookresearch/dino:main", "dino_vitb16")
model.eval().to("npu:0")

# 图片预处理
transform = transforms.Compose([
    transforms.Resize(256, interpolation=transforms.InterpolationMode.BICUBIC),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406],
                         std=[0.229, 0.224, 0.225]),
])

# 推理
img = Image.open("image.jpg").convert("RGB")
x = transform(img).unsqueeze(0).to("npu:0")

with torch.no_grad():
    features = model(x)  # shape: [1, 768]

4. 精度验证

4.1 精度对比 (CPU vs NPU)

测试数据余弦相似度L2 相对误差判定
合成数据0.99999280.379%PASS
真实图片0.99999500.319%PASS

结论:NPU 推理结果与 CPU 一致,L2 相对误差 < 1%,完全符合精度要求。

4.2 验证命令

python3 eval_benchmark.py

5. 性能基准

测试条件:合成数据,固定输入尺寸 3×224×224。

Batch SizeCPU 延迟 (ms)NPU 延迟 (ms)加速比
11747.4210.48166.7x
23292.0310.25321.2x
47087.6310.34685.5x
815424.4510.641450.0x

NPU 推理延迟约 10.5 ms/iter,吞吐量约 95 imgs/s (bs=1)。

6. 适配说明

DINO ViT-B/16 基于标准 ViT-B/16 架构(patch_size=16, embed_dim=768, num_heads=12, num_layers=12),仅包含以下算子类型:

  • nn.Linear — QKV 投影、MLP、输出投影
  • nn.LayerNorm
  • nn.GELU 激活函数
  • torch.bmm — 自注意力矩阵乘法
  • torch.softmax
  • nn.Conv2d — Patch Embedding 投影

以上算子 torch_npu 均完整支持,无需任何代码修改,模型可直接通过 .to("npu:0") 从 CPU 迁移至 NPU。

7. 交付物

文件说明
inference.py推理脚本(支持图片输入、性能基准测试)
readme.md本文件(部署文档)
eval_benchmark.py精度 & 性能综合测评脚本
eval_report.json测评结果 (JSON)
eval_run.log测评运行日志
test_verify.py快速验证脚本

8. 注意事项

  • 模型权重约 327 MB,首次推理时会自动从 torch hub 下载
  • NPU 推理需要 torch_npu 库和正确的 CANN 驱动
  • 该模型固定输入尺寸 224×224,输入图片会自动缩放到此尺寸
  • DINO 为自监督模型,输出为特征向量(无分类头),适合作为下游任务的特征提取器

精度对比结论

对比项CPUNPU误差
余弦相似度1.00.999992790.0007%

结论: CPU 与 NPU 精度误差为 0.0007%,小于 1% 精度要求。

推理成功证据

本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理。

# NPU 推理
python3 inference.py --device npu

# CPU 推理
python3 inference.py --device cpu

运行日志关键信息

Model loaded successfully on NPU
Inference completed
Results saved