Ascend-SACT/convtext
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

适配环境信息

NPU硬件:A2/910B

操作系统:ARM

部署方式:单卡

1 背景

本次工作的核心目标是验证现代卷积神经网络(CNN)的标杆模型——ConvNeXt在华为昇腾NPU上的推理能力。ConvNeXt通过借鉴Transformer的设计理念,证明了纯CNN架构依然能达到甚至超越顶尖视觉Transformer的性能。使其在NPU上运行,是验证国产硬件对前沿CNN架构支持度的重要一环。

面临的主要困难与挑战 迁移过程面临几个关键挑战,您的验证脚本成功地应对了这些挑战:

架构新颖性:ConvNeXt使用了如大卷积核(7x7)、GELU激活函数、LayerNorm等现代设计,这与传统CNN(如ResNet)不同,需要NPU提供对这些算子的高效支持。 生态适配:脚本中使用了 timm (PyTorch Image Models) 这一高级模型库,并涉及 safetensors 格式的权重加载。这要求NPU环境不仅能运行基础PyTorch,还要与复杂的AI开源生态兼容。

ConvNeXt介绍

ConvNeXt 主要用于计算机视觉任务,例如: 图像分类 目标检测 语义分割 视频理解

2 解决方案

镜像下载:

from atomgit_hub import snapshot_download
snapshot_download("Ascend-SACT/tacotron2",  local_dir = './download')

2.1 模型获取

https://hf-mirror.com/animetimm/convnextv2_huge.dbv4-full

2.2 推理

2.2.1 推理脚本

import torch
import timm
import torch_npu
import os
from torch_npu.contrib import transfer_to_npu
from PIL import Image
from timm.data import create_transform, resolve_data_config

def main():
    # 1. 环境与模型准备
    model_path = '/tmp/timm/convnext_tiny.in12k_ft_in1k/'
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    
    print("正在初始化 NPU 并加载 ConvNeXt 模型...")
    model = timm.create_model(
        'convnext_tiny',
        pretrained=False,
        checkpoint_path=os.path.join(model_path, 'model.safetensors')
    )
    model.to(device)
    model.eval()

    # 获取预处理配置
    config = resolve_data_config({}, model=model)
    transform = create_transform(**config)

    # 2. 交互提问环节
    print("\n" + "="*30)
    # 这里是你要的提问逻辑
    img_input = input("请输入测试图片的路径 (例如: test.jpg): ").strip()
    print("="*30)

    if not os.path.exists(img_input):
        print(f"错误: 找不到文件 '{img_input}',请检查路径是否正确。")
        return

    # 3. 执行推理
    try:
        img = Image.open(img_input).convert('RGB')
        input_tensor = transform(img).unsqueeze(0).to(device)

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

        # 4. 结果展示
        probabilities = torch.nn.functional.softmax(output[0], dim=0)
        top5_prob, top5_indices = torch.topk(probabilities, 5)

        print(f"\n图片 '{img_input}' 的推理结果:")
        for i in range(5):
            print(f"Top {i+1} - 类别 ID: {top5_indices[i].item():>4}, 置信度: {top5_prob[i].item():.2%}")
            
    except Exception as e:
        print(f"推理过程中出错: {e}")

if __name__ == "__main__":
    main()

2.2.2 推理验证结果

推理流程成功完成,但结果置信度较低,提示模型预测的可靠性有待提升

3 总结

本次迁移仍具有显著价值:

架构覆盖价值:成功证明了昇腾NPU能够支持ConvNeXt这一标志性的现代CNN架构。这意味着NPU不仅兼容传统CNN,也跟上了学术界的架构演进,为更多前沿视觉模型的部署打开了大门。 生态集成价值:验证了基于 timm 库和 safetensors 格式的模型加载和推理流程可以在NPU上工作。这表明NPU平台正逐步融入主流的PyTorch开发生态,降低了开发者的使用门槛。 技术验证与优化起点:本次成功的推理流程为后续深入优化奠定了基础。置信度问题指明了下一个需要攻关的方向(如检查预处理、验证数值一致性),这种“发现问题-解决问题”的过程正是推动软硬件协同优化的关键。