g
gcw_coj3XaOd/cv_passvitb_image-reid-person_market
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

PASS ViT-B/16 行人重识别模型 — 昇腾 NPU 适配部署文档

模型信息

属性值
模型名称cv_passvitb_image-reid-person_market
模型来源ModelScope (iic/cv_passvitb_image-reid-person_market)
任务类型行人重识别 (Person Re-Identification)
主干网络ViT-B/16 (PASS 自监督预训练)
输入RGB 图像 (384×128)
输出1536 维特征向量 (cat 模式: 768+768)
权重大小~341 MB
训练数据集Market1501
官方指标mAP=0.933, Rank-1=0.969
LicenseApache License 2.0

昇腾 NPU 适配状态

项目状态
NPU 推理✅ 正常
CPU/NPU 精度对比✅ 余弦相似度 > 0.9999
性能基准✅ NPU 加速比 ~106x (vs CPU)
全流程验证✅ 通过

环境要求

组件版本
硬件华为昇腾 Ascend 910 (NPU)
CANN8.5.1
PyTorch2.9.0
torch_npu2.9.0.post1
Python3.11
modelscope1.35.3
torchvision(随 torch 安装)
PIL / numpy(标准依赖)

快速开始

1. 模型下载

modelscope download --model iic/cv_passvitb_image-reid-person_market \
    --local_dir /path/to/cv_passvitb_image-reid-person_market

2. 基本推理(自动选择 CPU/NPU)

cd /path/to/cv_passvitb_image-reid-person_market/deploy
python3 inference.py

3. 指定设备推理

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

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

# 指定输入图片
python3 inference.py --image /path/to/your_image.jpg

4. 精度对比 + 性能基准

python3 inference.py --compare --benchmark --num_iterations 20

5. 完整评测(多图精度 + 性能 + 批量测试)

python3 evaluate.py --num_iterations 10

推理正常输出证据

以下为 Ascend 910 NPU 环境下的实际运行日志(完整日志见 run_inference.log):

[INFO] NPU 可用: Ascend910_9362
[INFO] 推理设备: npu
[INFO] 输入图片: /opt/atomgit/models/cv_passvitb_image-reid-person_market/assets/person.jpg
[INFO] 图像尺寸: (226, 549), 张量形状: torch.Size([1, 3, 384, 128])

============================================================
[STEP 1] CPU 推理
============================================================
[INFO] 成功加载权重: pytorch_model.pt
[CPU] 特征维度: (1, 1536)
[CPU] 特征前10维: [-1.2949181   2.676159   -1.2578393  -2.8446212   0.08427221  0.20044747
  1.7385232   1.4139287  -1.2215141  -1.7318852 ]
[CPU] 推理耗时: 622.81 ms

============================================================
[STEP 2] NPU 推理 (昇腾 Ascend)
============================================================
[INFO] 成功加载权重: pytorch_model.pt
[NPU] 特征维度: (1, 1536)
[NPU] 特征前10维: [-1.2907281   2.6796868  -1.263737   -2.8480542   0.07990438  0.20109764
  1.7428687   1.4128637  -1.22219    -1.733107  ]
[NPU] 推理耗时: 187.30 ms

============================================================
[STEP 3] CPU / NPU 精度对比
============================================================
特征维度:       1536
余弦相似度:     0.99999684
最大绝对误差:   2.92e-02
平均绝对误差:   4.37e-03
最大相对误差:   1.28e+00
平均相对误差:   1.21e-02
allclose(1e-5): ❌ 未通过
allclose(1e-3): ❌ 未通过

✅ 精度验证通过: CPU/NPU 余弦相似度 > 0.9999

============================================================
[STEP 4] 相似度计算演示
============================================================
同一图片余弦相似度(CPU): 0.99999988 (期望 ≈1.0)

============================================================
[STEP 5] 性能基准测试
============================================================
预热 5 次 + 正式测试 20 次
[CPU] 平均推理耗时: 583.31 ± 7.37 ms (20次)
[NPU] 平均推理耗时: 6.10 ± 0.12 ms (20次)
[加速比] CPU/NPU = 95.55x

✅ 推理完成!

CPU / NPU 精度对比数据

单图精度对比 (person.jpg)

指标值
特征维度1536
余弦相似度0.99999684
最大绝对误差2.92e-02
平均绝对误差4.37e-03
最大相对误差1.28
平均相对误差1.21e-02

多图精度对比

测试图片余弦相似度最大绝对误差精度状态
person.jpg0.999996842.92e-02✅
test_img_0.jpg (红色)0.999996193.48e-02✅
test_img_1.jpg (绿色)0.999995772.73e-02✅
test_img_2.jpg (蓝色)0.999995713.93e-02✅
test_img_3.jpg (灰色)0.999993624.28e-02✅
平均0.999995633.47e-02✅

结论: 所有测试图片 CPU/NPU 余弦相似度均 > 0.9999,精度验证通过。由于浮点计算硬件差异,逐元素 allclose(1e-3) 未通过属正常现象,余弦相似度指标已充分说明 NPU 推理精度与 CPU 高度一致。

性能基准数据

单次推理性能

设备首次推理耗时稳态平均延迟P50P95加速比
CPU (aarch64)621.01 ms612.59 ms612.55 ms612.89 ms1.0x
NPU (Ascend 910)182.32 ms5.78 ms5.75 ms5.89 ms105.99x

批量推理性能 (NPU)

Batch Size平均延迟吞吐量
15.95 ms168.2 qps
45.95 ms672.5 qps
89.11 ms878.2 qps

NPU 稳态推理延迟仅 ~6ms,相比 CPU (aarch64) 实现约 106x 加速。

项目文件结构

cv_passvitb_image-reid-person_market/
├── pytorch_model.pt              # 模型权重 (341MB)
├── configuration.json            # 模型配置
├── README.md                     # 原始模型说明
├── assets/
│   ├── person.jpg                # 示例测试图片
│   └── PASS_overview.jpg         # PASS 方法流程图
├── deploy/
│   ├── inference.py              # 推理脚本 (CPU/NPU 对比)
│   ├── evaluate.py               # 精度/性能评测脚本
│   └── README.md                 # 本文档
├── run_inference.log             # 实际运行日志 (证据)
├── inference_result.json         # 推理结果 (JSON)
├── evaluation_report.json        # 评测报告 (JSON)
├── evaluation_report.txt         # 评测报告 (文本)
├── cpu_embedding.npy             # CPU 推理特征向量
└── npu_embedding.npy             # NPU 推理特征向量

推理脚本使用说明

inference.py 参数

参数默认值说明
--model_dir/opt/atomgit/models/cv_passvitb_image-reid-person_market模型目录
--imageNone (使用自带图片)输入图片路径
--deviceauto推理设备: auto/cpu/npu
--compareTrue是否 CPU/NPU 精度对比
--benchmarkFalse是否运行性能基准
--num_iterations50基准测试迭代次数

evaluate.py 参数

参数默认值说明
--model_dir/opt/atomgit/models/cv_passvitb_image-reid-person_market模型目录
--num_iterations100性能测试迭代次数

模型架构说明

本模型基于 PASS (Part-Aware Self-Supervised Pre-Training) 方法,使用 ViT-B/16 作为主干网络:

  1. Patch Embedding: 将输入图像 (384×128) 切分为 16×16 patches,映射为 768 维嵌入
  2. Part Tokens: 4 个可学习 token (cls_token + 3 个 part_token),分别捕获全局和局部特征
  3. Transformer Encoder: 12 层标准 ViT Block (LayerNorm → Attention → LayerNorm → MLP)
  4. Multi-Neck BN: 对全局特征和 3 个局部特征分别使用 BatchNorm (BNNeck)
  5. Feature Fusion: cat 模式将全局 BN 特征与局部 BN 特征均值拼接,输出 1536 维向量

精度差异说明

CPU/NPU 之间的逐元素精度差异 (allclose 未通过) 属正常现象,原因包括:

  1. 浮点计算硬件差异: NPU (Ascend AICore) 和 CPU (aarch64) 的浮点运算单元实现不同
  2. Softmax 精度: Transformer 中的 Softmax 对精度差异最为敏感
  3. LayerNorm / BatchNorm: 归约操作的累加顺序不同导致微小差异

关键判断标准: 余弦相似度 > 0.999 即可认为精度对齐,对于行人重识别任务,余弦相似度 > 0.9999 时检索排序结果与 CPU 完全一致。

自验证操作步骤

  1. 环境预检: 确认 NPU 可用
npu-smi info
python3 -c "import torch; import torch_npu; print(torch.npu.is_available())"
  1. 下载模型:
modelscope download --model iic/cv_passvitb_image-reid-person_market \
    --local_dir ./cv_passvitb_image-reid-person_market
  1. 运行推理:
cd cv_passvitb_image-reid-person_market/deploy
python3 inference.py --compare --benchmark --num_iterations 20
  1. 查看结果:
cat ../inference_result.json
  1. 截图验证: 运行推理后终端输出包含完整的 CPU/NPU 特征对比和精度数据,可直接截图保存

相关论文

@article{zhu2022part,
  title={PASS: Part-Aware Self-Supervised Pre-Training for Person Re-Identification},
  author={Zhu, Kuan and Guo, Haiyun and Yan, Tianyi and Zhu, Yousong and Wang, Jinqiao and Tang, Ming},
  journal={arXiv preprint arXiv:2203.03931},
  year={2022}
}