簡介
市面上基于嵌入式平臺的神經網絡加速平臺有很多,今天給大家帶來是百度大腦出品的EdgeBoard。按照官網文檔的介紹,EdgeBoard是基于Xilinx Zynq Ultrascale+ MPSoC列芯片打造的一款深度學習加速套件,也就是比較常見的利用FPGA進行加速的方案。
開箱
收到的EdgeBoard,是一個淡黃的紙盒子,將其打開,里面共有四樣物品,分別為
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 oothomeworkspacesamplesample_easydlmodel
8. 重新編譯模型,步驟如下:
- insmod?/home/root/workspace/driver/fpgadrv.ko?
- cd?/home/root/workspace/sample/sample_easyd?
- //?如果沒有build目錄,創建一個?
- mkdir?build?
- cd?build?
- rm?-rf?*?
- cmake?..?
- make?
9. 編程成功之后,運行預測程序。
- a、在網絡上隨意下載一張人物圖,修改名字為1.jpg?并替換?
- \169.254.1.162 oothomeworkspacesamplesample_easydlimage?內的原有圖片。?
- b.執行./paddle_edgeboard?
10. 查看圖片輸出結果。 打開169.254.1.162 oothomeworkspacesamplesample_easydluild esult.jpg和命令行預測出的四個目標一致,這里由于沒有調整閾值所以檢測出來四個框。
總結:本次是創建了一個簡單的Easydl模型并且數據集準備的也小,所以精度不是很高,從可用性和快速部署方面Edgeboard和Easydl的結合可以幫助我們快速開發相關應用產品。
運行usb攝像頭輸入預測示例
通過官方文檔,發現板子支持USB攝像頭以及海思的IPC攝像頭接口,翻箱倒柜找到了兩個攝像頭接下來我們就試試用USB攝像頭進行實時的輸入檢測。
1. 連接設備
直接將攝像頭插入到底板的USB口上即可
2. 在開發板中,附帶了usb攝像頭的驅動與示例工程,依次執行以下命令
- //?查看設備文件是否產生,正常是/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. 連接設備,將海思IPC攝像頭排線插入插槽內,上電后,攝像頭電源指示燈會一并亮起
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后續會嘗試一下一些已有模型,深度挖掘一下這塊板子的功能
評論
查看更多