weixin_72661020/wd-convnext-tagger-v3
模型介绍文件和版本Pull Requests讨论分析

wd-convnext-tagger-v3

1. 简介

本文档记录 fireicewolf/wd-convnext-tagger-v3 在昇腾 NPU(Ascend910)环境的快速部署与验证结果。

本模型使用 timm 库加载,权重为 safetensors 格式。非 HuggingFace transformers 格式。act_layer="gelu_tanh" 需显式指定。

相关获取地址:

  • 权重下载地址(ModelScope):https://modelscope.cn/models/fireicewolf/wd-convnext-tagger-v3

2. 验证环境

组件版本
torch2.5.1
torch_npu2.5.1
CANN8.5.RC1
  • NPU:Ascend910(单卡)
  • 输入尺寸:3x448x448
  • 类别数:10861
  • 架构:ConvNeXt-Base(Danbooru tagger,10861 类)

3. 快速部署

3.1 环境准备

pip install torch torchvision pillow
pip install timm safetensors

3.2 推理代码

import torch
from safetensors import safe_open
import timm
from timm.data import create_transform
from PIL import Image

device = torch.device("npu:0" if torch.npu.is_available() else "cpu")

model = timm.create_model("convnext_base", pretrained=False,
    num_classes=10861, in_chans=3, act_layer="gelu_tanh")
state_dict = {}
with safe_open("model.safetensors", framework="pt") as f:
    for k in f.keys():
        state_dict[k] = f.get_tensor(k)
model.load_state_dict(state_dict, strict=True)
model = model.to(device).eval()

transform = create_transform(input_size=448, is_training=False,
    mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))

img = Image.new("RGB", (448, 448), (128, 128, 128))
tensor = transform(img).unsqueeze(0).to(device)

with torch.no_grad():
    output = model(tensor)
pred = output.argmax(-1).item()
print(f"类别: {pred}")

4. Smoke 验证

python3 inference.py

验证结果:

  • 模型成功加载到 npu:0
  • 输出预测类别
  • 推理过程无报错

5. 性能参考

测试条件:FP32 / batch=1 / warmup=5 / timed=50 runs,Ascend910 单卡。

指标数值
平均推理时间17.3ms
测试次数50

6. 精度评测

NPU 与 CPU 输出对比,使用 4 张纯色测试图,比较 logits 一致性。

指标数值
Top-1 一致性4/4
Top-5 一致性4/4
最大 logits 差异0.010505
平均 KL 散度0.0
结论PASS

7. 注意事项

  • 本模型非 HuggingFace transformers 标准格式,需使用特定推理脚本
  • NPU 推理结果与 CPU 在 Top-1/Top-5 完全一致
下载使用量0