想在邊緣運(yùn)行計算機(jī)視覺程序?先來迎接挑戰(zhàn)!

alwaysAI
如今,將計算機(jī)視覺等人工智能應(yīng)用程序集成到新的商業(yè)模式和產(chǎn)品中的情況越來越常見。計算機(jī)視覺在現(xiàn)實世界中的應(yīng)用十分廣泛:分析交通模式、檢測行為變化、統(tǒng)計地區(qū)的人數(shù),等等。

111.webp.jpg

人工智能可以讓計算機(jī)聰明地行動,并且在真實環(huán)境中快速做出決策,同時收獲相對理想的效果。

當(dāng)然,這個概括性的定義較為寬泛和模糊,而且涉及多個領(lǐng)域,計算機(jī)視覺便是其中的典型例子。在計算機(jī)視覺領(lǐng)域中,計算機(jī)可以像人類一樣處理圖像,并對圖像內(nèi)容進(jìn)行推斷,之后計算機(jī)程序便可以利用這些信息做出最有利的決策。

如今,將計算機(jī)視覺等人工智能應(yīng)用程序集成到新的商業(yè)模式和產(chǎn)品中的情況越來越常見。計算機(jī)視覺在現(xiàn)實世界中的應(yīng)用十分廣泛:分析交通模式、檢測行為變化、統(tǒng)計地區(qū)的人數(shù),等等。

無論是構(gòu)建哪種計算機(jī)視覺應(yīng)用,其學(xué)習(xí)過程都要經(jīng)歷一段十分陡峭的學(xué)習(xí)曲線,而且將其部署到邊緣則需要更為復(fù)雜的操作。

雖然近年來在云中部署和運(yùn)行應(yīng)用程序變得愈加流行,但這并不總是最好的解決方案——特別是對于需要大量處理或使用敏感數(shù)據(jù)的應(yīng)用程序來說,而這兩種情況在計算機(jī)視覺應(yīng)用程序中非常常見。

在這種情況下,最好的選擇往往是將應(yīng)用程序部署到邊緣中。在邊緣中部署計算機(jī)視覺應(yīng)用程序的好處非常多,我們將在下文中詳細(xì)介紹。同時,我們也將討論在邊緣中運(yùn)行計算機(jī)視覺時要面臨的挑戰(zhàn),以及如何克服它們。

“邊緣”是什么

一般來說,邊緣設(shè)備都是小型、輕量級的設(shè)備,可以在其上部署和運(yùn)行計算機(jī)視覺應(yīng)用程序。如今,許多邊緣設(shè)備甚至具有圖形處理單元(Graphical Processing Unit,GPU)或視覺處理單元(Visual Processing Unit,VPU),這使其能適用于更多的模型和更復(fù)雜的應(yīng)用程序。

本文中的邊緣設(shè)備是指Raspberry Pi、Jetson Nano 或NVIDIA Jetson Xavier NX等NVIDIA Jetson 設(shè)備或各種物聯(lián)網(wǎng)(Internet of Things,IoT)設(shè)備,這些邊緣設(shè)備具有一定的感知或評估能力,且能實現(xiàn)與使用環(huán)境間的交互。

在邊緣運(yùn)行計算機(jī)視覺的好處

在邊緣運(yùn)行計算機(jī)視覺應(yīng)用程序有三大好處:時間、安全和成本。

1. 減少延遲

雖然可以使用互聯(lián)網(wǎng)連接來部署應(yīng)用程序,但一旦應(yīng)用在邊緣設(shè)備上部署完成后,云端鏈接就無用武之地了。這意味著,應(yīng)用程序可以在邊緣設(shè)備上(而不是云端)完成所有推斷,進(jìn)而大大減少了應(yīng)用程序?qū)⑼茢噢D(zhuǎn)化為操作所花費(fèi)的時間。這一優(yōu)勢對于某些用例而言是必不可少的,如自動駕駛汽車或安全攝像頭。在云端接收和發(fā)送數(shù)據(jù)可能會存在數(shù)據(jù)丟失的風(fēng)險,此外,云端所需的額外時間可能意味著無法及時響應(yīng)任務(wù),這對于自動駕駛等任務(wù)來說,或許會帶來災(zāi)難性的后果。

此外,一些特殊的外圍設(shè)備(例如攝像頭)本身沒有互聯(lián)網(wǎng)連接,邊緣設(shè)備借助它們來提高性能或擴(kuò)展應(yīng)用程序功能。此類設(shè)備對邊緣處理概念的應(yīng)用更加出神入化:它們不是通過USB將圖像數(shù)據(jù)傳輸?shù)竭吘壴O(shè)備進(jìn)行處理,而是將處理器集成到攝像機(jī)本身,進(jìn)一步減少處理延遲。

2. 提升安全性

其次,有了邊緣部署,便不再需要將數(shù)據(jù)傳輸?shù)皆贫?,所有?shù)據(jù)都可以留在設(shè)備本身的封閉電路中。邊緣計算將暴露風(fēng)險分散到多個設(shè)備上,并且可以在不連接中央服務(wù)器的情況下完成所有處理——這種架構(gòu)更為安全和私密。例如,安裝在家里的邊緣設(shè)備可以處理實時數(shù)據(jù),且不需要依賴可能損害人們?nèi)粘;顒与[私的共享云服務(wù)。由于計算機(jī)視覺數(shù)據(jù)可能會涉及私人或其他敏感數(shù)據(jù),因此使用邊緣計算會更加安全。

3. 降低成本

最后,由于不需要云處理,在邊緣部署CV應(yīng)用程序的成本要低得多,畢竟云計算公司會對每分鐘每個端點的所有推斷進(jìn)行收費(fèi)。對于那些想要“按需付費(fèi)”的機(jī)構(gòu)來說,這是或許是一個很好的、靈活的選擇,但對于需要進(jìn)行大量實時處理的機(jī)構(gòu)來說,就成了一種負(fù)擔(dān)——比如需要24小時運(yùn)行攝像頭和傳感器的智能城市、醫(yī)院或倉庫。

在邊緣運(yùn)行計算機(jī)視覺所面臨的挑戰(zhàn)

構(gòu)建計算機(jī)視覺應(yīng)用程序有其自身需要克服的挑戰(zhàn),而且這往往是一個反復(fù)迭代的過程,因此,用于構(gòu)建計算機(jī)視覺應(yīng)用程序的所有管道都必須足夠靈活,以應(yīng)對用于承載應(yīng)用程序部署的模型、庫、或設(shè)備可能會出現(xiàn)的變化。

下面,我們將通過一個故事來了解在邊緣部署計算機(jī)視覺應(yīng)用程序要面臨的的挑戰(zhàn)。首先,我們可以通過以下兩種方式來建立計算機(jī)視覺模型:1)在網(wǎng)上搜索符合需要的開源模型;2)建立一個圖像數(shù)據(jù)集并訓(xùn)練自己的模型。在第二個方法中,我們需要收集自己的數(shù)據(jù)集,單這一項的工作量就已經(jīng)非常大了,同時,我們還需要對圖像標(biāo)注工具和訓(xùn)練本身有一定的了解。

接下來,我們要開始構(gòu)建應(yīng)用程序了。假設(shè),我們已經(jīng)有了一個工作模型,要構(gòu)建計算機(jī)視覺應(yīng)用程序的原型。目前常用的計算機(jī)視覺庫是OpenCV。

大家可以使用OpenCV的c++或Python應(yīng)用程序編程接口(api)。例如,可以通過pip install opencv-python輕松訪問Python OpenCV API。

我們花了一些時間來學(xué)習(xí)這個API,并且獲得了一個可以很好地與模型輸出集成的程序原型。

現(xiàn)在,我們在完成了應(yīng)用程序后,要它部署到一個邊緣設(shè)備上,比如Raspberry Pi。首先,我們會發(fā)現(xiàn)我們使用的OpenCV構(gòu)建與Raspberry Pi處理器不兼容。其他依賴項也可能存在相同的問題。這樣一來,我們就需要在Raspberry Pi上編譯OpenCV。

然后,要需要弄清楚如何查看結(jié)果!借助cv2.imshow(),我們可以在自己的筆記本電腦上輕松實現(xiàn)這一點,但如果使用的是無頭設(shè)備(沒有圖形接口)的話,則需要尋找另一種方法。

OK,現(xiàn)在我們的應(yīng)用程序已經(jīng)可以啟動并運(yùn)行了,你會發(fā)現(xiàn),曾經(jīng)在筆記本電腦上看到的驚人的快速性能早已不復(fù)存在。當(dāng)然,沒有人會指望一臺35美元的單板電腦的性能可以超過Macbook,但我們依然想要更好的性能。

我們了解到可以使用因特爾的Neural Compute Stick 2來提高Pi的性能,但是現(xiàn)在還需要構(gòu)建OpenVINO。由于OpenVINO的接口與OpenCV不同,所以需要決定是要重寫應(yīng)用程序以利用NCS2,還是要重建OpenCV以使其能夠運(yùn)行OpenVINO推理引擎。當(dāng)所有這些都完成后,我們可能會發(fā)現(xiàn)模型需要做更多的調(diào)整,輸出可能會發(fā)生變化,我們也可能會不斷循環(huán)執(zhí)行以上這些步驟!

如何克服這些挑戰(zhàn)

要想克服這些挑戰(zhàn),除了需要計算機(jī)視覺知識外,還需要具備一定的物聯(lián)網(wǎng)經(jīng)驗。然而,這些問題也可以通過像alwaysAI這樣的開發(fā)者平臺來解決。在alwaysAI,其唯一使命就是盡可能簡化構(gòu)建和部署計算機(jī)視覺應(yīng)用程序到邊緣設(shè)備的過程,包括訓(xùn)練模型,構(gòu)建應(yīng)用,并部署應(yīng)用到邊緣設(shè)備,如Raspberry Pi、Jetson Nano等等。

有了alwaysAI,你只需要知道一些基本的命令,剩下的都可以交給我們的命令行界面(CLI):收集數(shù)據(jù),標(biāo)注數(shù)據(jù),訓(xùn)練一個模型,并部署和啟動你的應(yīng)用程序。

獲取計算機(jī)視覺模型

alwaysAI有一個公開可用的模型目錄,與所有用我們的管道構(gòu)建的應(yīng)用程序都可以協(xié)同工作。你也可以使用alwaysAI模型訓(xùn)練工具包來訓(xùn)練自己的對象檢測模型。該工具包以TensorFlow作為后端框架,并在mobilnet_ssd上進(jìn)行遷移學(xué)習(xí),它是在COCO數(shù)據(jù)集上訓(xùn)練的。

該模型訓(xùn)練工具包可以協(xié)助用戶在無需學(xué)習(xí)新的API或手動安裝任何額外模塊的情況下開始使用TensorFlow。工具包中還包含了計算機(jī)視覺注釋工具(Computer Vision Annotation Tool,CVAT),因此用戶可以直接標(biāo)注新的數(shù)據(jù)集,而不需要從頭開始下載并安裝CVAT。

開發(fā)自己的應(yīng)用程序

我們有自己的Python API,名為edgeiq,它具備一些OpenCV的核心功能,可以與之進(jìn)行交互。這表示,大家只需要知道一個API,就可以啟動并運(yùn)行計算機(jī)視覺應(yīng)用程序。

因為我們自己喜歡使用OpenCV,所以我們將其內(nèi)置為邊緣運(yùn)行環(huán)境的核心部分,這樣一來,大家可以將“import cv2”添加到所有alwaysAI應(yīng)用程序中,并且直接在自己的應(yīng)用程序中使用OpenCV,無論你選擇的部署設(shè)備是什么。

部署自己的應(yīng)用程序

我們通過Docker鏡像和Python虛擬環(huán)境進(jìn)行容器化操作。因此,無論使用何種設(shè)備,都可以輕松部署應(yīng)用程序。同時,我們可以使用Dockerfile或requirements.txt文件,輕松添加應(yīng)用程序可能出現(xiàn)的任何必要需求。

在邊緣運(yùn)行計算機(jī)視覺既可以節(jié)省時間和成本,又可以提供更高的安全性。盡管開發(fā)和部署任何計算機(jī)視覺應(yīng)用程序都要面臨其自身的挑戰(zhàn),但在邊緣部署時尤其如此。

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論