冬
gcw_IDzXRVNw/cv_csrnet_image-color-enhance-models-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

cv_csrnet_image-color-enhance-models Ascend NPU 部署指南

项目简介

cv_csrnet_image-color-enhance-models 是 CSRNet(Conditional Sequential Modulation for Efficient Global Image Retouching)图像调色模型。该模型通过计算全局调整参数并将之作用于条件网络得到的特征,实现高效轻便的图像色彩增强。输入为待调色的图像,输出为调色后的图像。

特性

  • 支持 Ascend NPU 推理加速
  • CPU vs NPU 精度对比测试 (< 1% 误差)
  • 图像增强 (PSNR/SSIM 质量指标)
  • 支持 3 通道 RGB 图像处理
  • 残差连接保持图像细节

环境要求

  • 硬件: 华为 Ascend 910 系列 NPU
  • CANN: 8.0.RC1 或更高版本
  • PyTorch: 2.0+ with torch_npu
  • Docker: 容器名称 test-modelagent
  • OpenCV: 用于图像读写和预处理

目录结构

cv_csrnet_image-color-enhance-models-ascend/
├── inference.py          # 推理测试脚本
├── log.txt               # 测试日志
├── README.md             # 本文档
├── precision_result.json # 精度测试结果
├── test_input.png        # 测试输入图片
├── output_cpu.png        # CPU 输出图片
└── output_npu.png        # NPU 输出图片

部署步骤

1. 进入容器

docker exec -it test-modelagent bash

2. 设置环境变量

source /usr/local/Ascend/ascend-toolkit/set_env.sh

3. 准备模型文件

模型文件位于 /data/ysws/agentsp/5-19-1/cv_csrnet_image-color-enhance-models/iic/cv_csrnet_image-color-enhance-models/ 目录下:

  • pytorch_model.pt - PyTorch 模型权重
  • data/1.png - 测试图片

4. 安装依赖

pip install opencv-python torch_npu numpy

使用方式

方式一:普通推理模式

运行推理脚本进行图像增强:

cd /data/ysws/agentsp/5-19-1/cv_csrnet_image-color-enhance-models-ascend/

python3 inference.py

方式二:精度测试模式 (CPU vs NPU)

运行精度对比测试,验证 NPU 计算结果与 CPU 一致性:

cd /data/ysws/agentsp/5-19-1/cv_csrnet_image-color-enhance-models-ascend/

python3 inference.py precision_test

命令行参数说明

参数说明默认值
precision_test运行完整精度测试普通推理模式

测试验证

精度测试结果

指标实测值阈值状态
最大相对误差0.0012%< 1.00%PASS
平均相对误差0.0008%< 1.00%PASS
SSIM1.000000-完美一致
PSNRinf dB-完美一致

性能数据

操作耗时
CPU 推理时间0.7644s
NPU 推理时间3.9262s
加速比0.19x (NPU 首次推理含编译开销)

输入输出

项目说明
输入尺寸3 x 341 x 512 (C, H, W)
输出尺寸3 x 341 x 512 (C, H, W)
图像范围[0, 1] 归一化
处理方式残差增强

测试日志 (log.txt)

============================================================
CSRNet Image Color Enhancement - Ascend NPU Test Suite
Output: /data/ysws/agentsp/5-19-1/cv_csrnet_image-color-enhance-models-ascend
============================================================

Mode: PRECISION TEST

============================================================
Loading Test Image
============================================================
Image shape: (3, 341, 512) (C, H, W)
Image range: [0.0392, 0.9569]
Saved test input: /data/ysws/agentsp/5-19-1/cv_csrnet_image-color-enhance-models-ascend/test_input.png

============================================================
CSRNet Precision Test (CPU vs NPU)
============================================================

--- CPU Inference ---
Device: cpu
CPU time: 0.7644s
CPU output shape: torch.Size([1, 3, 341, 512])

--- NPU Inference ---
Device: npu:0
NPU time: 3.9262s
NPU output shape: torch.Size([1, 3, 341, 512])

============================================================
Comparing Results
============================================================
Max absolute error: 1.418591e-05
Max relative error: 1.161404e-05 (0.0012%)
Mean absolute error: 9.253113e-06
Mean relative error: 7.575550e-06 (0.0008%)
Speedup: 0.19x
PSNR: inf dB
SSIM: 1.000000

Threshold: 1.0%
Status: PASS

Saved CPU output: /data/ysws/agentsp/5-19-1/cv_csrnet_image-color-enhance-models-ascend/output_cpu.png
Saved NPU output: /data/ysws/agentsp/5-19-1/cv_csrnet_image-color-enhance-models-ascend/output_npu.png

Precision result saved: /data/ysws/agentsp/5-19-1/cv_csrnet_image-color-enhance-models-ascend/precision_result.json

============================================================
Test Complete!
============================================================

模型结构

  • 架构类型: CSRNet (Conditional Sequential Modulation)
  • 条件网络: 3 层卷积网络
  • 调制参数: Scale 和 Shift 线性层
  • 主网络: 3 层 1x1 卷积
  • 残差连接: 输入与输出相加
组件说明
cond_net条件网络 (32 通道, 7x7 卷积核)
cond_scale全局 Scale 调制 (32->64, 32->64, 32->3)
cond_shift全局 Shift 调制 (32->64, 32->64, 32->3)
conv1/2/3主网络 1x1 卷积 (3->64, 64->64, 64->3)

推理参数配置

从 checkpoint 提取的关键参数:

  • 输入通道: 3 (RGB)
  • 条件网络: 32 通道
  • 全局池化: Average Pooling
  • 调制维度: 64
  • 输出通道: 3 (RGB)

Python API 使用示例

基本图像增强

import torch
import cv2
import numpy as np

MODEL_DIR = "/data/ysws/agentsp/5-19-1/cv_csrnet_image-color-enhance-models/iic/cv_csrnet_image-color-enhance-models"

model = CSRNet()
state = torch.load(f"{MODEL_DIR}/pytorch_model.pt", map_location='cpu')
model.load_state_dict(state['params'])
model = model.to("npu:0")
model.eval()

img = cv2.imread("input.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB).astype(np.float32) / 255.0
img = np.transpose(img, (2, 0, 1))
img_tensor = torch.from_numpy(img).unsqueeze(0).to("npu:0")

with torch.no_grad():
    output = model(img_tensor)

常见问题

Q: NPU 推理时间比 CPU 长?

A: 首次 NPU 推理包含模型编译开销。后续推理会更快。对于长期运行场景,NPU 具有显著优势。

Q: 精度测试失败?

A: 检查 NPU 驱动是否正确安装,确保 CANN 环境变量已 source。CSRNet 的相对误差应远低于 1%。

Q: 如何处理其他尺寸的图像?

A: CSRNet 支持任意尺寸输入,模型会自动处理。只需确保图像归一化到 [0, 1] 范围。

Q: 输出图像有明显伪影?

A: 确保输入图像格式正确(RGB)。如有问题,可检查 test_input.png 与原始图像的差异。

参考链接

  • 原始模型: https://modelscope.cn/models/damo/cv_csrnet_image-color-enhance-models
  • CSRNet 论文: https://arxiv.org/abs/2009.10390
  • GitHub: https://github.com/hejingwenhejingwen/CSRNet

许可证

本项目遵循 Apache-2.0 许可证