前言
强大的社会粘性不断催温数字化发展,目标检测与识别作为计算机视觉领域的一项关键技术,应用场景广泛,前景十分广阔,从城市治理、楼宇园区、互联网等领域,延伸至智能家居、金融、医疗影像等更多创新领域。随着这些技术潜移默化地渗透入人们的生活中,各行各业竞相通过引入目标检测和识别等人工智能新技术打开市场空间,关于目标检测和识别等各类人工智能需求奔涌而来。
但人工智能应用开发门槛高,周期长,各类AI软件栈理解成本高、各类AI算法模型与业务结合难度高、AI领域开发人员技能要求高,这是AI开发者们的切肤之痛,也是AI基础服务提供商们必须医好的症结。
对此,华为给出了自己的解决方案——昇腾AI。
昇腾AI是以昇腾AI基础软硬件平台为基础构建的人工智能计算产业,昇腾AI基础软硬件平台包括Atlas系列硬件及伙伴硬件、异构计算架构CANN(Compute Architecture for Neural Networks)、全场景AI框架昇思MindSpore、昇腾应用使能MindX等。作为昇腾AI的核心,异构计算架构CANN兼容多种底层硬件设备形态提供强大的异构计算能力,并且通过多层次编程接口,支持用户快速构建AI应用和业务,对上承接多种AI框架,对下服务AI芯片与编程,是提升昇腾处理器效率的关键。同时,还开源了各种AI应用源码供个人和企业开发者们免费使用。
通用目标检测与识别样例介绍
在计算机视觉领域,CANN最新开源的通用目标检测与识别样例,通过其强大的可定制、可扩展性,为AI开发者们提供了良好编程选择。大量模块化编程逻辑、可扩展配置,让开发者们像乐高搭积木一样,仅需进行简单的替换和定制,就能实现符合业务场景需求的高性能、企业级AI应用。
该样例使用了YOLOv3图片检测模型与CNN颜色分类模型,基于CANN AI应用编程接口,对数据预处理、模型推理、模型后处理等AI核心计算逻辑进行模块化组装,实现了车辆检测和车身颜色识别基础功能:
同时,该样例开放出多个编程定制点,并公开了系统的定制文档,详细介绍了样例代码结构、编译运行方法,以及如何基于现有样例代码进行功能定制和扩展,让不同程度的AI开发者们轻松上手。
1. 支持多格式输入和输出
CANN通用目标检测和识别样例支持图片、离线视频、RTSP视频流等多输入格式,开发者可基于此样例实现对图片和视频等不同格式的目标进行识别。另外在结果展示方面,该样例支持图片、离线视频、Web前端等多形式展现,可根据业务场景灵活呈现识别结果。
2. 支持轻松替换和串接模型
样例目前选用的是YOLOv3图片检测模型与CNN颜色分类模型的串接,可实现基本的车辆检测和车辆颜色识别,开发者可轻松修改程序代码,自行替换/增加/删除AI模型,实现更多AI功能。
3. 支持高效数据预处理
图片、视频等各类数据是进行目标检测和识别的原料,在把数据投入AI算法或模型前,我们需要对数据进行预加工,才能达到更加高效和准确的计算。该样例采用独立数据预处理模块,支持开发者按需定制,高效实现解码、抠图、缩放、色域转换等各种常见数据处理功能。
4. 支持图片数、分辨率可变场景定制
在目标检测和识别领域,开发者们除了需要应对输入数据格式等方面差异,还会经常遇到图片数量、分辨率不确定的场景,这也是格外头疼的问题之一。比如,在目标检测和识别过程中,由于检测出的目标个数不固定,导致程序要等到图片攒到固定数量再进行AI计算,浪费了大量宝贵的AI计算资源。该样例开放了便捷的定制入口,支持设置多种数据量Batch档位、多种分辨率档位,在推理时根据实际输入情况灵活匹配,不仅扩宽了业务场景,更有效节省计算资源,大大提升AI计算效率。
5. 支持多路多线程高性能编程
同时,为了进一步提高编程的灵活性,满足开发者实现高性能AI应用,该样例支持通过极为友好和便捷的方式调整线程数和设备路数,极大降低学习成本,提升设备资源利用率。
6. 高效后处理计算
除此之外,本样例还将原本需要在CPU上进行处理的功能推送到昇腾AI处理器上执行,利用昇腾AI处理器强大的算力实现后处理的加速,进一步提升整个AI应用的计算效率。
CANN为AI开发者用户提供了越来越灵活的编程技术支持,让越来越多的开发者们寻求到了更加友好且高效的编程体验。让大学生创新人才更轻松地上手AI开发、开展创意实践,让企业开发者们更高效落地商业应用。
通用目标检测与识别样例实战
基础知识
1. 昇腾形态介绍
以昇腾 AI 处理器的PCIe的工作模式进行区分:
(1)如果PCIe工作在主模式,可以扩展外设,则称为RC模式;
(2)如果PCIe工作在从模式,则称为EP模式。EP模式通常由Host侧作为主端,Device侧作为从端。客户的AI业务程序运行在Host系统中,产品作为Device系统以PCIe从设备接入Host系统,Host系统通过PCIe通道与Device系统交互,将AI任务加载到Device侧的昇腾 AI 处理器中运行。
两种模式的产品及架构如下图所示:
关于Host和Device的概念说明如下:
Host:是指与昇腾AI处理器所在硬件设备相连接的X86服务器、ARM服务器,利用昇腾AI处理器提供的NN(Neural-Network)计算能力完成业务。
Device:是指安装了昇腾AI处理器的硬件设备,利用PCIe接口与服务器连接,为服务器提供NN计算能力。
以下是对于目前的昇腾处理器和产品的工作模式总结:
-
昇腾 AI 处理器的工作模式如下:
− 昇腾310 AI处理器有EP和RC两种模式。
− 昇腾310P AI处理器(昇腾 710 AI处理器)只有EP模式。
− 昇腾910 AI处理器只有EP模式。 -
支持RC模式的产品有:Atlas 200 AI加速模块、Atlas 200 DK 开发者套件。
产品的CPU直接运行用户指定的AI业务软件,接入网络摄像头、I2C传感器、SPI显示器等其他外挂设备作为从设备接入产品。 -
支持EP模式的产品
昇腾310 AI处理器:Atlas 200 AI加速模块、Atlas 300I 推理卡、Atlas 500 智能小站、Atlas 500 Pro 智能边缘服务器、Atlas 800 推理服务器。
昇腾310P AI处理器:Atlas 300I Pro 推理卡、Atlas 300V Pro 视频解析卡。
昇腾910 AI处理器:Atlas 800 训练服务器、Atlas 300T 训练卡。
2. CANN介绍
(1)昇腾计算语言接口:昇腾计算语言(Ascend Computing Language,AscendCL)接口是昇腾计算开放编程框架,是对低层昇腾计算服务接口的封装。它提供Device(设备)管理、Context(上下文)管理、Stream(流)管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理、Graph(图)管理等API库,供用户开发人工智能应用调用。
(2)昇腾计算服务层:本层主要提供昇腾计算库,例如神经网络(Neural Network,NN)库、线性代数计算库(Basic Linear Algebra Subprograms,BLAS)等;昇腾计算调优引擎库,例如算子调优、子图调优、梯度调优、模型压缩以及AI框架适配器。
(3)昇腾计算编译引擎:本层主要提供图编译器(Graph Compiler)和TBE算子开发支持。前者将用户输入中间表达(Intermediate Representation,IR)的计算图编译成NPU运行的模型。后者提供用户开发自定义算子所需的工具。
(4)昇腾计算执行引擎:本层负责模型和算子的执行,提供如运行时(Runtime)库(执行内存分配、模型管理、数据收发等)、图执行器(Graph Executor)、数字视觉预处理(Digital Vision Pre-Processing,DVPP)、人工智能预处理(Artificial Intelligence Pre-Processing,AIPP)、华为集合通信库(Huawei Collective Communication Library,HCCL)等功能单元。
(5)昇腾计算基础层:本层主要为其上各层提供基础服务,如共享虚拟内存(Shared Virtual Memory,SVM)、设备虚拟化(Virtual Machine,VM)、主机-设备通信(Host Device Communication,HDC)等。
环境要求
按照官方的文档说明,如下条件的硬件环境中进行测试,若环境不符合如下要求,样例可能运行失败:
产品型号 | 支持的操作系统 |
---|---|
Atlas 200 DK 开发者套件(型号 3000) | Ubuntu 18.04 |
Atlas 300I Pro 推理卡 | Ubuntu 18.04 / CentOS 7.6 |
但遗憾的是,目前我暂无上述两种设备,不过幸好我手头有一些代金券,又恰好有上次CANN训练营的镜像,那我就在华为云ECS购买一台云服务器来试试吧。
如图是我选择的镜像: