1. 程式人生 > >【EdgeBoard體驗】開箱與上手

【EdgeBoard體驗】開箱與上手

簡介

市面上基於嵌入式平臺的神經網路加速平臺有很多,今天給大家帶來是百度大腦出品的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資料。

Xilinx Zynq MP First Stage Boot Loader 
Release 2017.4   Apr 23 2019  -  13:19:54
NOTICE:  ATF running on XCZU9EG/silicon v4/RTL5.1 at 0xfffea000, with PMU firmware
NOTICE:  BL31: Secure code at 0x0
NOTICE:  BL31: Non secure code at 0x8000000
NOTICE:  BL31: v1.3(release):47af34b
NOTICE:  BL31: Built : 04:10:38, Apr 23 2019


U-Boot 2017.01 (Apr 23 2019 - 12:20:25 +0800) Xilinx ZynqMP ZCU102 revB for OpenAi

I2C:   ready
DRAM:  2 GiB
EL Level:	EL2
Chip ID:	xczu9eg
MMC:   sdhci@ff160000: 0 (eMMC), sdhci@ff170000: 1 (SD)
reading uboot.env

可以看到Xilinx特有的FSBL資料,從中可以看出這個板子的基本配置應該是ZCU102的精簡版,配備了2G的DRAM。等待幾秒鐘後,kernel啟動完畢,串列埠內出現登入資訊。

PetaLinux 2017.4 edge_board /dev/ttyPS0
edge_board login: 

輸入使用者名稱root,密碼root,即可進入系統,出現了終端標識,代表啟動成功。

root@edge_board:~# 

總結:系統啟動還是比較容易的,不過在啟動過程中遇到一個問題,如果插著網線的話,U-Boot會選擇從網路啟動,會導致系統啟動偏慢。

配置SSH與SMB開發環境

EdgeBorad已經配置好了SSH終端以及SMB檔案共享伺服器,也可參照官方使用步驟:https://ai.baidu.com/docs#/EdgeBoard%20quick%20start/23cb95ae

1、在串列埠終端查看板子IP

root@edge_board:~# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0a:35:00:00:09  
          inet6 addr: fe80::20a:35ff:fe00:9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:39 errors:0 dropped:0 overruns:0 frame:0
          TX packets:122 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4964 (4.8 KiB)  TX bytes:25813 (25.2 KiB)
          Interrupt:30 

eth0:avahi Link encap:Ethernet  HWaddr 00:0a:35:00:00:09  
          inet addr:169.254.1.162  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:30 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          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、重新編譯模型,步驟如下:

 insmod /home/root/workspace/driver/fpgadrv.ko
 cd /home/root/workspace/sample/sample_easydl 
 // 如果沒有build目錄,建立一個
 mkdir build
 cd build
 rm -rf *
 cmake ..
 make

9、 程式設計成功之後,執行預測程式。

 a、在網路上隨意下載一張人物圖,修改名字為1.jpg 並替換           \\169.254.1.162\roothome\workspace\sample\sample_easydl\image 內的原有圖片。
 b.執行./paddle_edgeboard  

10、檢視圖片輸出結果。 開啟\169.254.1.162\roothome\workspace\sample\sample_easydl\build\result.jpg 和命令列預測出的四個目標一致,這裡由於沒有調整閾值所以檢測出來四個框。

總結:本次是建立了一個簡單的EasyDL模型並且資料集準備的也小,所以精度不是很高,從可用性和快速部署方面Edgeboard和EasyDL的結合可以幫助我們快速開發相關應用產品。

執行usb攝像頭輸入預測示例

1、連線裝置

2、依次執行以下命令

 // 檢視裝置檔案是否產生,正常是/dev/video2
 ls /dev/video*
 insmod /home/root/workspace/driver/fpgadrv.ko
 cd /home/root/workspace/sample/sample_usb
 mkdir build
 cd build
 rm -rf *
 cmake ..
 make

3、執行預測命令

 ./paddle_edgeboard  

   輸出結果如下:可以看到實時的檢測結果

總結:本次是通過命令列方式進行的USB攝像頭測試,並輸出每一幀的目標檢測結果,實時效能達到10FPS,效果還不錯。

執行海思ipc攝像頭輸入預測示例

1、連線裝置

2、依次執行以下命令

insmod /home/root/workspace/driver/fpgadrv.ko
sudo chmod +x /home/root/workspace/driver/media-ctl
/home/root/workspace/driver/media-ctl -v -f    '"a0010000.v_tpg":0[fmt:SRGGB8/1920x1080 field:none]'  

cd /home/root/workspace/sample/sample_bt1120
mkdir build
cd build
rm -rf *
cmake ..
make

3、執行預測命令

 ./paddle_edgeboard   

     輸出結果如下:可以看到實時的檢測結果,例程裡無視覺化圖片生成,下一步先測試一下攝像頭採集地效果。

4、檢視攝像頭採集圖片視覺化圖

 ls /dev/video*
 /dev/video0  /dev/video1
 insmod /home/root/workspace/driver/fpgadrv.ko
 sudo chmod +x /home/root/workspace/driver/media-ctl
 /home/root/workspace/driver/media-ctl -v -f    '"a0010000.v_tpg":0[fmt:SRGGB8/1920x1080 field:none]'
 cd /home/root/workspace/tools/bt1120/
 mkdir build
 cd build
 cmake ..
 make
 ./bt1120

總結:海思ipc攝像頭使用方法與USB基本一致,還是有個共同的缺點,沒有辦法進行實時的視覺化效果,無法直觀觀察到模型執行的效果。

感受

經過一週的試用,對EdgeBoard也有了初步的瞭解,總體來說:

優點

1、自帶環境豐富,無需配置交叉編譯環境即可使用。
2、預設的smb+ssh環境基本滿足了開發需求,實現了到手即用。
3、與EasyDL結合後,進行目標分類or目標檢測的嵌入式整合基本做到了傻瓜化,模型訓練容易上手。
4、從上手來看,EdgeBoard作為一個異構的ARM+FPGA加速平臺,基本上做到了無需瞭解嵌入式與FPGA的程度即可使用。

缺點

1、板子試用攝像頭,缺乏視覺化環境,如果可以實現一個小的流媒體伺服器或使用DP介面輸出,對模型效果的評估可能可以更加直觀。
2、風扇噪音較大,在室內長時間開發還是略微吵鬧,可能因為沒有開發調速策略導致。
3、部分win7系統修改系統策略後,仍然無法正常使用SMB連線目標板,希望後續版本可以移植SFTP後續會嘗試一下一些已有模型,深度挖掘一下這塊板子的功能。

作者:Lit