1. 程式人生 > >CPU vs FPGA,影象處理誰更厲害?

CPU vs FPGA,影象處理誰更厲害?

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

機器視覺在工業自動化系統中的應用已經有一定的歷史,它取代了傳統的人工檢查,提高了生產質量和產量。 我們已經看到了相機在計算機、移動裝置和汽車等日常生活裝置中的迅速普及,但是機器視覺的最大進步莫過於處理能力。

隨著處理器的效能以每兩年翻一番的速度不斷提升,以及多核CPU和FPGA等並行處理技術日益受到關注,視覺系統設計人員現在可以應用複雜的演算法來視覺化資料,並創建出更加智慧的系統。

效能的提高意味著設計人員可以獲得更高的資料吞吐量,從而實現更快速的影象採集,使用更高解析度的感測器,並充分利用市場上具有最高動態範圍的一些新款相機。效能的提高不僅可讓設計人員更快速地採集影象,而且還能更快速地處理影象。預處理演算法(如閾值和濾波)或處理演算法(如模式匹配)也可以更快速地執行。最終設計人員能夠比以往更快地基於視覺化資料制定決策。

德州奧斯汀NI總部資料採集和控制產品市場經理,主要負責機器視覺領域的Brandon Treece認為,隨著視覺系統越來越多地整合最新一代多核CPU和強大FPGA,視覺系統設計人員需要了解使用這些處理元件的好處和得失。他們不僅需要在正確的硬體上執行正確的演算法,還需要了解哪些架構最適合作為其設計的基礎。

1內聯處理和協處理

在研究哪種型別的演算法最適合哪個處理元件之前,您應該瞭解每個應用最適合的架構型別。在開發基於CPU和FPGA的異構架構的視覺系統時,需要考慮兩個主要的使用情況: 嵌入式處理和協處理。

如果是FPGA協處理,FPGA和CPU將共同工作,共享處理負載。這種架構最常用於GigE Vision和USB3 Vision相機,因為它們的採集邏輯最好是在CPU上實現:

您可以使用CPU採集影象,然後通過直接儲存器訪問(DMA)將其傳送到FPGA,以便FPGA可以執行諸如濾波或顏色平面提取等操作。然後,您可以將影象傳送回CPU以進行更高階的操作,例如光學字元識別(OCR)或模式匹配。

在某些情況下,您可以在FPGA上實現所有的處理步驟,並只將處理結果傳送回CPU。這使得CPU可以將更多的資源用於運動控制、網路通訊和影象顯示等其他操作。

0?wx_fmt=jpeg

圖1.在FPGA協處理中,影象使用CPU進行採集後,通過DMA傳送到FPGA,然後由FPGA對影象進行處理。

在嵌入式FPGA處理架構中,您可以將相機介面直接連線到FPGA的引腳,以便畫素可直接從相機發送到FPGA。這種架構通常與Camera Link相機一起使用,因為它們的採集邏輯易於使用FPGA上的數位電路來實現。 這個架構有兩個主要的好處:

首先,與協處理一樣,在FPGA上執行預處理功能時,可以使用嵌入式處理將部分工作從CPU轉移到FPGA。例如,在將像素髮送到CPU之前,可以在FPGA上執行高速預處理,如濾波或閾值處理。這也減少了CPU必須處理的資料量,因為CPU上的邏輯只需捕獲感興趣區域的畫素,這最終提高了整個系統的吞吐量。

這種架構的第二個好處是可以在不使用CPU的情況下直接在FPGA內進行高速控制操作。FPGA是控制應用的理想選擇,因為它們可以提供非常快速且高度確定的迴圈速率。其中一個例子就是高速分類,其中FPGA向執行器傳送脈衝,當脈衝通過執行器時,執行器會對零件進行剔除或分類操作。

0?wx_fmt=jpeg

圖2.在嵌入式FPGA處理架構中,您可以將相機介面直接連線到FPGA的引腳,以便畫素可直接從相機發送到FPGA。

2CPU與FPGA視覺演算法

在對構建異構視覺系統的不同方式有了基本瞭解,您可以看一下在FPGA上執行的最佳演算法。 首先需要了解CPU和FPGA的工作原理。 為了解釋這一概念,我們假設一個理論演算法可對影象執行四個不同的操作,然後看一下這四個操作部署到CPU和FPGA上時分別是如何執行的:

CPU按順序執行操作,因此第一個操作必須在整個影象上執行結束後,第二個操作才能啟動。在本例中,假設演算法中的每個步驟在CPU上執行需要6ms; 因此,總處理時間是24ms。

現在考慮在FPGA上執行相同的演算法。由於FPGA本質上是大規模並行的,所以該演算法中的四個操作可以同時對影象中的不同畫素上操作。這意味著接收第一個處理的畫素僅需2ms的時間,處理整個影象需要4ms的時間,因而總處理時間為6ms。這比CPU的執行速度快得多。

即使使用FPGA協處理架構並將影象傳輸到CPU,整個處理時間(包括傳輸時間)也比單獨使用CPU要短得多。

0?wx_fmt=jpeg

圖3.由於FPGA在本質上是大規模並行的,因此相比CPU,可顯著效能提升。

現在考慮一個真實的例子,比如粒子計數所需的影象。

首先需要應用卷積濾鏡來銳化影象。

接下來,通過閾值執行影象以生成二進位制影象。這不僅可以通過將其從8位單色轉換為二進位制來減少影象中的資料量,還可以為二進位制形態學應用準備影象。

最後一步是使用形態學來應用關閉功能。 這會去除二進位制粒子中的任何孔。

如果僅在CPU上執行上述演算法,則必須在閾值步驟開始之前完成整個影象的卷積步驟。使用NI公司面向LabVIEW的視覺開發模組(Vision Development Module)和基於Xilinx Zynq-7020全可程式設計SoC的cRIO-9068 CompactRIO控制器時,執行上述演算法需要的時間為166.7ms。

但是,如果在FPGA上執行相同的演算法,則可以並行執行每個步驟。在FPGA上執行相同的演算法只需8ms即可完成。請記住,8ms的時間中包括將影象從CPU傳送到FPGA的DMA傳輸時間,以及演算法完成的時間。在某些應用中,可能需要將處理後的影象發回到CPU,以供應用中的其他部分使用。如果加上這個時間的話,整個過程也只需8.5ms。總的來說,FPGA執行這個演算法要比CPU快20倍。

0?wx_fmt=jpeg

圖4:使用FPGA協同處理架構執行視覺演算法,效能比僅用CPU運行同樣的演算法提高了20倍。

3那麼,為什麼不在FPGA上執行每個演算法呢?

儘管FPGA比CPU更有益於視覺處理,但是要享受這些優勢也要做出一定的權衡。例如,考慮CPU與FPGA的原始時鐘頻率。FPGA的時鐘頻率在100~200MHz數量級。很顯然,FPGA的時鐘頻率低於CPU的時鐘頻率,CPU可以輕鬆地在3GHz或更高的頻率下執行。因此,如果一個應用需要一種必須迭代執行的影象處理演算法,並且不能利用FPGA的並行性,那麼CPU能夠更快地進行處理。

前面討論的示例演算法在FPGA上執行可以獲得20倍的速度提升。該演算法中的每個處理步驟同時對各個畫素或一組畫素進行操作,因此該演算法可以利用FPGA的並行優勢來處理影象。 然而,如果演算法使用諸如模式匹配和OCR這樣的處理步驟,這些要求立即分析整個影象,這時候FPGA的優勢就比較勉強了。這是由於缺少處理步驟的並行化,以及需要大量記憶體進行影象與模板之間的比對分析。

雖然FPGA可以直接訪問內部和外部儲存器,但通常情況下,FPGA可用的儲存器數量遠不及CPU可用的數量,或是這些處理操作所需的數量。

4克服程式設計複雜性

FPGA用於影象處理的優勢,取決於每種應用要求,包括應用的特定演算法、延遲或抖動要求、I/O同步和功耗等因素。通常使用具有FPGA和CPU的架構,能充分利用FPGA和CPU各自的優勢,並且在效能、成本和可靠性方面都具有競爭優勢。然而,實現基於FPGA的視覺系統面臨的最大挑戰之一是克服FPGA的程式設計複雜性。

視覺演算法開發本質上是一個迭代過程。完成任何一項任務都必須嘗試多種方法。大多數情況下,需要確定的不是哪種方法可行,而是哪種方法最好,而“最好方法”的判定則因應用的不同而不同。例如,對於某些應用而言,速度至關重要;而對於另一些應用,則更看重準確度。至少,需要嘗試幾種不同的方法才能為特定應用找到最好的方法。

為了實現生產率的最大化,不論使用哪種處理平臺,都需要立即獲得關於演算法的反饋和基準測試資訊。當使用迭代探索性方法時,實時檢視演算法結果將會節省大量時間。什麼是正確的閾值?用二進位制形態濾波器剔除的顆粒多大或多小? 哪種影象預處理演算法和演算法引數可以最好地清理影象? 這些都是開發視覺演算法時的常見問題,而關鍵在於是否能夠更改並快速檢視結果。然而,傳統的FPGA開發方法可能會減緩創新,因為演算法的每個設計變化之間需要編譯時間。克服這一點的一個方法是使用一個演算法開發工具,可讓您在同一個環境進行CPU和FPGA的開發工作,而不會在FPGA編譯時陷入困境。NI Vision Assistant是一種演算法工程工具,用於開發部署到CPU或FPGA上的演算法,以幫助您簡化視覺系統設計。您還可以使用Vision Assistant在目標硬體上編譯和執行之前測試演算法,同時輕鬆訪問吞吐量和資源利用率資訊。

0?wx_fmt=jpeg

圖5. 在具有整合基準測試的FPGA硬體上使用基於配置的工具開發演算法,可減少等待程式碼編譯的時間,從而提高了開發速度。

因此在考慮誰更適合進行影象處理時,CPU還是FPGA?答案是“視情況而定”。您需要了解應用的目標,才能使用最適合該設計的處理元件。但是,不管是什麼應用,基於CPU或FPGA的架構及其固有的優勢都可以將機器視覺應用的效能提升一個等級。

640?

0?wx_fmt=gif

免責宣告:本文系網路轉載,版權歸原作者所有。如涉及作品版權問題,請與我們聯絡,我們將根據您提供的版權證明材料確認版權並支付稿酬或者刪除內容。