
圖源:Itsanan/Shutterstock.com
生產線已步入了快節奏時代,但要提高交付速度和客戶滿意度,勢必需要在裝運前檢測制造或包裝缺陷。然而,自動化檢測設備需要在不降低生產線速度的情況下進行處理和做出決策。所以,我們需要借助于Xilinx Kria K26系統模塊(SoM)等器件的幫助。Kria K26 SoM(見圖1)允許開發人員利用可編程邏輯與高性能Arm處理器內核相結合的并行特性。Kria SoM的優勢在于Xilinx首次為SoC(XCK26)提供了異構SoC和必要的支持基礎設施,如4GB DDR4內存、16GB eMMC、512Mb QSPI、TPM安全模塊以及必要的電源基礎設施。
圖1:Kria SoM
為便于與應用接口,此器件提供了可拆分成245個IO的兩個240針連接器。Xilinx還提供了Kria KV260視覺AI入門套件,讓開發人員能夠快速開始設計。該套件為開發人員提供了擁有以下接口的SoM載卡:
3個MIPI接口
USB
HDMI
顯示端口
1GB以太網
Pmod
此入門套件還隨附了一系列應用示例,幫助用戶了解開發基于視覺的人工智能應用是一件非常輕松的工作。Kria視覺AI入門套件非常適合需要快速圖像處理的應用,例如檢測標簽是否已正確應用于生產線上的裝運箱。
接下來讓我們將詳細地介紹Kria KV260視覺入門套件如何用于制造行業。創建此類應用并不一定需要可編程邏輯設計。然而,卻需要進行軟件開發,并具有使用Xilinx Vitis AI培訓和編譯新機器學習模型的能力。首先,我們需要安裝和配置Vitis AI。
我們需要本地Linux機器或運行受支持的Linux發行版的虛擬機來運行Vitis AI。在安裝完成后,下載Ubuntu Linux磁盤映像,以便在虛擬機上安裝Linux系統。此項目所使用的Ubuntu版本是Ubuntu-18.04.4 Desktop-amd64.iso,點擊此處即可下載。??現在可以開始構建虛擬機了。第一步,在VirtualBox Manager中單擊New。這時將顯示一個對話框,用于創建新的虛擬機(見圖2)。輸入虛擬機名稱,并將類型和版本分別設置為Linux和64位Linux版本。此外,還可以設置與虛擬機共享的系統內存大小(見圖3)。
單擊Create按鈕,將顯示虛擬硬盤的設置。選擇512GB,以允許動態分配物理存儲空間。隨著磁盤使用量的增加,虛擬硬盤大小將擴展到512GB。該項目將外部固態USB C驅動器用作虛擬硬盤,以確保有足夠的可用空間。
配置好虛擬機后,接下來就要安裝操作系統了。選中新創建的虛擬機,然后單擊start按鈕啟動VM 9(見圖4)。
在啟動虛擬機時,會要求安裝之前下載的Ubuntu ISO(見圖5)。
在虛擬硬盤上安裝Ubuntu操作系統。選擇安裝Ubuntu(見圖6)。
在選擇好Ubuntu的位置和配置選項后,進行鍵盤配置(見圖7)。
選擇最小安裝(見圖8),因為我們不需要使用辦公軟件、媒體播放器或玩游戲。



最后,輸入Ubuntu計算機名、用戶名及密碼(見圖12)。

重啟后,登錄并開始安裝Vitis AI(見圖14)。
圖14:登錄
安裝Vitis和Vitis AI???????????????????????????????????????
對于運行Linux的虛擬機,接下來需要安裝Vitis和Vitis AI。安裝Vitis時,需要用到在下載時創建的Xilinx帳戶。Vitis安裝時間較長,所以我們會先安裝它。
打開Xilinx下載頁面,選擇Linux Self Extracting Web Installer(見圖15)。
圖15:Xilinx Linux Installer下載web安裝程序后,找到下載位置,選擇應用程序,右鍵單擊以更改權限,使其能夠作為應用程序執行(見圖16)。
現在可以使用終端窗口來安裝Vitis,所需時間取決于虛擬機和internet連接性能。sudo ./Xilinx_Unified_2020.2_1118_1232_Lin64.bin
此時將啟動Vitis Installer(見圖18)。

選擇Vitis作為目標應用程序,同時還會安裝Vivado(見圖20)。
為了節省安裝空間,應取消選擇除SoC以外的所有設備(見圖21)。

在Installation Summary中,選擇Install并等待安裝完畢(見圖24)。
安裝完成后,需要運行以下腳本以安裝所有相關項:
sudo <install_dir>/Vitis/<release>/scripts/installLibs.sh
接下來,安裝Vitis AI。在本例中,我們將安裝Vitis AI以從CPU而不是GPU運行,因而會影響訓練性能。首先要安裝docker,請按照此處的說明進行操作。注意,可能需要在安裝完成后重啟虛擬機。接下來,請使用以下命令安裝Git:sudo apt update sudo apt install git選擇/創建Vitis-AI的安裝目錄。使用以下命令克隆Vitis-AI:git clone https://github.com/Xilinx/Vitis-AI.git一旦克隆好Vitis-AI存儲庫,請將其改為存儲目錄,并提取docker映像。cd Vitis-AI docker pull xilinx/vitis-ai:latest從docker下載最新的Vitis-AI映像將需要幾分鐘的時間。在提取docker映像之后,我們需要構建交叉編譯系統。可以通過運行Vitis-AI/setup/mpsoc/VART中的腳本來完成此操作(見圖25)。cd Vitis-AI/setup/mpsoc/VART ./host_cross_compiler_setup_2020.2.sh
運行腳本后,請確保運行指定的命令以啟用交叉編譯環境。我們可以通過編譯一個演示程序來測試是否正確安裝了Vitis AI。在本例中,我們采用的是demo/VART/Resnet50目錄下提供的resnet50應用程序。請使用以下命令編譯應用程序:如果您在終端窗口中沒有看到錯誤,并且可執行文件出現在目錄中,則說明Vitis AI安裝成功(見圖26):

現在,我們需要開發數據集,以顯示正確和錯誤黏貼的標簽。
為了訓練神經網絡,我們首先需要一組正確和錯誤圖像的數據集。我們以幾個正確和錯誤地黏貼了貿澤標簽的箱子為例。為了獲得多樣化的圖像,我們從多個角度拍攝了正確和錯誤黏貼標簽的箱子(見圖27和28)。


這些圖像被整理成兩個目錄——一個是正確的標簽,另一個是錯誤的標簽。對于捕獲到的圖像,我們需要訓練一個神經網絡。在本例中,我們將使用Edge Impulse。請注意,您需要為Edge Impulse創建一個免費的帳戶。在Edge Impulse端,首先要創建一個新項目(見圖29)。
新項目創建后,可以上傳標記為正確和錯誤的圖像文件夾。首先選擇正確目錄中的所有文件并進行上傳,標記為Label_Correct。隨后,上傳錯誤的圖像并將其標記為Label_Incorrect(見圖30)。
所有圖像都上傳完成后,接下來就要定義Impulse。選擇寬度和高度均為224像素的輸入圖像。選擇圖像,輸入Transfer Learning,然后保存Impulse(見圖31)。
然后,我們可以通過生成特征和訓練Impulse來訓練模型(見圖32)。
圖32:生成特征
選擇模型MobileNetV2 160x160 1.0,等效模型位于Xilinx Model Zoo下(見圖33)。
可能需要幾分鐘的時間來訓練模型。訓練完成后,返回概覽頁面,選擇下載遷移學習模型(見圖34)。這將包括保存的模型和.zip文件中的變量(檢查點)。
圖34:下載保存的模型
接下來使用Vitis AI對模型進行量化和編譯。在虛擬機中,我們可以通過發出以下命令來運行Vitis AI(見圖35)。
./docker_runs.sh Xilinx/vitis-ai-cpu:latest

加載Vitis AI后,使用以下命令激活TensorFlow(見圖36)。
conda activate vitis-ai-tensorflow

圖36:激活Vitis AI TensorFlow接下來,凍結將檢查點的信息合并到凍結模型文件的模型(見圖37)。
一旦模型作為凍結模型輸出,我們就可以使用編譯器編譯輸出模型,以部署到系統中。
我們可以從Xilinx Model Zoo中包含的YAML文件中了解輸出節點的信息(見圖38)。
要檢查凍結的網表,則需要安裝Netron。此外,理解量化過程的輸入和輸出節點名稱也很重要(見圖39)。
有了量化網表,我們可以將量化網表編譯為部署在Kria SoM上的模型(見圖40)。
借助于SCP/FTP,我們可以將編譯后的模型上載到以下目錄中的Kria文件系統:
/usr/share/vitis_ai_library/models/
上傳好模型后,可以生成一個軟件應用程序,用于測試神經網絡。這時,我們可以將幾個正確和錯誤的圖像上載到Kria SoM,來測試應用程序(見圖41和42)。


圖42:識別正確的標簽
該項目展示了對于工業AI/ML應用,在Kria SoM中訓練和部署神經網絡是一件非常簡單的事情,其應用潛力也是無限的。未來可能需要更新軟件以利用gstreamer框架,并像在生產線上一樣對實時圖像進行分類。
Adam Taylor非常擅長為多種最終應用開發嵌入式系統和FPGA。在他的職業生涯中,Adam使用FPGA實現了多種多樣的解決方案,涵蓋雷達系統、安全關鍵型控制系統(SIL4)和衛星系統等領域,同時他對圖像處理和密碼學方面也有所涉獵。
Adam從事過多個經理職位,帶領過多家大型跨國公司實現長足發展。多年來,他在航天工業中扮演著重要角色。他曾擔任Astrium衛星有效負載處理組的設計主管達6年之久,此外還在一家空間影像公司擔任了三年的首席工程師,負責了多個影響深遠的項目。FPGA是Adam最早接觸的領域。他撰寫過許多有關電子設計和FPGA設計的文章和論文,包括330多篇博客文章,并且通過2500多萬條評論闡釋了如何使用Xilinx的Zynq和Zynq MPSoC。Adam是一位特許工程師。他是IET英國工程技術學會的會員、林肯大學和Arm Innovator項目的嵌入式系統客座教授,同時還是工程和咨詢公司Adiuvo Engineering and Training的所有者。