【摘要】 基于华为云弹性云服务器ECS,搭配共享镜像,疾速搭建环境,进行指标检测与辨认的昇腾AI开发体验,开箱即用,突破工夫和空间限度,随时随地进行开发,适宜集体开发和团队合作,体验晦涩丝滑。前言弱小的社会粘性一直催温数字化倒退,指标检测与辨认作为计算机视觉畛域的一项关键技术,利用场景宽泛,前景非常广大,从城市治理、楼宇园区、互联网等畛域,延长至智能家居、金融、医疗影像等更多翻新畛域。随着这些技术耳濡目染地浸透入人们的生存中,各行各业竞相通过引入指标检测和辨认等人工智能新技术关上市场空间,对于指标检测和辨认等各类人工智能需要奔涌而来。
但人工智能利用开发门槛高,周期长,各类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开发者们轻松上手。
- 反对多格局输出和输入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.04Atlas 300I Pro 推理卡Ubuntu 18.04 / CentOS 7.6但遗憾的是,目前我暂无上述两种设施,不过幸好我手头有一些代金券,又恰好有上次CANN训练营的镜像,那我就在华为云ECS购买一台云服务器来试试吧。如图是我抉择的镜像:
依据此镜像,我创立了一台云服务器,规格为: AI减速型 | ai1s.large.4 | 2vCPUs | 8GiB,零碎版本为Ubuntu 18.04 server 64bit,是x86 + Ascend 310的硬件组合。不得不说华为云这个弹性云服务器ECS还真是不错,很不便,当然也感激上次的CANN训练营,是的我能够依据镜像疾速创立服务器,不必一个个装置各种驱动和固件了,赞!这里记录一下我这台云服务器的一些信息:
留神,CANN版本为:5.0.4.alpha001及以上版本,同时解析以下概念:开发环境指编译开发代码的环境。运行环境指运行推理程序的环境,运行环境必须带昇腾AI处理器。开发环境与运行环境合设场景指带昇腾AI处理器的机器既作为开发环境又作为运行环境,此种场景下,代码开发与代码运行在同一台机器上。开发环境与运行环境分设场景指开发者应用其余独立机器进行代码开发与编译,而不应用带有昇腾AI处理器的机器。而通过上图,能够看到我这里的CANN版本为:5.0.5.alpha001,对了,咱这是开发环境与运行环境合设场景,装置用户是HwHiAiUser。利用流程介绍本样例基于CANN,实现了在昇腾AI处理器上对输出图片或者视频进行指标辨认,通用业务流程如下所示:
AscendCL初始化 调用aclInit接口实现初始化AscendCL。运行治理资源申请 顺次申请运行治理资源Device、Context与Stream,确保能够应用这些资源执行运算、治理工作。在申请治理资源时,样例进行了以后昇腾AI处理器运行模式的判断,做到不同状态的昇腾AI处理器的代码实现归一。加载模型文件 加载模型文件,并构建模型的输出与输入。数据预处理。 针对不同类型的输出,别离进行不同的解决,使其满足模型对输出数据的要求。模型推理 执行模型推理,并获取输入后果。推理后果后处理 依据用户抉择的后处理形式,对输入后果进行不同的解决,例如对推理后果进行标注,输入为离线视频文件,或通过网页在线展现等。目录构造├── model //模型文件夹,寄存样例运行须要的模型文件
│ └── xxxx.pb
├── data //数据文件夹
│ └── xxxx //测试数据,输出图片/视频
├── inc //头文件文件夹
│ └── CarParams.h //申明样例应用的数据结构的头文件
├── out //编译输入文件夹,寄存编译生成的可执行文件
│ ├── xxxx //可执行文件
│ └── output //后果输入文件夹(如果不存在须要自行创立)
│ └── xxxx //样例运行的输入后果
├── display //网页展现性能实现代码文件夹
│ ├── presenterserver //presenterserver文件夹
│ └── run_presenter_server.sh//presenterserver启动脚本
├── scripts //配置文件+脚本文件夹
│ ├── params.conf //样例运行配置文件
│ ├── present_start.conf //presentserver启动配置文件
│ ├── sample_build.sh //疾速编译脚本
│ └── sample_run.sh //疾速运行脚本
├── src
│ ├── acl.json //零碎初始化的配置文件
│ ├── CMakeLists.txt //Cmake编译文件
│ ├── classifyPostprocess //分类模型后处理线程文件夹,寄存该业务线程的头文件及源码
│ ├── classifyPreprocess //分类模型预处理线程文件夹,寄存该业务线程的头文件及源码
│ ├── detectPostprocess //检测模型后处理线程文件夹,寄存该业务线程的头文件及源码
│ ├── detectPreprocess //检测模型预处理线程文件夹,寄存该业务线程的头文件及源码
│ ├── inference //预处理线程文件夹,寄存该业务线程的头文件及源码
│ ├── presentagentDisplay //网页展现线程文件夹,寄存该业务线程的头文件及源码
│ └── main.cpp //主函数,图片分类性能的实现文件
└── CMakeLists.txt //编译脚本入口,调用src目录下的CMakeLists文件
环境配置因为咱这次用的是开发环境与运行环境合设场景,上面操作皆针对此场景设置,如果是分设环境,请参考README。1. 配置环境变量以装置用户在任意目录下执行以下命令,关上.bashrc文件。留神,咱这里装置用户就是HwHiAiUser,但ECS默认登录是root用户,因而须要切换用户,执行如下命令:su - HwHiAiUser
运行截图:
接下来就执行:vi ~/.bashrc
在文件最初一行前面增加如下内容。提醒:按“i”能够进入编辑状态。export CPU_ARCH=arch
# 应用arch命令主动获取以后操作系统架构
export THIRDPART_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH} # 存储第三方库文件的门路,例如依赖装置中的OpenCV、FFmpeg等
export LD_LIBRARY_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH}/lib:$LD_LIBRARY_PATH # 运行时链接库文件
export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest # CANN软件装置后文件存储门路,若是root用户装置,$HOME请替换为/usr/local
运行截图:
执行命令保留文件并退出。提醒:按“Ecs”是退出编辑状态。:wq!
执行命令使其立刻失效。source ~/.bashrc
- 创立第三方依赖文件夹。留神,因为曾经应用镜像创立的环境曾经创立过了,所以这里就跳过,如果之前未创立过,这里要执行:mkdir -p ${THIRDPART_PATH}
- 下载samples仓源码。先来介绍一些命令,留神先别执行哈:cd ${HOME} # 此处以将samples源码仓下载到用户家目录为例,开发者可自定义下载门路
sudo apt-get install git # 可选,如果没装置git,则须要执行本命令,本环境可省略,因为曾经装置了。
git clone https://gitee.com/ascend/samp...
那这里,我执行的是如下命令:mkdir downloads
cd downloads
git clone https://gitee.com/ascend/samp...
运行截图: - 将samples源码仓中的公共库拷贝到后面创立的第三方依赖文件夹中。cp -r samples/common ${THIRDPART_PATH}
运行截图:
依赖装置留神,因为咱应用的镜像很棒,所以以下依赖根本都装置过了或者依据业务需要,并不需要装置,所以这里的依赖可省略,但如果确有需要,可参考以下形式装置。1. OpenCV样例应用OpenCV接口的作用是进行输出视频文件的读取,以及所有类型输入数据的后处理,数据后处理包含指标标注、不同类型数据的输入,为此必选依赖。但咱这里预装过了,所以能够省略。咱们这是开发环境与运行环境合设场景,所以在环境上执行如下命令装置OpenCV:sudo apt-get install libopencv-dev
运行截图:
提醒:这里可能要让你输出HwHiAiUser明码,如果你之前没有设置过的话,能够依照如下步骤进行设置:su - root
passwd HwHiAiUser
这个过程,依照提醒操作即可,运行截图: FFmpeg样例中,FFmpeg的作用是在输出数据类型为RTSP视频流或者离线视频的状况下,进行数据切帧的操作,如果业务不蕴含输出时RTSP视频流或者离线视频的场景,该第三方库实际上并不会被调用,能够不装置此依赖。但还是介绍下,在咱这开发环境与运行环境合设场景的装置办法,在环境上参考如下命令应用源码编译的形式装置FFmpeg:# 下载并解压缩FFmpeg安装包,此处以将FFmpeg安装包存储在用户家目录下为例,开发者也能够自定义FFmpeg安装包存储门路。
cd ${HOME}
wget http://www.ffmpeg.org/release... --no-check-certificate
tar -zxvf ffmpeg-4.1.3.tar.gz
cd ffmpeg-4.1.3装置ffmpeg
./configure --enable-shared --enable-pic --enable-static --disable-x86asm --prefix=${THIRDPART_PATH}
运行截图:
上面开始make了:make -j2 # 因为我买的ECS是双核,所以这里写2,具体数值可依据本人的处理器设置
make install
运行截图:
- PresentAgentPresentAgent是为了将带有推理后果的图片数据发送到网页进行显示,如果业务场景不存在须要在网页察看推理后果的状况,能够不装置PresentAgent。因为PresentAgent依赖Protobuf,所以若须要应用PresentAgent,也要要同步装置Protobuf。在咱们的开发环境与运行环境合设场景,参考如下命令应用源码形式装置Protobuf以及PresentAgent: # 装置Protobuf相干依赖,可省略,咱们的镜像环境曾经装过了
sudo apt-get install autoconf automake libtool
运行截图:
# 下载Protobuf源码,此处以将Protobuf存储在用户家目录下为例,开发者也能够自定义Protobuf源码的存储门路。
cd ${HOME}
git clone -b 3.13.x https://gitee.com/mirrors/pro... protobuf
# 编译装置Protobuf
cd protobuf
./autogen.sh
./configure --prefix=${THIRDPART_PATH}
make clean
make -j2 # 因为我买的ECS是双核,所以这里写2,具体数值可依据本人的处理器设置
sudo make install
# 进入PresentAgent源码目录并编译,PresentAgent源码存储在samples仓的“cplusplus/common/presenteragent”目录下,此处以samples源码存储在用户家目录的downloads文件夹下为例
cd ${HOME}/downloads/samples/cplusplus/common/presenteragent/proto
${THIRDPART_PATH}/bin/protoc presenter_message.proto --cpp_out=./
# 编译装置Presentagnet
cd ..
make -j2
make install
运行截图: AclLiteAclLite库是对AscendCL DVPP图像和视频解决相干接口,AscendCL设施治理、资源管理、模型推理等接口进行了封装,旨在为用户提供一组更繁难的公共接口。本样例是基于AclLite接口进行的开发,所以须要下载并编译装置AclLite库。但咱这里预装过了,所以能够省略。如需装置,请参考文档。模型及数据筹备样例运行前,请参见本章节筹备样例依赖的模型文件及测试数据文件。1. 筹备模型模型名称模型阐明模型下载门路yolov3图片检测推理模型。是基于onnx的Yolov5模型。请参考https://gitee.com/ascend/Mode...中的“原始模型”章节下载原始模型网络文件、权重文件以及配置文件。color车辆色彩分类推理模型。是基于tensorflow的CNN模型。请参考https://gitee.com/ascend/Mode...中的“原始模型”章节下载原始模型网络文件。2. 模型转换须要将下载的原始模型转换为适配昇腾AI处理器的离线om模型,并搁置到样例代码中的“model”目录下。为不便操作,此处间接给出了原始模型的下载命令以及模型转换命令,可间接拷贝执行。当然,您也能够参见模型列表中的下载地址中对应的README进行手工操作,并理解更多细节。# 进入指标辨认样例工程根目录,依据理论状况,比方我这里就是依据理论门路
cd $HOME/samples/cplusplus/level3_application/1_cv/detect_and_classify创立并进入model目录
mkdir model
cd model下载yolov3的原始模型文件及AIPP配置文件
wget https://modelzoo-train-atc.ob...
wget https://modelzoo-train-atc.ob...
运行截图如下,能够看到网络速度是真的快啊,OBS和ECS的搭配真是不错。
上面开始转换模型了:# 执行模型转换命令,生成yolov3的适配昇腾AI处理器的离线模型文件
atc --model=./yolov3_t.onnx --framework=5 --output=yolov3 --input_shape="images:1,3,416,416;img_info:1,4" --soc_version=Ascend310 --input_fp16_nodes="img_info" --insert_op_conf=aipp_onnx.cfg
运行截图:
接着依照下面的办法,再来一次转换模型:# 下载color模型的原始模型文件及AIPP配置文件
wget https://modelzoo-train-atc.ob...
wget https://modelzoo-train-atc.ob...执行模型转换命令,生成color的适配昇腾AI处理器的离线模型文件
atc --input_shape="input_1:10,224,224,3" --output=./color_dvpp_10batch --soc_version=Ascend310 --framework=3 --model=./color.pb --insert_op_conf=./aipp.cfg
运行截图:
感觉转个模型转换,对CPU要求较高,咱这双核有点慢。3. 筹备数据样例编译时会主动下载测试数据,无需手工下载。若您想自行下载测试数据,可参见如下命令:wget https://modelzoo-train-atc.ob... --no-check-certificate
wget https://modelzoo-train-atc.ob... --no-check-certificate
wget https://modelzoo-train-atc.ob... --no-check-certificate
样例数据下载完后请存储在样例工程的data目录下。样例编译运行请确认之前的环境及模型、数据筹备实现。1. 在通用指标辨认样例工程的根目录下执行以下命令,进行样例编译。cd scripts
bash sample_build.sh
很遗憾,报错了,报错信息如下图所示:
看这报错,应该是没有找到相应的函数或属性,应该是咱们的AclLite没装置编译,因为过后镜像曾经预装了,便间接用了,看来不行啊,那么上面装置一下吧。以下操作均在装置用户HwHiAiUser下进行,在咱们的开发环境与运行环境合设场景下,先进入acllite目录,这里要依据理论目录操作哦:cd ${HOME}/downloads/samples/cplusplus/common/acllite
make
make install
运行实现截图:
好了,这次返回通用指标辨认样例工程的根目录下,再来试试:bash sample_build.sh
果然,编译胜利了!如下图所示:
编译实现后,会在out文件夹下生成可执行文件main。2. 批改scripts目录下的params.conf文件,配置样例的输出数据类型及后果展现类型。[base_options]
device_num=1 // Device数量
[device_0_options] //Device0的配置参数
inputType_0=pic // Device0的输出数据类型
outputType_0=pic // Device0的输入数据类型
inputDataPath_0=../data/pic // Device0的输出数据门路
outputFrameWidth_0=1280 //outputType_0为video时,须要配置此参数,代表输入视频的宽
outputFrameHeight_0=720 //outputType_0为video时,须要配置此参数,代表输入视频的高
[device_1_options] //Device1的配置参数
inputType_1=video
outputType_1=presentagent
inputDataPath_1=../data/car2.mp4
outputFrameWidth_1=2368
outputFrameHeight_1=1080
.......
参数阐明:device_num,示意运行此样例的Device数量,device_X_options示意每一个Device上的配置,其中X为Device ID。须要留神,device_num的优先级高于device_X_options的个数,例如,若device_num配置为1,但配置了两个Device的详细信息,即device_0_options与device_1_options,那么理论失效的只有device_0_options,若device_num配置为2,则device_0_options与device_1_options都会失效。inputType_X,示意DeviceX的输出数据类型,其中X为Device ID,此参数以后反对的配置项有:pic:示意输出数据为图片,以后此样例反对的图片格式为JPEG压缩图片video:示意输出数据为MP4视频文件rtsp:示意输出数据为rtsp流outputType_X,示意DeviceX的输入数据类型,其中X为Device ID,此参数以后反对的配置项有:pic:示意输入后果为图片video:示意输入后果为MP4视频文件presentagent:示意用PresentAgent展现推理后果inputDataPath_X:示意DeviceX的输出数据门路,其中X为Device ID,此参数的配置规定如下:若输出数据类型是图片,则填写图片所在文件夹的相对路径,只反对填入一个门路若输出数据类型是mp4视频文件,则填写视频文件的相对路径,只反对填入一个门路若输出数据类型是rtsp流,则填写rtsp流地址,只反对填入一个地址咱们这里就临时不做任何批改了。3. 注意事项若输入类型配置的为“presentagent”,运行可执行文件前您须要参考此步骤启动PresentServer,若配置的其余输入类型,则此步骤可跳过。配置PresentServer配置文件“present_start.conf”,配置文件参数如下:在通用指标辨认样例根目录下执行如下命令关上配置文件:cd scripts
vim present_start.conf
配置文件如下所示:[present_serer_options]
A socket server address to communicate with presenter agent
presenter_server_ip=192.168.1.2
The port of presenter agent and server communicate with
presenter_server_port=7006
the ip in presenter server view web url
presenter_view_ip=192.168.1.2
view entry label in presenter server view web
channel_name=multi_videos
the data type that send to presenter server from agent, 0:image, 1:video
content_type=1
[display]
display_channel=0
其中presenter_server_ip为数据发送IP,presenter_view_ip为网页展现IP,两者的IP须要保持一致,配置参考如下:对于Atlas 200 DK开发者板,请填写Atlas 200 DK的与windows主机通信的IP地址即可,例如“192.168.1.2”对于Atlas 300加速卡(例如,ai1s云端推理环境),请填写ai1s的内网IP地址。presenter_server_port:PresenterServer的拜访端口,请配置为PresentAgent的默认端口号7006即可。启动PresentServer服务。在通用指标辨认样例根目录下执行如下命令启动PresentServer:cd display
bash run_presenter_server.sh ../scripts/present_start.conf
其中run_presenter_server.sh为PresentServer的启动脚本,present_start.conf为上一步骤中批改的PresentServer的配置文件。其中PresentServer后,界面会提醒PresentServer服务所应用的IP地址及端口号。拜访PresentServer展现界面。在windows零碎中通过浏览器拜访PresentServer网页界面。对于Atlas 200 DK开发者板,请应用启动PresenterServer服务时提醒的URL拜访即可。对于Atlas 300加速卡(例如,ai1s云端推理环境):以内网的IP地址为“192.168.0.194”,公网的IP地址为“124.70.8.192”进行举例说明。启动PresentServer服务时提醒“Please visit http://192.168.0.194:7009 for display server”,用户须要将提醒URL中的内网IP地址“192.168.0.194”替换为公网IP地址“124.70.8.192”进行拜访,即须要拜访的URL为“http://124.70.8.192:7009”。期待PresentAgent传输数据给服务端,单击“Refresh“刷新,当有数据时相应Channel的Status会变成绿色。而后单击右侧对应的View Name链接,查看后果。阐明 :PresentServer以后仅反对显示前四路,如果业务有批改展现路数的须要,除代码开发适配外,还须要对网页UI代码进行批改:批改文件:display/presenterserver/display/ui/templates/view.html外围代码:
- 运行样例。cd ../out
./main
运行报错了,如图所示:
看看这个报错:[ERROR] The ../data/car1.mp4 is inaccessible
应该是输出的视频../data/car1.mp4没找到,我去看了一下,还真没有,甚至都没有data文件夹,看来代码并没有本人下载啊,那咱们还是先回到后面,批改下scripts/params.conf吧,先来看看该文件的内容:
哦,应该就是没有主动下载,那就先建个data文件夹,下载几张图片,在通用指标辨认样例工程的根目录下执行:mkdir data
cd data
wget https://modelzoo-train-atc.ob... --no-check-certificate
wget https://modelzoo-train-atc.ob... --no-check-certificate
wget https://modelzoo-train-atc.ob... --no-check-certificate
运行实现截图:
咱们顺便看看下载的这三个文件吧!不过很道歉的是,视频展现有点Bug,请大家海涵。car1.mp4car2.mp4car1.jpg如下图所示:
上面咱们来试试PresentServer展现,这时候要配置一下,请参考之前的 3 注意事项局部:咱们这利用的是ECS,须要在配置里填写ai1s的内网IP地址。可在ECS的服务台找到,如图所示:
之后要启动PresentServer服务:cd display
bash run_presenter_server.sh ../scripts/present_start.conf
启动后,界面会提醒PresentServer服务所应用的IP地址及端口号。
接下来就拜访看看,不过咱们用的是ECS,假如内网的IP地址为“192.168.0.194”,公网的IP地址为“124.70.8.192”。若启动PresentServer服务时提醒“Please visit http://192.168.0.194:7009 for display server”。则须要将提醒URL中的内网IP地址“192.168.0.194”替换为公网IP地址进行拜访,即须要拜访的URL为“http://124.70.8.192:7009”。
如果你遇到无法访问的状况,请批改下平安组入方向的平安规定,我全副放行了(不倡议这样做,这样对服务器来说不平安),就能显示了,当然,也可能是网络的提早,等一会可能就行。上面还是照例批改scripts目录下的params.conf文件,这里先测试下图片哈:[base_options]
device_num=1
[device0_options]
inputType_0=pic #pic ; video ; rtsp
outputType_0=presentagent #pic ; video ; presentagent
inputDataPath_0=../data/car1.jpg
outputFrameWidth_0=1280
outputFrameHeight_0=720
[device1_options]
inputType_1 = video
outputType_1 = presentagent
inputDataPath_1=../data/car2.mp4
outputFrameWidth_1=2368
outputFrameHeight_1=1080
之后运行:cd ../out
./main
能够看到运行胜利,然而还是没有显示,可能是一张图片不行?上面试试视频。
换成视频,照例批改scripts目录下的params.conf文件,这里先测试下图片哈:[base_options]
device_num=1
[device0_options]
inputType_0=video #pic ; video ; rtsp
outputType_0=presentagent #pic ; video ; presentagent
inputDataPath_0=../data/car1.mp4
outputFrameWidth_0=1280
outputFrameHeight_0=720
[device1_options]
inputType_1 = video
outputType_1 = presentagent
inputDataPath_1=../data/car2.mp4
outputFrameWidth_1=2368
outputFrameHeight_1=1080
之后再运行:cd ../out
./main
好消息,这次没问题了,而且速度很快,FPS在30左右,这时候咱们输出的是car1.mp4(1920 1080, 30FPS),设置的输入应该是(1280 720),这个性能很强啊:
对了,如果最开始没有,别放心,刷新一下,当下图中绿圈“√”呈现时候,点击右侧的multi_videos就会跳转了,就能看了:
上面试试car1.mp4(2368 * 1080, 30FPS),输入大小不变,此时scripts目录下的params.conf文件配置如下:[base_options]
device_num=1
[device0_options]
inputType_0=video #pic ; video ; rtsp
outputType_0=presentagent #pic ; video ; presentagent
inputDataPath_0=../data/car2.mp4
outputFrameWidth_0=1280
outputFrameHeight_0=720
[device1_options]
inputType_1 = video
outputType_1 = presentagent
inputDataPath_1=../data/car2.mp4
outputFrameWidth_1=2368
outputFrameHeight_1=1080
运行后果:
不得不说,真是太强了,速度简直没变动,FPS仍在30左右,阐明输出阶段的视频解码和解决很强,应该是DVPP + AIPP(应该是用于色与转换)的功绩,牛啊!最初奉上 Ascend 310的硬件状况,AI Core的利用率很高,稳固在68%左右,此时功耗大略12.8W,不过这个功耗很稳固,这个运行期间没什么变动,大概占了1GB的Memory吧,硬件资源占用不大,且利用率高,昇腾果然很强。
结语整体体验还是很晦涩的,华为云弹性云服务器ECS还真挺好用的,大大加重了我本地的硬件资源要求,让我能够轻松不便体验到昇腾的弱小算力,随时随地都能开发,只有有网络即可,搭配镜像应用就更完满了,这次基于共享镜像创立环境十分快,不必反复配置,间接进入开发,能够设想,如果是团队合作开发,效率肯定很高,不过最初无奈展现有点遗憾,期待更新代码,欠缺性能。如果须要开发新的利用,能够很轻松的在此基础上进行改良和优化,官网给了十分详尽的保姆级的教程,手把手教你进行模型替换和开发本人的利用,特地具体,能够设想官网工程师做了很多致力和工作,具体的文档让人赏心悦目,真是把简略留给开发者,把艰难留给本人了。道阻且长,将来可期,期待昇腾AI以向上之力,继续推动人工智能产业生态的建设和倒退,构建万物AI的美好世界。