艺术家风格分类模型在华为昇腾 NPU 上的适配与优化
| 属性 | 值 |
|---|---|
| 模型名称 | Kaloscope-2.0 Artist Style Classification |
| 架构 | LSNet-XL-448 (See Large, Focus Small) |
| 参数量 | 183.29M |
| 输入分辨率 | 448×448 RGB |
| 分类类别 | 39,261 位艺术家 |
| 框架 | PyTorch 2.9.0 |
| 原始硬件 | 8×H20 GPU |
| 适配硬件 | Ascend 910 NPU (CANN 8.5.1) |
Kaloscope-2.0 基于 LSNet 架构构建,专门用于识别和分类不同艺术家的绘画风格。LSNet 是一个轻量级视觉模型,灵感来源于人类视觉系统的动态异尺度能力,即"看大局,聚焦细节"(See Large, Focus Small) 的特性。
本仓库提供 Kaloscope-2.0 模型在华为 Ascend 910 NPU 上的完整推理适配方案:
torch.serialization.add_safe_globals 安全加载原始 .pth 权重torch_npu 将模型从 CPU/GPU 无缝迁移至 NPUF.unfold 实现,避免 Triton 依赖,在 NPU 上高效运行# 昇腾环境
CANN >= 8.5.1
torch_npu >= 2.9.0
torch >= 2.9.0
# 其他依赖
pip install torch torchvision pillow numpy timm# 从 ModelScope 下载模型
pip install modelscope
modelscope download --model Heathcliff02/Kaloscope-2.0 --local_dir ./models/Kaloscope-2.0python inference.py --image path/to/artwork.jpg --topk 5输出示例:
Image: artwork.jpg
Inference time: 43.51 ms
Top-5 predictions:
1. [12345] artist_name_1 (87.32%)
2. [23456] artist_name_2 (5.14%)
3. [34567] artist_name_3 (2.81%)
4. [45678] artist_name_4 (1.63%)
5. [56789] artist_name_5 (0.92%)python inference.py --image_dir ./test_images --output results.csvpython inference.py --image artwork.jpg --device cpupython inference.py --benchmark --iterations 100 --warmup 10python eval.py # 运行完整评测套件from inference import LSNetArtist, load_class_mapping, preprocess_image, infer
# 加载模型(自动切换至 NPU)
model, cfg = load_model('best_checkpoint.pth', device='npu')
# 加载类别映射
class_mapping = load_class_mapping('class_mapping.csv')
# 预处理图像
tensor, pil_img = preprocess_image('artwork.jpg')
# 推理
indices, probs, elapsed = infer(model, tensor, device='npu', topk=5)
# 输出结果
for i, (idx, prob) in enumerate(zip(indices, probs)):
artist = class_mapping.get(int(idx), f"class_{idx}")
print(f"{i+1}. [{idx}] {artist} ({prob*100:.2f}%)")| 指标 | 数值 |
|---|---|
| 平均延迟 (bs=1) | 43.51 ms |
| P50 延迟 | 43.46 ms |
| P95 延迟 | 44.38 ms |
| P99 延迟 | 44.70 ms |
| 吞吐量 (bs=1) | 23.3 FPS |
| 吞吐量 (bs=4) | 94.8 FPS |
| 吞吐量 (bs=8) | 139.7 FPS |
| NPU 显存占用 | ~6,925 MB |
| 指标 | 数值 | 阈值 | 状态 |
|---|---|---|---|
| 平均相对误差 | 0.0013% | < 1% | ✅ PASS |
| 余弦相似度 (均值) | 0.999998 | > 0.999 | ✅ PASS |
| 余弦相似度 (最小值) | 0.999995 | > 0.999 | ✅ PASS |
| 最大绝对误差 | 0.000018 | < 0.01 | ✅ PASS |
| Top-1 准确率匹配 | 100.0% | 100% | ✅ PASS |
| 指标 | 数值 |
|---|---|
| 训练硬件 | 8×H20 GPU |
| 训练时长 | 400+ 小时 |
| 批次大小 | 256 (每GPU) |
| Top-1 准确率 | 90.13% |
本仓库提供的是已训练完成的模型权重。如需重新训练,请参考原始 LSNet 训练仓库:spawner1145/lsnet-test。
| 参数 | 值 |
|---|---|
| 优化器 | AdamW |
| 学习率 | 4e-6 |
| 学习率调度 | Cosine Annealing |
| 权重衰减 | 0.1 |
| 数据增强 | RandAugment, Mixup, CutMix |
| 输入分辨率 | 448×448 |
| 模型参数量 | ~183M |
kaloscope-npu/
├── inference.py # NPU 推理脚本
├── eval.py # 精度与性能评测脚本
├── README.md # 本文档
└── eval_output/ # 评测输出目录
├── EVALUATION_REPORT.md # 评测报告
├── evaluation.log # 运行日志
├── accuracy_results.csv # 精度对比结果
├── performance_results.json # 性能基准数据
├── precision_analysis.csv # 100样本精度分析
└── test_images/ # 评测用测试图像eval.py - NPU vs CPU 精度对比评测源代码eval_output/accuracy_results.csv - 10 张测试图像逐张对比eval_output/precision_analysis.csv - 100 个随机输入精度分析eval_output/evaluation.log - 完整运行日志eval.py - 性能基准测试源代码eval_output/performance_results.json - 延迟、吞吐量、显存占用数据eval_output/evaluation.log - 包含不同 batch size 的 FPS 数据=========================================================
NPU vs CPU Accuracy Validation:
Avg Relative Error: 0.0017% ✅ (< 1%)
Avg Cosine Similarity: 0.999994 ✅ (> 0.999)
Top-1 Match Rate: 100.0% ✅
NPU Performance (Ascend 910):
Mean Latency: 43.51 ms
Throughput: 23.3 FPS (bs=1), 139.7 FPS (bs=8)
Memory: 6,925 MB
=========================================================@misc{wang2025lsnetlargefocussmall,
title={LSNet: See Large, Focus Small},
author={Ao Wang and Hui Chen and Zijia Lin and Jungong Han and Guiguang Ding},
year={2025},
eprint={2503.23135},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2503.23135},
}免责声明: 本模型仅供研究和教育用途。在商业应用中使用时,请确保遵守相关法律法规和伦理准则。
NPU 适配: 本仓库为 Heathcliff02/Kaloscope-2.0 的昇腾 NPU 适配版本,所有推理代码和评测均在 Ascend 910 NPU 上验证通过。