VOLO-D1 是 VOLO(Vision Outlooker)系列的基础版本。与 D3 一样采用 Outlook Attention 机制,但层数和维度较小(26.6M 参数)。在 384×384 输入下达到 84.3% 的 Top-1 准确率,展示了 Outlook Attention 在相对轻量级模型上的有效性。VOLO 系列的核心理念是使用 Outlook Attention 高效聚合局部邻域信息,再配合 Transformer 全局建模。
本仓库验证的模型为 timm/volo_d1_384.sail_in1k,来源于 Hugging Face timm(PyTorch Image Models)模型库,在 ImageNet-1k 数据集上预训练。模型使用 VOLO-D1 架构,适用于图像分类任务,支持 1000 类 ImageNet 标准分类。
| 属性 | 值 |
|---|---|
| 模型标识 | timm/volo_d1_384.sail_in1k |
| timm 架构 | volo |
| 参数量 | 26,600,000(26.6M) |
| 输入尺寸 | 3 x 384 x 384 |
| 输出类别 | 1000(ImageNet-1k) |
| 预训练数据 | ImageNet-1k |
| 框架 | PyTorch / timm |
| 组件 | 规格 |
|---|---|
| NPU 设备 | Ascend 910B4 |
| CPU 架构 | ARM(aarch64) |
| 操作系统 | Linux(HCE 2.0) |
| 软件 | 版本 |
|---|---|
| CANN | 8.5.1 |
| Python | 3.11.14 |
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| timm | 最新版本(latest) |
| NumPy | 最新兼容版本 |
NPU 设备可用性通过 torch.npu.is_available() 确认,运行模式下所有张量和模型均通过 .to("npu") 显式迁移至 Ascend NPU 设备。
import timm
# 直接从 Hugging Face Hub 下载
model = timm.create_model("volo_d1_384.sail_in1k", pretrained=True)
model.eval()pip install timm torch torch_npu pillow requests numpy使用本仓库提供的推理脚本 inference.py:
python3 inference.py推理脚本会自动检测 NPU 设备可用性,优先使用 NPU 进行加速推理。输出内容包括 Top-5 预测类别及其置信度,以及单次推理延迟。
import torch
import timm
from timm.data import create_transform, resolve_data_config
from PIL import Image
# 设备初始化(自动选择 NPU)
device = torch.device("npu" if torch.npu.is_available() else "cpu")
# 加载模型
model = timm.create_model("volo_d1_384.sail_in1k", pretrained=True).to(device)
model.eval()
# 数据预处理
data_config = resolve_data_config(model=model)
transform = create_transform(**data_config)
# 加载并预处理图像
image = Image.open("test.jpg").convert("RGB")
input_tensor = transform(image).unsqueeze(0).to(device)
# 推理
with torch.no_grad():
output = model(input_tensor)
if device.type == "npu":
torch.npu.synchronize()
# 后处理
probs = torch.nn.functional.softmax(output, dim=-1)
top_probs, top_indices = torch.topk(probs, 5, dim=-1)精度验证采用 CPU vs NPU 数值一致性对比 策略:
| 指标 | 结果 |
|---|---|
| 测试样本数 | 50 |
| Top-1 匹配率 | 100.00%(50/50) |
| Top-1 匹配数 | 50 |
| 平均最大相对误差(Logits) | 0.02% |
| 最大相对误差(Logits) | 0.0081 |
| 平均概率余弦相似度 | 1.000000 |
| 综合判定 | PASS |
注:所有 50 个样本的 Top-1 预测完全一致,NPU 推理结果与 CPU 高度吻合,平均余弦相似度达到 1.0,证明 NPU 推理精度与 CPU 基准无差异。
torch.npu.synchronize() 确保精确计时| 指标 | 数值 |
|---|---|
| CPU 延迟(Avg Latency) | 95.5 ms |
| NPU 延迟(Avg Latency) | 16.8 ms |
| 加速比(Speedup) | 5.7× |
| 吞吐量(Throughput) | 180.2 img/s |
| 参数量 | 26.6M |
| 平台 | 平均延迟 | 加速比 |
|---|---|---|
| CPU | 95.5 ms | 1.0× |
| NPU | 16.8 ms | 5.7× |

volo_d1_384-npu/
├── readme.md # 本文件 - 模型适配验证报告
├── inference.py # 推理脚本(自动 NPU/CPU 切换,支持 warmup)
├── accuracy_eval.py # 精度验证脚本(CPU vs NPU 一致性对比)
└── terminal_screenshot.png # 终端截图(推理/精度/性能输出)| 文件 | 功能 |
|---|---|
inference.py | 单图推理,自动检测 NPU/CPU,输出 Top-5 分类结果与延迟 |
accuracy_eval.py | NPU vs CPU 精度对比,50 样本生成详细报告 |
terminal_screenshot.png | 终端输出截图,含推理结果与性能数据 |
torch_npu 版本必须与 PyTorch 版本严格匹配,建议使用配套发布的版本组合。timm/volo_d1_384.sail_in1k,在 ImageNet-1k 上训练并贡献至 timm 模型库。inference.py 中的 BATCH_SIZE 参数。image-classification volo volo-d1 timm ascend npu ascend-910b4 huawei pytorch imagenet cann-8.5.1 torch-npu vision-transformer
基于现有评测数据,CPU 与 NPU 的 余弦相似度 精度误差为 0.0%,小于 1% 的精度要求。
本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。