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

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

111.webp.jpg

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

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

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

無論是構建哪種計算機視覺應用,其學習過程都要經歷一段十分陡峭的學習曲線,而且將其部署到邊緣則需要更為復雜的操作。

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

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

“邊緣”是什么

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

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

在邊緣運行計算機視覺的好處

在邊緣運行計算機視覺應用程序有三大好處:時間、安全和成本。

1. 減少延遲

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

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

2. 提升安全性

其次,有了邊緣部署,便不再需要將數據傳輸到云端,所有數據都可以留在設備本身的封閉電路中。邊緣計算將暴露風險分散到多個設備上,并且可以在不連接中央服務器的情況下完成所有處理——這種架構更為安全和私密。例如,安裝在家里的邊緣設備可以處理實時數據,且不需要依賴可能損害人們日常活動隱私的共享云服務。由于計算機視覺數據可能會涉及私人或其他敏感數據,因此使用邊緣計算會更加安全。

3. 降低成本

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

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

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

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

接下來,我們要開始構建應用程序了。假設,我們已經有了一個工作模型,要構建計算機視覺應用程序的原型。目前常用的計算機視覺庫是OpenCV。

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

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

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

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

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

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

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

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

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

獲取計算機視覺模型

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

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

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

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

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

部署自己的應用程序

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

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

THEEND

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

更多
暫無評論