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