社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

机器学习迅速发展,边缘设备实现视觉AI应用

新机器视觉 • 1 年前 • 234 次点击  

点击下方卡片,关注“新机器视觉”公众号

视觉/图像重磅干货,第一时间送达

 

AI视觉应用


在过去十年,人工智能和机器学习算法有了长足发展。这些发展主要体现在视觉相关的应用上。2012年,AlexNet从ImageNet大规模视觉识别挑战赛胜出(ILSVRC),成为首个使用反向传播算法完成训练的深度神经网络。与传统的浅网络相比,性能产生近10%的成长,预测精度跻身前5位。


这个重大发展是一个转折点。从那时起,深度神经网络在性能/精度两个方面不断迎来巨大进展。2015年ResNet超越单个人类的分类能力,如图1所示。就各种目的和用途而言,现今神经网络的错误率已经可以与贝叶斯错误率相媲美,可视为解决计算机视觉应用中的图像分类问题。


图1 前5名预测准确性
(来源:https://devopedia.org/imagenet)


有鉴于如此令人振奋的结果,半导体制造商争相开发组件,支持深度学习部署的高度复杂运算需求。在未来十年,推断功能的商业化,特别是用深度学习实现的计算机视觉商业化,将继续高速成长。计算机视觉市场规模预计将以30%的年均复合成长率(CAGR)成长,到2025年将达到262亿美元。用深度学习实现的计算机视觉可以广泛地应用到各类产业市场,包括零售分析、智慧城市、执法、边境安全、机器人、医疗成像、作物收获优化、符号语言识别等。在不远的未来,AI将成为日常生活的内在组成要素,而且有些人认为这样的未来近在咫尺。


随着新颖的网络、层和量化技术被开发出来,采用固定内存架构的硬化Tensor加速器,不再能够满足未来的需求。这种状况已经在MobileNets的发展中表露无遗。在MobileNet骨干网络中,使用深度卷积能大幅降低运算-内存比。这对于通用CPU这样的组件来说非常理想。CPU一般受运算约束,但在若因架构受内存所限而导致效率有限,在某种程度上等于浪费宝贵的运算周期,就如数据中心中的待机服务器消耗能量一样。这种运算-内存比影响着部署网络时具体Tensor加速器架构的总效率。不幸的是,ASIC和ASSP Tensor加速器架构一般在组件试生产前,至少冻结一年。但在使用赛灵思推论技术时,则不会发生这种情况,该技术能随时间推移进行调整和优化,以支持神经网络架构的快速演进发展,进而确保低功耗、高效率。


本文介绍赛灵思产品组合中的Kria K26 SOM,及其在嵌入式视觉应用中的主要优势。


智能应用除了要求低延迟,还需要具备私密性、低功耗、安全性和低成本。以Zynq MPSoC架构为基础,产品如Kria K26 SOM提供稳定的单位功耗性能和更低的总体拥有成本,使其成为边缘设备的较佳选择。该产品具备硬件可配置能力,也就是说在K26上实现的解决方案是可扩展,同时具备未来兼容能力。


原始运算能力

就在边缘设备上部署解决方案而言,硬件必须拥有充足的算力,才能处理ML算法工作负载。人们可以使用各种深度学习处理单元(DPU)配置对Kria K26 SOM进行配置,还能根据性能要求,将最适用的配置整合到设计内。例如,运行在300MHz的DPU B3136的峰值性能是0.94TOPS。运行在300MHz的DPU B4096的峰值性能是1.2TOPS,几乎是Jetson Nano公布的峰值性能472GFLOPS的3倍。


支援更低精度数据类型

深度学习算法正在以极快的速度演进发展,INT8、二进制、三进制等更低精度的数据类型和客制化客制数据正在进入使用。GPU厂商难以满足当前的市场需求,因为他们必须修改/调整他们的架构,才能适应并支持客制的或者更低精度的数据类型。Kria K26 SOM支持全系列数据类型精度,如PF32、INT8、二进制和其他客制数据类型。此外,根据Mark Horowitz提供的数据点,以较低精度数据类型进行的运算功耗更低,比如在INT8上进行的运算的功耗比在 FP32 上进行的运算低一个数量级。如图2所示。


图2 视觉AI入门套件


低延迟与低功耗

一般情况下,对于任何实现在多核心CPU、GPU或者任何SoC上的应用设计而言,功耗可在总体上按如下估算大致进行划分:

• 核心=30%

• 内部存储器(L1、L2、L3)=30%

• 外部内存(DDR)=40%


这就是GPU功耗高的主要原因。为改善软件可程序设计能力,GPU架构需要频繁存取外部DDR。这种做法非常低效,有时候会对高带宽设计要求造成瓶颈。相反,Zynq MPSoC架构具有高能效,其可重配置能力便于开发者设计的应用减少或不必存取外部内存。这不仅有助于减少应用的总功耗,也透过降低端到端延迟改善响应能力。图3所示为一种典型的汽车应用架构,其中GPU与各个模块的通讯都透过DDR实现,而Zynq MPSoC组件采用的是在设计上避免存取任何DDR的高效率流水线。


图3 典型的GPU与MPSoC架构


透过灵活性实现低延迟

与数据流固定的GPU不同,赛灵思的硬件提供灵活性,以重新配置数据路径,进而实现较大吞吐量并降低延迟。此外,可程序设计的数据路径也降低了对批处理的需求,而批处理是GPU的一个重大不足,需要在降低延迟或提高吞吐量间做出权衡。Kria SOM的架构已在稀疏网络中展示巨大潜力。稀疏网络是当前ML应用中最热门的趋势之一。另一个重要特性是任意I/O连接,能进一步提高Kria SOM灵活性,其使K26 SOM在毋需主机CPU的情况下,可以连接到任何设备、网络或存储设备。


剪枝优势降低模型复杂度

赛灵思提供AI优化工具,能进一步增强运行在K26 SOM上的各种神经网络性能。本文提供的比较资料,到目前为止均是在未经优化或剪枝(Pruning)的原始模型上取得的。大多数神经网络通常都有过度参数化的情况,存在可以优化的严重冗余。赛灵思的AI优化器是一种模型压缩技术,该工具可在几乎不影响精度的情况下,将模型复杂度最多降低50倍。


本文引用赛灵思所做的研究案例。这是一个拥有117千兆次运算(Gops)的复杂SSD+VGG模型,其使用赛灵思AI优化器工具迭代进行优化。图4所示为使用AI优化器工具为模型剪枝带来的好处。


图4 模型剪枝结果


作为基线,该模型运算量为117Gops,运行在用两个B4096 DPU配置的Zynq UltraScale+ MPSoC上,最高FPS为18。经过数次剪枝迭代,数据显示复杂性明显下降,FPS相应增加,但未对精度(mAP)造成任何影响。在第11次迭代时,复杂性降低10倍,从117Gops降低到11.6Gops;性能提高5倍,从18FPS提高到103FPS;精度仅下降1.1%,从61.55mAP下降到60.4mAP。


到这里,本文已对Kria K26 SOM与GPU的原始性能对比做了介绍。了解这种原始性能在实际用例中的意义至关重要。实际用例结构复杂,涉及流水线中的其他模块,如任何AI-ML应用所需的预处理和后处理组件。在这类应用中,最大吞吐量由流水线中性能最低的组件决定。


实际应用性能比较

为了分析实际用例,本文选择一种准确检测和识别车辆牌照、使用机器学习的应用。赛灵思已与Uncanny Vision合作,旨在为市场提供较佳的汽车牌照(车牌)识别(ANPR)解决方案。这种应用已得到世界上众多城市的广泛采用,用于智慧城市的建设中。ANPR的主要应用包括自动收费管理系统、高速公路监测系统、停车场门禁和安全门门禁。ANPR应用是一种使用AI的流水线,内含影片影像译码、图像预处理、机器学习(检测)和OCR字符识别,如图5所示。


图5 ALPR应用的处理区块


ANPR AI盒应用一般从现货IP摄影机摄入一个到多个H.264或H.265编码的RTSP流并进行译码(解压缩)。译码的影像帧在被机器学习算法摄入前,先进行预处理(通常是缩放、剪裁、色彩空间转换和归一化)。就高性能商用ANPR实现方案而言,通常需要多级AI流水线。第一个网络的作用是检测和定位帧内的车辆。这项操作中还结合跨多帧追踪车辆轨迹的算法和选择最佳帧曝光,为OCR优化图像画质的算法。通常先剪裁和缩放车辆感兴趣区域(ROI),然后馈入负责定位车牌的次级检测网络。


与车牌ROI有关的像素经过剪裁和缩放,最终被馈送到负责实现OCR预测的最后一个神经网络。最后一级提供的元数据预测是压印或印刷在车牌上或是以其他方式可见的字母数字字符。为了进行比较,已部署在GPU和CPU上的Uncanny Vision ANPR应用,为实现在Kria KV260视觉AI入门套件上的部署进行了优化。结果证明,将Uncanny Vision算法在Kria SOM上进行部署后,打破100美元的价格壁垒,而且性能是Uncanny Vision先前同类SOM产品的2到3倍。


这些数据说明,Uncanny Vision的ANPR流水线在针对KV260入门套件进行优化后,实现超过33fps的吞吐量,这种较佳的性能水平为ANPR整合商和OEM厂商提供优于竞争对手的开发灵活性。每多安装一个AI盒都会直接影响安装成本,还不考虑相关的布线和导管成本。


根据安装的具体情况,设计师可以牺牲帧率来换取更大的每盒处理流数。对于停车场安装(如停停走走、拦车杆和自由通行),推断和捕获帧率通常要达到10fps才可满足要求,还能可靠地采集车牌元数据。这便于设计师将多个摄影机流聚合到单个AI盒,进而节省每个闸门的总体资本支出(CAPEX)和营运成本(OPEX)。在高速应用中,如高速公路收费和执法,较高的帧率确保能够准确可靠地检测和识别高速行驶中的车辆。在33fps的吞吐量下,与当今市场上的解决方案相比,K26 SOM能够更加可靠地为识别和证据收集提供支持。


大多数ANPR系统都需要在环境严苛的条件下运行。I级的K26 SOM专为严酷环境开发,支持-40至100℃的工作温度范围和三年保固。在采用K26I SOM后,与市场解决方案相比,ANPR系统的总体拥有成本显著降低。


Uncanny Vision的ANPR应用说明,K26 SOM不仅在标准性能比较中表现较佳,并且为开发者提供加速整体AI和视觉流水线所需的原始性能时,效率也更高。透过对比,在标准的基准检验领域之外,竞争解决方案效率较低且功耗较高。


赛灵思透过开发各种工具、库、框架和参考示例,为方便应用做了大量工作,大幅简化软件开发者的开发工作。


AI开发工具包

Vitis AI开发环境由赛灵思Vitis AI开发工具包构成,支持该公司SoC、Alveo加速器卡以及Kria SOM。其组成包括经优化的工具、库和预训练模型,为开发者部署客制模型铺平道路。其在设计时便充分考虑到高效率和易用性,在组件上释放AI加速的潜力。


此外,Vitis AI整合Apache开源TVM项目,TVM依托开源小区和各类大型商业用户提供的输入,提供多样化、紧跟时代、可扩展的机器学习框架支持。TVM自动运行图形分割和图形编译,基本上确保能够部署来自任何框架的网络运算符,即使该运算符并非原生地受到Vitis AI开发环境的支持。


事实上在TVM环境中,任何运算符都能编译到x86和Arm目标组件上。这意谓着开发者可以迅速地部署模型,在赛灵思DPU上为Vitis AI开发环境支持的子图加速,同时在CPU上部署图形的其余部分。


SDK

PetaLinux是一种针对赛灵思SoC的嵌入式Linux软件开发套件(SDK)。PetaLinux使用Yocto,是一种为构建、开发、测试和部署嵌入式Linux系统提供一切必要内容的开发工具。


PetaLinux工具包含:

• Yocto可扩展SDK(eSDK)

• 赛灵思软件命令行工具(XSCT)和工具链

• PetaLinux CLI工具


视觉库

Vitis视觉库用户能在平台上,开发和部署加速计算机视觉和图像处理应用,同时在应用层面操作。这些开源库功能提供使用OpenCV的接口,但专为赛灵思平台的高性能和低资源耗用进行了优化。此外,它们也提供灵活性,可以满足用户视觉系统的自适应吞吐量需求。


影像分析SDK

影像分析SDK是一种建构在开源且被广泛采用的GStreamer上的应用框架。这种SDK设计上支持跨所有赛灵思平台的开发,包括FPGA、SoC、Alveo卡以及Kria SOM。使用该SDK,开发者毋需深入掌握FPGA复杂的底层技术,就能装配视觉分析和影像分析流水线。


此外,该SDK提供的API让用户能够快速开发以GStreamer插件形式存在,能整合至SDK框架的高效客制加速核心。无论是否使用客制加速核心,一般的嵌入式开发者都能简便轻松地装配客制加速流水线。


加速应用增强功能

加速应用是Kria SOM解决方案的基本架构。这些应用是完整、可量产的端到端解决方案,专门支持常见的视觉用例。赛灵思加速应用在可程序设计逻辑区域包含一个预优化的视觉流水线加速器。开发者可按原状使用,也可以进一步优化满足应用的特定需求。借助具有高可靠性的软件协议堆栈,只修改韧体或倒换AI模型,用户就能轻松地客制和增强解决方案功能。


K26 SOM在实际应用下的性能较稳定,提供显著的性能优势。该产品的底层硬件功能强大,有助于在降低延迟和减少功耗的情况下为完整的应用提速。对于ANPR应用,K26 SOM性能较佳,凭借更高的吞吐量,用户能够在每个组件上处理更多,进而降低总体成本。其具有更高吞吐量、更低延迟、更小功耗等优势,同时能够为满足未来需求提供灵活性和可扩展能力,Kria K26 SOM是在边缘设备上实现使用视觉AI应用的较佳选择。


声明:部分内容来源于网络,仅供读者学习、交流之目的。文章版权归原作者所有。如有不妥,请联系删除。


—THE END—

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/161599
 
234 次点击