日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于OpenVINO? 2022.2與oneAPI構(gòu)建GPU視頻分析服務流水線

英特爾物聯(lián)網(wǎng) ? 來源:OpenVINO 中文社區(qū) ? 作者:楊亦誠 ? 2022-12-16 13:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

科學與技術(shù)

實時 AI 視頻分析是一種基于人工智能的技術(shù),可分析視頻流以檢測特定行為和事件。這種類型的系統(tǒng)通過人工智能機器學習引擎檢查來自監(jiān)控攝像頭的視頻流來進行相關(guān)工作。該引擎使用一系列深度學習算法和程序來理解數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)換為可理解的、有意義的信息。

以車輛檢測這是任務為例,我們可以把 AI 視頻分析分為以下幾個通用步驟:

1.視頻流拉流

2.媒體解碼

3.圖像前處理縮放

4.深度學習推理,識別車輛

5.后處理畫框

6.媒體編碼傳輸

7.分析結(jié)果可視化呈現(xiàn)

3fea612e-7c67-11ed-8abf-dac502259ad0.png

圖:通用 AI 視頻分析流程

隨著邊緣計算技術(shù)的日漸成熟,我們逐步將 AI 算力與分析服務下沉到邊緣設(shè)備側(cè),以獲取更好的實時性,并減少視頻流傳輸對于帶寬資源的占用。此時,AI Box 邊緣計算設(shè)備將作為媒體數(shù)據(jù)分析的核心節(jié)點,直接接入并讀取 IP 攝像頭編碼后的視頻流數(shù)據(jù),進行實時的解碼和推理工作,并將結(jié)果數(shù)據(jù)推送至后端機房。后續(xù)配合視頻監(jiān)控服務機完成對推理結(jié)果的后處理分析與告警,以及將編碼后的事件關(guān)鍵幀留存,以供人工追溯。

鑒于邊緣測的算力資源有限,大家不難發(fā)現(xiàn)這個流程中性能的瓶頸往往會發(fā)生在 AI Box 的視頻解碼或者是推理任務中。同時出于方案成本的考慮,我們也希望可以用相同的硬件資源,接入更多路的視頻流分析業(yè)務,因此如何進一步優(yōu)化這部分的工作流程,便成為了本示例希望分享的核心重點。

400efeda-7c67-11ed-8abf-dac502259ad0.png

圖:邊緣 AI 視頻分析架構(gòu)

1.OpenVINO工具套件簡介

用于高性能深度學習的英特爾發(fā)行版 OpenVINO工具套件基于 oneAPI 而開發(fā),以期在從邊緣到云的各種英特爾平臺上,幫助用戶更快地將更準確的真實世界結(jié)果部署到生產(chǎn)系統(tǒng)中。通過簡化的開發(fā)工作流程,OpenVINO工具套件可賦能開發(fā)者在現(xiàn)實世界中部署高性能應用程序和算法。

在推理后端,得益于 OpenVINO 工具套件提供的“一次編寫,隨處部署”特性,轉(zhuǎn)換后的模型能夠在不同的英特爾硬件平臺上運行,無需重新構(gòu)建,有效簡化了構(gòu)建與遷移過程。此外,為了支持更多的異構(gòu)加速單元,OpenVINO 工具套件的 runtime api 底層采用了插件式的開發(fā)架構(gòu),基于 oneAPI 中的 MKL-DNN、oneDNN 等函數(shù)計算加速庫,針對通用指令集進行優(yōu)化,為不同的硬件執(zhí)行單元分別實現(xiàn)了一套完整的高性能算子庫,提升模型在推理運行時的整體性能表現(xiàn)。

這里值得提一句的是,目前 OpenVINO 2022.2版本可以直接支持英特爾最新的獨立顯卡產(chǎn)品(dGPU)執(zhí)行推理任務。

可以參考文章:

官宣:支持英特爾獨立顯卡的OpenVINO 2022.2新版本來啦

2. 英特爾 oneAPI 簡介

英特爾 oneAPI 是一項行業(yè)倡議,旨在創(chuàng)建一個開放、基于標準的跨架構(gòu)編程模型,在面對大量跨各種架構(gòu)(CPU、GPU、FPGA 和其他加速器)的工作負載時簡化開發(fā)工作。它包括跨架構(gòu)語言 Data Parallel C ++(基于 ISO C ++ 和 Khronos Group 的 SYCL)、高級庫和社區(qū)擴展。許多公司、研究機構(gòu)和大學均支持 oneAPI。

作為 oneAPI 中最重要的高級庫組件之一,oneVPL (Intel oneAPI Video Processing Library)可以在英特爾的 CPU、GPU 等硬件平臺上實現(xiàn)對視頻數(shù)據(jù)的解碼,編碼與處理功能,支持 AVI,H.256 (HEVC),H.264 (AVC),MPEG-2,VP9 等多種媒體標準的硬件解碼能力。目前 oneVPL 已經(jīng)適配以下型號的 GPU 硬件:

11thgeneration Intel Core processors with XeArchitecture GPUs

Intel Iris XeMAX

Intel Arc A-series graphics

Intel Data Center GPU Flex Series

Upcoming GPU platforms

更多關(guān)于英特爾硬件編解碼格式的支持可以參考

任務開發(fā)流程

該方案將依托于英特爾的 GPU 設(shè)備執(zhí)行視頻分析業(yè)務,主要有以下幾個原因:

通常情況下,在性能和功耗等方面,相較 CPU 的軟解碼,GPU 中專用編解碼器往往可以提供更強大的硬件解碼能力,輸入視頻的分辨率越高,這里的性能差異也越明顯。

此外鑒于 GPU 設(shè)備在并行能力上的優(yōu)勢,OpenVINO在調(diào)用英特爾最新的集成顯卡 iGPU 和獨立顯卡 dGPU 推理時,也能發(fā)揮出比較優(yōu)異的吞吐量表現(xiàn)。

最后調(diào)用 GPU 推理也能最大化提升英特爾架構(gòu)的資源利用率,在邊緣計算的任務架構(gòu)中,系統(tǒng)不需要 GPU 來處理圖像的渲染業(yè)務,而 CPU 往往需要承擔更多資源調(diào)度方面的工作,通過將視頻分析任務搬運到 CPU 自帶的集成顯卡中,不光能充分利用這部分閑置的資源,并且可以減輕 CPU 上的工作負載,進一步優(yōu)化方案成本。

因此我們要確保在整個視頻流分析鏈路中,中間數(shù)據(jù)可以被“保留”在 GPU 的內(nèi)存中,避免與 host 之間額外的傳輸開銷,同時也減少在同一設(shè)備中的數(shù)據(jù)搬運,也就是所謂的“零拷貝”,從而實現(xiàn) GPU 處理性能的最大化。

4066980c-7c67-11ed-8abf-dac502259ad0.png

圖:GPU 視頻分析流水線

接下來我們就通過一個簡單的單通道示例,還看下如何優(yōu)化 GPU 上的視頻分析服務。在這個示例中,輸入數(shù)據(jù)是一段 H.265 的視頻文件,我們可以把整個流水線分成以下4個部分,分別對應 oneVPL 和 OpenVINO工具套件中不同的組件接口

1.視頻解碼 (Libva)

oneVPL依賴于Libva庫,通過對VA-API (Video Acceleration API)接口的上層封裝,實現(xiàn)了 GPU 硬件編解碼能力。在這個示例中關(guān)于解碼部分可以有以下幾個步驟被抽象出來:

利用 MFXVideoDECODE_Init 接口,通過 oneVPL session 初始化解碼模塊:

sts = MFXVideoDECODE_Init(session, &mfxDecParams);

向右滑動查看完整代碼

讀取視頻流,并封裝到 bitstream buffer 中:

sts = ReadEncodedStream(bitstream, source);

向右滑動查看完整代碼

調(diào)用 MFXVideoDECODE_DecodeFrameAsync 接口執(zhí)行解碼任務,將解碼后的數(shù)據(jù)寫入 pmfxDecOutSurfac 地址

sts=MFXVideoDECODE_DecodeFrameAsync(session,
(isDrainingDec)?NULL:&bitstream,
NULL,
&pmfxDecOutSurface,
&syncp);

向右滑動查看完整代碼

2.圖像縮放(VPP):

接下來使用 oneVPL 中的 VPP(Video processing functions)模塊來實現(xiàn)對于圖像的縮放處理,首先我們需要定義一些關(guān)鍵參數(shù),例如輸出圖像的色彩通道與縮放后的圖像尺寸,這里為了能實現(xiàn)編碼輸出與推理輸入的零拷貝共享,我們需要將輸出的色彩格式設(shè)置為 NV12:

mfxVPPParams.vpp.Out.FourCC        = MFX_FOURCC_NV12;
mfxVPPParams.vpp.Out.ChromaFormat=MFX_CHROMAFORMAT_YUV420;
mfxVPPParams.vpp.Out.Width=ALIGN16(vppOutImgWidth);
mfxVPPParams.vpp.Out.Height=ALIGN16(vppOutImgHeight);

向右滑動查看完整代碼

利用 MFXVideoVPP_Init 接口,初始化 VPP 模塊:

sts = MFXVideoVPP_Init(session, &mfxVPPParams);

向右滑動查看完整代碼

將解碼后的輸出數(shù)據(jù)地址送入 MFXVideoVPP_ProcessFrameAsync 接口,進行圖像縮放處理,并以指定的色彩通道輸出:

MFXVideoVPP_ProcessFrameAsync(session, pmfxDecOutSurface, &pmfxVPPSurfacesOut);

向右滑動查看完整代碼

3.色彩空間與數(shù)據(jù)排布轉(zhuǎn)換(OpenVINO Preprocessing API):

Preprocessing API 是OpenVINO 2022.1版本中新增加的一個功能,可以實現(xiàn)將一些常規(guī)的前處理操作以 node 節(jié)點的形式集成到OpenVINO模型的 runtime 執(zhí)行圖中,從而實現(xiàn)將這部分計算過程加載到指定的硬件平臺進行執(zhí)行,同時利用 OpenVINO 強大的模型加速能力,提升前處理任務性能,這里可以被支持的前處理任務包含:

精度轉(zhuǎn)換:U8 buffer to FP32

Layout轉(zhuǎn)換:Transform to planar format: from {1, 480, 640, 3} to {1, 3, 480, 640}

Resize :640x480 to 224x224

色彩空間轉(zhuǎn)換:BGR->RGB

Normalization:mean/scale

40a8e6ee-7c67-11ed-8abf-dac502259ad0.png

圖:Preprocessing API 功能示意

這里我們將部分 VPP 不支持的前處理算子,通過 Preprocessing API 的方式將他們放到 GPU 上去執(zhí)行,一方面可以減少 CPU 上任務的負載,一方面可以避免額外的 Device to Host 內(nèi)存拷貝。查詢 Open Model Zoo 的預訓練模型說明可知,本示例用到車輛檢測模型的輸入數(shù)據(jù)通道要求為 BGR,數(shù)據(jù)排布為 NCHW,因此在調(diào)用 Preprocessing API 時,我們需要實現(xiàn)這兩種格式的轉(zhuǎn)換:

40d436be-7c67-11ed-8abf-dac502259ad0.png

圖:vehicle-detection-0200 模型輸入要求說明

回到代碼部分,我們調(diào)用 pre_post_process 頭文件中的相應函數(shù)實現(xiàn)對 VPP 輸出數(shù)據(jù)的色彩空間轉(zhuǎn)換(YUV->BGR)和排布轉(zhuǎn)換(NHWC->NCHW),并且最終通過 build 方法,將這部分前處理任務集成到原始模型的執(zhí)行圖中,生成新的 model 對象:

autop=PrePostProcessor(model);
p.input().tensor().set_element_type(ov::u8)
//YUVimagescanbesplitintoseparateplanes
 .set_color_format(ov::NV12_TWO_PLANES,{"y","uv"})
 .set_memory_type(ov::surface);
//Changecolorformat
p.input().preprocess().convert_color(ov::BGR);//Changelayout
p.input().model().set_layout("NCHW");
model=p.build();

向右滑動查看完整代碼

此處,NV12 會被拆分為 Y 和 UV 兩個分量,如果不執(zhí)行 NCHW 的轉(zhuǎn)換,運行時會由于通道維度不匹配而報錯。

4. 模型推理(OpenVINO runtime):

為了實現(xiàn)零拷貝的訴求,該示例中用到的 OpenVINO的“Remote Tensor API of GPU Plugin”相關(guān)接口,以實現(xiàn)與 VA-API 組件對于 GPU 內(nèi)存中視頻數(shù)據(jù)的共享。具體步驟如下:

創(chuàng)建 GPU 中共享內(nèi)存的上下文:

auto shared_va_context = ov::VAContext(core, lvaDisplay);

向右滑動查看完整代碼

獲取VPP輸出結(jié)果的句柄,并通過 create_tensor_nv12 接口將 VA-API surface 轉(zhuǎn)化并封裝成 OpenVINO的 tensor 內(nèi)存對象:

lvaSurfaceID=*(VASurfaceID*)lresource;
//WrapVPPoutputintoremoteblobsandsetitasinferenceinput
autonv12_blob=shared_va_context.create_tensor_nv12(height,width,lvaSurfaceID);

向右滑動查看完整代碼

在推理請求中載入該內(nèi)存對象,并執(zhí)行推理:

infer_request.set_tensor(new_input0->get_friendly_name(),nv12_blob.first);
infer_request.set_tensor(new_input1->get_friendly_name(),nv12_blob.second);


//startinferenceonGPU
infer_request.start_async();
infer_request.wait();

向右滑動查看完整代碼

可以發(fā)現(xiàn),不同于原始模型,這里輸入數(shù)據(jù)變成兩份,原因是在上一步調(diào)用 Preprocessing API 的過程中,我們將 NV12 還原到 Y 和 UV 兩個分量,所以原始模型的輸入數(shù)據(jù)數(shù)也要做相應調(diào)整。

參考示例使用方法

本示例已在 Ubuntu20.04 及第十一代英特爾酷睿 iGPU 及A RCA380dGPU 環(huán)境下進行了驗證。

1.下載示例 40f5bd70-7c67-11ed-8abf-dac502259ad0.png

2.安裝相應組件和依賴

可以參考該示例倉庫中的README文檔進行環(huán)境安裝:

https://github.com/OpenVINO-dev-contest/decode-infer-on-GPU

3.下載預訓練模型

這個示例中我們用到了 Open Model Zoo 的 vehicle-detection-0200 模型用于對視頻流中的車輛進行檢測,具體下載命令如下:

4108988c-7c67-11ed-8abf-dac502259ad0.png ? 4.編譯并執(zhí)行推理任務

412360b8-7c67-11ed-8abf-dac502259ad0.png

5.運行輸出

最終效果如下:

413e3f6e-7c67-11ed-8abf-dac502259ad0.png

該示例會輸出每一幀畫面中被檢測到車輛的置信度,以及在畫面中的坐標信息等。

結(jié)論

利用 oneAPI 的 oneVPL 組件,以及 OpenVINO的 Preprocessing API 和 remote tensor 接口,我們可以在英特爾 GPU 硬件單元上構(gòu)建從解碼,前處理,推理的視頻分析全流程應用,且沒有額外的內(nèi)存拷貝,大大提升對 GPU 資源的利用率。隨著越來越多的英特爾獨立顯卡系列產(chǎn)品的推出,相信這樣一套參考設(shè)計幫助開發(fā)者在 GPU 平臺上實現(xiàn)更出色的性能表現(xiàn)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 英特爾
    +關(guān)注

    關(guān)注

    61

    文章

    10326

    瀏覽量

    181135
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    5283

    瀏覽量

    136101
  • AI
    AI
    +關(guān)注

    關(guān)注

    91

    文章

    41317

    瀏覽量

    302703
  • 人工智能
    +關(guān)注

    關(guān)注

    1821

    文章

    50366

    瀏覽量

    267056
  • 視頻分析
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    11225

原文標題:基于OpenVINO? 2022.2與oneAPI構(gòu)建GPU視頻分析服務流水線

文章出處:【微信號:英特爾物聯(lián)網(wǎng),微信公眾號:英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    利用OpenVINO和LlamaIndex工具構(gòu)建多模態(tài)RAG應用

    文本內(nèi)容構(gòu)建 RAG 流水線已經(jīng)相對成熟。然而為視頻內(nèi)容構(gòu)建 RAG 流水線則困難得多。由于視頻
    的頭像 發(fā)表于 02-21 10:18 ?3562次閱讀
    利用<b class='flag-5'>OpenVINO</b>和LlamaIndex工具<b class='flag-5'>構(gòu)建</b>多模態(tài)RAG應用

    為什么無法在RedHat中構(gòu)建OpenVINO? 2022.2?

    嘗試使用 RedHat* (UBI 9) 構(gòu)建OpenVINO? 2022.2 在 CMAKE 操作過程中遇到錯誤
    發(fā)表于 03-05 08:25

    FPGA中的流水線設(shè)計

    `流水線設(shè)計前言:本文從四部分對流水線設(shè)計進行分析,具體如下:第一部分什么是流水線第二部分什么時候用流水線設(shè)計第三部分使用
    發(fā)表于 10-26 14:38

    周期精確的流水線仿真模型

    使用軟件仿真硬件流水線是很耗時又復雜的工作,仿真過程中由于流水線的沖突而導致運行速度緩慢。本文通過對嵌入式處理器的流水線, 指令集, 設(shè)備控制器等內(nèi)部結(jié)構(gòu)的分析
    發(fā)表于 12-31 11:30 ?9次下載

    什么是流水線技術(shù)

    什么是流水線技術(shù) 流水線技術(shù)
    發(fā)表于 02-04 10:21 ?4408次閱讀

    流水線中的相關(guān)培訓教程[1]

    流水線中的相關(guān)培訓教程[1]  學習目標     理解流水線中相關(guān)的分類及定義;
    發(fā)表于 04-13 15:56 ?1285次閱讀

    電鍍流水線的PLC控制

    電鍍流水線的PLC控制電鍍流水線的PLC控制電鍍流水線的PLC控制
    發(fā)表于 02-17 17:13 ?37次下載

    淺談GPU的渲染流水線實現(xiàn)

    顏色表示了不同階段的可配置性或可編程性:綠色表示該流水線階段是完全可編程控制的,黃色表示該流水線階段可以配置但不是可編程的,藍色表示該流水線階段是由GPU固定實現(xiàn)的,開發(fā)者沒有任何控制
    發(fā)表于 05-04 09:16 ?4189次閱讀
    淺談<b class='flag-5'>GPU</b>的渲染<b class='flag-5'>流水線</b>實現(xiàn)

    FPGA之流水線練習(3):設(shè)計思路

    流水線的平面設(shè)計應當保證零件的運輸路線最短,生產(chǎn)工人操作方便,輔助服務部門工作便利,最有效地利用生產(chǎn)面積,并考慮流水線安裝之間的相互銜接。為滿足這些要求,在流水線平面布置時應考慮
    的頭像 發(fā)表于 11-28 07:07 ?3072次閱讀

    FPGA之為什么要進行流水線的設(shè)計

    流水線又稱為裝配線,一種工業(yè)上的生產(chǎn)方式,指每一個生產(chǎn)單位只專注處理某一個片段的工作。以提高工作效率及產(chǎn)量;按照流水線的輸送方式大體可以分為:皮帶流水裝配線、板鏈線、倍速鏈、插件線、網(wǎng)帶線、懸掛線及滾筒
    的頭像 發(fā)表于 11-28 07:04 ?4429次閱讀

    各種流水線特點及常見流水線設(shè)計方式

    按照流水線的輸送方式大體可以分為:皮帶流水裝配線、板鏈線、倍速鏈、插件線、網(wǎng)帶線、懸掛線及滾筒流水線這七類流水線。
    的頭像 發(fā)表于 07-05 11:12 ?1w次閱讀
    各種<b class='flag-5'>流水線</b>特點及常見<b class='flag-5'>流水線</b>設(shè)計方式

    如何選擇合適的LED生產(chǎn)流水線輸送方式

    LED生產(chǎn)流水線輸送形式分為平面直線傳輸流水線、各種角度平面轉(zhuǎn)彎傳輸流水線、斜面上傳流水線、斜面下傳流水線這四種輸送方式,企業(yè)也是可以根據(jù)L
    發(fā)表于 08-06 11:53 ?1494次閱讀

    嵌入式_流水線

    流水線一、定義流水線是指在程序執(zhí)行時多條指令重疊進行操作的一種準并行處理實現(xiàn)技術(shù)。各種部件同時處理是針對不同指令而言的,他們可同時為多條指令的不同部分進行工作。? 把一個重復的過程分解為若干個子過程
    發(fā)表于 10-20 20:51 ?6次下載
    嵌入式_<b class='flag-5'>流水線</b>

    基于OpenVINO? 2022.2oneAPI構(gòu)建GPU視頻分析服務流水線 第二篇

    在 Part 1 部分我們已經(jīng)討論了如何在英特爾 GPU 設(shè)備上利用 oneVPL 和 OpenVINO 構(gòu)建一個簡單的視頻分析
    的頭像 發(fā)表于 12-20 11:30 ?2426次閱讀

    什么是流水線 Jenkins的流水線詳解

    jenkins 有 2 種流水線分為聲明式流水線與腳本化流水線,腳本化流水線是 jenkins 舊版本使用的流水線腳本,新版本 Jenkin
    發(fā)表于 05-17 16:57 ?1793次閱讀
    千阳县| 小金县| 海盐县| 大邑县| 静乐县| 宝山区| 湖口县| 鹤岗市| 前郭尔| 托克托县| 梨树县| 奇台县| 永靖县| 瑞金市| 伊吾县| 江川县| 天津市| 金川县| 晋城| 龙门县| 林甸县| 乐业县| 德惠市| 灯塔市| 徐州市| 宜宾市| 柳江县| 林芝县| 资兴市| 绥芬河市| 湖州市| 尖扎县| 永顺县| 嘉定区| 元氏县| 襄城县| 京山县| 来凤县| 揭东县| 和田市| 三原县|