CPU或FPGA進行圖像處理哪個最好?

CPU 圖像處理 攝像機 相機 大軍閒談 大軍閒談 2017-09-24

隨著多核CPU和強大的FPGA的激增,視覺系統設計人員需要了解使用這些處理元件的好處和權衡。

機器視覺長期以來一直用於工業自動化系統,通過替代人類傳統進行的手動檢查來提高生產質量和產量。

我們都看到了我們日常生活中計算機,移動設備和汽車攝像機的大規模擴散,但機器視覺方面的最大進步是處理能力。

隨著處理器性能每兩年增加一倍,並繼續關注並行處理技術(如多核CPU和FPGA),視覺系統設計人員現在可以應用高度複雜的算法來可視化數據並創建更多智能系統。

這種性能的提高意味著設計人員可以實現更高的數據吞吐量,從而實現更快的圖像採集,使用更高分辨率的傳感器,並充分利用市場上最新動態範圍的一些最新的相機。

性能的提高有助於設計人員更快地獲取圖像,也可以更快地處理圖像。

預處理算法(如閾值處理和過濾)或處理算法(如模式匹配)可以執行得更快。這最終使設計人員能夠比以前更快地基於視覺數據做出決策。

隨著更多的視覺系統,包括最新一代的多核CPU和強大的FPGA到達市場,視覺系統設計人員需要了解使用這些處理元件的好處和權衡。他們不僅需要知道在正確的目標上使用正確的算法,而且還要了解最佳架構作為其設計的基礎。

CPU或FPGA進行圖像處理哪個最好?

圖1:在FPGA協處理中,使用CPU獲取圖像,然後通過DMA發送到FPGA,因此FPGA可以執行操作。

內聯與協同處理

在調查哪種類型的算法最適合每個處理元素之前,您應該瞭解哪種類型的架構最適合每個應用程序。

在開發基於CPU和FPGA的異構體系結構的視覺系統時,需要考慮兩種主要用途:內聯和協同處理。

通過FPGA協同處理,FPGA和CPU共同共同處理負載。

這種架構最常用於GigE Vision和USB3 Vision攝像機,因為它們的採集邏輯最好使用CPU實現。您可以使用CPU獲取圖像,然後通過直接存儲器訪問(DMA)將其發送到FPGA,因此FPGA可以執行諸如濾波或色彩平面提取等操作。然後,您可以將圖像發送回CPU,以進行更高級的操作,如光學字符識別(OCR)或模式匹配。在某些情況下,您可以實現FPGA上的所有處理步驟,並將處理結果發送回CPU。這允許CPU將更多的資源用於其他操作,如運動控制,網絡通信和圖像顯示。

在線性FPGA處理架構中,您可以將攝像機接口直接連接到FPGA的引腳,以便像素從相機發送時直接傳遞到FPGA。 這種架構通常用於Camera Link攝像機,因為它們的採集邏輯可以使用FPGA上的數字電路輕鬆實現。這種架構有兩個主要優點。首先,就像通過協同處理一樣,您可以通過在FPGA上執行預處理功能來使用內聯處理來將部分工作從CPU移動到FPGA。例如,在將像素髮送到CPU之前,您可以使用FPGA進行高速預處理功能,例如過濾或閾值。這也減少了CPU必須處理的數據量,因為它實現了僅捕獲來自感興趣區域的像素的邏輯,這增加了整個系統吞吐量。該架構的第二個好處是,它允許高速控制操作直接發生在FPGA內,而無需使用CPU。 FPGA是控制應用的理想選擇,因為它們可以運行極其快速,高度確定性的循環速率。一個例子是高速排序,在此期間FPGA將脈衝發送到執行器,然後在它們經過時彈出或排列零件。

CPU或FPGA進行圖像處理哪個最好?

圖2:在線性FPGA處理架構中,相機接口直接連接到FPGA的引腳,因此像素從相機發送時直接傳遞到FPGA。

CPU與FPGA視覺算法

通過對構建異構視覺系統的不同方式的基本瞭解,您可以查看在FPGA上運行的最佳算法。首先,您應該瞭解CPU和FPGA的運行方式。為了說明這個概念,考慮一種在圖像上執行四種不同操作的理論算法,並檢查在CPU和FPGA上實現時如何運行這些操作。

CPU按順序執行操作,因此第一個操作必須在第二個操作開始之前在整個映像上運行。在本示例中,假設算法中的每個步驟都需要6 ms才能在CPU上運行; 因此,總處理時間為24 ms。 現在考慮在FPGA上運行的相同算法。由於FPGA本質上是大規模並行的,所以該算法中的四個操作中的每一個可以同時在圖像中的不同像素上操作。這意味著接收第一個處理像素的時間量只有2 ms,處理整個圖像的時間長度為4 ms,總共處理時間為6 ms。這顯著快於CPU實現。即使您使用FPGA協處理架構並將圖像傳輸到CPU,也包括傳輸時間在內的整個處理時間遠遠少於單獨使用CPU。

現在考慮一個真正的例子,您準備一個圖像進行粒子計數。首先,您應用卷積濾鏡來銳化圖像。接下來,您通過閾值運行映像以生成二進制映像。這不僅可以通過將其從8位單色轉換為二進制來減少圖像中的數據量,還可以為二進制形態準備圖像。最後一步是使用形態來應用關閉功能。這會去除二進制粒子中的任何孔。

CPU或FPGA進行圖像處理哪個最好?

圖3:由於FPGA本質上是大規模並行的,因此它們可以比CPU提供顯著的性能改進。

如果僅在CPU上執行此算法,則必須在閾值步驟開始之前完成整個圖像上的卷積步驟,等等。使用LabVIEW的NI Vision開發模塊和基於Xilinx Zynq-7020全可編程SoC的cRIO-9068 CompactRIO控制器時,這需要166.7 ms。但是,如果您在FPGA上運行相同的算法,則可以在每個像素完成上一步驟時並行執行每個步驟。

在FPGA上運行相同的算法只需8 ms即可完成。請記住,8 ms包括將圖像從CPU發送到FPGA的DMA傳輸時間,以及算法完成的時間。在某些應用中,您可能需要將處理後的圖像發送回CPU,以供應用程序的其他部分使用。 考慮到這個時間,整個過程只需8.5 ms。總的來說,FPGA可以執行這個算法比CPU快20倍。

那麼為什麼不在FPGA上運行每個算法呢?儘管FPGA具有對CPU的視覺處理的優勢,但是這些優點在於權衡。例如,考慮CPU與FPGA的原始時鐘速率。 FPGA時鐘頻率在100 MHz到200 MHz的數量級。這些速率明顯低於CPU,可以輕鬆地在3 GHz或更高的速度下運行。因此,如果應用程序需要必須運行迭代的圖像處理算法,並且不能利用FPGA的並行性,則CPU可以更快地處理它。前面討論的示例算法通過在FPGA上運行而獲得20倍的改進。該算法中的每個處理步驟同時對各個像素或小組像素進行操作,因此該算法可以利用FPGA大量並行處理圖像的優勢。然而,如果算法使用諸如模式匹配和OCR的處理步驟,這需要立即分析整個圖像,FPGA將努力跑贏大市。這是由於缺少處理步驟的並行化以及分析圖像與模板所需的大量內存。雖然FPGA可以直接訪問內部和有時是外部存儲器,但通常情況下CPU的可用內存量不足以及這些處理操作所需的數量。

CPU或FPGA進行圖像處理哪個最好?

圖4:使用FPGA協處理架構運行該視覺算法的性能比僅實現CPU的性能提高了20倍。

克服編程複雜性

用於圖像處理的FPGA的優點取決於每種用例,包括應用的特定算法,延遲或抖動要求,I / O同步和功率利用率。

通常使用具有FPGA和CPU的架構是兩個世界中最好的,並且在性能,成本和可靠性方面提供了競爭優勢。不幸的是,實現基於FPGA的視覺系統面臨的最大挑戰之一是克服FPGA的編程複雜性。視覺算法開發本質上是一個迭代過程。你知道前面你必須嘗試一些任務的方法。大多數情況下,您需要確定哪種方法可行,但哪種方法最有效,而“最佳”則與應用程序不同。對於某些應用程序,速度至關重要。在其他方面,這是準確的。至少,您需要嘗試一些不同的方法來為任何特定的應用程序找到最好的方法。

為了最大限度地提高生產力,您需要立即獲得有關算法的反饋和基準測試信息,無論您使用的處理平臺如何。當您使用迭代探索方法時,實時查看算法結果是一個巨大的節省時間。

CPU或FPGA進行圖像處理哪個最好?

圖5:在具有集成基準測試的FPGA目標的基於配置的工具中開發算法減少了等待代碼編譯和加速開發的時間。

什麼是正確的閾值?用二元形態濾波器排除顆粒有多大或小? 哪個圖像預處理算法和算法參數可以最好地清理圖像?這些都是開發視覺算法時常見的問題,並且能夠進行更改並快速查看結果是關鍵。然而,傳統的FPGA開發方法可能會因為算法的每個設計變化所需的編譯時間而減緩創新。

克服這一點的一個方法是使用一個算法開發工具,幫助您開發來自同一環境的CPU和FPGA,而不會在FPGA編譯時陷入困境。

NI Vision Assistant是一種算法工程工具,通過幫助您開發在CPU或FPGA上進行部署的算法,可以簡化視覺系統設計。您還可以使用Vision Assistant在目標硬件上編譯和運行之前測試算法,同時輕鬆訪問吞吐量和資源利用率信息。

作者:Brandon Treece 新機器視覺編譯

相關推薦

推薦中...