利用AMD現(xiàn)場可編程門陣列(FPGA)硬件部署量化和改進的神經(jīng)網(wǎng)絡(luò)用于軌道故障檢測,解決了在資源受限的邊緣設(shè)備上實現(xiàn)自動軌道缺陷檢測的挑戰(zhàn)。
背景:隨著人們對鐵路運輸安全的要求越來越高,傳統(tǒng)的軌道檢測方法需要工人定期沿著軌道行走,觀察軌道的磨損、變形和裂縫。該方法雖然可以直觀地檢測到一些明顯的故障,但耗時、費力、效率低。這種方法已不能滿足現(xiàn)代鐵路系統(tǒng)的需要。為了解決鐵路故障檢測的自動化和高效性問題,本課題開發(fā)了一種基于FPGA的鐵路故障檢測系統(tǒng)。該邊緣人工智能系統(tǒng)通過攝像頭捕捉軌道圖像,利用卷積神經(jīng)網(wǎng)絡(luò)(CNN)實時檢測軌道缺陷,并自動報告故障信息。
項目市場價值分析
利用FPGA進行鐵路軌道檢測可以解決幾個關(guān)鍵問題,包括:
?事故預(yù)防:鐵路軌道上的缺陷,如裂縫、磨損和腐蝕,是火車出軌的主要原因。如果不及時發(fā)現(xiàn)和修復(fù)這些缺陷,將對乘客和貨物的安全構(gòu)成嚴重威脅。自動檢查系統(tǒng)可以及早發(fā)現(xiàn)這些問題,從而防止事故的發(fā)生。
?提高效率:傳統(tǒng)的人工檢測方法效率低,容易出錯。相比之下,F(xiàn)PGA與深度學(xué)習(xí)和計算機視覺技術(shù)相結(jié)合,可以顯著提高檢測效率和準確性,減少人為干預(yù)的需要。
?實時性和準確性:fpga提供并行處理能力,實現(xiàn)實時數(shù)據(jù)處理和分析。這對于需要持續(xù)監(jiān)測和快速響應(yīng)的鐵路應(yīng)用至關(guān)重要。
市場潛力
廣泛的市場需求:隨著全球鐵路網(wǎng)絡(luò)的擴展和升級,對高效可靠的鐵路軌道檢測系統(tǒng)的需求日益增加。鐵路運輸?shù)念l繁使用和鐵路線路的不斷延長,使軌道檢查成為一個迫切需要解決的問題。
?技術(shù)優(yōu)勢:FPGA結(jié)合深度學(xué)習(xí)技術(shù)應(yīng)用于鐵路軌道檢測,不僅提高了檢測的速度和準確性,而且減少了環(huán)境和人為因素造成的誤差。這使該項目在技術(shù)上具有強大的競爭優(yōu)勢。
?經(jīng)濟效益:通過提高檢查效率,減少事故的發(fā)生,鐵路運營公司可以降低維修成本和事故賠償費用。此外,盡量減少事故造成的運輸中斷可以提高運營效率和經(jīng)濟效益。
?初步探索:通過Vitis AI進行設(shè)計和部署嘗試
除了傳統(tǒng)的流程,AMD還提供了一個名為Vitis AI的強大工具。此工具鏈提供了優(yōu)化的IP、工具、庫、模型以及資源,例如在整個開發(fā)過程中幫助用戶的示例設(shè)計和教程。它的設(shè)計考慮到高效率和易用性,在AMD自適應(yīng)soc和Alveo數(shù)據(jù)中心加速卡上釋放AI加速的全部潛力。這種方法比傳統(tǒng)工藝簡單得多。我們還嘗試從AMD的模型動物園中訓(xùn)練Resnet18網(wǎng)絡(luò),優(yōu)化它,并使用Vitis AI部署它。以下內(nèi)容概述了總體開發(fā)過程:
搭建環(huán)境:在運行Ubuntu的主機上安裝Docker: xilinx/kria developer: 2022.1。這個Docker環(huán)境對應(yīng)于我們正在使用的Vitis AI v3.0版本。
量化模型:在Docker環(huán)境中,Vitis AI提供的強大工具可用于分析、量化和導(dǎo)出模型。S只需導(dǎo)入訓(xùn)練好的模型(.pth)文件,用很短的命令完成模型檢測和量化過程。
接下來,使用vai_c_xir工具來編譯模型。此時,編譯后的(.xmodel)文件就可以在duczdx8g體系結(jié)構(gòu)上運行了。
將Vitis AI對應(yīng)的Petalinux鏡像刻錄到Kria KR260上,加載對應(yīng)的DPU固件,導(dǎo)入模型和測試數(shù)據(jù),使用Vitis AI運行時API直接運行。
然而,最終我們并沒有選擇這種方法來進行軌道誤差識別的開發(fā)。我們需要一個更快、更輕的網(wǎng)絡(luò)設(shè)計,以及與機器人汽車控制和ESP8266模塊的集成。最后,我們決定進行全新的網(wǎng)絡(luò)設(shè)計和部署。
貢獻:
為了減小模型尺寸并在Kria KR260開發(fā)板上部署合適的鋼軌缺陷檢測模型,實現(xiàn)機器人汽車的上位機通信和部署,本項目采用五步方法:
?設(shè)計一個專門適應(yīng)KR260開發(fā)板資源的神經(jīng)網(wǎng)絡(luò)模型。
?對模型參數(shù)進行訓(xùn)練后量化,采用混合精度量化(不同模塊和精度要求的量化位寬不同)。
?使用AMD HLS工具提高編碼效率。
?通過WiFi通信模塊實現(xiàn)與上位機的通信。
?集成車載通信協(xié)議,實現(xiàn)KR260對機器人汽車平臺的控制。
本項目中使用的神經(jīng)網(wǎng)絡(luò)架構(gòu)如圖所示。本設(shè)計基于ResNet網(wǎng)絡(luò)結(jié)構(gòu),保留了基本的殘塊結(jié)構(gòu)。輸入圖像大小為128x128。對數(shù)據(jù)集進行過濾,并將其分為兩類:有缺陷的圖像和沒有缺陷的圖像。數(shù)據(jù)增強技術(shù),如模糊,噪聲添加,隨機翻轉(zhuǎn)和旋轉(zhuǎn)應(yīng)用。
?模型參數(shù):261 kb
?MAC操作:24.66M
?準確率:88.9%
參數(shù)提取和環(huán)境設(shè)置:
在確定最佳模型后,需要在FPGA上提取參數(shù)進行推理。有兩種方法可以做到這一點:
使用中子網(wǎng)站提取模型權(quán)重和偏差。
編寫Python代碼來提取模型參數(shù)也是一種可靠的方法。
開發(fā)環(huán)境配置:參數(shù)提取完成后,使用Vitis HLS 2022.2進行PyTorch神經(jīng)網(wǎng)絡(luò)模型的推理過程。需要進行以下環(huán)境配置:
Vivado HLS:選擇Kria KR260作為目標,流量目標設(shè)置為Vivado IP flow target。
導(dǎo)入源文件和測試臺文件。在源中包含先前提取的權(quán)重和偏差。
在Vivado 2022.2中,為Kria KR260開發(fā)板創(chuàng)建一個項目,并使用PYNQ在處理系統(tǒng)(PS)和可編程邏輯(PL)之間進行通信。
處理系統(tǒng)(PS)是指通常由嵌入式處理器組成的系統(tǒng)。它負責執(zhí)行大多數(shù)軟件任務(wù),包括操作系統(tǒng)、應(yīng)用程序和驅(qū)動程序。PS可以處理高級計算任務(wù),并提供廣泛的外設(shè)接口,如串行通信、以太網(wǎng)、USB等。在PYNQ框架中,PS通常運行Python代碼,管理控制和數(shù)據(jù)處理。
可編程邏輯(PL)是指系統(tǒng)中通常由FPGA構(gòu)成的部分。PL用于實現(xiàn)硬件加速,并且可以根據(jù)需要動態(tài)配置為不同的硬件電路,以提高特定任務(wù)的執(zhí)行效率。PL適用于并行處理、廣泛的數(shù)據(jù)處理和自定義硬件功能。在PYNQ框架中,PL可以使用硬件描述語言(如VHDL或Verilog)或高級合成工具(如Vivado HLS)進行編程,允許用戶通過Python接口配置和利用這些硬件加速模塊。
Kria KR260開發(fā)板需要使用PYNQ環(huán)境進行閃現(xiàn)。
代碼的解釋:
HLS代碼部分:
這是一個標準的卷積運算。輸入圖像大小為128x128,卷積核大小為5x5,輸出通道號為32。
卷積層是cnn的核心構(gòu)建塊,也是大多數(shù)計算發(fā)生的地方。
這是一個標準的最大池化操作,用于縮小圖像大小并提取特征。池化層(也稱為子采樣)執(zhí)行下采樣,減少輸入中的參數(shù)數(shù)量。像卷積層一樣,池化操作在整個輸入上滑動一個過濾器。然而,與卷積濾波器不同的是,這個濾波器沒有權(quán)重。相反,內(nèi)核對其接收字段中的值應(yīng)用聚合函數(shù),填充輸出數(shù)組。當過濾器移動到輸入上時,最大池選擇要發(fā)送到輸出數(shù)組的最大值像素。
在編寫了所有HLS代碼之后,需要進行合成和聯(lián)合仿真操作。
通過這兩個步驟,我們可以檢查資源使用和計時錯誤,從而生成綜合報告。通過Co-simulation后,通過運行export RTL命令導(dǎo)出RTL設(shè)計,該命令將寫入活動解決方案的impl文件夾。zip文件是IP及其內(nèi)容的zip歸檔文件,可以直接添加到Vivado IP目錄中。
在完成HLS部分后,我們轉(zhuǎn)移到之前創(chuàng)建的Vivado項目,開始塊設(shè)計過程。首先,找到導(dǎo)入hls生成的IP包的設(shè)置。
塊設(shè)計是FPGA硬件系統(tǒng)圖形化設(shè)計和管理的一種方法。它允許開發(fā)人員通過圖形界面更直觀地創(chuàng)建和配置硬件設(shè)計。塊設(shè)計支持模塊化設(shè)計,使開發(fā)人員能夠?qū)?fù)雜的硬件功能劃分為多個獨立的模塊,每個模塊都可以單獨設(shè)計、測試和驗證。這些模塊可以是預(yù)定義的IP核或自定義硬件邏輯。
設(shè)置完成后,在左側(cè)列表中選擇“創(chuàng)建塊設(shè)計”。導(dǎo)入PS模塊和IP模塊,并進行連接。Vivado可以自動生成IP核之間的連接,減少手工布線的錯誤和復(fù)雜性,包括總線接口、時鐘信號和復(fù)位信號。
驗證連接是否正確,然后繼續(xù)進行合成、實現(xiàn)和比特流生成。合成是將高級HDL(如VHDL或Verilog)代碼轉(zhuǎn)換為門級網(wǎng)表的過程,該網(wǎng)表描述了特定的邏輯門及其連接。在合成過程中,Vivado解析設(shè)計代碼,執(zhí)行邏輯優(yōu)化,刪除冗余邏輯,并將其映射到FPGA的基本邏輯單元(如查找表和觸發(fā)器)。
實現(xiàn)過程的目標是確保設(shè)計在FPGA上正確運行,并滿足所有時間和資源限制。生成比特流將實現(xiàn)的設(shè)計轉(zhuǎn)換為可下載到FPGA的二進制文件。位流包含配置FPGA的內(nèi)部邏輯和連接所需的所有信息,并在上電或重新配置時加載到FPGA中。生成比特流后,開發(fā)人員可以將其下載到FPGA中,使其根據(jù)設(shè)計邏輯和連接進行操作。
在寫入比特流之后,在Vivado項目目錄中找到三個重要的文件:(.tcl,。Bit和。hwh)文件。TCL腳本文件用于自動化和管理FPGA設(shè)計流程。
(.tcl)文件通常包含一系列用于設(shè)置項目、綜合設(shè)計、實現(xiàn)設(shè)計和生成位流的命令。
(.bit)文件是由Vivado生成的二進制文件,包含配置FPGA所需的所有信息。該文件可以直接下載到FPGA芯片上,使FPGA按照設(shè)計的邏輯和連接進行工作。
(.hwh)文件是描述硬件設(shè)計的高級元數(shù)據(jù)文件,通常與PYNQ和其他嵌入式系統(tǒng)相關(guān)聯(lián),包含有關(guān)硬件設(shè)計的詳細信息,例如IP核、總線連接和寄存器映射。
PYNQ開發(fā)和主板測試:
上電Kria KR260開發(fā)板,打開Jupyter可視化界面。
上傳所需的項目文件并創(chuàng)建a.p ipynb文件來編寫PYNQ代碼。
使用overlay導(dǎo)入位文件的內(nèi)容來調(diào)用PL端。
通過地址讀取和傳遞圖像信息和識別結(jié)果。查找地址的方法如下:在Vitis HLS中找到.h文件,然后找到輸入和輸出地址位置。
測試成功后,KR260可用于鋼軌缺陷檢測。
數(shù)據(jù)集增加:
第一步是對圖像進行基本的圖像增強操作,包括水平鏡像和垂直鏡像。
在此基礎(chǔ)上,對所有鏡像處理后的圖像進行45°翻轉(zhuǎn)操作。此時,一個圖像已經(jīng)擴展到8個圖像。
最后,在之前的基本增強之后,對每個圖像執(zhí)行四種不同的處理:模糊,鹽,亮白和暗化。
通過數(shù)據(jù)增強,每張原始圖像被擴展到40張。
ESP8266的開發(fā)及與上位機的通信
使用Arduino編寫和開發(fā)程序,首先將開發(fā)板接口和配置設(shè)置為“Generic ESP8266 Module”,并加載相應(yīng)的工具環(huán)境包。
在開發(fā)過程中,兩個庫ESP8266WiFi.h和WifiLocation.h分別用于ESP8266網(wǎng)絡(luò)和地理位置獲取。
在使用ESP8266連接上位機時,由于上位機使用套接字協(xié)議,ESP8266的編程也遵循同樣的設(shè)計。連接WiFi后,打開socket服務(wù)器等待連接。實現(xiàn)了基本的數(shù)據(jù)收發(fā),以及接收到“sendLocation”命令后的地理位置信息傳輸:
地理位置信息通過谷歌API獲取,需要使用谷歌API密鑰進行訪問和時鐘信息,以便在通話過程中獲取具體的位置信息。在確保代碼能夠正常工作后,由于本項目選擇的ESP8266是DevSKit,因此可以通過microrousb進行刻錄和通信,可以通過串口連接ESP8266并將上傳速度設(shè)置為115200進行刻錄。
最終實際運行的上位機如下所示:
機器人車的功能和使用方法:
機器人車配備了多個模塊,但在本項目中主要使用的是伺服云臺和四輪驅(qū)動電機。該車配備了一個定制的驅(qū)動板和一個STM32核心板進行基本控制。整個驅(qū)動板由一個PR12V鋰電池組供電,通過microrousb與KR260連接,進行串行通信。
伺服轉(zhuǎn)盤傾斜部分由兩個伺服電機組成,控制轉(zhuǎn)盤的左右旋轉(zhuǎn)和上下俯仰角的調(diào)節(jié)。配備高清USB攝像頭,實現(xiàn)精準切割、定位、采集。通過對伺服云臺的精確控制,攝像機可以準確地捕捉到鐵路軌道的每一個信息。
該車使用四個電機分別控制四個車輪,實現(xiàn)四輪驅(qū)動,使其能夠快速加速和減速前進和后退。同時,由于是四輪驅(qū)動,該車的轉(zhuǎn)向系統(tǒng)采用四輪差速轉(zhuǎn)向,實現(xiàn)靜止轉(zhuǎn)向。這種靈活的機動性適合在狹窄的環(huán)境中工作,使其成為鐵路軌道上工作條件的理想選擇。
該車集成了一套指令操作系統(tǒng),封裝了各個模塊的特定時鐘、中斷等一系列復(fù)雜的基本操作。通過串口接收指令,可以直接實現(xiàn)指令的相應(yīng)功能,如將汽車伺服云臺操作到一定角度。以下是一些基本說明:
具體來說,我們設(shè)計了一個單獨的伺服云臺控制指令系統(tǒng)。汽車的整個程序是使用Keil μVision V4.10編寫和燒錄的。以下是伺服框架控制協(xié)議的示例(示例命令為$4WD, PTA180, PTB90, PTC90#)
所有指令都通過串口接收,Kria KR260可以通過PYNQ終端實現(xiàn)對汽車的完全控制。
結(jié)論:
本項目通過在Kria KR260 FPGA平臺上部署神經(jīng)網(wǎng)絡(luò),并將整個系統(tǒng)集成到機器人汽車中,實現(xiàn)了實時準確的鋼軌缺陷檢測。通過WiFi通信將檢測到的鋼軌缺陷信息上傳到上位機,實現(xiàn)遠程監(jiān)控和數(shù)據(jù)分析。這也反映了使用AMD工具實現(xiàn)的FPGA開發(fā)效率的顯著提高。該項目實時性強、平臺性能高、功耗低、集成度高、適應(yīng)性強,為鐵路安全檢測提供了高效可靠的解決方案。未來的工作可以著重于進一步優(yōu)化算法和系統(tǒng)架構(gòu),以提高檢測效率和準確性,擴大應(yīng)用范圍,為鐵路運輸?shù)陌踩咝ё龀鲐暙I。
本文編譯自hackster.io