带你了解 CANN 的目标检测与识别一站式方案
本文分享自华为云社区《玩转CANN目标检测与识别一站式方案》,作者: Tianyi_Li。
背景介绍
目标检测与识别是计算机视觉领域中的关键技术,随着深度学习技术的发展,目标检测与识别的应用场景也越来越广泛。当前, 主要有以下几个应用场景:
安全领域:指纹识别、物体识别等。
交通领域:车牌号识别、无人驾驶、交通标志识别等。
医疗领域:心电图、B 超、健康管理、营养学等。
生活领域:智能家居、智能购物、智能测肤等。
但当前人工智能应用开发面临着开发周期长、AI 软件栈理解成本高、算法模型与业务结合难度高、对开发人员技能要求高等门槛。为了降低 AI 应用开发的门槛,昇腾 CANN 开源了高性能的通用目标检测与识别一站式方案,通过其强大的可定制、可扩展性,旨在为 AI 开发者们提供更好的编程选择。
特别提示,如果您具有以下知识储备,将有助于学习:
具有 C&C++编程经验。
了解异构计算架构 CANN 在昇腾 AI 全栈中的位置和作用。
了解应用编程框架 AscendCL 的关键特性,并能够基于 AscendCL 接口开发简单的 AI 应用。
目标
了解通用目标检测与识别一站式方案的功能与特性
了解 ACLlite 的背景及接口使用方法
深入了解通用目标检测与识别一站式方案的实现流程
能够基于此方案定制自己的 AI 应用
目标检测与识别一站式方案介绍
方案特性
点此detect_and_classify,可查看方案源代码。
方案整体特性概括如下:
支持多格式输入和输出
通用目标检测和识别一站式方案支持图片、离线视频、RTSP 视频流等多输入格式,开发者可基于此方案实现对图片和视频等不同格式的目标进行识别。另外在结果展示方面,支持图片、离线视频、Web 前端等多形式展现,开发者可根据业务场景灵活呈现识别结果。
支持轻松替换和串接模型
该方案当前选用的是 YoloV3 图片检测模型与 CNN 颜色分类模型的串接,可实现基本的车辆检测和车辆颜色识别,开发者可轻松修改程序代码,自行替换/增加/删除 AI 模型,实现更多 AI 功能。
支持高效数据预处理
图片、视频等各类数据是进行目标检测和识别的原料,在把数据投入 AI 算法或模型前,我们需要对数据进行预加工,才能达到更加高效和准确的计算。该样例采用独立数据预处理模块,支持开发者按需定制,高效实现解码、抠图、缩放、色域转换等各种常见数据处理功能。
支持图片数、分辨率可变场景定制
在目标检测和识别领域,开发者们除了需要应对输入数据格式等方面差异,还会经常遇到图片数量、分辨率不确定的场景,这也是格外头疼的问题之一。比如,在目标检测和识别过程中,由于检测出的目标个数不固定,导致程序要等到图片攒到固定数量再进行 AI 计算,浪费了大量宝贵的 AI 计算资源。该样例开放了便捷的定制入口,支持设置多种数据量 Batch 档位、多种分辨率档位,在推理时根据实际输入情况灵活匹配,不仅扩宽了业务场景,更有效节省计算资源,大大提升 AI 计算效率。
支持多路多线程高性能编程
为了进一步提高编程的灵活性,满足开发者实现高性能 AI 应用,该样例支持通过极为友好和便捷的方式调整线程数和设备路数,极大降低学习成本,提升设备资源利用率。
高效后处理计算
除此之外,该样例后续还会将原本需要在 CPU 上进行处理的功能推送到昇腾 AI 处理器上执行,利用昇腾 AI 处理器强大的算力实现后处理的加速,进一步提升整个 AI 应用的计算效率。
实现流程
该样例使用了图片检测模型与颜色分类模型,基于 CANN AI 应用编程接口,对数据预处理、模型推理、模型后处理等 AI 核心计算逻辑进行模块化组装,实现了车辆检测和车身颜色识别基础功能,以输入图片是 JPEG 压缩图片为例,该样例功能流程如下所示:
首先输入图片送入 Device 的 DVPP 进行数据预处理,因为模型的输入要求是非压缩的、指定编码格式的图片,所以首先使用 DVPP 进行图片的解码操作,解码后格式为 YUV420SP_U8。
由于图片的大小与模型要求的大小不一致,解码后我们使用 DVPP 的 VPC 功能进行大小的调整。
经过前面的一系列处理后,输入到模型的编码格式 YUV420SP_U8 仍与模型要求不一致,此时我们可以在模型转换时通过 AIPP 的色域转换功能实现格式转换,将 YUV420SP_U8 格式转换为模型要求的 BGR 格式,这里的色域转换功能其实就相当于在模型中添加了一个色域转换算子,直接在模型推理前实现了编码格式的转换,而无需代码层面的修改。
检测模型推理后的结果就可以送入模型后处理模块,后处理模块根据业务流程需要,进行检测坐标点的存储。
下一步,就是将检测坐标点以及前面预处理后的 YUV 图片,一起送入分类模型的预处理模块,首先根据检测结果的坐标点信息对输入的图片进行抠图,然后再将其缩放为分类模型要求的大小。
由于颜色分类模型要求的图片编码格式是 RGB,同前面的检测模型一样,需要使用 AIPP 的色域转换功能,在模型推理前将 YUV 转换为 RGB。
最后对分类模型推理后的结果进行处理,在图片上进行画框,标注结果,并根据用户的输出要求进行存储或者在线展示。
快速体验
下面介绍让样例快速跑起来,了解通用目标检测与识别一站式方案的总体编译运行流程,主要是:
输入/输出数据都为图片,其中输入数据请选择 jpeg 格式的图片
使用 1 个 Device 运行
准备环境
这里不做过多介绍,使用的是 ECS + 官方推送的镜像,很简单就能搞定了,需要注意的是环境准备好后,请以 HwHiAiUser 用户体验如下任务。HwHiAiUser 用户下已经配置好了环境变量,安装好了应用所需基本依赖。
编译运行样例
因为镜像已经做好了配置,可以直接下载样例,模型与数据,直接编译运行即可。详细步骤如下:
步骤 1 :下载 samples 源码仓。
此处已将 samples 仓下载到 $HOME 路径下为例, 可以使用以下两种方式下载,请选择其中一种即可
【命令行下载】
【压缩包下载】
a. 在 samples 仓右上角选择【克隆/下载】下拉框,并选择【下载 ZIP】。
b. 将 ZIP 包以 HwHiAiUser 用户上传到开发环境的普通用户家目录中。
c. 执行以下命令,解压缩 zip 包。
步骤 2 : 准备模型及数据。
请参见 README 中的模型及数据准备章节。
步骤 3 : 样例编译运行。
请参见 README 中的样例编译运行章节。
【说明】
输入/输出数据都要求为图片,其中输入数据请选择 jpeg 格式的图片
使用 1 个 Device 运行
结果输出
如下图所示,左图为运行的打印输出,右图为输出的推理结果图片:
此外,还支持多种输入输出模式:
根据官方的测试,单 device 最多支持 22 路,在输入分辨率 1280 * 720 的视频下,单帧图像处理耗时 20ms,每秒最大处理帧数为 50 帧。
结语
本次的 CANN 目标检测与识别一站式方案总体流程图如下图所示,
方案中大量使用了线程,多路线程分别进行数据流转和协同合作,以单 device 为例,线程关系如下图所示:
此外,还支持定制开发,开发者可根据需要,自行添加包括但不限于如下功能:
详细的操作位置如下图所示,具体可参考本方案代码库的 README:
好了,最后奉上本方案代码库的获取方式,如下图所示,当然,也可以点击在前文中咱们提供的链接。
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/37bc44871ea6f4718597532db】。文章转载请联系作者。
评论