模型来源: iic/cv_unet_skin_retouching_torch
适配平台: 华为昇腾 Ascend NPU (Atlas 800 A2)
Skin Retouching(美肤修图)模型,基于 UNet + RetinaFace + 皮肤分割三阶段流水线:
| 问题 | 解决方案 |
|---|---|
F.interpolate 不支持 FP64 | 所有 interpolate 调用前强制 .float() 转 FP32 |
img[:,:,::-1] 负步幅不兼容 NPU tensor | 改用 cv2.cvtColor() 进行 BGR↔RGB 转换 |
torch.from_numpy 不接受非连续数组 | 使用 np.ascontiguousarray() 包装 |
.half() FP16 推理精度问题 | 统一使用 FP32 推理 |
| UNet 权重含 deep supervision 头 | 补充 dsoutc1~4 输出层定义 |
pip install modelscope
modelscope download --model iic/cv_unet_skin_retouching_torchpython env_check.py# CPU 推理
python inference.py --device cpu --image path/to/image.jpg
# NPU 推理
python inference.py --device npu --image path/to/image.jpg
# CPU vs NPU 精度对比
python inference.py --device both --image path/to/image.jpgpython benchmark.py --output_dir output以下为在昇腾 Atlas 800 A2 NPU 上的实际推理运行证据(完整日志见 output/ 目录)。
======================================================================
Skin Retouching Model - 昇腾 NPU / CPU 推理
======================================================================
Device: npu
======================================================================
📷 Image: skin_retouching_examples_1.jpg
[NPU] ✅ skin_retouching_examples_1.jpg
检测到人脸数: 1
输出图像尺寸: (941, 627, 3)
推理延迟: 5118.6 ms
======================================================================
SUMMARY
skin_retouching_examples_1.jpg: NPU 5118.6ms | Faces=1 | Shape=[941, 627, 3]
======================================================================📊 精度对比 (CPU vs NPU):
人脸数一致: ✅ Yes
余弦相似度: 0.99983246
最大像素差异: 22.00
平均像素差异: 0.6497
像素匹配率 (diff<1): 47.22%精度对比表明 NPU 推理结果与 CPU 基本一致,人脸检测完全对齐。差异主要来源于浮点运算精度(FP32 在不同硬件上的非确定性),不影响视觉效果。
📌 CPU 延迟测试:
[5/5] 9281.1 ms
平均延迟: 9213.3 ms
P95 延迟: 9272.8 ms
📌 NPU 延迟测试:
[5/5] 4367.3 ms
平均延迟: 4277.6 ms
P95 延迟: 4722.8 ms
🚀 NPU 加速比: 2.15x
📊 精度对比 (benchmark):
📷 skin_retouching_examples_1.jpg:
人脸数一致: ✅ 余弦相似度: 0.9999997208
SSIM: 0.999983 最大像素差异: 2.0
像素匹配率(<1): 99.89%
📷 skin_retouching_examples_2.jpg:
人脸数一致: ✅ 余弦相似度: 0.9999989243
SSIM: 0.999837 最大像素差异: 2.0
像素匹配率(<1): 98.96%| 指标 | CPU | NPU | 加速比 |
|---|---|---|---|
| 平均延迟 (ms) | 9213.3 | 4277.6 | 2.15x |
| P95 延迟 (ms) | 9272.8 | 4722.8 | - |
| FPS | 0.11 | 0.23 | - |
| 测试图片 | 人脸数一致 | 余弦相似度 | SSIM | 最大像素差 | 平均像素差 | 像素匹配率 |
|---|---|---|---|---|---|---|
| skin_retouching_examples_1.jpg | ✅ | 0.9999997 | 0.999983 | 2.0 | 0.0011 | 99.89% |
| skin_retouching_examples_2.jpg | ✅ | 0.9999989 | 0.999837 | 2.0 | 0.0105 | 98.96% |
结论: NPU 推理精度与 CPU 高度一致(余弦相似度 > 0.9999,SSIM > 0.9998),性能提升约 2.15x。
| 文件 | 说明 |
|---|---|
inference.py | 推理脚本(支持 CPU/NPU/both 模式) |
benchmark.py | 性能和精度基准测试脚本 |
env_check.py | 环境预检脚本 |
README.md | 本文档 |
~/.cache/modelscope/hub/,后续运行不再下载Downloading Model from https://www.modelscope.cntorch + modelscope + opencv-python + onnxruntimeUserWarning: Permission mismatch 等 warning 是容器内权限问题,不影响推理结果.float()F.interpolate 不支持 FP64 输入,适配层已做 .float() 转换不支持负步幅切片(如 img[:,:,::-1]),已改用 cv2.cvtColor() 转换颜色空间torch.from_numpy() 要求数组内存连续,已用 np.ascontiguousarray() 保证