转载:https://mp.weixin.qq.com/s/mJsUlj0kzqR6mWqD1m58IQ

在2022年年末全新推出的OpenCV 4.7中,我们为各位开发者带来了DNN模块对昇腾AI软硬件平台的支持。基于昇腾异构计算架构CANN的加速能力,我们用OpenCV Zoo[1]中的PP-ResNet50、MobileNet和YOLOX对CANN后端进行了测试,发现三个模型在CANN后端下分别达到了3.29ms,1.21ms,12.80ms的优异结果,充分展现了昇腾AI软硬件平台强大的算力和计算效率。各位开发者可访问OpenCV Zoo查看CANN后端与不同后端的性能对比。我们近期也会在OpenCV Zoo中更新更多模型在CANN后端下的推理性能。

CANN后端在Ascend 310上的推理时间

同时,CANN后端的推理结果也与默认CPU后端的基本保持一致。使用OpenCV,用户只需下面7行Python代码,无需学习CANN的API,就可以简洁地调用起昇腾AI处理器,实现神经网络加速推理(核心为第三、四行代码,其余为常见模型推理逻辑代码):

import cv2 as cvnet = cv.dnn.readNet("/path/to/model.onnx")net.setPreferableBackend(cv.dnn.DNN_BACKEND_CANN)net.setPreferableTarget(cv.dnn.DNN_TARGET_NPU)input = cv.imread("/path/to/image.jpg")net.setInput(cv.dnn.blobFromImage(input))out = net.forward()

使用CANN后端推理的示例代码

昇腾CANN简介

昇腾CANN[2](Compute Architecture for Neural Networks)是华为针对AI场景推出的异构计算架构。昇腾CANN支持昇思MindSpore,OpenCV DNN,飞桨Paddle、PyTorch、TensorFlow等神经网络推理和训练框架,并兼容多种底层硬件设备,提供强大异构计算能力。

其中,昇腾CANN为用户提供了模型转换工具ATC,以及C/Python的API库AscendCL。用户可使用ATC将ONNX、TF和Caffe模型转换为被AscendCL支持的OM格式,并调用AscendCL的API读取和在昇腾AI处理器上推理模型。

OpenCV DNN简介

OpenCV[3]是一个基于Apache 2.0许可证开源并发行的跨平台计算机视觉库,提供了丰富的图像处理方法和图像应用解决方案,可运行在Windows,MacOS,Linux等操作系统上。OpenCV DNN是OpenCV的深度学习网络推理模块,它支持读取包括ONNX、TensorFlow、Caffe、Darknet在内的多种格式的深度学习模型,并且支持在OpenVINO、CUDA、Vulkan、TIM-VX等多种运行后端和在CPU、GPU、NPU等多种运行设备上部署深度学习模型。在最新的OpenCV 4.7中,我们为默认后端实现了Winograd Convolution等的优化,达到了目前主流神经网络推理框架的性能。

OpenCV DNN架构一览

OpenCV DNN对昇腾CANN后端的支持

OpenCV 4.7中加入的CANN后端降低了开发者迁移到昇腾AI平台的门槛,解决了ATC和AscendCL学习成本问题。即便是完全不熟悉CANN和OpenCV DNN的开发者,也可以通过开篇提及的7行代码在昇腾AI处理器上完成部署。

算子

卷积

Conv(普通卷积、深度可分离卷积)

全连接

MatMul

池化

MaxPool, AveragePool

激活

Relu, Relu6, Tanh, Swish, Sigmoid, PRelu, ...

其他

BatchNorm, Softmax, Resize, Reshape, Concat, Add, ...

CANN后端支持算子一览

目前OpenCV DNN CANN后端已支持18类层,共计34种算子,基本覆盖主流模型所使用的算子。用户可通过OpenCV DNN读取ONNX、TensorFlow、Caffe和DarkNet模型,在包括昇腾CANN在内的多种后端上自由切换和完成模型的推理。

OpenCV DNN支持的模型格式与后端一览

未来OpenCV中的CANN后端将会得到进一步完善:添加更多层和算子的支持;对无法支持的层,采用图分割的方式,让支持CANN后端的子图跑在昇腾AI处理器上,不支持CANN后端的子图跑在CPU上,以获取最大运行效率;在OpenCV CI中加入昇腾AI处理器设备,实现CANN后端的自动持续集成和部署。

目前,用户需要自行编译OpenCV 4.7才能体验到CANN后端,我们也在OpenCV Wiki中提供了详细的指南[4]。如果大家在使用上遇到任何问题,欢迎反馈到OpenCV GitHub仓库的Issues页面[5],我们会及时为大家解决问题。

相关链接:

[1] https://github.com/opencv/opencv_zoo.git

[2] https://www.hiascend.com/zh/software/cann

[3] https://github.com/opencv/opencv

[4] https://github.com/opencv/opencv/wiki/Huawei-CANN-Backend

[5] https://github.com/opencv/opencv/issues

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐