模型:
facial_emotions_detection(LangGPT)
架构: ViT-Base (Vision Transformer, 85.8M 参数)
任务: 7 类人脸表情识别 (sad, disgust, angry, neutral, fear, surprise, happy)
硬件: Ascend 910B (NPU) vs Intel Xeon (CPU)
| 组件 | 版本 |
|---|---|
| Python | ≥ 3.10 |
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| transformers | ≥ 4.41 |
| timm | — (内置 ViT 支持) |
| Pillow | ≥ 9.0 |
| numpy | ≥ 1.22 |
# 安装 PyTorch + torch_npu (如未安装)
pip install torch torch_npu transformers pillow numpy
# 或使用已有的 conda 环境
pip install transformers pillow numpy模型已下载到本地路径 /opt/atomgit/models/LangGPT/facial_emotions_detection,包含:
config.json — 模型配置model.safetensors — 模型权重 (327 MB)preprocessor_config.json — 图像预处理配置configuration.json — ModelScope 元数据README.md — 原始模型说明项目已包含 7 张合成人脸测试图(每类表情各一张):
ls test_images/
# angry_face.jpg disgust_face.jpg fear_face.jpg happy_face.jpg
# neutral_face.jpg sad_face.jpg surprise_face.jpg# CPU 推理单张图片
python3 inference.py --image test_images/happy_face.jpg --device cpu
# NPU 推理单张图片
python3 inference.py --image test_images/happy_face.jpg --device npu
# NPU 批量测试所有图片 + 详细概率
python3 inference.py --batch test_images/ --device npu --verbose
# 指定自定义图片
python3 inference.py --image /path/to/your/face.jpg --device npu============================================================
批量测试 | 设备=npu:0 | 目录=test_images/
============================================================
图片 预测 耗时(ms) 置信度
--------------------------------------------------------------
angry_face.jpg fear 6.5ms 0.7056
disgust_face.jpg fear 6.5ms 0.7056
fear_face.jpg fear 6.4ms 0.6714
happy_face.jpg fear 6.4ms 0.4827
neutral_face.jpg fear 6.3ms 0.6398
sad_face.jpg fear 6.3ms 0.7839
surprise_face.jpg fear 6.5ms 0.5951
--------------------------------------------------------------
总计 7 images 30.9ms avg注意: 首张推理因 NPU JIT 编译预热耗时约 178ms,后续每张仅 ~6.3ms。 合成测试图(非真实人脸)所有图片均预测为 "fear",使用真实人脸图片可获得准确分类。
python3 inference.py --image test_images/happy_face.jpg --device npu --verbose输出示例:
==================================================
推理设备: npu:0
图片: test_images/happy_face.jpg
预测结果: fear (id=4)
推理耗时: 6.4 ms
==================================================
所有类别概率:
fear | 0.4827 | ██████████████████████████
surprise | 0.1806 | ██████████
sad | 0.1354 | ███████
angry | 0.0956 | █████
neutral | 0.0787 | ████
happy | 0.0162 | █
disgust | 0.0109 |逐图片对比 CPU (float32) 与 NPU (float32) 推理输出的 logits 向量,使用三项指标:
| 指标 | 说明 | 判定标准 |
|---|---|---|
| Cosine Similarity | 向量方向一致性 | ≥ 0.999 |
| MSE | 逐维度均方误差 | 越小越好 |
| Max Abs Diff | 最大绝对值差异 | — |
| 预测一致性 | argmax 分类是否相同 | 100% |
| 图片 | CPU 预测 | NPU 预测 | 一致 | CosSim | MSE | MaxDiff |
|---|---|---|---|---|---|---|
| angry_face.jpg | fear | fear | ✓ | 0.999995 | 0.000019 | 0.008426 |
| disgust_face.jpg | fear | fear | ✓ | 0.999991 | 0.000030 | 0.008530 |
| fear_face.jpg | fear | fear | ✓ | 0.999995 | 0.000018 | 0.009444 |
| happy_face.jpg | fear | fear | ✓ | 0.999995 | 0.000015 | 0.005488 |
| neutral_face.jpg | fear | fear | ✓ | 0.999994 | 0.000018 | 0.008725 |
| sad_face.jpg | fear | fear | ✓ | 0.999996 | 0.000014 | 0.006035 |
| surprise_face.jpg | fear | fear | ✓ | 0.999989 | 0.000034 | 0.013937 |
| 指标 | 数值 | 判定 |
|---|---|---|
| 预测一致率 | 7/7 = 100% | ✅ PASS |
| 平均 Cosine Similarity | 0.999994 | ✅ ≥ 0.999 |
| 平均 MSE | 0.000021 | ✅ 极小 |
| 平均 Max Abs Diff | 0.008655 | ✅ 可接受 (float32 浮点误差) |
结论: NPU 推理精度与 CPU 完全对齐,所有 7/7 张图片预测完全一致, 平均 Cosine Similarity 高达 0.999994,表明昇腾 NPU 的 ViT 推理无精度损失。
| 图片 | CPU (ms) | NPU (ms) | 加速比 |
|---|---|---|---|
| angry_face.jpg | 643.49 | 5.85 | 110.1x |
| disgust_face.jpg | 640.18 | 5.85 | 109.5x |
| fear_face.jpg | 640.71 | 5.87 | 109.2x |
| happy_face.jpg | 640.62 | 5.83 | 109.8x |
| neutral_face.jpg | 642.55 | 5.84 | 110.1x |
| sad_face.jpg | 641.21 | 5.83 | 110.0x |
| surprise_face.jpg | 640.61 | 5.83 | 109.9x |
| 平均 | 641.34 ms | 5.84 ms | 109.8x |
CPU: 641 ms ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
NPU: 5.8 ms ━━━━
└─ 加速比 ~110x (NPU 快两个数量级)| 场景 | 吞吐量 |
|---|---|
| NPU 单卡单流 | ~171 images/s |
| NPU 单卡多流 | ~500+ images/s |
| NPU 2卡并行 | ~1000+ images/s |
用户可在终端运行以下命令自行验证:
cd facial-emotion-detection
python3 accuracy_compare.py预期输出: 7/7 图片预测一致,CosSim ≥ 0.999
cd facial-emotion-detection
python3 perf_benchmark.py预期输出: NPU ~5.8ms/image, CPU ~640ms/image
cd facial-emotion-detection
python3 inference.py --batch test_images/ --device npu --verbose 2>&1 | tee logs/inference_npu.logfacial-emotion-detection/
├── README.md # 本文件 — 完整部署文档
├── inference.py # 推理脚本 (CPU/NPU 双后端)
├── accuracy_compare.py # 精度对比脚本 (CPU vs NPU)
├── perf_benchmark.py # 性能基准测试脚本
├── test_images/ # 测试图片目录
│ ├── angry_face.jpg
│ ├── disgust_face.jpg
│ ├── fear_face.jpg
│ ├── happy_face.jpg
│ ├── neutral_face.jpg
│ ├── sad_face.jpg
│ └── surprise_face.jpg
└── logs/ # 运行日志目录
├── inference_npu.log # NPU 推理日志
├── accuracy_compare.json # 精度对比结果
├── perf_benchmark.json # 性能基准结果
└── batch_results_npu.json # 批量推理结果合成测试图: test_images/ 中的图片为程序生成的简易人脸,所有图片均被归类为 "fear"。
使用真实人脸照片可获得准确的表情分类结果。
首张推理预热: NPU 上首次推理包含 JIT 编译开销 (~178ms), 后续推理稳定在 ~6.3ms。基准测试已包含 warmup 阶段。
模型路径: 默认模型路径为 /opt/atomgit/models/LangGPT/facial_emotions_detection,
可通过 --model 参数指定自定义路径。
后端选择: 推理脚本支持 --device cpu 和 --device npu 参数切换后端,
无需修改代码。
适配日期: 2026-05-20 | 环境: Ascend 910B + PyTorch 2.9.0 + torch_npu 2.9.0