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

适配环境信息

NPU硬件:A2/910B

操作系统:ARM

部署方式:单卡

1 模型介绍

YOLO11s-cls 是 YOLOv11 系列中专用于图像分类任务的轻量级模型。它是 Ultralytics 公司推出的最新一代 YOLO 模型的一个变种。 模型定位 s 版本:代表 "small",是系列中的轻量级版本 cls 后缀:专门用于分类任务(Classification) 平衡型设计:在速度与精度之间取得良好平衡

2 背景

核心目标是将最新的YOLO11s-cls图像分类模型,从传统的GPU计算环境成功迁移到国产的昇腾(Ascend)NPU(Ascend 910B)平台上进行推理。这属于AI计算领域的“硬件迁移”或“生态适配”工作。 其背景源于当前AI发展的几个关键点: 国产化算力需求:为减少对特定GPU厂商的依赖,推动国产AI芯片(如昇腾)在主流AI任务中的应用至关重要。 边缘计算场景:YOLO11s-cls作为轻量级模型,非常适合部署在边缘设备(如搭载NPU的AI盒子、服务器)上执行实时图像分类任务。 技术前沿探索:Ultralytics YOLOv11是刚发布的新一代模型,尽快完成其在NPU上的适配,有助于保持技术栈的先进性和兼容性。 过程中的主要困难

将为GPU设计的PyTorch模型迁移到NPU上运行,并非简单的更换设备代码(如将 device=‘cuda’ 改为 device=‘npu’),主要面临以下挑战:

框架兼容性:Ultralytics 库的底层设备选择逻辑默认优先识别GPU和CPU,无法自动识别或选择NPU。这是最根本的障碍。 代码侵入性:直接修改Ultralytics库的源代码(如 torch_utils.py)是一种解决方案,但这样做会破坏库的完整性,导致未来升级困难,且不利于代码的移植和共享。 算子支持度:虽然PyTorch通过 torch_npu 库提供了对NPU的支持,但并非所有PyTorch原生算子都在NPU上得到了完美优化和支持。需要验证模型中的所有算子(尤其是较新的模型可能包含的新算子)能否在NPU上正确执行。 依赖环境复杂:NPU运行需要一整套特定的驱动、固件和软件栈(如CANN),环境配置复杂,任何一环出现问题都可能导致推理失败。

3 解决方案

3.1 基础环境准备

镜像下载

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

容器启动脚本

docker run -it --rm \
--name yolo_cls_npu_test \
--net=host \
--privileged \
--ipc=host \
--device=/dev/davinci5 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/add-ons/:/usr/local/Ascend/add-ons/ \
-v /usr/local/sbin/npu-smi:/usr/local/bin/npu-smi \
-v /home/backup/Models/yolo11s_cls:/workspace/cls_model \
my_yolov12_final:v1.0 \
/bin/bash

3.2 配置及资源下载

安装依赖

pip install ultralytics

模型权重下载

# 推荐在宿主机下载后挂载,或在容器内使用 curl
cd /workspace/cls_model
curl -L -o yolo11s-cls.pt 
[https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt]
(https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11s-cls.pt)
# 验证文件大小 (应约为 12MB)
ls -lh yolo11s-cls.pt

3.1 推理验证

推理验证脚本

import sys
import torch
import torch_npu
import cv2
from ultralytics import YOLO
import ultralytics.utils.torch_utils
# ==========================================
# 核心配置:NPU 适配补丁
# ==========================================
def force_npu_device(*args, **kwargs):
# 无论传入什么,强制返回 NPU 设备
return torch.device('npu:0')
# 劫持 ultralytics 的设备选择函数
ultralytics.utils.torch_utils.select_device = force_npu_device
# ==========================================
def run_predict():
# 配置路径
model_path = '/workspace/cls_model/yolo11s-cls.pt'
image_path = './bus.jpg'
print(f"🚀 Loading model from: {model_path}")
print(f"🖼  Test image: {image_path}")
try:
# 加载模型
model = YOLO(model_path)
except Exception as e:
print(f"❌ 模型加载失败: {e}")
return
print("⚡ Starting Inference on Ascend 910B3...")
# 执行推理
# device='cpu' 仅为占位符,实际会被补丁劫持为 npu:0
results = model.predict(source=image_path, device='cpu', save=True, 
project='runs/predict_cls')
# 打印 Top-5 结果
for r in results:
if hasattr(r, 'probs'):
print(f"\n📊 Top 5 Classifications:")
top5 = torch.topk(r.probs.data, 5)
for i in range(5):
class_id = top5.indices[i]
score = top5.values[i]
print(f"   
{i+1}. {model.names[int(class_id)]}: {score:.4f}")
if __name__ == '__main__':
run_predict()

执行推理

输入:一个标准的YOLO11s-cls模型权重文件(yolo11s-cls.pt)和一张测试图片(bus.jpg)。

成功获取的结果: 核心成果:在昇腾910B NPU上成功完成了YOLO11s-cls模型的图像分类推理,并正确输出了Top-5的分类结果及其置信度。 技术突破:通过创新的非侵入式补丁,解决了主流AI框架与国产NPU硬件自动适配的核心难题。 验证结论:证实了YOLOv11系列模型在昇腾NPU平台上的兼容性和可用性,为后续的性能优化、模型部署以及更广泛的模型迁移工作奠定了坚实的基础。

4 迁移的价值与成功意义

本次推理验证的成功,具有重要的实践价值和战略意义:

一、 技术价值:优雅的解决方案

非侵入式补丁:通过运行时动态“劫持”(Monkey Patching)Ultralytics库的设备选择函数,巧妙地将其强制指向NPU设备。这种方法无需修改库的源代码,实现了最小化的代码侵入,解决方案干净、优雅且易于维护。 验证了完整流程:成功打通了从模型下载 -> 环境配置 -> 模型加载 -> NPU推理 -> 结果输出的完整链路,证明了YOLO11s-cls模型在昇腾NPU上推理的技术可行性。 二、 应用价值:为实际部署铺平道路

性能与成本平衡:验证了轻量级模型(YOLO11s)在强大NPU(910B)上的运行,为高并发、低延迟的图像分类服务(如内容审核、工业质检、医疗影像分析)提供了新的部署选项,有望在性能和成本之间取得更优的平衡。 国产化替代的关键一步:成功将国际主流AI框架下的前沿模型迁移到国产硬件上,是构建全国产化AI应用(国产芯片+国产框架+主流模型) 的重要实践和积极信号,减少了在关键领域对国外算力的依赖。 三、 生态价值

扩展了NPU生态:每一次成功将主流模型迁移到NPU平台,都是对昇腾AI生态的一次丰富和壮大,有助于吸引更多开发者加入,形成良性循环。 提供了可复用的范例:本次迁移中使用的“设备选择劫持”方法为解决类似框架的NPU适配问题提供了一个清晰、可复用的技术范例,具有很高的参考价值。