本文档记录 Genius-Society/HEp2 人喉表皮样癌细胞图像分类模型在 华为 Ascend 910 NPU 环境的适配、推理验证与性能评测结果。
模型采用改进的 AlexNet 架构,输入 224×224 细胞图像,输出 6 类染色模式分类:Centromere、Golgi、Homogeneous、NuMem、Nucleolar、Speckled。训练数据来源于 2014 年 ICPR 细胞图像分类竞赛数据集 (8,701 训练 / 2,175 验证 / 2,720 测试)。
| 组件 | 版本 |
|---|---|
| torch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1+gitee7ba04 |
| torchvision | — |
| CANN | 8.5.1 |
| NPU | Ascend 910 (2 逻辑卡) |
| Python | 3.11.14 |
pip install modelscope torch torchvision pillow numpyNPU 环境需确保已安装与 CANN 版本匹配的
torch_npu。
modelscope download --model Genius-Society/HEp2 --local_dir ./HEp2_modelpython inference.py --image examples/Homogeneous.png --device npu --verbose --benchmark 100推理示例输出:
Using device: npu:0
Model loaded with 61,106,846 parameters
Image preprocessed: shape=torch.Size([1, 3, 224, 224])
Benchmark: 100 runs, avg 1.05 ms/inference
Prediction: Homogeneous (class 2), confidence: 0.9636
All class probabilities:
Centromere : 0.000049
Golgi : 0.001754
Homogeneous : 0.963636 <--
NuMem : 0.004874
Nucleolar : 0.005097
Speckled : 0.024590python inference.py --image examples/Homogeneous.png --device cpu --verbose --benchmark 10python evaluate.py --test-dir examples --output eval_results.json --csv-output eval_results.csv在 6 张示例图像上对比 NPU 与 CPU 的推理输出,以 CPU 结果为基线。
| 图像 | CPU 预测 | NPU 预测 | CPU 置信度 | NPU 置信度 | 最大概率误差 | 结果 |
|---|---|---|---|---|---|---|
| Centromere.png | Centromere | Centromere | 0.9995 | 0.9995 | 0.000006 | PASS |
| Golgi.png | Golgi | Golgi | 0.9999 | 0.9999 | 0.000000 | PASS |
| Homogeneous.png | Homogeneous | Homogeneous | 0.9636 | 0.9636 | 0.000063 | PASS |
| NuMem.png | NuMem | NuMem | 1.0000 | 1.0000 | 0.000000 | PASS |
| Nucleolar.png | Nucleolar | Nucleolar | 0.8285 | 0.8283 | 0.000156 | PASS |
| Speckled.png | Speckled | Speckled | 0.9155 | 0.9155 | 0.000011 | PASS |
| 指标 | 数值 |
|---|---|
| 测试图像数 | 6 |
| 预测一致率 | 6/6 (100%) |
| 最大概率误差 | 0.000156 (0.0156%) |
| 平均概率误差 | 0.000002 (0.0002%) |
| 误差 < 1% 阈值 | PASSED |
| 指标 | CPU | NPU | 加速比 |
|---|---|---|---|
| 平均延迟 (ms) | 125.57 | 1.00 | 125.3x |
| 中位延迟 (ms) | 124.78 | 1.00 | 124.8x |
| P95 延迟 (ms) | 131.14 | 1.03 | 127.3x |
| P99 延迟 (ms) | 131.72 | 1.04 | 126.7x |
| 标准差 (ms) | 2.39 | 0.013 | — |
| 指标 | CPU | NPU | 加速比 |
|---|---|---|---|
| 吞吐量 (imgs/s) | 29.6 | 2791.1 | 94.3x |
| 属性 | 值 |
|---|---|
| 参数量 | 61,106,846 |
| 输入尺寸 | 3 × 224 × 224 |
| 输出类别 | 6 (Centromere, Golgi, Homogeneous, NuMem, Nucleolar, Speckled) |
| 框架 | PyTorch + torch_npu |
| 预处理 | Resize(224) → CenterCrop(224) → ToTensor → Normalize(0.5, 0.5, 0.5) |
| 文件 | 说明 |
|---|---|
inference.py | NPU/CPU 推理脚本,支持单张图像推理与性能基准测试 |
evaluate.py | 精度对比与性能评测脚本,生成 JSON/CSV 报告 |
eval_results.json | 评测结果 JSON 报告 |
eval_results.csv | 逐图像预测结果 CSV |
model_state_dict.pt | 模型权重 state_dict |
README.md | 本部署与评测文档 |
模型加载:原始 save.pt 使用 torch.save(model) 保存完整模型对象。本适配已将权重提取为 model_state_dict.pt,重建模型结构与 train.py 中定义的 AlexNet + 自定义分类头完全一致。
预处理一致性:推理输入应与训练时保持一致:Resize(224) → CenterCrop(224) → ToTensor → Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))。
RandomAffine:训练时使用 RandomAffine(5) 做数据增强,推理对比时可排除此变换以保证确定性输出。
NPU 精度:NPU 推理与 CPU 基线误差远小于 1% 阈值,最大仅 0.0156%,精度完全满足生产部署要求。
性能优势:Ascend 910 NPU 单张推理延迟约 1.0ms,相比 CPU 加速超过 125 倍,适合高吞吐批量推理场景。