一、引言

在工业制造领域,产品表面缺陷检测是保障质量的关键环节。传统人工检测效率低、漏检率高,而AI视觉检测方案虽能解决这一问题,但面临着推理延迟高、硬件算力利用率不足的痛点。华为CANN(Compute Architecture for Neural Networks)作为端云一致的异构计算架构,通过软硬件协同优化,可极致释放昇腾芯片算力,同时简化AI开发流程。本文以某电子元器件表面缺陷检测为实际场景,分享CANN在工业质检场景的落地过程,重点说明其如何解决推理效率与部署复杂度问题。

测试环境:昇腾310B边缘计算盒、CentOS 7.9、CANN 7.0.RC1、TensorFlow 2.10(CANN适配版)、缺陷检测模型(基于YOLOv5轻量化改造)。

二、场景痛点与CANN解决方案

2.1 核心痛点

  1. 推理延迟高:工业流水线要求单张图片检测延迟≤50ms,传统CPU推理耗时达200ms+,无法满足实时性需求;
  2. 部署流程复杂:异构计算硬件适配难度大,模型需针对性优化才能发挥硬件性能;
  3. 资源受限:边缘设备算力有限,需在保证检测精度的前提下,平衡性能与资源占用。

2.2 CANN核心功能适配

  • 模型转换与优化:通过ATC工具将YOLOv5模型转换为昇腾芯片支持的.om格式,自动完成算子融合、精度优化;
  • ACL接口部署:利用ACL接口实现模型高效加载与推理,支持异步推理降低延迟;
  • 资源监控:通过npu-smi工具实时监控硬件状态,确保边缘设备稳定运行。

三、CANN落地实操全流程

3.1 模型准备与转换

3.1.1 模型轻量化改造

基于YOLOv5s进行轻量化优化(减少卷积核数量、使用深度可分离卷积),确保模型适配边缘设备算力,同时保持85%以上的缺陷检测精度。
模型对比:
在这里插入图片描述

3.1.2 ATC工具模型转换

ATC简介

昇腾张量编译器(Ascend Tensor Compiler,简称ATC)是异构计算架构CANN体系下的模型转换工具, 它可以将开源框架的网络模型以及Ascend IR定义的单算子描述文件(json格式)转换为昇腾AI处理器支持的.om格式离线模型。其功能架构如所示。
在这里插入图片描述
将训练好的.pt模型先转换为.onnx格式,再通过CANN的ATC工具转换为.om格式,执行命令如下:

# 1. PyTorch模型转ONNX
python3 export.py --weights ./yolov5s_defect.pt --include onnx --imgsz 640 640

# 2. ATC工具转换为OM格式
atc --model=./yolov5s_defect.onnx \
--framework=5 \  # 5表示ONNX框架
--output=./yolov5s_defect \
--input_shape="images:1,3,640,640" \
--precision_mode=fp16 \  # _fp16精度平衡性能与精度
--optypelist_for_implmode="conv,matmul" \  # 算子融合优化
--log=info

转换成功后,生成yolov5s_defect.om文件,ATC工具自动完成算子优化与内存布局调整,提升推理效率。

3.2 基于ACL接口的推理部署

通过CANN的ACL接口实现模型加载、数据预处理、异步推理全流程,核心代码如下:

import acl
import cv2
import numpy as np

# 初始化ACL环境
acl.init()
device_id = 0
acl.rt.set_device(device_id)
context, _ = acl.rt.create_context(device_id)

# 加载OM模型
model_path = "./yolov5s_defect.om"
model_id, _ = acl.mdl.load_from_file(model_path)
model_desc = acl.mdl.create_desc()
acl.mdl.get_desc(model_desc, model_id)

# 申请输入输出内存
input_size = acl.mdl.get_input_size_by_index(model_desc, 0)
input_buf = acl.rt.malloc(input_size, acl.rt.MEMORY_DEVICE_HUGE_FIRST)
output_size = acl.mdl.get_output_size_by_index(model_desc, 0)
output_buf = acl.rt.malloc(output_size, acl.rt.MEMORY_DEVICE_HUGE_FIRST)
input_dataset = acl.mdl.create_dataset()
output_dataset = acl.mdl.create_dataset()
acl.mdl.add_dataset_buffer(input_dataset, input_buf, input_size)
acl.mdl.add_dataset_buffer(output_dataset, output_buf, output_size)

# 图片预处理(缩放、归一化、格式转换)
def preprocess_img(img_path):
    img = cv2.imread(img_path)
    img = cv2.resize(img, (640, 640))
    img = img.transpose((2, 0, 1))  # HWC->CHW
    img = img.astype(np.float16) / 255.0
    img = np.expand_dims(img, axis=0)
    return img

# 异步推理执行
img_path = "./defect_sample.jpg"
img_data = preprocess_img(img_path)
acl.rt.memcpy(input_buf, input_size, img_data.ctypes.data, input_size, acl.rt.MEMCPY_HOST_TO_DEVICE)

# 异步推理(非阻塞,降低延迟)
stream = acl.rt.create_stream()
acl.mdl.execute_async(model_id, input_dataset, output_dataset, stream)
acl.rt.sync_stream(stream)

# 结果解析(省略后处理逻辑)
print("工业质检推理完成")

# 资源释放(实际部署需完善)

部署成功后,终端输出推理完成提示,通过ACL接口的异步推理机制,大幅降低等待时间,实现推理任务与数据预处理、结果后处理等环节的并行执行,避免CPU因等待NPU推理结果而陷入空闲状态,进一步提升了整个人工智能任务流水线的运行效率与资源利用率。

3.3 性能与效果验证

3.3.1 推理延迟测试

对1000张工业产品图片进行推理测试,统计单张图片的平均延迟。

  • 平均推理延迟:32ms,满足工业流水线≤50ms的实时性要求;
  • 吞吐量:31.25张/秒,可支撑高速流水线检测需求。

3.3.2 检测效果验证

选取含划痕、凹陷、污渍的缺陷样本进行测试:

  • 缺陷识别准确率:87.3%,满足工业质检精度要求;
  • 漏检率:2.1%,远低于人工检测的8%~10%。

3.3.3 硬件资源监控

通过npu-smi info -t usages -i 0命令监控昇腾芯片资源使用情况:

  • NPU算力利用率:78%~85%,资源利用充分;
  • 内存使用率:≤60%,无资源过载风险;
  • 功耗:≤35W,适配边缘设备供电需求。在这里插入图片描述

四、问题解决与CANN价值体现

4.1 关键问题解决过程

  1. 推理延迟超标的问题:通过ATC工具的算子融合优化,结合ACL异步推理机制,将延迟从200ms+降至32ms,满足实时性要求;
  2. 模型部署复杂的问题:CANN提供统一的ACL接口与模型转换工具,无需关注底层硬件适配细节,部署流程从7天缩短至1天;
  3. 资源占用过高的问题:通过precision_mode=fp16精度优化,在保证精度的前提下,内存占用降低40%,适配边缘设备资源限制。

4.2 CANN核心价值总结

  • 性能极致:软硬件协同优化大幅降低推理延迟,提升吞吐量,充分释放昇腾芯片算力;
  • 开发简化:统一接口与工具链降低异构计算部署门槛,缩短项目落地周期;
  • 场景适配:支持边缘/云端多场景部署,精度与性能可灵活调整,适配工业质检等资源受限场景。

五、总结与展望

CANN通过模型优化、高效部署、资源监控等核心功能,成功解决了工业质检场景的实时性、部署复杂度与资源限制问题,为AI基础设施在工业领域的落地提供了关键支撑。其端云一致的特性也使得模型在云端训练后可直接部署至边缘设备,无需重复适配,进一步提升开发效率。

未来,可基于CANN的自定义算子开发功能,针对工业缺陷检测的特定场景优化核心算子,进一步提升检测精度与效率;同时利用CANN的多设备调度能力,实现多边缘盒协同检测,支撑更大规模的工业流水线应用。

更多CANN技术细节与场景实践,可访问官方官网探索:https://www.hiascend.com/cann

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐