引言

在边缘计算与实时智能需求爆发的今天,我们正站在AI落地的关键拐点。传统的CPU/GPU推理在功耗和成本上日益面临瓶颈,而专为AI设计的神经网络处理器(NPU)以其极高的能效比,成为破局的关键。然而,将NPU的潜力融入像Ultralytics这样流行的开发框架,却并非易事。本文将深入探讨如何在Ultralytics生态中无缝集成此芯 P1 NPU推理,打通从前沿模型到高效部署的“最后一公里”,为您的AI应用注入真正的边缘算力。

模型准备

这里以yolov8为例

导出onnx模型

from ultralytics import YOLO
​
model = YOLO("yolov8n.pt")  # 这里可以替换为自己的 .pt 文件
​
model.export(format="onnx")
​

验证onnx模型

from ultralytics import YOLO

model = YOLO("yolov8.onnx")
results = model("test_data/c4b47ad2a44e14c2af33b8792c080cbe.jpg")

results[0].save()

模型量化

这一步是将onnx模型转换成CIX P1 NPU可以运行的模型,量化配置文件如下:

[Common]
mode = build

[Parser]
model_type = ONNX
model_name = yolov8n
detection_postprocess =
model_domain = OBJECT_DETECTION
input_data_format = NCHW
input_model = yolov8n.onnx
input = images
output = output0
input_shape = [1, 3, 640, 640]
output_dir = ./out

[Optimizer]
dataset = numpydataset
calibration_data = cal.npy
calibration_batch_size = 40
output_dir = ./out
dump_dir = ./out
quantize_method_for_activation = per_tensor_asymmetric
quantize_method_for_weight = per_channel_symmetric_restricted_range
save_statistic_info = True
trigger_float_op = disable & <[(164,166),(170,181)]:float16_preferred!>
cast_dtypes_for_lib = True

[GBuilder]
target = X2_1204MP3
outputs = yolov8n.cix
tiling = fps

需要注意的是这里量化的校验数据是onnx推理的输入数据。

Ultralytics集成NPU推理

拉取代码:git clone https://github.com/ultralytics/ultralytics.git,也可以pip install ultralytics之后直接在安装库的地方直接修改代码

修改代码的位置:ultralytics/ultralytics/nn/autobackend.py

只需要将onnx推理部分替换成npu的即可,代码如下:
im = im.cpu().numpy()  # torch to numpy
# y = self.session.run(self.output_names, {self.session.get_inputs()[0].name: im})
from NOE_Engine import EngineInfer
model = EngineInfer("/home/cix/ultralytics/ultralytics/nn/yolov8n.cix")
output = model.forward(im)
output = np.reshape(output, (1, 84, 8400))
y = [output]
model.clean()

这样就可以实现用CIX P1 NPU推理模型,这里是以yolov8为例,其他Ultralytics支持的模型和自己训练的模型也可以安装同样的方法集成CIX P1 NPU进行加速推理。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐