Intel视频处理与分析技术栈和架构纵览
面向WebRTC的英特爾協同通信開發套件設計了一個端到端的全流程實時視頻流分析系統,幫助開發者使用極簡的代碼快速實現符合自身需求的高效實時視頻流分析應用。本文來自英特爾開源技術中心研發經理 翟磊在LiveVideoStackCon 2018中的演講,并由LiveVideoStack整理而成。
文 / 翟磊
整理 / LiveVideoStack
大家好,我叫翟磊,來自英特爾開源技術中心。今天我演講的主題是《基于英特爾架構的實時視頻流分析系統的設計與優化》,主要會從以下幾個方面進行介紹:首先,背景介紹;其次,我會通過硬件和軟件兩個層面,來對英特爾視覺云計算平臺進行詳細的介紹,但主要還是側重于軟件層面。然后,結合我們現在正在做的一個名為Intel Collaboration Suite for WebRTC的項目實踐來跟大家講述一下,如何快速地在英特爾計算平臺上構建一個實時、可擴展的實時視頻流分析系統,最后,我會做一些總結。
?
一、背景介紹
當前,我們正在處在一個萬物互連的IoT時代。現在通過網絡互連的IoT設備,數量上基本已經達到了百億級,而且這個數字到2020年可以達到超過五百億的級別。我們通常認為視頻是IoT設備對外界進行視覺感知的一個接口。因此,如何通過實時視頻分析來幫助IoT設備能夠更好地對外界進行視頻理解,成為了構建一個智能IoT社會的關鍵。隨著社會和技術的發展,我們也非常高興的看到,實時視頻分析已經深入到了各個行業中。
?
正因為有了實時視頻分析,在生活中的一些險情可以及時的被發現和控制;正因為有了實時視頻分析,可以不用親自跑去銀行,在自動柜員機即可開戶、銷戶等;正因為有了實時視頻分析,司機可以在自己違章之后的幾秒鐘或幾分鐘后,就能夠收到短信通知,起到一個很好的提醒作用。此外,實時視頻分析還應用在其他的一些領域,比如在自動駕駛、響應式零售、智能制造等領域都發揮了非常重要的作用。
然而,實時視頻分析的廣泛應用在很大程度上得益于深度學習技術的飛速發展。
?
我們不得不說,實時視頻分析的廣泛應用是與深度學習的技術的發展是離不開的。深度學習作為人工智能的一個主要發展方向,它在特定領域已經奠定了其顛覆式的地位,包括視覺分析和語音分析。有別于傳統的視覺分析算法,目前在圖像識別領域,深度學習的能力已經達到甚至超過了人類的認知水平。隨著深度學習帶來的在識別率上的大大提升,同時它也帶來了一些挑戰。因為深度學習需要大量的計算,我們就需要去更加深入地優化我們的程序,讓程序在硬件平臺上能夠滿足深度學習計算的要求。
下面我給大家講一個典型的例子,一起來看看構建一個實時視頻分析流的典型流程。
?
這是一個人臉識別的系統。第一步,需要構建一個pipeline,包括從攝像頭讀取到數據,然后進行CSC轉換和縮放,再把它送入到第一個深度學習框架FaceDetection。在識別出所有的人臉之后,我們對在原圖上的所有人臉都進行分割,分割出來的可能會有若干個,再把分割之后的圖像送到第二個深度學習網絡FaceRecognition進行識別。在深度識別出來之后,可以將識別出的一些屬性進行存儲,也可以按照需要在原圖上進行標注。我們可以把合成視頻直接送去顯示,或者Encode后準備進一步深入處理。以上看到的人臉識別的程序并不簡單,在這里我們需要用到傳統的視覺計算方法,包括對圖像的前處理、后處理,包含了編解碼、圖像轉換,同時也融合了深度學習的一些方法,包括人臉識別和檢測。
二、Intel視覺計算平臺介紹
對于開發者來講,我們需要的是一個在硬件平臺上一站式的工具,利用這個工具既能夠做傳統的視覺計算,也可以做一些深度學習的計算。這樣一來,開發者很快就可以構建出一個pipeline。Intel視覺計算平臺就是為了給開發者提供一個一站式的工具,在這里也面臨有很多的難題。首先,在構建一個pipeline的同時,還需要將其放在硬件上去跑。目前來講,能夠進行視覺計算的平臺有很多,如CPU、GPU、硬件加速器VPU等等。但因為每個平臺的特性和接口都不一樣,為了適應不同終端用戶的場景,是不是需要為每個硬件都提供的一個程序來進行優化呢?其次,上述的pipeline只是單個的攝像頭輸入,如果要構建一個實時視頻流處理的服務,如何應對大容量或高并發的訪問請求呢?為了構建一個好的計算平臺,復雜性、性能和擴展性都是擺在我們面前的問題。
一個好的計算平臺從硬件、軟件上應該能夠提供一種便利性,來幫助開發者能夠快速的構建一個深度學習和視覺計算的應用。為了達到這樣的目標,英特爾平臺從平臺工具、框架、函數庫、硬件都提供了一個全站式的支持。
?
首先,在硬件層面上,我們有CPU、集成顯卡、FPGA和VPU之類等等。大家可能對硬件有個誤區,比如說對于深度學習,有人可能覺得我們更多的是用一些專用的加速卡來處理,而CPU在這方面就沒有什么作用。其實不然,在數據中心里面CPU依然對深度學習應用發揮著非常大的作用。包括在訓練的時候,你可以用現有的CPU集群進行分布式的訓練。特別是對于推導來講,CPU依然是數據中心里面做推導的主流平臺,因為推導的運算要求比訓練低不少。如果說確實有些特殊的場合計算量特別大導致必須要加速,我們英特爾也是提供了一些加速器。對于推導的過程,我們提供有集成顯卡、FPGA以及低功耗的Movidius VPU,Movidius VPU在很多嵌入式領域有著非常廣泛的應用,包括谷歌、大華等都使用得非常好。對于訓練的過程,我們也會陸續推出新的硬件來進行加速。在軟件層面上,我們有一些自己的函數庫,同時也會對一些比較流行的第三方框架和函數庫進行優化,使其在英特爾平臺上能夠達到一個更好的效果,比如對一些函數核心庫、深度學習框架TensorFlow、Caffe等都有比較好的優化。在工具層上,我們也是推出了很多自研的工具包能夠加速開發。
今天我想重點講的就是今年發布并且開源的英特爾OpenVINO工具包。
?
OpenVINO的全稱是開放式的視覺推導和神經網絡優化,它是一個一站式的工具包。OpenVINO除了包含傳統的計算機視覺工具,如OpenCV、 OpenVX,以及傳統視頻編解碼的處理優化,如Intel Media SDK,之外,還特別地加入了對Deep Learning的支持。我們推出了Deep Learning部署工具包,Deep Learning部署工具包主要分兩部分:一個是Model Optimizer模型優化器,另一個就是Inference Engine推導引擎。
?
首先,模型優化器會將第三方框架訓練出來的模型轉化到一個中間表現形式,我們稱這個中間表現形式為IR。然后,推導引擎會加載這個IR,并在相應的目標硬件上進行處理。由于硬件多種多樣,包括CPU、GPU、FPGA和VPU等等,而推導引擎能夠提供同一個接口把程序加載到對應的硬件上進行正確處理,它提供了對英特爾全平臺硬件(異構硬件)的通用支持。也就是說,用戶只需要寫一份Code,就能夠統一執行,在英特爾各個平臺上完成優化。此外,為了方便用戶開發,我們還提供了很多預訓練的模型和算法來幫助大家快速上手,包括一些比較通用的人臉檢測識別、車牌和車型檢測等等,目前大概有超過20個模型可以供大家進行選用。
下面,我再深入講一下英特爾的深度學習部署工具包是如何工作的。
第一,Model Optimizer模型優化器,目前可以支持Caffe、TensorFlow 、MxNet等比較流行的第三方框架,它能夠將從第三方框架訓練出來的模型導入并轉化為到一個中間表示形式。同時,它還支持ONNX開放式的標準,最近還加入了Kaldi框架模型,從而將OpenVINO從視覺計算拓展到了語音計算,可以進行語音識別。此外,由于從第三方訓練出來的網絡不一定是最簡網絡,我們在導入的過程中它會對網絡進行一些優化,包括對冗余層的去除和節點的合并。舉例說明,我們在訓練的時會加入一個Dropout層, Dropout層可以使得局部的神經元失效,從而避免模型參數陷入到一個局部最小值,達不到最優的效果。但是, Dropout層在推導的過程中是不需要的,因此,Model Optimizer能夠智能將類似的不需要的層次自動刪除,同時也會對一些可以合并的層進行合并。除了以上這些通用網絡優化,Model Optimizer還會針對特定硬件進行模型優化。比如說針對某個特定的VPU或集成顯卡,它會把網絡模型里面的具體數據類型轉化到能夠跟相應的硬件進行適配,從而帶來最大的硬件優化。與此同時,它還支持可定制化。我們在寫TensorFlow網絡的時候,可以加入一些用戶自己定義的網絡層,那么如何將自定義的網絡層加載到OpenVINO呢?我們只需要把它注冊到Model Optimizer里面,Model Optimizer會識別這些網絡層并進行相應的轉換和優化。
第二,Inference Engine推導引擎,它提供了統一的編程接口,這個編程接口可以是針對C++或Python的。然后,用戶只需要寫一套推導程序,就可以在跨英特爾幾乎所有的適合于深度學習計算的平臺上進行統一的處理。當然,在后臺肯定是會需要做一些工作的,所以我們為不同的硬件類型CPU、GPU、FPGA、Myriad均開發了獨有的插件,這個插件也是特別針對平臺進行相應的優化。同時,英特爾還開發了GNA Plugin,一個針對超低功耗的語音識別的芯片,可以用來集成到嵌入式的環境里面做語音分析。總之,所有的插件都是對相應的硬件進行優化的。
?
總結下來,OpenVINO工具包充分集成了深度學習,然后極大的提高了性能,并且加快了開發速度,同時還支持創新和可定制化。從集成深度學習和加快性能這方面來舉一個案例,曾經在美國某公司,他在他的后臺數據中心集群上,開發了一套圖像分類神經網絡,它是從TensorFlow框架訓練出來的網絡模型。一開始,用集群進行CPU推導時,它的性能達不到要求,該公司原本計劃采購一些離散顯卡來進行加速。后來在英特爾的幫助下,他們采用了OpenVINO工具包進行優化,最終在CPU集群上達到了10倍以上的優化速率。所以,只要能夠找到相應合適的工具包做足相關的優化,CPU用來做推導是完全可以信任的,不一定需要花額外的經費再去購買一些離散顯卡。
下面,我再介紹一個OpenVINO工具包里的傳統視覺計算工具Intel media SDK。
?
在Server平臺上,我們一般稱之為Intel Media Server Studio。它在英特爾平臺上提供了一整套的視頻編解碼加速的接口,它支持廣泛的媒體Codec,包括H.265、H.264、VP9、MPEG-2等等。此外,對于圖像處理,它支持圖像的縮放、轉換、合成以及降噪等等,整個媒體處理的功能是非常全面的。
?
Intel Media Server Studio在英特爾集成顯卡的加速下,它能達到一個比較好的性能。在單核的英特爾E3-1500 v5的 CPU處理器上,它能達到四路4K的AVC的轉碼速度,也可以達到兩路4K的HEVC的轉碼速度。
三、Intel CS for WebRTC實時視頻流分析系統實踐
在這一部分,我會結合現在項目組正在開發的一個項目,來跟大家介紹我們是如何構建實時的視頻流分析系統的。
?
我們將這個Intel Collaboration Suite for WebRTC簡稱為ICS,它是一個基于WebRTC的協同通訊解決方案,主要功能包括Streaming、Conferencing、Transcoding以及最近發布支持的視頻分析Analytics功能。整個系統是基于微服務架構來實現的,它支持廣泛的分布式部署,整個系統的模塊包括接入、媒體處理、錄制、轉碼和分析都是以微服務的形式存在的。它支持部署在廣泛的英特爾平臺上,支持高并發和高可用,對英特爾整個平臺也進行了豐富的優化。另外,它有豐富的Client SDK來與跟Server端進行配合,從而充分的適應因特網,幫助大家可以把自己的應用程序集成到Server端。舉例說明,我們把一個視頻會議的功能集成到一個遠程教育的場景中去,除了對WebRTC支持之外,支持是非常廣泛的,支持一些傳統的Streaming Server,也支持一些IP攝像頭接入到會議里面,還有也支持接入傳統的SIP終端和一些定制化的WebRTC設備。我們的系統大概是從2014年開始發布第一個版本,在最新的 4.1版本中,我們加入了實時視頻分析功能。
如圖中所示,我們的產品在視頻會議、醫療、遠程教育、自動駕駛、互動直播、社交媒體等等各個方面得到了廣泛的應用。
?
那么,我們為什么在最近的這個版本里加入實時視頻分析的功能呢?這個源自于客戶的一些需求。做遠程教育的客戶希望能減少一些人工的工作,比如,在做遠程課堂時會需要一些助教和后臺的導播,他們希望能夠加入一些智能助教和智能導播的功能。智能助教可以在遠程課堂實現智能點名,智能導播可以自動識別嘉賓,并在屏幕下方自動加上他們的人物介紹。在得到了類似的需求之后,我們在兩個多月的時間里面,利用英特爾計算平臺快速開發了一套實時視頻流分析的系統來滿足客戶的需求。
?
這個視頻流分析系統的架構與上面講的ICS是分離的系統。這個獨立系統的流程如下:首先,構建一條媒體處理的pipeline,包括接入、解碼、前處理、后處理等等,它的接入是從ICS媒體服務器上拉流,然后進入pipeline進行處理。我們的框架與傳統的媒體視頻分析的pipeline相比,進一步幫助用戶隱藏了接入、接出、前處理、后處理,用戶在這個系統上只需要開發自己的分析Plugin系統即可。一般每個公司基本上都會有自己的深度學習算法,包括人臉檢測與識別等等,這些自研的、比較適合他的應用的算法可以通過寫Plugin來把算法集成進去,這些算法模型的執行邏輯可以基于OpenVINO來寫。而分析系統會根據Plugin配置,自動生成完整的pipeline。這樣一來,用戶可以以最小的時間代價來實現自己的應用。此外,我們系統考慮到分布式的高并發訪問需求,也是采用的微服務的架構,并且集成了智能的節點調度,也能支持容錯。
?
上圖是一個分析系統Plugin設計,用戶只需要把自己的Plugin寫一些配置文件,并且實現我們提供的相應接口。根據配置文件,系統會自動加載Plugin,并把Plugin提供的接口函數實現注冊到Framework里。最后,根據它的配置,Plugin分析產生的事件和視頻幀進行相應的處理以后就可以送入到后處理系統里,再送回ICS媒體處理系統。
?
關于加速部分,因為我們框架的前處理和后處理,都是框架的自動完成的,用戶不需要去考慮怎么寫前處理、后處理以及怎么對它進行優化。框架的前處理和后處理都會自動檢測底層硬件,不同的硬件也會采用不同的執行方法。如果有集成顯卡,則會充分利用硬件加速,經過GPU加速優化過的pipeline,在inference推導的這個時間類似的情況之下,前處理和后處理時間可以大大縮短,整個pipeline能夠提高27%的fps的吞吐率,可以大大的提高的用戶的體驗。
?
這部分是專門為整個系統負載進行的優化。為了能夠支持大容量的并發,基于微服務的架構,我們有一個AnalyticsController來對外提供微服務。同時會有智能的調度系統,我們的AnalyticsAgent是可以分布式的部署到不同的節點上與不同的英特爾硬件進行配合,有的是插的加速卡,比如有的是直接用CPU來算、有的是用VPU進行加速,系統會根據相應運行節點的負載來進行相應的調度。然后,如果最終用到的每個節點上的Worker出現了一些故障,它會智能的報告給AnalyticsController來通知客戶去做相應的處理。我們的系統既可以是說獨立部署成一個分布式的系統,也可以是說以微服務的單個節點形式掛接到更加高層的一個分布式的調度系統里。整個系統為了適應當前比較流行的計算環境,我們也做了比較好的Docker支持,用戶只需要在相應的硬件平臺上做比較小的改動,就可以在Docker上進行部署,充分利用到底層硬件的加速能力。
?
關于具體加速方法,大家可以參見PPT或者ICS的產品說明文檔。
最后,在我們第一版發布的過程中,我們提供了這樣一個示例來讓用戶進行試用。
?
這個是典型的智能課堂里面的一個場景,其中也利用了英特爾OpenVINO里面提供的預訓練的模型,來進行人臉檢測和人臉識別。
?
這個場景與一般的人臉識別是不太一樣的。一般的人臉識別基本上是一個圖片里只有幾張臉,可以直接基于原圖進行處理,但是在課堂里面,由于人比較多,人的圖像相對比較小,所以需要進行相應的處理。由于直接進行縮放送進人臉檢測的網絡,人臉的精度是達不到要求,我們處理的方法是將畫面先進行分割,然后把每個分割的圖像都送進人臉檢測的網絡。但是,分割也存在人臉被分割線分成好幾半的問題,所以在分析完每一個分片之后要對邊緣進行處理,我們要保證讓邊緣圖片能夠進行識別。此外,還要保證不會有多數和漏數,因此人臉檢測好了之后,可以把分割好的人臉再進一步送入到OpenVINO中預先訓練好的人臉識別網絡里,再對每個人臉進行識別。最后,在原圖上進行標注。
四、總結
?
總結一下,英特爾會持續的在軟件的和硬件兩個層面對視覺計算、深度學習做更多的工作,推出更多的硬件、軟件和工具來幫助大家加速開發的過程,達到一個最好的用戶體驗。與此同時,英特爾也是非常重視軟件開源來推動技術發展,正在內部推動建立專門的開源社區,將所有視覺計算相關的軟件、函數庫、編解碼Codec、上層的工具包都進行開源,和開源社區一起來推動基于深度學習視覺計算的進步。
點擊【閱讀原文】或掃描圖中二維碼了解更多LiveVideoStackCon 2019 上海 音視頻技術大會 講師信息。
總結
以上是生活随笔為你收集整理的Intel视频处理与分析技术栈和架构纵览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 音视频技术开发周刊 87期
- 下一篇: AI+AR如何提升花椒直播的体验?