摘要:简介 市面上基于嵌入式平台的神经网络加速平台有很多,今天给大家带来是百度大脑出品的 EdgeBoard。按照官网文档 的介绍,EdgeBoard 是基于 Xilinx Zynq Ultrascale+ MPSoC 系列芯片打造的一款深度学习加速套件,也就是比较常 见的利用 FPGA 进行加速的方案。 开箱 收到的 EdgeBoard,是一个淡黄的纸盒子,将其打开,里面 ...

 

作者 : Litchll

 


简介


市面上基于嵌入式平台的神经网络加速平台有很多,今天给大家带来是百度大脑出品的 EdgeBoard。按照官网文档的介绍,EdgeBoard 是基于 Xilinx Zynq Ultrascale+ MPSoC 列芯片打造的一款深度学习加速套件,也就是比较常见的利用 FPGA 进行加速的方案。

 

开箱


收到的 EdgeBoard,是一个淡黄的纸盒子,将其打开,里面共有四样物品,分别为

  • EdgeBoard 本体一块,相比官网上的图片,多出了散热器、风扇以及起到保护作用的亚克力板
  • 已经刷好固件的 SD 卡一张
  • 12V2A 适配器一个,接头为 2P 间距为 3.81 的接线端子
  • MicroUSB 线一条

 

EdgeBoard 板子做工不错,按照官网资料,他分为主板和电源板两部分,加上散热器后组合后的长宽高为 120×80×50。板子具体的硬件资源就不过多介绍了,官方目前也没公布具体硬件框图。

 

启动系统


将配套 SD 卡插入电脑,可以发现他已经烧录好了固件,应该是可以直接启动的(官方资料内没有找到烧录 SD 卡的方式,如果这张卡丢了的话……)

 

1. 将 SD 卡插入 SD 卡槽,使用 MicroUSB 线连接电脑,设备管理器里会出现 USB to UART 的设备。

 

 

2. 使用任意串口终端打开串口(以 Xshell 为例),COM 口号设置为设备管理所看到的串口号,其余设置如下

  • Band Rate: 115200
  • Data Bits:8
  • Stop Bits:1
  • Parity: None
  • Flow Control: None

 

3. 将接线端子连接到电源插座,接通电源适配器,可以看到电源灯亮起,风扇传来了怒吼,这个风扇实测转速为 6000 转,长时间调试时候,噪音略微明显。上电后,可以看到串口终端内显示出了 boot 数据。

 

 


	
  1. Xilinx Zynq MP First Stage Boot Loader 
  2. Release 2017.4 Apr 23 2019 - 13:19:54 
  3. NOTICE: ATF running on XCZU9EG/silicon v4/RTL5.1 at 0xfffea000, with PMU firmware 
  4. NOTICE: BL31: Secure code at 0x0 
  5. NOTICE: BL31: Non secure code at 0x8000000 
  6. NOTICE: BL31: v1.3(release):47af34b 
  7. NOTICE: BL31: Built : 04:10:38, Apr 23 2019 
  8. U-Boot 2017.01 (Apr 23 2019 - 12:20:25 +0800) Xilinx ZynqMP ZCU102 revB for OpenAi 
  9. I2C: ready 
  10. DRAM: 2 GiB 
  11. EL Level: EL2 
  12. Chip ID: xczu9eg 
  13. MMC: sdhci@ff160000: 0 (eMMC), sdhci@ff170000: 1 (SD) 
  14. reading uboot.env 

 

可以看到 Xilinx 特有的 FSBL 数据,从中可以看出这个板子的基本配置应该是 ZCU102 的精简版,配备了 2G 的 DRAM。等待几秒钟后,kernel 启动完毕,串口内出现登录信息。

 


	
  1. PetaLinux 2017.4 edge_board /dev/ttyPS0 
  2. edge_board login: 

输入用户名 root,密码 root,即可进入系统,出现了终端标识,代表启动成功。


	
  1. root@edge_board:~# 

 

总结:系统启动还是比较容易的,不过在启动过程中遇到一个问题,如果插着网线的话,U-Boot 会选择从网络启动,会导致系统启动偏慢

 

配置 SSH 与 SMB 开发环境


EdgeBorad 已经配置好了 SSH 终端以及 SMB 文件共享服务器,也可参照官方使用步骤:https://ai.baidu.com/docs#/EdgeBoard%20quick%20start/23cb95ae

1. 在串口终端查看板子 IP


	
  1. root@edge_board:~# ifconfig 
  2. eth0 Link encap:Ethernet HWaddr 00:0a:35:00:00:09 
  3. inet6 addr: fe80::20a:35ff:fe00:9/64 Scope:Link 
  4. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
  5. RX packets:39 errors:0 dropped:0 overruns:0 frame:0 
  6. TX packets:122 errors:0 dropped:0 overruns:0 carrier:0 
  7. collisions:0 txqueuelen:1000 
  8. RX bytes:4964 (4.8 KiB) TX bytes:25813 (25.2 KiB) 
  9. Interrupt:30 
  10. eth0:avahi Link encap:Ethernet HWaddr 00:0a:35:00:00:09 
  11. inet addr:169.254.1.162 Bcast:169.254.255.255 Mask:255.255.0.0 
  12. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
  13.  

	
  1. Interrupt:30 
  2. lo Link encap:Local Loopback 
  3. inet addr:127.0.0.1 Mask:255.0.0.0 
  4. inet6 addr: ::1/128 Scope:Host 
  5. UP LOOPBACK RUNNING MTU:65536 Metric:1 
  6. RX packets:2 errors:0 dropped:0 overruns:0 frame:0 
  7. TX packets:2 errors:0 dropped:0 overruns:0 carrier:0 
  8. collisions:0 txqueuelen:1 
  9. RX bytes:140 (140.0 B) TX bytes:140 (140.0 B) 

2. 使用串口读出来的 IP,本例中为 169.254.1.162 即可连接上 SSH 与 SMB。本地输入:\169.254.1.162 即可访问 edgeboard 文件。Win7 系统需要注意一些配置,具体请查看 Edgeboard 使用说明。

 

 

总结:环境都配置好了,上手还是很简单,在用户目录下发现存在 .xfce4 的配置文件,莫非带了图形界面?手头没有 DP 线,后面会试试。

 

EasyDL+EdgeBoard 搭建带性别检测的人脸识别模型


Edge 的卖点之一,就是支持导入 EasyDL 生成的模型,EasyDL 平台是一个使用几十、几百张图片就能训练出一个效果还不错的模型训练平台,官方宣称,对于不了解深度学习用户,可以仅仅依靠可视化操作即可完成深度学习训练。

 

1. 登录 EasyDl 官网创建物体检测模型 http://ai.baidu.com/easydl/。

 

 

2. 创建训练的数据集,本次测试在百度新闻里抓取了 20 张包含人脸的图片。

 

 

3. 数据集标注,Easydl 支持在线标注,只需选中图片用鼠标在图片上拉出一个框即可。

 

 

4. 数据集标注完成后即可训练模型,由于要测试的模型是基于 SSD 的目标检测,所以此次选中精度较低模型。(高精度是基于 RetinaNet 的模型),点击开始训练,大概需要 30 分钟左右,即可训练完成。

 

 

5. 在线校验模型,训练完成后点击校验模型,可以查看测试模型训练效果。此次发现误识别一个女生为男生,猜测大概是训练集太小,不过人脸识别功能到是没问题。

 

 

6. 模型导出:由于 Easydl 还没正式发布模型导出功能,因此此次是通过联系后台人员导出的模型。7. 将 Easydl 导出的模型,通过 SMB 传输到 EdgeBoard 内替换原有的 params、model.encrypted:

 

\169.254.1.162\roothome\workspace\sample\sample_easydl\model

 

 

8. 重新编译模型,步骤如下:


	
  1. insmod /home/root/workspace/driver/fpgadrv.ko 
  2. cd /home/root/workspace/sample/sample_easyd 
  3. // 如果没有 build 目录,创建一个 
  4. mkdir build 
  5. cd build 
  6. rm -rf * 
  7. cmake .. 
  8. make 

9. 编程成功之后,运行预测程序。


	
  1. a、在网络上随意下载一张人物图,修改名字为 1.jpg 并替换 
  2. \\169.254.1.162\roothome\workspace\sample\sample_easydl\image 内的原有图片。 
  3. b. 执行 ./paddle_edgeboard 

10. 查看图片输出结果。 打开 \169.254.1.162\roothome\workspace\sample\sample_easydl\build\result.jpg 和命令行预测出的四个目标一致,这里由于没有调整阈值所以检测出来四个框。

总结:本次是创建了一个简单的 Easydl 模型并且数据集准备的也小,所以精度不是很高,从可用性和快速部署方面 Edgeboard 和 Easydl 的结合可以帮助我们快速开发相关应用产品。

 

运行 usb 摄像头输入预测示例


通过官方文档,发现板子支持 USB 摄像头以及海思的 IPC 摄像头接口,翻箱倒柜找到了两个摄像头接下来我们就试试用 USB 摄像头进行实时的输入检测。

 

1. 连接设备

直接将摄像头插入到底板的 USB 口上即可

 

2. 在开发板中,附带了 usb 摄像头的驱动与示例工程,依次执行以下命令

 


	
  1. // 查看设备文件是否产生,正常是 /dev/video2 
  2. ls /dev/video* 
  3. insmod /home/root/workspace/driver/fpgadrv.ko 
  4. cd /home/root/workspace/sample/sample_usb 
  5. mkdir build 
  6. cd build 
  7. rm -rf * 
  8. cmake .. 
  9. make 

 

3. 执行预测命令


	
  1. ./paddle_edgeboard 

输出结果如下:可以看到实时的检测结果,输出格式为目标的位置,如下图所示

 

总结:本次是通过命令行方式进行的 USB 摄像头测试,并输出每一帧的目标检测结果,实时性能达到 10FPS,效果还不错。但是随机附带的例程并没有实时可视化的功能,我们没能看到实际预测的结果,比较遗憾。

 

运行海思 ipc 摄像头输入预测示例


1. 连接设备,将海思 IPC 摄像头排线插入插槽内,上电后,摄像头电源指示灯会一并亮起

2. 依次执行以下命令


	
  1. insmod /home/root/workspace/driver/fpgadrv.ko 
  2. sudo chmod +x /home/root/workspace/driver/media-ctl 
  3. /home/root/workspace/driver/media-ctl -v -f '"a0010000.v_tpg":0[fmt:SRGGB8/1920x1080 
  4. field:none]' 
  5. cd /home/root/workspace/sample/sample_bt1120 
  6. mkdir build 
  7. cd build 
  8. rm -rf * 
  9. cmake .. 
  10. make 

 

3. 执行预测命令


	
  1. ./paddle_edgeboard 

输出结果如下:可以看到实时的检测结果,例程里无可视化图片生成,下一步先测试一下摄像头采集地效果。

4. 查看摄像头采集图片可视化图


	
  1. ls /dev/video* 
  2. /dev/video0 /dev/video1 
  3. insmod /home/root/workspace/driver/fpgadrv.ko 
  4. sudo chmod +x /home/root/workspace/driver/media-ctl 
  5. /home/root/workspace/driver/media-ctl -v -f '"a0010000.v_tpg":0[fmt:SRGGB8/1920x1080 
  6. field:none]' 
  7. cd /home/root/workspace/tools/bt1120/ 
  8. mkdir build 
  9. cd build 
  10. cmake .. 
  11. make 
  12. ./bt1120 

总结:海思 ipc 摄像头使用方法与 USB 基本一致,还是有个共同的缺点,没有办法进行实时的可视化效果,无法直观观察到模型运行的效果。

 

感受


经过一周的试用,对 EdgeBoard 也有了初步的了解,总体来说:

优点

   1. 自带环境丰富,无需配置交叉编译环境即可使用。

   2. 默认的 smb+ssh 环境基本满足了开发需求,实现了到手即用。

   3. 与 EasyDL 结合后,进行目标分类 or 目标检测的嵌入式集成基本做到了傻瓜化,模型训练容易上手。

   4. 从上手来看,EdgeBoard 作为一个异构的 ARM+FPGA 加速平台,基本上做到了无需了解嵌入式与 FPGA 的程度即可使用

缺点

   1. 板子试用摄像头,缺乏可视化环境,如果可以实现一个小的流媒体服务器或使用 DP 接口输出,对模型效果的评估可能可以更加直观。

   2. 风扇噪音较大,在室内长时间开发还是略微吵闹,可能因为没有开发调速策略导致。

   3. 部分 win7 系统修改系统策略后,仍然无法正常使用 SMB 连接目标板,希望后续版本可以移植 SFTP 后续会尝试一下一些已有模型,深度挖掘一下这块板子的功能