NI 的視覺(jué)開(kāi)發(fā)模塊和視覺(jué)助手讓機(jī)器視覺(jué)從構(gòu)思到原型再到應(yīng)用部署一路通暢。
視覺(jué)系統(tǒng)正在成為主流。技術(shù)的成本/效益分析及合理應(yīng)用已發(fā)展到這樣的階段: 工程師正在將視覺(jué)功能運(yùn)用到各種應(yīng)用中,從無(wú)人駕駛汽車到消費(fèi)類電子產(chǎn)品質(zhì)量檢測(cè)系統(tǒng)無(wú)所不包。這種大規(guī)模采用正在推動(dòng)視覺(jué)走出實(shí)驗(yàn)室,走進(jìn)嵌入式系統(tǒng)和工廠車間。所部署的系統(tǒng)往往需要與控制環(huán)路中的 I/O、廣泛分布的大量攝像頭或視覺(jué)功能實(shí)現(xiàn)高級(jí)同步。隨著工藝和應(yīng)用的日趨復(fù)雜化,視覺(jué)系統(tǒng)正在要求更快、更高級(jí)的處理以及更嚴(yán)格的時(shí)序與同步。
為滿足這些要求,視覺(jué)系統(tǒng)設(shè)計(jì)人員正日漸依賴由實(shí)時(shí)處理器、FPGA、GPU 或 DSP 處理單元構(gòu)成的異構(gòu)處理平臺(tái)處理專門(mén)的任務(wù),滿足 I/O要求和處理性能需求。智能相機(jī)、圖像采集卡和視覺(jué)系統(tǒng)都使用異構(gòu)架構(gòu)來(lái)滿足應(yīng)用要求。
FPGA 具備的并行處理功能,例如賽靈思 All Programmable FPGA 系列提供的并行處理功能,自然適用于實(shí)現(xiàn)大量圖像處理算法的。FPGA 可用于同時(shí)執(zhí)行高數(shù)據(jù)強(qiáng)度處理和高速傳感器測(cè)量。此外,這類器件時(shí)延極低,這對(duì)視覺(jué)應(yīng)用來(lái)說(shuō)極為重要,因?yàn)闀r(shí)延會(huì)增大根據(jù)圖像數(shù)據(jù)做出決策所需的時(shí)間。FPGA 有助于避免抖動(dòng),因此可作為高確定性的處理單元。
但是構(gòu)建包含一個(gè) FPGA 的異構(gòu)系統(tǒng)會(huì)給系統(tǒng)設(shè)計(jì)人員帶來(lái)嚴(yán)重的編程難題。在上市時(shí)間的重壓下,視覺(jué)系統(tǒng)設(shè)計(jì)人員要能夠迅速構(gòu)建具有復(fù)雜特性的解決方案原型。在異構(gòu)系統(tǒng)上編程需要這樣一種工具: 在目標(biāo)硬件上編譯和運(yùn)行算法之前,其不僅可幫助領(lǐng)域?qū)<以诙鄠€(gè)平臺(tái)上設(shè)計(jì) IP 功能,而且還可幫助他們測(cè)試視覺(jué)算法。該工具應(yīng)該支持: 在整個(gè)原型設(shè)計(jì)過(guò)程中能夠輕松訪問(wèn)吞吐量及資源使用信息。
NI 把這稱之為算法工程。采用該工藝技術(shù),領(lǐng)域?qū)<遥杉芯鉀Q手里的難題,不必關(guān)注底層硬件技術(shù)。NI 具有視覺(jué)助手的視覺(jué)開(kāi)發(fā)模塊 (VDM) 能夠?yàn)槟峁┲С忠曈X(jué)助手的視覺(jué)開(kāi)發(fā)功能。
配備視覺(jué)助手的 VDM 有助于快速完成原型設(shè)計(jì)、代碼生成、FPGA 資源估算、自動(dòng)代碼并行化以及并行數(shù)據(jù)流同步化(針對(duì)時(shí)延均衡等任務(wù))。VDM 包含超過(guò) 50 種 FPGA 圖像處理功能以及在處理器與 FPGA 之間高效傳輸圖像的功能。您可使用 VDM 中的視覺(jué)助手迅速設(shè)計(jì) FPGA 視覺(jué)應(yīng)用原型,開(kāi)發(fā) FPGA 視覺(jué)應(yīng)用。
基于配置的原型設(shè)計(jì)
視覺(jué)助手是一種基于配置的原型設(shè)計(jì)工具,可幫助您迭代圖像處理算法,查看參數(shù)調(diào)整如何影響圖像。有了視覺(jué)助手,您可以在圖像流水線中的每一個(gè)視覺(jué)模塊后顯示輸出(處理后的圖像)(圖 1)。您可使用該工具測(cè)試不同圖像集上的不同算法和參數(shù),無(wú)需編譯 IP,因此可顯著減少設(shè)計(jì)視覺(jué)算法所需的時(shí)間。
?
圖 1 — 能夠估算器件利用率的視覺(jué)助手
您可使用視覺(jué)助手測(cè)試原型設(shè)計(jì)環(huán)境中算法的結(jié)果和所部署代碼的結(jié)果,以確保實(shí)現(xiàn)方案可獲得相同的結(jié)果。
NI 已經(jīng)定制了用于滿足 FPGA 編程人員要求的工具。在 FPGA 上構(gòu)建任何算法時(shí),主要考慮因素是 FPGA 架構(gòu)上的資源消耗、流水線的時(shí)延以及在特定架構(gòu)上該算法可實(shí)現(xiàn)的最高頻率。視覺(jué)助手通過(guò)為圖像流水線中的每個(gè)模塊提供所消耗資源的估算,起到幫助作用。您可使用該工具測(cè)試原型設(shè)計(jì)環(huán)境中算法的結(jié)果和所部署代碼的結(jié)果,以確保實(shí)施方案能夠獲得相同的結(jié)果。
一個(gè)考慮因素是把多大的內(nèi)核用于圖像濾波運(yùn)算。內(nèi)核大小的選擇會(huì)影響流水線中資源的使用和時(shí)延情況,較大的內(nèi)核一般比較小的內(nèi)核需要的資源更多。
要為應(yīng)用選擇最合適的內(nèi)核大小,您可使用視覺(jué)助手進(jìn)行實(shí)驗(yàn),直到您在最小資源耗用和最大性能方面取得最理想的結(jié)果。如圖 1 所示視覺(jué) IP 功能實(shí)時(shí)估算是原型設(shè)計(jì)過(guò)程中的一個(gè)必備功能。
視覺(jué)開(kāi)發(fā)模塊的視覺(jué) FPGA IP可讓開(kāi)發(fā)人員使用大規(guī)模并行處理和 Vivado 高層次綜合工具在 FPGA 上實(shí)現(xiàn)全面流水線的低時(shí)延架構(gòu)優(yōu)化型視覺(jué)功能。
實(shí)時(shí)并行運(yùn)行多個(gè)圖像流水線是一個(gè)常規(guī)要求。這種場(chǎng)景要求在多條流水線融合為單條流水線時(shí),并行流水線的時(shí)延必須均衡。NI 在其視覺(jué)FPGA IP 工具集中提供一個(gè)同步緩存器。視覺(jué)助手不僅可自動(dòng)計(jì)算流水線中的時(shí)延,而且還可在并行流水線融合時(shí)確保均衡的時(shí)延,從而可為您配置同步緩沖器。這樣就能保證同步緩沖器中的 FIFO 能夠根據(jù)流水線的最大時(shí)延提供足夠的深度。
視覺(jué)助手中的性能測(cè)量實(shí)用工具可估算處理每幀所需的最長(zhǎng)時(shí)間(圖 2),告訴您流水線中所有模塊的總體時(shí)延。NI 硬件系列中的大部分處理器都具有運(yùn)行于其上的實(shí)時(shí)操作系統(tǒng),因此使用視覺(jué)助手能輕松估算執(zhí)行視覺(jué)功能所需的時(shí)間。
?
圖 2 — 性能測(cè)量實(shí)用工具
對(duì)于使用 LabVIEW 的新手來(lái)說(shuō),需要注意的是視覺(jué)助手可確保創(chuàng)建功能齊全的項(xiàng)目,包括所有的相關(guān)組件(如傳輸虛擬儀器 (VI) 和 DMA FIFO)以及圖像采集邏輯等。一個(gè) VI 與其它編程語(yǔ)言中的一個(gè)函數(shù)或子程序類似。傳輸 VI 需要在主機(jī)/采集邏輯和 FPGA 之間傳輸圖像數(shù)據(jù)。DMA FIFO 無(wú)需主機(jī)處理器參與。因此它們是在 FPGA 目標(biāo)器件和主機(jī)之間傳輸大量數(shù)據(jù)的、最快捷的可用方法。采集邏輯取決于視覺(jué)系統(tǒng)是基于內(nèi)處理還是協(xié)處理。此外,視覺(jué)助手還可幫助您創(chuàng)建其它 VI,比如運(yùn)行在處理器上的主機(jī) VI 以及 FPGA VI 等。隨后您可使用賽靈思 Vivado? 工具編譯 FPGA VI,為部署在FPGA 上生成比特流。
值得一提的是容納圖像處理流水線的系統(tǒng)可以根據(jù)采集邏輯駐留的位置大致劃分為內(nèi)處理或協(xié)處理。在內(nèi)處理中采集邏輯駐留在 FPGA 上; 攝像機(jī)使用采集邏輯配置,圖像在 FPGA 上處理。該結(jié)果和處理后的圖像隨即發(fā)送回主機(jī)進(jìn)行評(píng)估和進(jìn)一步分析。在協(xié)處理中,攝像頭的采集邏輯駐留在處理器上。把圖像從處理器傳輸給 FPGA,然后將處理后的圖像從 FPGA 發(fā)送回處理器,需要一定量的時(shí)間。此外,您還可在處理器和 FPGA 之間對(duì)圖像流水線的處理進(jìn)行分區(qū)。
作為使用 FPGA 的視覺(jué)系統(tǒng)的開(kāi)發(fā)人員,您需要清楚 FPGA 可實(shí)現(xiàn)的吞吐量。您可使用吞吐量信息和實(shí)時(shí)資源估算來(lái)判斷您可部署多少功能(IP 模塊)到 FPGA 上。在協(xié)處理?xiàng)l件下,處理器性能決定了最終的吞吐量。在使用 NI 隨同視覺(jué)開(kāi)發(fā)模塊提供的 FPGA IP 功能時(shí)也是如此,因?yàn)檫@些功能不僅可全面實(shí)現(xiàn)流水線,而且還可提供優(yōu)于大多數(shù)處理器的性能。
從原型到部署
視覺(jué)開(kāi)發(fā)模塊的視覺(jué) FPGA IP 可讓開(kāi)發(fā)人員使用大規(guī)模并行處理和賽靈思 Vivado 高層次綜合(HLS) 工具在 FPGA 上實(shí)現(xiàn)全面流水線的低時(shí)延架構(gòu)優(yōu)化型視覺(jué) IP。NI 提供的視覺(jué) FPGA IP 目前針對(duì)三個(gè)賽靈思 FPGA 系列(Kintex?-7、Virtex?-5 和Spartan?-6)和賽靈思Zynq?-7000 All Programmable SoC。
圖像可視為二維陣列,圖像運(yùn)算一般基于矩陣。FPGA 內(nèi)在的并行性可為它們實(shí)現(xiàn)高速性能。您不僅可使用環(huán)路實(shí)現(xiàn)圖像矩陣運(yùn)算,也可展開(kāi)環(huán)路,充分利用 FPGA 的并行特性,在展開(kāi)環(huán)路后執(zhí)行多項(xiàng)任務(wù)。LabVIEW FPGA 和 LabVIEW FPGA IP Builder 是開(kāi)發(fā)人員在 FPGA 上創(chuàng)建視覺(jué) IP 使用的主要工具。
視覺(jué) FPGA IP 功能為單像素處理,因此它們先從像素流中接收 1 個(gè)像素,然后再輸出 1 個(gè)像素。這些 IP 功能使用基于使能的握手或 4 線握手協(xié)議互動(dòng)。采用這種實(shí)現(xiàn)方案的主要原因是控制路徑的復(fù)雜性會(huì)隨圖像流水線中功能數(shù)量的增加而增大,因此在這些功能之間需要無(wú)縫數(shù)據(jù)轉(zhuǎn)換。4 線協(xié)議可在位于單周期時(shí)間環(huán)路(SCTL) 中的視覺(jué) FPGA IP功能之間實(shí)現(xiàn)無(wú)損數(shù)據(jù)傳輸。
使用 SCTL 可確保環(huán)路中的模塊能夠在用戶設(shè)定的頻率下提供時(shí)鐘功能。
圖 3 是通過(guò)描述 4 線協(xié)議和同步緩沖器來(lái)融合像素的 FPGA VI。該 4 線協(xié)議專門(mén)針對(duì)并行運(yùn)行的算法而設(shè)計(jì),它可通過(guò)確保數(shù)據(jù)在生產(chǎn)— 消費(fèi)架構(gòu)中處理來(lái)提高吞吐量。另外,4 線握手在 FPGA 上消耗的資源最少。這非常重要,因?yàn)樵搮f(xié)議可構(gòu)成對(duì)底層視覺(jué)功能的開(kāi)銷。
?
圖 3 — 支持同步節(jié)點(diǎn)的 FPGA VI 的內(nèi)部構(gòu)件
此外,視覺(jué) FPGA IP 還可為您帶來(lái)在流水線中添加定制代碼,提供開(kāi)放式環(huán)境的高靈活性。定制代碼需要具有 4 線握手實(shí)現(xiàn)方案的封裝程序 VI。隨后您可將定制代碼插入到圖像流水線中。必須確保定制代碼為全面流水線的,否則就可能影響流水線的完整性。您可使用 LabVIEW 實(shí)現(xiàn)定制代碼,也可通過(guò) LabVIEW FPGA 中的 HDL 集成節(jié)點(diǎn)在VHDL 中使用現(xiàn)有的代碼。
該視覺(jué) FPGA IP 工具集提供多種預(yù)處理功能,例如邊緣檢測(cè)濾波器、卷積濾波器、低通濾波器、灰度形態(tài)、二進(jìn)制形態(tài)和閾值。此外,它還包含執(zhí)行算術(shù)和邏輯運(yùn)算的視覺(jué) IP 功能以及輸出圖心等結(jié)果的功能。它還有一項(xiàng)功能—— 簡(jiǎn)單邊緣工具(Simple Edge Tool)。該功能能沿著一條線找到邊緣,對(duì)測(cè)徑應(yīng)用非常實(shí)用。量化功能能接收掩膜圖像和待處理的圖像流,并返回一份報(bào)告,提供有關(guān)掩膜圖像所定義區(qū)域的面積、平均偏差和標(biāo)準(zhǔn)偏差的信息。線性平均可計(jì)算全部圖像或部分圖像的平均像素密度(平均線輪廓)。
NI 視覺(jué) FPGA IP 列表中的最新成員是顆粒分析報(bào)告。您可通過(guò)執(zhí)行顆粒分析或區(qū)塊分析來(lái)檢測(cè)圖像中的連接區(qū)域或像素分組,然后對(duì)這些區(qū)域進(jìn)行選擇測(cè)量。使用該信息,您可檢測(cè)晶圓片上的瑕疵,檢測(cè)電路板上的焊接瑕疵,也可定位運(yùn)動(dòng)控制應(yīng)用中的對(duì)象。
該 IP 的一項(xiàng)獨(dú)特特性是,它能在顆粒信息在兩個(gè)幀間擴(kuò)散時(shí)檢測(cè)到該顆粒。NI 隨同 VDM 提供了一個(gè)顆粒分析報(bào)告示例。圖 4 是具備圖像顯示功能的主機(jī) VI。檢測(cè)系統(tǒng)時(shí)需要該功能,因?yàn)槟鸁o(wú)法隨時(shí)保證受檢測(cè)的對(duì)象能在單個(gè)幀中捕獲。
?
圖 4 — 啟用保持重疊后的顆粒分析報(bào)告示例
近 70% 的 NT 視覺(jué) FPGA IP 功能都是使用 IP Builder 開(kāi)發(fā)的。這是 LabVIEW FPGA 中的一個(gè)實(shí)用工具,有助于您使用 LabVIEW 以圖形代碼形式編碼,然后使用 Vivado HLS 輸出 RTL 代碼。這種方法的主要優(yōu)勢(shì)在于,熟悉圖形編碼的用戶可以在開(kāi)發(fā)應(yīng)用的同時(shí),生成一個(gè)描述應(yīng)用頻率及時(shí)延要求的指令文件。將 LabVIEW IP Builder 與 VivadoHLS 搭配使用即可生成合適的 VHDL 代碼。您可在圖像上使用基于陣列的運(yùn)算,而且 Vivado HLS 可確保 VI 將依據(jù)指令集實(shí)現(xiàn)所需的運(yùn)算頻率及最低時(shí)延。
Vivado HLS 是視覺(jué)應(yīng)用開(kāi)發(fā)的理想選擇,它能幫助從所生成的 IP Builder C 語(yǔ)言代碼抽象化算法描述和數(shù)據(jù)類規(guī)范(整數(shù)固定點(diǎn))。此外,它還能為功能的早期測(cè)試生成必要的仿真模型。所生成的架構(gòu)感知 VHDL 代碼可提供高度可重復(fù)的高質(zhì)量結(jié)果。
NI 始終堅(jiān)持的理念是提供開(kāi)放靈活的系統(tǒng)并輔以合適的軟件工具,充分發(fā)揮其優(yōu)勢(shì)。開(kāi)發(fā)人員正在將基于異構(gòu)架構(gòu)的視覺(jué)系統(tǒng)設(shè)計(jì)到數(shù)量不斷增長(zhǎng)的廣泛應(yīng)用中。對(duì)這些異構(gòu)系統(tǒng)的軟件設(shè)計(jì)而言,下一個(gè)前沿可能是能使用各種系統(tǒng)組件(CPU、GPU 和 FPGA)的功能與資源智能判斷算法組件部署位置的編譯器或應(yīng)用開(kāi)發(fā)引擎。
隨著更高級(jí)產(chǎn)品和工藝不斷推動(dòng)視覺(jué)系統(tǒng)應(yīng)用范圍的擴(kuò)大,應(yīng)用開(kāi)發(fā)人員將需要一款支持視覺(jué)功能的高效原型設(shè)計(jì)及算法開(kāi)發(fā)環(huán)境。為開(kāi)發(fā)人員及域?qū)<姨峁┖线m的工具,將為大眾掀起新一輪視覺(jué)系統(tǒng)創(chuàng)新浪潮。
評(píng)論
查看更多