[陸小慧 劉勇]
隨著深度學(xué)習(xí)技術(shù)的發(fā)展,在掀起第三次人工智能熱潮的同時,也使得計算機視覺技術(shù)在目標分析,如車輛分析、人臉識別、人形分析等領(lǐng)域的應(yīng)用成為可能,進一步提升了計算機視覺應(yīng)用產(chǎn)品的智能化特征。比如:基于車牌的自動檢測和識別技術(shù)已經(jīng)替代了傳統(tǒng)的停車場出入管理系統(tǒng);人臉識別也已經(jīng)在金融等領(lǐng)域替代了傳統(tǒng)的身份認證方式。
然而,基于深度學(xué)習(xí)的目標(人臉、人形、車輛、車牌等)檢測和識別技術(shù)存在的一個缺陷就是對計算資源的能力要求非常高。對于簡單的深度學(xué)習(xí)網(wǎng)絡(luò)模型計算,CPU 的時延可以接受,但是對復(fù)雜網(wǎng)絡(luò)模型的計算,CPU 計算效率極其低下,無法達到商用的實時性要求。GPU 和FPGA的計算性能遠遠超過CPU;然而,GPU 成本高昂,F(xiàn)PGA的算法移植實施周期較長,對研發(fā)人員的技能要求也比較高。如何高效、充分地利用計算機系統(tǒng)的計算資源,既要滿足商用中不同應(yīng)用場景的實時性要求,又要滿足用來運行基于深度學(xué)習(xí)的網(wǎng)絡(luò)計算服務(wù),是智能視覺相關(guān)產(chǎn)品交付中面臨的一個重大的挑戰(zhàn)。
本文研究的目的在于,提供一種基于異構(gòu)硬件計算資源的深度學(xué)習(xí)智能視覺計算服務(wù)的調(diào)度系統(tǒng)及服務(wù)實現(xiàn)方法,以便針對不同應(yīng)用場景的要求、不同的深度學(xué)習(xí)計算服務(wù),提供滿足性能、時延和成本要求的綜合的系統(tǒng)部署和運行方案。
本文研究采用圖1 所示技術(shù)方案,系統(tǒng)包括:
圖1 智能視覺服務(wù)系統(tǒng)示意圖
智能視覺服務(wù)管理引擎:根據(jù)基于深度學(xué)習(xí)的視覺服務(wù)計算復(fù)雜度、性能指標、實現(xiàn)模式,來確定不同類型的服務(wù)是否能夠運行在CPU、GPU、FPGA 等不同的異構(gòu)計算固件上。這些視覺計算服務(wù)包括但不限于人臉檢測、人臉特征計算、人體屬性識別、車輛識別、車牌識別、異常行為檢測等計算機智能視覺服務(wù)。
智能視覺應(yīng)用引擎:實現(xiàn)基于智能服務(wù)的業(yè)務(wù)應(yīng)用,結(jié)合業(yè)務(wù)場景,定義業(yè)務(wù)實現(xiàn)流程,通過對智能服務(wù)能力的調(diào)用來實現(xiàn)智能視覺應(yīng)用功能。
智能視覺服務(wù)調(diào)度引擎:根據(jù)不同的業(yè)務(wù)場景和業(yè)務(wù)性能指標要求,將不同的業(yè)務(wù)能力請求下發(fā)到對應(yīng)的深度學(xué)習(xí)能力引擎上去完成計算。同時,在批量服務(wù)計算場景下,可以根據(jù)視覺服務(wù)計算引擎的忙閑程度、響應(yīng)時間自適應(yīng)地調(diào)度服務(wù)計算請求。
智能視覺服務(wù)計算引擎:基于深度學(xué)習(xí)實現(xiàn)的服務(wù)能力引擎,支持運行 在異構(gòu)計算單位CPU、GPU 和FPGA等固件之上??梢灾С滞环N深度學(xué)習(xí)服務(wù)能力以多實例方式同時運行在不同的固件之上。
利用本系統(tǒng)方法的數(shù)據(jù)處理方法包括以下步驟:
步驟(1):智能視覺服務(wù)在異構(gòu)計算單元上的部署。
智能視覺服務(wù)管理引擎根據(jù)業(yè)務(wù)確定的指標要求,結(jié)合各個視覺服務(wù)的計算性能指標,分別在CPU、GPU 和FPGA 上啟動多個相同的或者不同的服務(wù)計算實例,并且確保內(nèi)存、顯存等計算資源可以支撐這些服務(wù)實例的運行資源要求。
步驟(2):在智能視覺服務(wù)部署成功之后,智能視覺應(yīng)用引擎開始對外提供服務(wù),它負責(zé)接收業(yè)務(wù)請求,并結(jié)合業(yè)務(wù)場景進行業(yè)務(wù)流程的編排和調(diào)度控制。
比如,對于智能視頻監(jiān)控場景,智能視覺應(yīng)用引擎需要在得到解碼后的視頻幀時,先調(diào)用人臉檢測服務(wù),再通過人臉跟蹤算法實現(xiàn)人臉軌跡跟蹤,接著調(diào)用人臉特征計算服務(wù)獲取人臉特征值,最終調(diào)用人臉檢索服務(wù)定位人臉對應(yīng)的人的身份。
當(dāng)然,智能視覺應(yīng)用引擎在調(diào)用后端的智能服務(wù)時,需要通過智能視覺服務(wù)調(diào)度引擎來確定將服務(wù)調(diào)用請求轉(zhuǎn)發(fā)給哪個異構(gòu)計算單元上部署的服務(wù)計算實例。
步驟(3):智能視覺服務(wù)調(diào)度引擎在接收到智能視覺應(yīng)用引擎的服務(wù)計算請求時,根據(jù)該請求所要求的業(yè)務(wù)指標(如時延許可度),結(jié)合各個異構(gòu)計算單元上運行的服務(wù)實例計算能力及其忙閑程度,將服務(wù)計算請求調(diào)度到后端的智能視覺服務(wù)計算引擎上,運行服務(wù)計算實例。
步驟(4):智能視覺服務(wù)計算引擎上運行的服務(wù)計算實例,在接收到服務(wù)計算請求時,完成相應(yīng)的服務(wù)計算。
視覺服務(wù)計算引擎需要定時將各個異構(gòu)計算單元的資源使用情況定時上報給智能視覺服務(wù)調(diào)度引擎,以便供智能視覺服務(wù)調(diào)度引擎去做服務(wù)調(diào)度決策。此外,智能視覺服務(wù)計算引擎還具備自動的資源更新功能。由于智能視覺計算服務(wù)在處理不同大小的批量圖片計算請求之后,隨著時間的推移,不同的異構(gòu)計算單元內(nèi)會存在無效的資源占用情況,比如內(nèi)存和顯存,如果不采用有效的辦法及時處理,必將影響計算引擎的穩(wěn)定性和計算效率。
為此,本文系統(tǒng)中,實現(xiàn)了一個自動的智能視覺服務(wù)計算引擎資源更新功能,當(dāng)檢測到異構(gòu)計算單元上的資源占用情況達到一定的閾值,或者經(jīng)過一定的時間間隔之后,計算引擎會分批將不同的服務(wù)計算實例進行資源刷新,使得在不影響系統(tǒng)業(yè)務(wù)功能的情況下,及時釋放所占用的無效資源。
與現(xiàn)有技術(shù)相比較,本文系統(tǒng)支持同時利用異構(gòu)計算單元GPU、CPU、FPGA 等固件來運行基于深度學(xué)習(xí)實現(xiàn)的智能視覺服務(wù),有效提升整個系統(tǒng)的運行能力和運行效率,也可以有效降低整個系統(tǒng)的硬件成本。
其次,本文實現(xiàn)的智能視覺應(yīng)用系統(tǒng),可以進行精細化的智能視覺服務(wù)計算調(diào)度??梢愿鶕?jù)業(yè)務(wù)場景及其時延要求,結(jié)合運行在異構(gòu)計算單元上的不同智能視覺服務(wù)計算的性能指標,提供匹配的智能視覺計算實例為其服務(wù),既不影響用戶體驗,也能在資源受限的條件下提供最佳業(yè)務(wù)功能保障。
最后,本文提供的方法實現(xiàn)了異構(gòu)計算單元的服務(wù)資源更新機制,可以有效解決智能視覺服務(wù)計算長時間運行所產(chǎn)生的無線資源占用問題,進一步提升了系統(tǒng)的運行效率和運行穩(wěn)定性。
為了便于本領(lǐng)域研究人員的理解,下面結(jié)合智能視頻監(jiān)控場景實例對本文研究的系統(tǒng)和方法作進一步的描述。
同時,我們結(jié)合計算資源的處理能力和匹配情況,約定FPGA 運用于人臉檢測服務(wù),約定CPU 運用于人臉跟蹤服務(wù),約定GPU 運用于計算量最大的人臉特征計算服務(wù)。當(dāng)然,這個是系統(tǒng)后臺可以進行配置的,各計算資源也可以交叉使用,但不是最佳資源分配。
實例1:智能視頻監(jiān)控場景,下面結(jié)合圖2 對本系統(tǒng)數(shù)據(jù)處理方法進行說明。
(1)智能視覺服務(wù)管理引擎,起N 路FPGA 人臉檢測服務(wù);
(2)智能視覺服務(wù)管理引擎,起N 路CPU 人臉跟蹤服務(wù);
(3)智能視覺服務(wù)管理引擎,起N 路GPU 人臉特征計算服務(wù);
(4)智能視覺應(yīng)用引擎,解碼出視頻幀;
(5)智能視覺應(yīng)用引擎,向智能視覺調(diào)度引擎發(fā)起人臉檢測請求;
(6)智能視覺調(diào)度引擎,從N 路FPGA 人臉檢測服務(wù)中選一路空閑的做人臉檢測;
(7)智能視覺服務(wù)計算引擎,選中的某一路FPGA人臉檢測服務(wù)進行人臉檢測計算,將計算結(jié)果返回給智能視覺調(diào)度引擎。
(8)智能視覺調(diào)度引擎,將檢測出的人臉結(jié)果返回給智能視覺應(yīng)用引擎;
(9)智能視覺應(yīng)用引擎,向智能視覺調(diào)度引擎發(fā)起人臉跟蹤請求;
(10)智能視覺調(diào)度引擎,從N 路CPU 人臉跟蹤服務(wù)中選一路空閑的做人臉跟蹤;
(11)智能視覺服務(wù)計算引擎,選中的某一路CPU人臉跟蹤服務(wù)進行人臉跟蹤計算,將計算結(jié)果返回給智能視覺調(diào)度引擎。
(12)智能視覺調(diào)度引擎,將跟蹤到的目標結(jié)果返回給智能視覺應(yīng)用引擎;
(13)智能視覺應(yīng)用引擎,向智能視覺調(diào)度引擎發(fā)起人臉特征計算請求;
(14)智能視覺調(diào)度引擎,從N 路GPU 人臉特征計算服務(wù)中選一路空閑的人臉特征計算;
(15)智能視覺服務(wù)計算引擎,選中的某一路GPU人臉特征計算服務(wù)進行人臉特征計算,將計算結(jié)果返回給智能視覺調(diào)度引擎。
(16)智能視覺調(diào)度引擎,將計算的特征值結(jié)果返回給智能視覺應(yīng)用引擎;
(17)智能視覺應(yīng)用引擎,調(diào)用人臉檢索服務(wù)查找到對應(yīng)人的身份。
實例2:正臉檢測場景,下面結(jié)合圖3 對本系統(tǒng)數(shù)據(jù)處理方法進行說明。
圖3 正臉檢測場景
(1)智能視覺服務(wù)管理引擎,起N 路GPU 正臉檢測服務(wù);
(2)智能視覺服務(wù)管理引擎,起N 路CPU 正臉檢測服務(wù);
(3)智能視覺應(yīng)用引擎,解碼圖片;
(4)智能視覺應(yīng)用引擎,向智能視覺調(diào)度引擎發(fā)起正臉檢測請求;
(5)智能視覺調(diào)度引擎,從N 路GPU 正臉檢測服務(wù)中選一路空閑的做正臉檢測;
(6)智能視覺服務(wù)計算引擎,選中的某一路GPU 正臉檢測服務(wù)進行正臉檢測計算,將計算結(jié)果返回給智能視覺調(diào)度引擎。
(7)智能視覺調(diào)度引擎,將檢測出的正臉結(jié)果返回給智能視覺應(yīng)用引擎;
(8)智能視覺應(yīng)用引擎,向智能視覺調(diào)度引擎發(fā)起正臉檢測請求;
(9)智能視覺調(diào)度引擎,從N 路CPU 正臉檢測服務(wù)中選一路空閑的做正臉檢測;
(10)智能視覺服務(wù)計算引擎,選中的某一路CPU正臉檢測服務(wù)進行正臉檢測計算,將計算結(jié)果返回給智能視覺調(diào)度引擎。
(11)智能視覺調(diào)度引擎,將檢測出的正臉結(jié)果返回給智能視覺應(yīng)用引擎。
實例3:批量特征提取場景,下面結(jié)合圖4 對本系統(tǒng)數(shù)據(jù)處理方法進行說明。
圖4 批量特征提取場景
(1)智能視覺服務(wù)管理引擎,起N 路FPGA 人臉檢測服務(wù);
(2)智能視覺服務(wù)管理引擎,起N 路GPU 人臉特征計算服務(wù);
(3)智能視覺服務(wù)管理引擎,起N 路CPU 人臉特征計算服務(wù);
(4)智能視覺應(yīng)用引擎,解碼圖片;
(5)智能視覺應(yīng)用引擎,向智能視覺調(diào)度引擎發(fā)起人臉檢測請求;
(6)智能視覺調(diào)度引擎,從N 路FPGA 人臉檢測服務(wù)中選一路空閑的做人臉檢測;
(7)智能視覺服務(wù)計算引擎,選中的某一路FPGA人臉檢測服務(wù)進行人臉檢測計算,將計算結(jié)果返回給智能視覺調(diào)度引擎。
(8)智能視覺調(diào)度引擎,將檢測出的人臉結(jié)果返回給智能視覺應(yīng)用引擎;
(9)智能視覺應(yīng)用引擎,向智能視覺調(diào)度引擎發(fā)起人臉特征計算請求;
(10)智能視覺調(diào)度引擎,從N 路GPU 人臉特征計算服務(wù)中選一路空閑的人臉特征計算;
(11)智能視覺服務(wù)計算引擎,選中的某一路GPU人臉特征計算服務(wù)進行人臉特征計算,將計算結(jié)果返回給智能視覺調(diào)度引擎。
(12)智能視覺調(diào)度引擎,將計算的特征值結(jié)果返回給智能視覺應(yīng)用引擎;
(13)智能視覺應(yīng)用引擎,存儲圖片的特征值;
(14)智能視覺應(yīng)用引擎,解碼圖片;
(15)智能視覺應(yīng)用引擎,向智能視覺調(diào)度引擎發(fā)起人臉檢測請求;
(16)智能視覺調(diào)度引擎,從N 路FPGA 人臉檢測服務(wù)中選一路空閑的做人臉檢測;
(17)智能視覺服務(wù)計算引擎,選中的某一路FPGA人臉檢測服務(wù)進行人臉檢測計算,將計算結(jié)果返回給智能視覺調(diào)度引擎。
(18)智能視覺調(diào)度引擎,將檢測出的人臉結(jié)果返回給智能視覺應(yīng)用引擎;
(19)智能視覺應(yīng)用引擎,向智能視覺調(diào)度引擎發(fā)起人臉特征計算請求;
(20)智能視覺調(diào)度引擎,從N 路CPU 人臉特征計算服務(wù)中選一路空閑的人臉特征計算;
(21)智能視覺服務(wù)計算引擎,選中的某一路CPU人臉特征計算服務(wù)進行人臉特征計算,將計算結(jié)果返回給智能視覺調(diào)度引擎。
(22)智能視覺調(diào)度引擎,將計算的特征值結(jié)果返回給智能視覺應(yīng)用引擎;
(23)智能視覺應(yīng)用引擎,存儲圖片的特征值。
實例4:資源刷新,在服務(wù)長期運行之后,在資源占用達到一定閾值或者達到一定運行時間的情況下,自動進行資源刷新。下面結(jié)合圖5 對本系統(tǒng)數(shù)據(jù)處理方法進行說明。
圖5 資源刷新
(1)智能視覺服務(wù)管理引擎,起N 路FPGA 人臉檢測服務(wù);
(2)智能視覺服務(wù)管理引擎,起N 路CPU 人臉跟蹤服務(wù);
(3)智能視覺服務(wù)管理引擎,起N 路GPU 人臉特征計算服務(wù);
(4)智能視覺服務(wù)管理引擎,起N 路GPU 正臉檢測服務(wù);
(5)智能視覺服務(wù)管理引擎,起N 路CPU 正臉檢測服務(wù);
(6)智能視覺服務(wù)管理引擎,定時觸發(fā)清理FPGA上的服務(wù);
(7)智能視覺服務(wù)計算引擎,釋放空閑的FPGA 服務(wù)占用資源,重新加載服務(wù)。
(8)智能視覺服務(wù)管理引擎,監(jiān)控到FPGA 上資占用達到閾值,觸發(fā)清理FPGA 上的服務(wù);
(9)智能視覺服務(wù)計算引擎,釋放空閑的FPGA 服務(wù)占用資源,重新加載服務(wù)。
(10)智能視覺服務(wù)管理引擎,定時觸發(fā)清理CPU上的服務(wù);
(11)智能視覺服務(wù)計算引擎,釋放空閑的CPU 服務(wù)占用資源,重新加載服務(wù)。
(12)智能視覺服務(wù)管理引擎,監(jiān)控到CPU 上資占用達到閾值,觸發(fā)清理CPU 上的服務(wù);
(13)智能視覺服務(wù)計算引擎,釋放空閑的CPU 服務(wù)占用資源,重新加載服務(wù)。
(14)智能視覺服務(wù)管理引擎,定時觸發(fā)清理GPU上的服務(wù);
(15)智能視覺服務(wù)計算引擎,釋放空閑的GPU 服務(wù)占用資源,重新加載服務(wù)。
(16)智能視覺服務(wù)管理引擎,監(jiān)控到GPU 上資占用達到閾值,觸發(fā)清理FPGA 上的服務(wù);
(17)智能視覺服務(wù)計算引擎,釋放空閑的GPU 服務(wù)占用資源,重新加載服務(wù)。
實例5:密集請求服務(wù)場景說明
本系統(tǒng)會根據(jù)已有資源使用情況,動態(tài)調(diào)整計算單元,高速并行地處理密集計算請求。與現(xiàn)有技術(shù)相比較,本系統(tǒng)同時利用GPU、CPU、FPGA 等一切可利用的資源進行計算來提高計算性能。
每次處理固定數(shù)量的圖片,對計算資源優(yōu)化處理,將每個計算單元所占用的資源量化可控,以便主進程可以根據(jù)各資源的實際使用情況動態(tài)調(diào)整對應(yīng)資源的圖片處理線程和服務(wù)計算模塊數(shù)。處理步驟如下:
(1)系統(tǒng)主進程是調(diào)度單元,它讀取海量圖片目錄,生成待處理文件列表;
(2)主進程根據(jù)GPU 剩余顯存大小,決定起多少個GPU 圖片處理線程,和對應(yīng)的GPU 服務(wù)計算模塊;
(3)主進程根據(jù)CPU 空閑核心數(shù),決定起多少個CPU 圖片處理線程,和對應(yīng)的CPU 服務(wù)計算模塊;
(4)主進程根據(jù)FPGA 空間可編程器件多少,決定起多少個FPGA 圖片處理線程,和對應(yīng)的FPGA 服務(wù)計算模塊;
(5)各圖片處理線程讀取固定數(shù)量的一批圖片數(shù)據(jù),送給對應(yīng)的服務(wù)計算模塊,收到服務(wù)器計算單元計算出的特征值進行保存,再處理下一批圖片數(shù)據(jù)。以此循環(huán)處理,直至待處理文件全部處理完畢,通知對應(yīng)的服務(wù)計算模塊釋放計算資源;
(6)各服務(wù)計算模塊,加載各自的算法模型后,處理來自圖片處理線程的圖片數(shù)據(jù)。因為很多圖片的背景復(fù)雜,主體占比通常較小,所以為了減少背景對特征提取準確性的干擾,需要將主體從圖片中分離出來。自然地,圖片特征提取的分為兩步,先用目標檢測算法檢測出目標,然后用特征提取算法提取目標特征。在目標檢測前,對計算資源做優(yōu)化處理,以保證每個服務(wù)單元的資源占用是可控的。進行特征計算后,將結(jié)果返回給圖片處理線程。如果收到圖片處理線程的計算完畢的通知,則釋放所占用的計算單元,并重新加載算法模型;
(7)主進程在運行過程中,監(jiān)控系統(tǒng)中的各資源的實際使用情況,動態(tài)創(chuàng)建對應(yīng)資源的圖片處理線程和服務(wù)計算模塊。
本文研究并提供了一種智能視覺計算服務(wù)的調(diào)度系統(tǒng)和實現(xiàn)方法,是一種用于實時或離線狀態(tài)下進行視頻圖像分析的圖像結(jié)構(gòu)化大數(shù)據(jù)實現(xiàn)方法和系統(tǒng)。本文研究并同時利用GPU、CPU、FPGA 等一切可利用的資源進行計算來提高計算性能。每次處理固定數(shù)量的圖片,對計算資源優(yōu)化處理,將每個計算單元所占用的資源量化可控,以便主進程可以根據(jù)各資源的實際使用情況動態(tài)調(diào)整對應(yīng)資源的圖片處理線程和服務(wù)計算模塊數(shù)。本文提供的系統(tǒng)和實現(xiàn)方法可廣泛應(yīng)用于智能視頻監(jiān)控、視頻內(nèi)容分析、圖片檢索等多種應(yīng)用場景之中。