ViT-Base-Patch16-CLIP 是 OpenAI CLIP 项目中使用的 Vision Transformer (ViT) 基础模型,输入图像大小为 224×224,patch 大小为 16×16。该模型在 OpenAI 的 WIT-400M 数据集上训练,可用于图像特征提取和零样本图像分类。
| 属性 | 说明 |
|---|---|
| 原始模型 | timm/vit_base_patch16_clip_224.openai |
| 任务类型 | Image Feature Extraction / 图像特征提取 |
| 模型框架 | PyTorch (timm) |
| 输入格式 | 224×224 RGB 图像 |
| 输出格式 | 512 维特征向量 |
| 模型参数 | ~86M |
| 语言 | 英语(en) |
| 开源协议 | Apache-2.0 |
本仓库在 华为昇腾 Ascend910 NPU 上完成了 ViT-Base-Patch16-CLIP 的适配和验证。
timm.create_model() 加载预训练模型,使用 .to(device) 将模型移至 NPUcreate_transform() 和 resolve_data_config() 自动匹配模型所需的预处理参数--device 参数支持 cpu/npu 切换| 组件 | 版本 |
|---|---|
| Python | 3.11.14 |
| PyTorch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1 |
| timm | 1.0.27 |
| CANN | 25.5.2 |
| NPU | Ascend910 (64GB HBM) |
timm>=1.0.0
torch>=2.0.0
Pillow>=10.0.0
numpy>=1.24.0# 默认图片推理
python inference.py --device npu
# 自定义图片
python inference.py --device npu --image samples/test_image.png
# CPU 推理
python inference.py --device cpupython compare_cpu_npu.py脚本自动执行 NPU 推理和 CPU 推理,计算特征向量的精度对比指标。
测试条件:
| 指标 | 数值 |
|---|---|
| 模型加载时间 | 12.45s(缓存后) |
| 推理时间 | 0.1686s |
| 输出特征维度 | 512 |
| 输出特征范数 | 11.877 |
| 指标 | 数值 | 说明 |
|---|---|---|
| 均方误差 (MSE) | 2.61e-06 | 极小 |
| 最大绝对误差 (MaxAbs) | 8.22e-03 | < 1% |
| 平均绝对误差 (MAE) | 1.28e-03 | < 1% |
| 相对误差 | 0.3083% | < 1% ✅ |
| 余弦相似度 | 0.999996 | 高度一致 |
| Top-100 维度一致率 | 100.00% | 完全一致 |
结论:NPU 与 CPU 推理结果误差为 0.3083%,远低于 1% 的精度要求。特征向量的余弦相似度达到 0.999996,表示 NPU 与 CPU 的输出在方向上几乎完全一致。
vit_base_patch16_clip_224.openai/
├── inference.py # 推理脚本(支持 CPU/NPU)
├── compare_cpu_npu.py # CPU vs NPU 精度对比脚本
├── requirements.txt # Python 依赖清单
├── README.md # 本说明文档
├── samples/
│ └── test_image.png # 测试图像样本
├── output_npu.npy # NPU 推理输出特征
├── screenshot_inference.png # NPU 推理终端截图
└── screenshot_compare.png # CPU/NPU 对比终端截图#+NPU#+CV#+图像特征提取#+ViT#+CLIP#+昇腾#+timm