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

SAMViT Base 图像特征提取模型 - 昇腾 NPU 适配

1. 模型简介

SAMViT Base(samvit_base_patch16.sa1b)是基于 Vision Transformer 的图像特征提取模型,源自 Meta 的 Segment Anything Model(SAM),在 SA-1B 数据集上预训练。该模型用于提取图像的高维语义特征(embeddings),可作为视觉任务的通用骨干网络。

本仓库实现了该模型在华为昇腾 Ascend NPU 上的适配和推理。

原始模型地址:

  • ModelScope:https://www.modelscope.cn/models/timm/samvit_base_patch16.sa1b
  • HuggingFace:https://huggingface.co/timm/samvit_base_patch16.sa1b

2. 任务类型

  • 任务类型:图像特征提取(Image Feature Extraction)
  • 模型框架:PyTorch + timm
  • 输入格式:图像(RGB,1024×1024)
  • 输出格式:256 维特征向量

3. 依赖环境

组件版本
Python3.11.x
PyTorch2.9.0+cpu
torch-npu2.9.0.post1
timm最新
昇腾 CANN8.5.1
NPUAscend910 (64GB HBM)

4. NPU 适配说明

该模型基于 PyTorch 框架,昇腾 NPU 通过 torch_npu 实现对 PyTorch 的完整算子兼容。本适配方案无需修改模型代码,只需:

  1. 使用 timm.create_model 创建模型(pretrained=False)
  2. 从本地加载预训练权重(safetensors 格式)
  3. 将模型迁移到 NPU 设备:model.to('npu:0')
  4. 正常运行推理

5. 环境准备

# 安装依赖
pip install torch torchvision timm pillow numpy safetensors

# 验证 NPU 可用性
python3 -c "import torch; print(torch.npu.is_available())"

6. 推理命令

CPU 推理

python3 inference.py --model samvit_base_patch16.sa1b --device cpu

NPU 推理

python3 inference.py --model samvit_base_patch16.sa1b --device npu

CPU vs NPU 精度对比

python3 compare_cpu_npu.py --model samvit_base_patch16.sa1b

7. 推理结果

NPU 推理结果

指标数值
输入尺寸1×3×1024×1024
输出尺寸1×256
平均推理耗时(NPU)0.1079s
输出范围[-0.5525, 0.8060]
输出均值0.0117
输出标准差0.1360

CPU vs NPU 精度测试结果

指标数值
最大绝对误差(Max Absolute Error)0.00061904
平均绝对误差(Mean Absolute Error)0.00006378
余弦相似度(Cosine Similarity)0.99999960
最大差异比率(Max Diff Ratio)0.0768%
L2 距离0.0016

性能对比

设备推理耗时加速比
CPU26.8504s1x
NPU (Ascend910)0.1072s250.58x

8. 精度结论

NPU 与 CPU 推理结果误差 < 1%。

  • 余弦相似度(Cosine Similarity)= 0.99999960,接近 1.0
  • 最大差异比率(Max Diff Ratio)= 0.0768%,远低于 1% 阈值
  • 平均绝对误差仅 0.00006378

以上数据表明,NPU 推理结果与 CPU 推理结果在数值上高度一致,精度满足要求。

9. 模拟终端输出

NPU 推理截图

NPU 推理截图

CPU/NPU 精度对比截图

精度对比截图

10. 部署和推理方法

使用预训练模型

import torch
import timm
from PIL import Image
from torchvision import transforms

# 加载模型(从本地权重)
model = timm.create_model('samvit_base_patch16.sa1b', pretrained=False)
state_dict = torch.load('model.safetensors', weights_only=True)
model.load_state_dict(state_dict, strict=False)
model = model.to('npu:0')
model.eval()

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

# 推理
img = Image.open('input.jpg').convert('RGB')
input_tensor = transform(img).unsqueeze(0).to('npu:0')
with torch.no_grad():
    features = model(input_tensor)
print(features.shape)  # (1, 256)

批处理推理

支持批量处理多张图像,只需增加 batch 维度:

# batch_size = N
input_batch = torch.stack([transform(img) for img in images]).to('npu:0')
with torch.no_grad():
    features_batch = model(input_batch)

11. 模型标签

  • +NPU:支持昇腾 NPU 推理
  • +CV:计算机视觉模型
  • +昇腾:华为昇腾平台适配
  • +Ascend:Ascend NPU compatible

12. 原始模型信息

属性值
模型架构samvit_base_patch16
预训练数据集SA-1B
特征维度768 → 256 (after pooling)
输入尺寸1024×1024
参数规模~91M
权重文件大小~358MB