新一年的集創賽已如火如荼的展開~
為了讓大家更多的了解該賽事,小編整理了2021年的優秀作品供學習分享
在每周一為大家分享獲獎作品,記得來看連載喲 ~
團隊介紹
參賽單位:上海交通大學
隊伍名稱:芯靈手巧
指導老師:王琴、景乃鋒
參賽隊員:林圣凱、林新源、莫志文
總決賽獎項:二等獎
1.項目概述
1.1 選題背景
我們的選題背景是考慮到很多臥床病人不便于獨自向醫護人員提出護理請求,因此我們想到在FPGA上部署智能SOC,實現手勢識別功能,從而使病人可以使用手勢來發出護理請求。
1.2 方案設計
我們共實現了兩套方案,其中一套數據通路是從板載攝像頭輸入,HDMI顯示圖像,加速器處理后將結果上傳上位機
另一套是由小程序采集圖像,經服務器、上位機傳至加速器,再經由原路返回小程序
1.3 項目工作
我們完成了賽方要求實現的所有基本功能,如表所示。
另外,我們超額完成了網口輸入視頻流功能、針對醫療應用場景的上位機與小程序設計,同時我們的系統支持不同權重用于不同應用,使得系統應用拓展性進一步提升。
1.4 性能參數
我們的項目已經在Artix-7 200T開發板上實現,在資源開銷方面,我們使用了200t開發板三成以下的寄存器和DSP,大約一半的查找表,以及約六成的BRAM。我們的加速器可以每秒處理73幀左右,在測試集上的檢測精度達到了約96%。我們的系統工作在50MHz的時鐘頻率,vivado實現之后顯示其板級功耗為2.138W,可計算出能效比為34.14fps/W,經過測試,該能效比遠遠高于使用GPU或CPU推理時的能效比。
2.硬件介紹
2.1 整體架構
我們的整體系統包括圖像采集與顯示子系統以及加速器子系統兩大部分。
2.2 圖像輸入與顯示子系統
我們的圖像采集與顯示子系統 可以經由攝像頭或網口輸入圖像,經過MUX選擇之后送入加速器。由此我們實現了多數據通路功能。
特別地,我們的網口支持360Mbps的網口速率,并在板上實現了UDP、IP、MAC層的接收功能,該部分電路與板載的PHY芯片配合實現了完整以太網接收功能。
2.3 加速器子系統
加速器子系統包括加速器及外圍緩存。
視頻流由buffer輸入,推理結果輸出到CPU進行展示。
我們使用了Ping-pong buffer使圖像輸入、計算并行,提高性能。
2.4 加速器子系統的優化
在復賽之后,我們團隊對系統進行了優化。為提高性能,加速器使用100MHz的時鐘,為了解決跨時鐘域與加速器通信的問題,我們使用AHB時鐘轉換接口控制加速器。我們利用加速器權重稀疏性,大幅減少BRAM占用。
為解決權重輸入的控制問題,我們對權重按規律分組之后,降低了控制難度。
經過了上述優化,我們通過劃分時鐘域提升了推理幀率,提升幅度達94.2%,同時我們的能效比相比之前提升達68%;我們利用權重稀疏性減少了15.52%的BRAM占用。由此我們的加速器子系統在板上資源占用和性能等方面均取得了明顯的改善。最終,經過我們的實際對GPU與CPU的能效比進行測試,我們的SoC系統的能效比遠高于GPU和CPU的能效比,是GPU的5倍,CPU的十倍。我們SoC的優化效果顯著。
3.軟件工作介紹
3.1 加速器結構
我們的加速器是基于SqueezeNet設計,將原本的Fire模塊進行了一定程度的精簡,去除了原本Fire模塊中的一些卷積核。
同時我們使用Dorefa方法對網絡參數進行低比特量化,我們將大多數權重量化至1bit,輸入和輸出量化為5bit。
加速器使用HLS編寫,并綜合之后生成IP,掛載到了總線上。
3.2 數據集準備
我們設計了基于美國手語字母的一套手勢,我們將原本的字母的含義映射到病房場景下的各種具體含義,如右表所示。
為了訓練神經網絡,我們自己制作了一套大約一萬張圖片的數據集,之后隨機進行旋轉、飽和度、對比度等調整以提升訓練效果,最終效果如右下圖所示。
3.3 加速器訓練結果
之后我們使用TensorFlow框架進行訓練,訓練過程中,Top1錯誤率如右圖所示,由圖可見,訓練過程順利收斂。最終我們訓練Top1準確率達到了約96%
3.4 上位機與小程序
為了提升系統的實際應用效果,我們使用C#編寫了配套的上位機,編寫了配套的小程序并搭建了服務器。最終我們實現了可以通過小程序、服務器、上位機與FPGA網口通信。
4.仿真與上板測試
我們分別對SoC、DDR、DATA\_CACHE、加速器模塊、SD卡、網口模塊的進行了modelsim 仿真與上板測試結果或是上板之后利用 Vivado 下的集成邏輯
分析儀(ILA) 對于關鍵信號線的抓取與驗證。在通過以下各個模塊的仿真與驗證之后, 我們認為相應模塊的配置與運行結果都是符合預期的。
4.1 SoC基本功能仿真
在整個項目開始之初,我們在modelsim對SoC基本系統進行了RTL仿真,結果如圖4-1所示,在上電復位后,系統總線有相應變化,說明SoC基本系統已正常運行。
4.2 DDR模塊
通過使用AHBlite-AXI轉接橋,我們將DDR掛載在L1總線矩陣上,并用ila對關鍵信號進行抓取。如圖4-2所示:當總線向DDR連續寫入數據時,總線的READY和READYOUT的實現正確握手,數據也正確傳遞到DDR的相應地址。
4.3 SD卡模塊
SD卡在上電后自動進行初始化,在一定時間后可以抓到sd_init_done信號變為高電平,表示SD卡正常初始化完成。
隨后,依次配置SD卡的讀扇區地址并開始設置開始讀取到片上BRAM。該過程總線信號如下。
當SD卡一個扇區讀取到片上完成時,會拉高sd_sec_read_end,表示當前扇區已經讀取完成,如圖4-5。
之后CPU便可以查詢到SD卡模塊相應寄存器的變化為0x00010000,此即讀取完成狀態,如圖4-6。
在之后,CPU就可以直接讀取暫存有扇區數據的BRAM,如圖4-7。這樣SD卡一個讀取過程已經完成,此后循環此過程即可。至此SD卡正常工作狀態已經得到驗證。
4.4 加速器模塊
對于加速器模塊,我們進行了從TensorFlow平臺測試,HLS C仿真,HLS C/RTL協同仿真,加速器搭載在最小系統仿真等非常規范的設計流程。
首先是TensorFlow平臺測試,如下圖所示:
如上圖所示,幾次測試的Top1-錯誤率分別為4.8%, 0.8%與4.0%,平均為4.73%。
接著,我們編寫了HalfSqueezeNet的HLS C代碼,并對其進行了多輪C仿真驗證其正確性。下圖為舉例說明。
送入的圖像為如下所示。
美國標準手語如下:American Sign Language。
對比可知,這是手勢B。將其通過matlab轉化為565RGB圖像,使其與實際攝像頭送入的圖片格式相同。
對其進行C仿真。(console中的紅框表示是C仿真)
可以看出,C仿真的所得到結果為class=1,由于我們設置class=0為A,class=1為B……以此類推。對比美國標準手勢圖,可以得知手勢的分類結果是正確的。
接下來進行C/RTL協同仿真。(console中的紅框表示是協同仿真)
可以看出,分類所得的class=1,即手勢B,結果正確。
最后進行最小系統仿真。在搭建完最小系統之后,我們HLS生成的AXI lite與AXI Stream規范進行配置,并將圖片和權重轉化為COE格式送入BRAM例化。最終所得的結果如下。
可以看出,最終result[6]的結果為1,即表明最終所得的分類結果為B。
以上,HalfSqueezeNet的TensorFlow測試、C仿真、C/RTL協同仿真、最小系統仿真全部完成,我們有充分的理由相信加速器是可信可靠的。
4.5 網口模塊
對于網口模塊,我們對網口的最小系統通過抓市面上已有的網口調試助手向FPGA發送數據時抓ILA信號驗證了FPGA網口模塊的正確性;接著我們自己用C#編寫了帶網口傳輸功能的上位機,并通過抓ILA來驗證上位機功能的正確性。
首先在系統中將電腦的網口發送端口設置IP為與FPGA中相同的IP地址,從而使得能順利通過FPGA中我們編寫的UDP協議校驗。
接著,我們在cmd命令行中添加新的靜態表項,將FPGA的IP地址192.168.0.120設置為對應的MAC地址設置為00-AA-00-62-C6-09。
利用arp -a命令查看綁定的IP與MAC地址,可以看到對應的表項已成功添加。
下載并打開網口調試助手,設置發送端口與目的端口。發現可以成功打開端口。
點擊數據發送,在wireshark上可以抓到對應的長度為22422bytes的udp數據包,其源IP地址為192.168.0.3,目的IP地址為192.168.0.120,信息與之前所設置的可以完全匹配。(下圖No.5)
此時向FPGA燒入帶有ILA的最小系統比特流,觀察數據。發現可以收到電腦發出的UDP包,且數據與長度匹配。
至此,已經可以驗證FPGA上的網口是正確無誤的;接著需要編寫上位機程序。我們利用Visual Studio的C#作為開發環境,編寫了帶有網口傳輸、串口打印、與服務器進行HTTP協議通信的上位機。其界面如下:
設置對應的源IP、端口號與目的IP、端口號,并生成需要發送的byte流。點擊發送。
此時,在ILA中再次抓取數據。
可以看到,數據能夠被正確讀取。考慮到一個UDP包能傳輸的字節數有限,我們最終設置每次傳輸224X2個RGB565數據,即每次傳輸896個bytes,共計傳輸112次來完成一張圖片傳輸的協議。其中,Img_start信號為FPGA中每張圖片開始傳輸的信號。
至此,網口部分的驗證已經全部完成。
4.5 整體測試結果
5.項目總結
目前該項目在FPGA平臺上實現了基于Arm Cortex-M3 DesignStart處理器的面向無人值守的信號處理SoC,可以應用于智慧病房檢測等各種無人系統的應用,非常契合賽題的要求,且由于系統的通用性,有著廣大的潛在應用場景。
該目標檢測SoC基于Arm處理器,采用了兩級AHB總線結構,系統中掛載了圖像采集與顯示模塊,SD卡模塊,DDR模塊,加速器模塊等,系統使用攝像頭采集圖像送入加速器與HDMI模塊分別進行目標檢測與顯示,在我們的設計之下,在系統工作過程中軟硬件得以良好協同。我們的系統可以實現對視頻流實時、穩定地檢測與顯示。
由于FPGA的資源十分有限,我們選用了伯克利&斯坦福團隊提出的SqueezeNet網絡,該網絡專為移動或嵌入式場景開發,在保持一定精度的前提下降低了網絡大小。同時,為了使該網絡可以做成硬件加速器,對該網絡又進一步采用了融合BN層,參數歸一化和網絡結構精簡(刪除Fire模塊中的1X1卷積)等手段使得真正上板的網絡進一步減小而精度的下降尚可接受。另外,由于不同網絡層之間大多結構相同,我們在HLS的網絡中采取了折疊結構實現,使用軟硬件協同控制加速器工作時的數據流向,進一步大大節省了有限的板上資源。我們利用數據增強的 DAC SDC 數據集對網絡進行了訓練,并對權重進行量化。該數據集面向無人機場景,均為無人機拍攝的圖片,待識別物體被分為 12 類。
在實際部署中,為進一步節省片上資源,我們對 SqueezeNet 網絡進行了簡化, 并采用折疊架構。SqueezeNet 主要由若干個 Fire 模塊構成,我們僅設計一個簡化的、參數可配置的 Fire 模塊,稱之為 HalfFire 模塊。通過對加速器的配置來控制 HalfFire 模塊的例化和數據流的走向。數據通過若干次加速器(每次的配置參數均不同)處理后,即可得到檢測結果。折疊架構節省了大量的片上資源,便于目標檢測與分類 SoC 系統在邊緣端的部署。
通過實驗測試,該加速器可實現軟件平均準確率 96.27%的檢測精度; 完成一幀圖像的處理平均耗時 28.6 ms,系統吞吐率 34.97 FPS;系統的板級動態 功耗為 1.697 W,完成一幀圖像的處理耗能 0.0468 J,能效比為 21.35 FPS/W。同時,系統性能相比于 CPU 加速比顯著,相比于 GPU 能效比提升顯著。綜合來看,系統的性能指標優勢顯著,達到了2017年IEEE國際一流會議/期刊發表論文相當水平。
該項目在 FPGA 平臺上實現了目標檢測 SoC 的部署,結合上位機的串口與語音播報,可實現對病房實時、穩定的檢測,滿足患者的各項需求。該項目實際作為一套通用的加速器平臺系統可部署于邊緣端,除用于智慧病房檢測外,還可通過在SD卡存入訓練好的各套權重,最終用于智能視頻監控、聾啞人友好的無接觸智慧電梯等各個場景,具備較高的通用性,市場前景廣闊。
6.參賽體會
參加集創賽作為一段寶貴的實踐經驗,我們收獲頗豐。我們團隊大致可以總結出如下幾條參賽經驗:
1. 扎扎實實一步步仿真、驗證每部分電路,再嘗試整合。SoC設計是一個很嚴謹細致的工程,有任何一個地方有再小的一個bug都會導致系統整體的錯誤表現。就像我們在復賽前,因為給一些子系統加了新特性之后,比較急切想整合驗證效果,便跳過了子系統的仿真驗證,直接全都掛到總線上就開始驗證,結果出現了問題。團隊一起檢查了一段時間之后最終還是決定先給各個子系統分別仿真驗證,確定子系統沒問題之后再整合。最后果然在這個過程中發現是一個子系統存在bug。這次經歷讓我們得到了深刻的教訓:心急吃不了熱豆腐,凡事還是要踏踏實實一步一步走。
2. 一切以上板結果正確為最終標準。在本次競賽的制作過程中,同樣是復賽前,我們有幾個子系統通過了小系統仿真,之后我們都覺得這部分應該已經沒問題了,當時覺得既然是同樣的代碼仿真過了上板應該也沒問題。但是我們團隊就遇到了一次盡管仿真正確但上板結果不對的情況,最終只能根據ILA抓信號的結果來debug,而且打亂了我們原本的項目計劃。在這之后我們更深刻地理解了指導老師經常催促我們趕緊上板驗證的原因。我們懂得了仿真永遠只是理論驗證,功能驗證,而硬件即使做得再完美也有不理想的現象,就完全可能導致與仿真結果對不上的問題。
3. 多學多看多思考,多看看廠商給出的技術文檔,以及留出充足的時間來對硬件進行debug。以網口的學習作為經驗,首先是要學習最基礎的RGMII協議以及UDP協議,然后根據開發板的說明文檔查到網口的PHY芯片型號RTL8211EL,然后再根據相應的文檔學習芯片的引腳配置。中間也遇到了許多問題,例如開始沒有發現PHY芯片的reset需要至少1ms的時間,或是有一個引腳約束xdc文件分配錯了卻遲遲沒有發現,這些都是需要預留充足的時間來debug的。其他模塊的編寫我想也大致如此,都需要首先對協議本身進行學習,然后根據開發板的不同型號對相應引腳進行配置,最后通過仿真測試以及上板抓ILA進行測試驗證,通過后就可以整合進整個系統了。
7.參賽隊員介紹
林圣凱
本人2018年進入上海交通大學開始大學本科學業,所學專業為微電子科學與工程。本人成績優異,曾獲何宜慈博士紀念獎學金以及多次校級B類獎學金;并且在本科期間積極參加科研工作,從事過網絡系統、量子身份認證以及集成電路SoC設計等方向的科研工作。
在本次集創賽中,我自己對于SoC的基礎知識與認識有了大幅度提升,真正做到了學以致用。我覺得這個過程就是一個解決問題與挑戰自己的過程。我相信我會以此為起點,在未來的科研工作中繼續對自己提出更高的挑戰,并將其一一擊破。
林新源
我是芯靈手巧組的林新源,是一枚對集成電路設計尤其是系統級設計感興趣的大三學生。這是最壞的時代,也是最好的時代,我希望自己能夠在國家需要的,且自己喜歡的集成電路設計領域做一些有意義的事情。于我而言,集創賽是個起點,在這過程中學到的知識還有完成過程中的態度心境將讓我未來受益匪淺。將來,我將去清華大學電子系攻讀博士,繼續攀登新的高峰。
莫志文
我是CICC2883芯靈手巧組的莫志文,是一名上海交大微電子學院的大三學生,曾獲國家級獎學金、校A級獎學金、三好學生等榮譽,成績位列專業第一。我平日里課業之外喜歡音樂、足球與騎行。我對數字芯片設計頗有興趣,并即將保研至本系直博繼續攻讀數字芯片設計。我期待著未來在本領域深耕并作出一些屬于自己的貢獻。以此次集創賽作為契機,我學到了許多知識,也在管中窺豹——可見一斑中感受到了數字IC設計智慧的博大精深。
恰逢如此的歷史時機,我堅信我們這一代人可以扛起這份責任。長風破浪會有時,直掛云帆濟滄海!
原文標題:【2021集創賽作品分享】第四期 | 基于Arm核的智慧病房手勢識別方案
文章出處:【微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅
-
ARM
+關注
關注
134文章
9304瀏覽量
374897 -
soc
+關注
關注
38文章
4329瀏覽量
221620 -
手勢識別
+關注
關注
8文章
226瀏覽量
48152
原文標題:【2021集創賽作品分享】第四期 | 基于Arm核的智慧病房手勢識別方案
文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
手勢識別技術原理及解決方案
基于Microchip的手勢識別耳機解決方案

紅外手勢識別方案 紅外手勢感應模塊 紅外識別紅外手勢識別
紅外手勢識別方案 紅外手勢感應模塊 紅外識別
智慧物業解決方案
ELMOS用于手勢識別的光電傳感器E527.16
手勢識別PCBA-手勢控制零接觸抗菌水龍頭開發方案
史上最牛高速手勢識別系統解決方案
醫院智慧病房的整體解決方案解析
基于ToF傳感器的3D手勢識別解決方案
手勢識別技術及其應用
智能手勢化妝鏡手勢識別模組芯片底部填充膠應用案例

評論