
機器視覺(jué)在工業(yè)自動(dòng)化系統中的應用已經(jīng)有一定的歷史,它取代了傳統的人工檢查,提高了生產(chǎn)質(zhì)量和產(chǎn)量。我們已經(jīng)看到了相機在計算機、移動(dòng)設備和汽車(chē)等日常生活設備中的迅速普及,但是機器視覺(jué)的最大進(jìn)步莫過(guò)于處理能力。隨著(zhù)處理器的性能以每?jì)赡攴环乃俣炔粩嗵嵘?,以及多?/font>CPU和FPGA等并行處理技術(shù)日益受到關(guān)注,視覺(jué)系統設計人員現在可以應用復雜的算法來(lái)可視化數據,并創(chuàng )建出更加智能的系統。
性能的提高意味著(zhù)設計人員可以獲得更高的數據吞吐量,從而實(shí)現更快速的圖像采集,使用更高分辨率的傳感器,并充分利用市場(chǎng)上具有最高動(dòng)態(tài)范圍的一些新款相機。性能的提高不僅可讓設計人員更快速地采集圖像,而且還能更快速地處理圖像。預處理算法(如閾值和濾波)或處理算法(如模式匹配)也可以更快速地執行。最終設計人員能夠比以往更快地基于可視化數據制定決策。
隨著(zhù)視覺(jué)系統越來(lái)越多地集成最新一代多核CPU和強大FPGA,視覺(jué)系統設計人員需要了解使用這些處理元件的好處和得失。他們不僅需要在正確的硬件上運行正確的算法,還需要了解哪些架構最適合作為其設計的基礎。
內聯(lián)處理和協(xié)處理
在研究哪種類(lèi)型的算法最適合哪個(gè)處理元件之前,您應該了解每個(gè)應用最適合的架構類(lèi)型。在開(kāi)發(fā)基于CPU和FPGA的異構架構的視覺(jué)系統時(shí),需要考慮兩個(gè)主要的使用情況:嵌入式處理和協(xié)處理。如果是FPGA協(xié)處理,FPGA和CPU將共同工作,共享處理負載。這種架構最常用于GigE Vision和USB3 Vision相機,因為它們的采集邏輯最好是在CPU上實(shí)現。您可以使用CPU采集圖像,然后通過(guò)直接存儲器訪(fǎng)問(wèn)(DMA)將其發(fā)送到FPGA,以便FPGA可以執行諸如濾波或顏色平面提取等操作。然后,您可以將圖像發(fā)送回CPU以進(jìn)行更高級的操作,例如光學(xué)字符識別(OCR)或模式匹配。在某些情況下,您可以在FPGA上實(shí)現所有的處理步驟,并只將處理結果發(fā)送回CPU。這使得CPU可以將更多的資源用于運動(dòng)控制、網(wǎng)絡(luò )通信和圖像顯示等其他操作。
圖1.在FPGA協(xié)處理中,圖像使用CPU進(jìn)行采集后,通過(guò)DMA發(fā)送到FPGA,然后由FPGA對圖像進(jìn)行處理。
在嵌入式FPGA處理架構中,您可以將相機接口直接連接到FPGA的引腳,以便像素可直接從相機發(fā)送到FPGA。這種架構通常與Camera Link相機一起使用,因為它們的采集邏輯易于使用FPGA上的數字電路來(lái)實(shí)現。這個(gè)架構有兩個(gè)主要的好處。首先,與協(xié)處理一樣,在FPGA上執行預處理功能時(shí),可以使用嵌入式處理將部分工作從CPU轉移到FPGA。例如,在將像素發(fā)送到CPU之前,可以在FPGA上執行高速預處理,如濾波或閾值處理。這也減少了CPU必須處理的數據量,因為CPU上的邏輯只需捕獲感興趣區域的像素,這最終提高了整個(gè)系統的吞吐量。這種架構的第二個(gè)好處是可以在不使用CPU的情況下直接在FPGA內進(jìn)行高速控制操作。FPGA是控制應用的理想選擇,因為它們可以提供非??焖偾腋叨却_定的循環(huán)速率。其中一個(gè)例子就是高速分類(lèi),其中FPGA向執行器發(fā)送脈沖,當脈沖通過(guò)執行器時(shí),執行器會(huì )對零件進(jìn)行剔除或分類(lèi)操作。
圖2.在嵌入式FPGA處理架構中,您可以將相機接口直接連接到FPGA的引腳,以便像素可直接從相機發(fā)送到FPGA。
CPU與FPGA視覺(jué)算法
在對構建異構視覺(jué)系統的不同方式有了基本了解,您可以看一下在FPGA上運行的最佳算法。首先需要了解CPU和FPGA的工作原理。為了解釋這一概念,我們假設一個(gè)理論算法可對圖像執行四個(gè)不同的操作,然后看一下這四個(gè)操作部署到CPU和FPGA上時(shí)分別是如何運行的。
CPU按順序執行操作,因此第一個(gè)操作必須在整個(gè)圖像上運行結束后,第二個(gè)操作才能啟動(dòng)。在本例中,假設算法中的每個(gè)步驟在CPU上運行需要6ms;因此,總處理時(shí)間是24毫秒?,F在考慮在FPGA上運行相同的算法。由于FPGA本質(zhì)上是大規模并行的,所以該算法中的四個(gè)操作可以同時(shí)對圖像中的不同像素上操作。這意味著(zhù)接收第一個(gè)處理的像素僅需2ms的時(shí)間,處理整個(gè)圖像需要4ms的時(shí)間,因而總處理時(shí)間為6ms。這比CPU的執行速度快得多。即使使用FPGA協(xié)處理架構并將圖像傳輸到CPU,整個(gè)處理時(shí)間(包括傳輸時(shí)間)也比單獨使用CPU要短得多。
圖3.由于FPGA在本質(zhì)上是大規模并行的,因此相比CPU,可顯著(zhù)性能提升。
現在考慮一個(gè)真實(shí)的例子,比如粒子計數所需的圖像。首先需要應用卷積濾鏡來(lái)銳化圖像。接下來(lái),通過(guò)閾值運行圖像以生成二進(jìn)制圖像。這不僅可以通過(guò)將其從8位單色轉換為二進(jìn)制來(lái)減少圖像中的數據量,還可以為二進(jìn)制形態(tài)學(xué)應用準備圖像。最后一步是使用形態(tài)學(xué)來(lái)應用關(guān)閉功能。這會(huì )去除二進(jìn)制粒子中的任何孔。
如果僅在CPU上執行上述算法,則必須在閾值步驟開(kāi)始之前完成整個(gè)圖像的卷積步驟。使用NI公司面向LabVIEW的視覺(jué)開(kāi)發(fā)模塊(Vision Development Module)和基于Xilinx Zynq-7020全可編程SoC的cRIO-9068 CompactRIO控制器時(shí),執行上述算法需要的時(shí)間為166.7ms。但是,如果在FPGA上運行相同的算法,則可以并行執行每個(gè)步驟。在FPGA上運行相同的算法只需8ms即可完成。請記住,8ms的時(shí)間中包括將圖像從CPU發(fā)送到FPGA的DMA傳輸時(shí)間,以及算法完成的時(shí)間。在某些應用中,可能需要將處理后的圖像發(fā)回到CPU,以供應用中的其他部分使用。如果加上這個(gè)時(shí)間的話(huà),整個(gè)過(guò)程也只需8.5ms??偟膩?lái)說(shuō),FPGA執行這個(gè)算法要比CPU快20倍。
圖4:使用FPGA協(xié)同處理架構運行視覺(jué)算法,性能比僅用CPU運行同樣的算法提高了20倍。
那么,為什么不在FPGA上運行每個(gè)算法呢?盡管FPGA比CPU更有益于視覺(jué)處理,但是要享受這些優(yōu)勢也要做出一定的權衡。例如,考慮CPU與FPGA的原始時(shí)鐘頻率。FPGA的時(shí)鐘頻率在100~200MHz數量級。很顯然,FPGA的時(shí)鐘頻率低于CPU的時(shí)鐘頻率,CPU可以輕松地在3GHz或更高的頻率下運行。因此,如果一個(gè)應用需要一種必須迭代運行的圖像處理算法,并且不能利用FPGA的并行性,那么CPU能夠更快地進(jìn)行處理。前面討論的示例算法在FPGA上運行可以獲得20倍的速度提升。該算法中的每個(gè)處理步驟同時(shí)對各個(gè)像素或一組像素進(jìn)行操作,因此該算法可以利用FPGA的并行優(yōu)勢來(lái)處理圖像。然而,如果算法使用諸如模式匹配和OCR這樣的處理步驟,這些要求立即分析整個(gè)圖像,這時(shí)候FPGA的優(yōu)勢就比較勉強了。這是由于缺少處理步驟的并行化,以及需要大量?jì)却孢M(jìn)行圖像與模板之間的比對分析。雖然FPGA可以直接訪(fǎng)問(wèn)內部和外部存儲器,但通常情況下,FPGA可用的存儲器數量遠不及CPU可用的數量,或是這些處理操作所需的數量。
克服編程復雜性
FPGA用于圖像處理的優(yōu)勢,取決于每種應用要求,包括應用的特定算法、延遲或抖動(dòng)要求、I/O同步和功耗等因素。通常使用具有FPGA和CPU的架構,能充分利用FPGA和CPU各自的優(yōu)勢,并且在性能、成本和可靠性方面都具有競爭優(yōu)勢。然而,實(shí)現基于FPGA的視覺(jué)系統面臨的最大挑戰之一是克服FPGA的編程復雜性。視覺(jué)算法開(kāi)發(fā)本質(zhì)上是一個(gè)迭代過(guò)程。完成任何一項任務(wù)都必須嘗試多種方法。大多數情況下,需要確定的不是哪種方法可行,而是哪種方法最好,而“最好方法”的判定則因應用的不同而不同。例如,對于某些應用而言,速度至關(guān)重要;而對于另一些應用,則更看重準確度。至少,需要嘗試幾種不同的方法才能為特定應用找到最好的方法。
為了實(shí)現生產(chǎn)率的最大化,不論使用哪種處理平臺,都需要立即獲得關(guān)于算法的反饋和基準測試信息。當使用迭代探索性方法時(shí),實(shí)時(shí)查看算法結果將會(huì )節省大量時(shí)間。什么是正確的閾值?用二進(jìn)制形態(tài)濾波器剔除的顆粒多大或多???哪種圖像預處理算法和算法參數可以最好地清理圖像?這些都是開(kāi)發(fā)視覺(jué)算法時(shí)的常見(jiàn)問(wèn)題,而關(guān)鍵在于是否能夠更改并快速查看結果。然而,傳統的FPGA開(kāi)發(fā)方法可能會(huì )減緩創(chuàng )新,因為算法的每個(gè)設計變化之間需要編譯時(shí)間??朔@一點(diǎn)的一個(gè)方法是使用一個(gè)算法開(kāi)發(fā)工具,可讓您在同一個(gè)環(huán)境進(jìn)行CPU和FPGA的開(kāi)發(fā)工作,而不會(huì )在FPGA編譯時(shí)陷入困境。NI Vision Assistant是一種算法工程工具,用于開(kāi)發(fā)部署到CPU或FPGA上的算法,以幫助您簡(jiǎn)化視覺(jué)系統設計。您還可以使用Vision Assistant在目標硬件上編譯和運行之前測試算法,同時(shí)輕松訪(fǎng)問(wèn)吞吐量和資源利用率信息。
圖5.在具有集成基準測試的FPGA硬件上使用基于配置的工具開(kāi)發(fā)算法,可減少等待代碼編譯的時(shí)間,從而提高了開(kāi)發(fā)速度。
因此在考慮誰(shuí)更適合進(jìn)行圖像處理時(shí),CPU還是FPGA?答案是”視情況而定“。您需要了解應用的目標,才能使用最適合該設計的處理元件。但是,不管是什么應用,基于CPU或FPGA的架構及其固有的優(yōu)勢都可以將機器視覺(jué)應用的性能提升一個(gè)等級。
推薦閱讀:
詳讀無(wú)線(xiàn)傳感器網(wǎng)絡(luò )方案構建的幾大要點(diǎn)
解讀LCD量子點(diǎn)OLED三種技術(shù)的優(yōu)勢和缺點(diǎn)
WiFi測試為何對智能手機如此重要?
高效率、低功率轉換IC是如何改善可穿戴設備性能的?