应用Xilinx DNN开拓职员套件在边缘停止机械学习
>2019-08-10 15:40:05 来源:EEFOCUS

介绍
基于视觉的机械学习推理是一个热门话题,如今边缘计算普遍用于从车辆检测到运动跟踪和物体辨认的一系列应用。

 

因为卷积神经网络的复杂性,实现机械学习推理可能是计算密集型的。这使得应用传统计算架构实现高帧速率具有挑衅性。像Zynq和Zynq MPSoC如许的芯片系囊构体系将高机能ARM处理器与可编程逻辑相结合,供给上宰盘岣呋艿慕饩黾苹。

 

曩昔的挑衅是创建可编程逻辑实现,该实现易于应用而且可应用常见的机械学习流程,例如Caffe和TensorFlow。

 

深度神经网络开拓套件
为了解决应用通用行业框架并在可编程逻辑中实现加快的必要。Deephi(由Xilinx拥有)开拓了深度神经网络开拓套件(DNNDK)。

 

DNNDK基于C / C ++ API,允许咱咱咱们应用通用的行业模范框架,和流行的网络,包含VGG,ResNet,GoogLeNet,YOLO,SSD和MobileNet。

 

深度学习处理器单位(DPU)是DNNDK的中央,它可以或许或许加快深度学习算法。在咱咱咱们的Zynq或Zynq MPSoC体系上,DPU位于可编程逻辑中。为了支撑分歧的深度学习加快,可以或许或许实现几种分歧的DPU变体。

 

DPU的布局

 

应用DNNDK在Zynq / Zynq MPSoC中支配AI / ML应用程序的基本阶段是:

压缩神经网络模子? - 采纳网络模子(prototext),训练权重(Caffe)并天生应用INT8表示的量化模子。为此,通常还必要一个小型输入训练集 - 这包含100到1000个图像。
编译神经网络模子?- 这将天生DPU实例化所需的ELF文件。它还将辨认DPU不支撑的网络元素,以便在CPU上实现。


应用DNNDK API创建程序? - 创建DPU内核后,咱咱咱们如今可以或许或许构建管理输入和输入的应用程序,履行DPU内核性命周期管理和DPU任务管理。在此阶段,咱咱咱们还必要在CPU上实现DPU不支撑的网络元素。


编译混合DPU应用程序?- 一旦应用程序准备就绪,咱咱咱们就可以或许或许运行混合编译器,它将天生CPU代码并将其链接到可编程逻辑中的DPU的ELF。


在咱咱咱们的偏向上运行混合DPU可履行文件。

 

混合编译


为了履行这五个步骤,DNNDK供给了几种分歧的对象,这些对象在主机和偏向之间分开。

 

在主机方面,咱咱咱们供给如下对象:

 

DECENT? - 深度压缩对象,预先压缩网络模子。
DNNC ?- 深度神经网络编译器,履行网络编译。DNNC有一个子组件DNNAS - 深度神经网络汇编器,它为DPU天生ELF文件。


在偏向方面:

 

N2Cube ?- 这是DPU运行时引擎,供给DNNDK应用程序的加载,调剂和资源分派。N2Cube的中央组件包含DPU驱动程序,DPU加载程序和DPU跟踪程序。
DExplorer ?- 在运行时供给DPU信息。
DSight ?- 阐发对象,供给基于Dtracer信息的可视化数据。

 

安排


在这个项目中,咱咱咱们将看看如何在Ultra96和ZCU104板上启动和运行示例。

 

一旦咱咱咱们启动并运行,咱咱咱们将源酥一个示例停止一些简略的修改,以便咱咱咱们可以或许看到它从实时视频源运行。

 

设置设备摆设
在咱咱咱们看到第一个示例启动并运行之前,咱咱咱们必要从Xilinx网站下载DNNDK。一旦咱咱咱们下载DNNDK,下一步便是提取压缩文件。

 

 

在解压缩的目录中,您将注意到如下目录

  • Common - 包含很多用于分类的图像
  • Host_x86 - 主机开拓对象,例如DECENT和DNNC
  • DP-8020 / DP-N1 / ZCU102 / ZCU104 / Ultra96 - 这些是参考定名板的对象链和示例应用程序。


要装配对象链和电路板,咱咱咱们必要首先从Xilinx Deephi 网站下载感兴趣的电路板的linux映像。

 

下载完这些后,咱咱咱们可以或许解压缩图像并将图像写入SD卡,用于Ultra96或ZCU104(确保应用正确的图像)。

 

为此,我应用了Disk Imager或Etcher等程序。

 

 

一旦电路板启动了映像,咱咱咱们还必要可以或许或许在运行时将下载的DNNDK示例和对象传输到电路板。

 

为此,咱咱咱们将应用MObaXTerm,它允许咱咱咱们在衔接到网络时将信息传输到偏向板。

 

MObaXTerm

 

接下来要做的便是设置电路板,这两个过程非常相似,只需稍微改编一下Ultra96及其WIFI衔接即可。

 

设置ZCU104
咱咱咱们要检查的第一块板是ZCU104,一张SD卡,图像准备就绪。仔细检查ZCU104上的启动情势开关并打开电路板。

 

确保ZCU104衔接到以太网衔接,几秒钟后您将看到启动过程实现。

 

如果在任什么时候候您被请求输入用户名和密码,则它咱咱们都是root用户。

 

在ZCU104/ultra96 上启动的Linux

 

一旦Linux映像启动并运行,首先要确定分派的IP地址。咱咱咱们可以或许或许颠末过程输入命令来实现此操纵:

ifconfig

 

分派IP地址


如今电路板已启动并运行并衔接到网络,咱咱咱们可应用mobaXterm来传输ZCU 104的对象和示例。

 

在mobaXterm中输入命令:

scp -r /ZCU104 root@<ZCU104 IP address>:~/


这会将文件从开拓机械传输到ZCU104。

传输文件

 

然后,咱咱咱们可应用SSH或串行终端装配DNNDK及其示例。

 

应用终端,您会注意到装置了一个名为ZCU104的新目录。在这里,您将看到装置脚本应用该命令装置脚本:

./install.sh

 

装置DNNDK


这将开端装配过程,如下所示

 

开端装配

 

作为装配过程的一部分,您将看到Linux映像从新启动

在DNNDK装配期间从新启动ZCU04 Linux映像

 

咱咱咱们如今可应用为特定板供给的示例应用程序。

 

但是,对付每个示例,咱咱咱们首先必要编译它,这是颠末过程调用您盼望看到的示例中的make函数来实现的。

 

 

设置Ultra96
咱咱咱们以与ZCU104类似的办法设置Ultra96但是,咱咱咱们必要对WIFI停止一些调剂。

 

一旦初始Ultra96映像启动就能装配DNNDK对象和应用程序,咱咱咱们必要先衔接到WIFI。

 

为此,咱咱咱们必要应用USB集线器,它允许咱咱咱们衔接到鼠标和键盘,并将Mini DisplayPort输入衔接到合适的监视器。

 

打开Ultra96电源,您将看到它启动到桌面环境

DNNDK桌面

 

要衔接到WIFI,请单击菜单,然后抉择Internet-> Wicd Network Manager。这将打开列出统统可用网络的网络管理。

 

可用网络

 

抉择所需的一个,然后单击“衔接”,如果有加密,则会收回警告并请求输入密码。

 

安全设置设备摆设

 

输入密码后,单击“确定”,然后单击“衔接”。衔接到网络可能必要几秒钟。

 

咱咱咱们可以或许再次应用mobaXterm上传Ultra96目录,然后像咱咱咱们为ZCU104那样在板上装置对象和应用程序:

scp -r /Ultra96 root@<Ultra6 IP address>:~/

 

上传Ultra96文件


咱咱咱们再次颠末过程运行命令装配Ultra96对象和应用程序:

./install.sh

 

咱咱咱们如今准备开端与咱咱咱们的董事会合作。对付本项偏向其余部分,咱咱咱们将重点存眷Ultra96,但应用ZCU104是完全相同的。

 

构建和运行示例
咱咱咱们可应用Ultra96上的鼠标,键盘和终端窗口在Ultra96上运行DNNDK示例。

 

如上所述,为了运行每个示例,咱咱咱们首先必要颠末过程在应用程序目录中运行Make来实现它。

 

但是,咱咱咱们可能还想应用其余对象,这些对象随DNNDK一路供给。

 

咱咱咱们可应用dexploerer来获得无关PL中包含的中央的信息。输入如下命令将列出:

dexplorer -w.


此命令将显示PL中实现的DPU的范例范例,咱咱咱们可以或许或许在下面的ZCU104和Ultra96实现中看到

 

ZCU 104中的B4096F DPU

Ultra96中的B1152F DPU

 

咱咱咱们还可应用status命令,它将列出DPU的状况:

dexplorer-s

DPU状况


另外一个有趣的命令是profiling命令,这将创建阐发信息。

 

要开端阐发,咱咱咱们运行命令:

dexplorer -m profile


应用程序实现后,咱咱咱们可应用如下命令将设置设备摆设文件信息转换为HTML。每个跟踪将具有分歧的PID,详细取决于过程ID。

dsight -p dpu_trace_[PID].prof


从新运行应用程序示例时,咱咱咱们还将捕获设置设备摆设文件信息。

 

运行ADAS示例
让咱咱咱们举个例子来运行Ultra96 ADAS示例。要运行它,咱咱咱们必要应用如下命令:

cd Ultra96/samples/adas_detection
make
dexplorer -m profile
./adas_detection video/adas.avi


这将运行应用程序,卸载元件到可编程逻辑中的DPU。

 

当咱咱咱们运行此应用程序时,桌面上会出现一个视频,您将看到在检测到并辨认和跟踪汽车的环境下运行的视频


应用程序实现后,咱咱咱们可以或许颠末过程应用该命令将其转换为HTML来检查设置设备摆设文件应用程序:

dsight -p dpu_trace_[PID].prof


在运行ADAS实现时捕获的设置设备摆设文件信息上运行此结果将天生下图。

ADAS检测设置设备摆设文件信息

 

修改姿势示例以应用实时源
跟着应用程序和对象全体在咱咱咱们的主板上运行,咱咱咱们可以或许开端开拓自己的应用程序。为此咱咱咱们有两个抉择,一个应用TensorFlow / Caffe,DECENT和DNNC训练新的网络权重,或许咱咱咱们可以或许调剂此中一个示例。

 

咱咱咱们将调剂pose_detection算法以应用直播流而不是视频。这是一个非常简略的修改,咱咱咱们可以或许颠末过程如下更改来实现。

 

更新视频捕获的声明,如下所示:

VideoCapture cap(0);


修改重要功效如下:

int main(int argc, char **argv) {
   // Attach to DPU driver and prepare for running
   dpuOpen();
   if (!cap.isOpened()) {
      return -1;
   }
cap.set(CV_CAP_PROP_FRAME_WIDTH,640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT,320);
   // Run tasks for SSD
   array<thread, 4> threads = {thread(Read, ref(is_reading)),
                               thread(runGestureDetect, ref(is_running_1)),
                               thread(runGestureDetect, ref(is_running_1)),
                               thread(Display, ref(is_displaying))};
   for (int i = 0; i < 4; ++i) {
       threads[i].join();
   }
   // Detach from DPU driver and release resources
   dpuClose();
   cap.release();
   return 0;
}
 
修改Read功效,如下所示:

void Read(bool &is_reading) {
   while (is_reading) {
       Mat img;
       if (read_queue.size() < 30) {
           if (!cap.read(img)) {
               cout << "Finish reading the video." << endl;
               is_reading = false;
               break;
           }
           mtx_read_queue.lock();
           read_queue.push(make_pair(read_index++, img));
           mtx_read_queue.unlock();
       } else {
           usleep(20);
       }
   }
}

 

然后咱咱咱们可应用pose命令在pose_detection目录中再次编译应用程序:

make
dexplorer -m profile
./pose_detection


在Ultra96上运行它并让我的妻子为测试做了一些建模。

 

 


末了要做的是观察小我资料信息

实时馈送姿势检测的设置设备摆设文件信息

 

结论
该项目有望为DNNDK供给一个很好的介绍,和咱咱咱们如何轻松地启动和运行它。如果咱咱咱们乐意,咱咱咱们可以或许调剂现有的应用程序。

 

如果咱咱咱们想要训练一个新的网络停止支配,咱咱咱们将很快在另外一个项目中停止检查。

 

如果你对这个项目感兴趣,想获得完备信息请访问:

https://www.hackster.io/adam-taylor/machine-learning-at-the-edge-with-xilinx-dnn-developer-kit-68c672

作者简介
李昭
李昭

南京电子资讯网编辑。热爱酷炫电子产品。

存眷南京电子资讯网微信(ee-focus) 无废话,无谎话 有立场,有温度
持续阅读
更多资讯
上拉可加载更多
————  --^o^--  ————
友情链接:聚生IT新闻网  养殖致富网  纺织服装新闻网  科技日报网  电工之家网  节能消费领跑信息网  中国调研报告网  黑马机械设备信息网  无忧无虑中学语文网  苗木花卉网