<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > 借助reVISION加速監(jiān)控系統(tǒng)的開發(fā)

          借助reVISION加速監(jiān)控系統(tǒng)的開發(fā)

          作者: 時(shí)間:2018-07-25 來(lái)源:網(wǎng)絡(luò) 收藏

          監(jiān)控系統(tǒng)嚴(yán)重依靠視覺系統(tǒng)提供的功能加速在廣泛市場(chǎng)和系統(tǒng)中的部署。這些監(jiān)控系統(tǒng)的用途非常廣泛,包括事件和流量監(jiān)控、安全與安防用途、ISR 和商業(yè)智能。用途的多樣性也帶來(lái)了幾大挑戰(zhàn),需要系統(tǒng)設(shè)計(jì)人員在解決方案中加以解決。它們是:

          本文引用地址:http://www.ex-cimer.com/article/201807/383750.htm

          ● 多攝像頭視覺 – 能夠連接多個(gè)同類或異類類型。

          ● 計(jì)算機(jī)視覺技術(shù) - 能夠使用高級(jí)庫(kù)和框架(例如 OpenCV 和 OpenVX)進(jìn)行開發(fā)。

          ● 機(jī)器學(xué)習(xí)技術(shù) – 能夠使用框架(例如 Caffe)來(lái)實(shí)現(xiàn)機(jī)器學(xué)習(xí)推斷引擎。

          ● 提高分辨率和幀率 – 提高每個(gè)圖像幀所需的數(shù)據(jù)處理。

          根據(jù)用途,監(jiān)控系統(tǒng)會(huì)實(shí)現(xiàn)相應(yīng)算法(例如光流法)以檢測(cè)圖像內(nèi)的運(yùn)動(dòng)。立體視覺提供圖像內(nèi)的深度知覺,也使用機(jī)器學(xué)習(xí)技術(shù)來(lái)檢測(cè)和分類圖像中的對(duì)象。

          圖 1 - 實(shí)例應(yīng)用(上:面部檢測(cè)與分類,下:光流)

          異構(gòu)系統(tǒng)器件,例如 All Programmable Zynq®-7000 和 Zynq® Ultrascale+™ MPSoC,正越來(lái)越多地應(yīng)用于監(jiān)控系統(tǒng)的開發(fā)。這些器件是可編程邏輯(PL)架構(gòu)與高性能 ARM® 內(nèi)核處理器系統(tǒng)(PS)的完美結(jié)合。

          與傳統(tǒng)方案相比,PL 與 PS 的緊密耦合使得創(chuàng)建的系統(tǒng)具有更強(qiáng)的響應(yīng)能力、可重配置能力以及更高的能效?;?CPU/GPU 的傳統(tǒng) SoC 需要使用系統(tǒng)存儲(chǔ)器將圖像從一個(gè)處理階段傳送到下個(gè)階段。這會(huì)降低確定性并增大功耗和系統(tǒng)響應(yīng)時(shí)延,因?yàn)槎鄠€(gè)資源需要訪問(wèn)同一個(gè)存儲(chǔ)器,造成處理算法瓶頸。該瓶頸隨幀率和圖像分辨率增加而加重。

          當(dāng)解決方案采用 Zynq-7000 或 Zynq UltraScale+ MPSoC 器件實(shí)現(xiàn)時(shí),就會(huì)打破這個(gè)瓶頸。這些器件允許設(shè)計(jì)人員在器件的 PL 中實(shí)現(xiàn)圖像處理流水線。在 PL 中創(chuàng)建真正的并行圖像流水線,其中一個(gè)階段的輸出被傳送到另一個(gè)階段的輸入。這樣能獲得確定的響應(yīng)時(shí)間,縮短時(shí)延,實(shí)現(xiàn)功耗最佳解決方案。

          利用 PL 實(shí)現(xiàn)圖像處理流水線,還能獲得比傳統(tǒng) CPU/GPU SoC 方案更寬的接口能力,而后者只能獲得固定接口。PL IO 接口的靈活特性允許任意連接,支持 MIPI、Camera Link、HDMI 等行業(yè)標(biāo)準(zhǔn)接口。這種靈活特性還能實(shí)現(xiàn)定制傳統(tǒng)接口,而且能進(jìn)行升級(jí)以支持最新接口標(biāo)準(zhǔn)。利用 PL,還可以讓系統(tǒng)并行連接多個(gè)攝像頭。

          不過(guò),最關(guān)鍵的是實(shí)現(xiàn)應(yīng)用算法,而且無(wú)需用硬件描述語(yǔ)言(例如 Verilog 或 VHDL)重新編寫所有高級(jí)算法。這正是 reVISION™ 堆棧的用武之地。

          圖 2 - 傳統(tǒng) CPU/GPU 方案與 Zynq-7000/Zynq UltraScale+ MPSoC 的對(duì)比

          reVISION 堆棧

          reVISION 堆棧使開發(fā)人員能夠?qū)崿F(xiàn)計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)技術(shù)。在這里,針對(duì) Zynq-7000 和 Zynq UltraScale+ MPSoC 的高級(jí)框架和庫(kù)同樣適用。為此,reVISION 將支持平臺(tái)、應(yīng)用和算法開發(fā)的多種資源完美結(jié)合在一起。該堆棧分為三個(gè)不同等級(jí):

          1、平臺(tái)開發(fā) - 這是堆棧的最底層,是剩余堆棧層的構(gòu)建基礎(chǔ)。該層為 SDSoC™ 工具提供平臺(tái)定義。

          2、 算法開發(fā) – 這是堆棧的中間層,為所需算法的實(shí)現(xiàn)提供支持。該層有助于圖像處理和機(jī)器學(xué)習(xí)推斷引擎加快向可編程邏輯中轉(zhuǎn)移。

          3、應(yīng)用開發(fā) – 這是堆棧的最高層,可提供行業(yè)標(biāo)準(zhǔn)框架支持。該層用來(lái)開發(fā)應(yīng)用,以便利用平臺(tái)開發(fā)和算法開發(fā)層。

          堆棧的算法和應(yīng)用層支持傳統(tǒng)圖像處理流程和機(jī)器學(xué)習(xí)流程。在算法層中,支持用 OpenCV 庫(kù)開發(fā)圖像處理算法。這包括:能將多種 OpenCV 功能(包括 OpenVX 內(nèi)核子集)加速放在可編程邏輯中實(shí)現(xiàn)。為支持機(jī)器學(xué)習(xí),算法開發(fā)層提供幾種可以放在 PL 中用以實(shí)現(xiàn)機(jī)器學(xué)習(xí)推斷引擎的預(yù)定義硬件功能。然后,由應(yīng)用開發(fā)層訪問(wèn)這些圖像處理算法和機(jī)器學(xué)習(xí)推斷引擎,用以創(chuàng)建最終應(yīng)用,并為 OpenVX 和 Caffe 等高級(jí)框架提供支持。

          圖 3 - reVISION 堆棧

          reVISION 堆棧能提供所有必要元素,用以實(shí)現(xiàn)高性能監(jiān)控系統(tǒng)所需的算法。

          在 reVISION 中加速 OpenCV

          算法開發(fā)層的最重要優(yōu)勢(shì)之一是能夠加速多種 OpenCV 功能。該層中,可加速的 OpenCV 功能被分成四個(gè)高級(jí)類別。

          1、計(jì)算 – 包括的功能有:兩個(gè)幀的絕對(duì)偏差、像素運(yùn)算(加、減和乘)、梯度和積分運(yùn)算。

          2、輸入處理 – 支持位深度轉(zhuǎn)換、通道運(yùn)算、直方圖均衡化、重新映射和尺寸重調(diào)整。

          3、濾波 - 支持多種濾波器,包括 Sobel、自定義卷積和高斯濾波器。

          4、其他 – 提供多種功能,包括 Canny/Fast/Harris 邊緣檢測(cè)、閥值以及 SVM 和 HoG 分級(jí)器。

          這些功能構(gòu)成了 OpenVX 子集的核心功能,能夠針對(duì) OpenVX 與應(yīng)用開發(fā)層緊密集成。開發(fā)團(tuán)隊(duì)可利用這些功能在可編程邏輯中創(chuàng)建算法流水線。以此方式在邏輯中實(shí)現(xiàn)這些功能,這樣能顯著提高算法實(shí)現(xiàn)性能。

          reVISION 中的機(jī)器學(xué)習(xí)

          reVISION 提供與 Caffe 的集成,能夠?qū)崿F(xiàn)機(jī)器學(xué)習(xí)推斷引擎。與 Caffe 的集成發(fā)生在算法開發(fā)層和應(yīng)用開發(fā)層。Caffe 框架在 C++ 庫(kù)中為開發(fā)人員提供大量函數(shù)庫(kù)、模型和預(yù)訓(xùn)練的權(quán)重,以及 Python™ 和 MATLAB® 捆綁程序。該框架使用戶能夠創(chuàng)建和訓(xùn)練網(wǎng)絡(luò),以執(zhí)行所需的運(yùn)算,無(wú)需重新開始。為便于模型重用,Caffe 用戶可通過(guò)模型庫(kù)(model zoo)共享模型;庫(kù)中提供多個(gè)網(wǎng)絡(luò)模型,用戶可針對(duì)專門的任務(wù)實(shí)現(xiàn)和更新網(wǎng)絡(luò)模型。在 prototxt 文件中定義這些網(wǎng)絡(luò)和權(quán)重,當(dāng)在機(jī)器學(xué)習(xí)環(huán)境中部署時(shí),使用該文件來(lái)定義推斷引擎。

          reVISION 提供 Caffe 集成功能,使機(jī)器學(xué)習(xí)推斷引擎的實(shí)現(xiàn)非常簡(jiǎn)單,只需提供 prototxt 文件即可;剩下的工作由框架來(lái)完成。然后,使用這個(gè) prototxt 文件來(lái)配置處理系統(tǒng)以及可編程邏輯中的硬件優(yōu)化庫(kù)。可編程邏輯用來(lái)實(shí)現(xiàn)推斷引擎,并包含 Conv、ReLu、Pooling 等功能。

          圖 4 - Caffe 流程集成

          機(jī)器學(xué)習(xí)推斷引擎中的數(shù)字表達(dá)對(duì)性能也起到重要作用。機(jī)器學(xué)習(xí)越來(lái)越多地使用更為高效、降低精度的定點(diǎn)數(shù)字系統(tǒng),例如 INT8 表達(dá)法。與傳統(tǒng)的浮點(diǎn) 32 (FP32)方法相比,定點(diǎn)降精度數(shù)字系統(tǒng)不會(huì)造成較大精度損失。與浮點(diǎn)相比,定點(diǎn)運(yùn)算更易于實(shí)現(xiàn),因此改用 INT8 后能實(shí)現(xiàn)更高效、快速的解決方案。可編程邏輯解決方案最適合使用定點(diǎn)數(shù)字,reVISION 能在 PL 中使用 INT8 表達(dá)法。采用 INT8 表達(dá)法后,可在 PL 中使用專用 DSP 模塊。有了這些 DSP 模塊的架構(gòu),當(dāng)使用相同的內(nèi)核權(quán)重時(shí),可同時(shí)執(zhí)行兩個(gè) INT8 乘法累積運(yùn)算。這樣不僅能獲得高性能實(shí)現(xiàn)方案,而且可以降低功耗。憑借可編程邏輯的靈活特性,也可以輕松實(shí)現(xiàn)精度更低的定點(diǎn)數(shù)字表達(dá)形式。

          結(jié)論

          reVISION 使開發(fā)人員能夠利用 Zynq-7000 和 Zynq UltraScale+ MPSoC 器件所提供的功能。而且,即使不是專家也能利用可編程邏輯來(lái)實(shí)現(xiàn)算法。這些算法和機(jī)器學(xué)習(xí)應(yīng)用可通過(guò)高級(jí)的行業(yè)標(biāo)準(zhǔn)框架來(lái)實(shí)現(xiàn),從而縮短系統(tǒng)開發(fā)時(shí)間。這使開發(fā)人員能夠提供響應(yīng)性和可重配置能力更強(qiáng)而且功耗更加優(yōu)化的系統(tǒng)。



          關(guān)鍵詞: 嵌入式 傳感器

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();