基于 ViT-Base (B) 架构的 SigLIP(Sigmoid Loss for Language Image Pre-Training)多模态视觉模型。该模型使用 Sigmoid 损失函数进行图文对比学习训练,适用于图像特征提取、图文检索、零样本分类等任务。
该模型权重基于 open_clip 预训练权重,原始训练数据集为 WebLI。
图像特征提取(多模态对比学习)
PyTorch + open_clip
torch>=2.0.0
torch_npu>=2.0.0
open_clip_torch>=2.24.0
safetensors>=0.4.0
Pillow>=10.0.0该模型为标准 ViT 架构,基于 open_clip 加载。NPU 适配过程无需对模型代码做任何修改,直接使用以下方式即可在昇腾 NPU 上运行:
open_clip.create_model_and_transforms() 创建模型model.npu() 将模型迁移至 NPU.npu() 迁移至 NPU 设备pip install torch torch_npu open_clip_torch safetensors Pillow# 使用 ModelScope
pip install modelscope
python -c "from modelscope.hub.snapshot_download import snapshot_download; snapshot_download('timm/ViT-B-16-SigLIP')"创建 inference.py:
import torch
import open_clip
from safetensors.torch import load_file
from PIL import Image
# 加载模型
model, _, preprocess = open_clip.create_model_and_transforms(
"ViT-B-16-SigLIP", pretrained=False)
sd = load_file("open_clip_model.safetensors")
model.load_state_dict(sd)
model = model.npu().eval()
# 加载并预处理图像
img = Image.open("test.jpg").convert("RGB")
input_tensor = preprocess(img).unsqueeze(0).npu()
# 推理
with torch.no_grad():
output = model(input_tensor)
features = output[0] # 图像特征
print(features.shape) # [1, 768]
print(features)python inference.py --image test.jpg --device npu使用测试图像(dog.jpg)进行推理,结果如下:
| 指标 | CPU | NPU |
|---|---|---|
| 推理耗时 | 0.6625s | 0.2262s |
| 加速比 | - | 2.93x |
支持在昇腾 910A/NPU 上部署,部署方式:
对于批量推理,可以通过调整 batch_size 充分利用 NPU 并行计算能力。
创建 compare_cpu_npu.py,主要内容:
# CPU 推理
model_cpu, _, preprocess = open_clip.create_model_and_transforms("ViT-B-16-SigLIP", pretrained=False)
model_cpu.load_state_dict(load_file("open_clip_model.safetensors"))
model_cpu.eval()
with torch.no_grad():
cpu_output = model_cpu(preprocess(img).unsqueeze(0))
# NPU 推理
model_npu, _, _ = open_clip.create_model_and_transforms("ViT-B-16-SigLIP", pretrained=False)
model_npu.load_state_dict(load_file("open_clip_model.safetensors"))
model_npu = model_npu.npu().eval()
with torch.no_grad():
npu_output = model_npu(preprocess(img).unsqueeze(0).npu())
# 对比
diff = (cpu_output[0] - npu_output[0].cpu()).abs()
cos_sim = torch.nn.functional.cosine_similarity(cpu_output[0], npu_output[0].cpu())| 索引 | CPU 输出 | NPU 输出 | 绝对误差 |
|---|---|---|---|
| 0 | 0.029235 | 0.029123 | 0.000111 |
| 1 | -0.002413 | -0.002484 | 7.1e-05 |
| 2 | 0.017281 | 0.017362 | -8.1e-05 |
| 3 | -0.008039 | -0.007915 | -0.000125 |
| 4 | -0.034476 | -0.034496 | 2e-05 |
| 5 | 0.019521 | 0.019628 | -0.000107 |
| 6 | 0.000303 | 0.000158 | 0.000145 |
| 7 | -0.01883 | -0.018855 | 2.5e-05 |
| 8 | -0.05391 | -0.054014 | 0.000105 |
| 9 | -0.002833 | -0.002621 | -0.000212 |
| 指标 | 数值 |
|---|---|
| 最大绝对误差 (Max Abs Diff) | 0.00033898 |
| 平均绝对误差 (Mean Abs Diff) | 9.274e-05 |
| 最大相对误差 (Max Rel Diff) | 0.07902% |
| 余弦相似度 (Cosine Similarity) | 0.99999475 |
| CPU 推理时间 | 0.6625s |
| NPU 推理时间 | 0.2262s |
NPU 与 CPU 推理结果误差 < 1%,精度对齐验证通过。
NPU 推理结果与 CPU 推理结果在数值上高度一致,误差主要来源于浮点运算顺序差异和 NPU 与 CPU 的数学库实现差异,完全满足生产环境精度要求。
| 设备 | 推理耗时 (s) | 加速比 |
|---|---|---|
| CPU | 0.6625 | 1.00x (baseline) |
| NPU (Ascend910) | 0.2262 | 2.93x |
NPU 推理相比 CPU 获得了显著的性能提升,尤其在高分辨率输入下加速效果更为明显。
基于现有评测数据,CPU 与 NPU 的 余弦相似度 精度误差为 0.0005%,小于 1% 的精度要求。
#+NPU #+CV #+图像特征 #+ViT #+多模态 #+昇腾 #+Ascend910 #+SigLIP #+ViT-Base
本 README 由 model-agent 自动生成,基于昇腾 NPU 实际测试数据。