3毫秒完成ResNet50推理!OpenCV 4.7新增昇腾CANN推理后端
转载,opencv
转载: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
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐

所有评论(0)