色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

基于OpenVINO? 2022.2與oneAPI構建GPU視頻分析服務流水線

英特爾物聯網 ? 來源:OpenVINO 中文社區 ? 作者:楊亦誠 ? 2022-12-16 13:52 ? 次閱讀

科學與技術

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

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

1.視頻流拉流

2.媒體解碼

3.圖像前處理縮放

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

5.后處理畫框

6.媒體編碼傳輸

7.分析結果可視化呈現

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

圖:通用 AI 視頻分析流程

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

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

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

圖:邊緣 AI 視頻分析架構

1.OpenVINO工具套件簡介

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

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

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

可以參考文章:

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

2. 英特爾 oneAPI 簡介

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

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

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

任務開發流程

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

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

此外鑒于 GPU 設備在并行能力上的優勢,OpenVINO在調用英特爾最新的集成顯卡 iGPU 和獨立顯卡 dGPU 推理時,也能發揮出比較優異的吞吐量表現。

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

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

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

圖:GPU 視頻分析流水線

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

1.視頻解碼 (Libva)

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

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

sts = MFXVideoDECODE_Init(session, &mfxDecParams);

向右滑動查看完整代碼

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

sts = ReadEncodedStream(bitstream, source);

向右滑動查看完整代碼

調用 MFXVideoDECODE_DecodeFrameAsync 接口執行解碼任務,將解碼后的數據寫入 pmfxDecOutSurfac 地址

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

向右滑動查看完整代碼

2.圖像縮放(VPP):

接下來使用 oneVPL 中的 VPP(Video processing functions)模塊來實現對于圖像的縮放處理,首先我們需要定義一些關鍵參數,例如輸出圖像的色彩通道與縮放后的圖像尺寸,這里為了能實現編碼輸出與推理輸入的零拷貝共享,我們需要將輸出的色彩格式設置為 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);

向右滑動查看完整代碼

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

MFXVideoVPP_ProcessFrameAsync(session, pmfxDecOutSurface, &pmfxVPPSurfacesOut);

向右滑動查看完整代碼

3.色彩空間與數據排布轉換(OpenVINO Preprocessing API):

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

精度轉換:U8 buffer to FP32

Layout轉換:Transform to planar format: from {1, 480, 640, 3} to {1, 3, 480, 640}

Resize :640x480 to 224x224

色彩空間轉換:BGR->RGB

Normalization:mean/scale

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

圖:Preprocessing API 功能示意

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

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

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

回到代碼部分,我們調用 pre_post_process 頭文件中的相應函數實現對 VPP 輸出數據的色彩空間轉換(YUV->BGR)和排布轉換(NHWC->NCHW),并且最終通過 build 方法,將這部分前處理任務集成到原始模型的執行圖中,生成新的 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 兩個分量,如果不執行 NCHW 的轉換,運行時會由于通道維度不匹配而報錯。

4. 模型推理(OpenVINO runtime):

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

創建 GPU 中共享內存的上下文:

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

向右滑動查看完整代碼

獲取VPP輸出結果的句柄,并通過 create_tensor_nv12 接口將 VA-API surface 轉化并封裝成 OpenVINO的 tensor 內存對象:

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

向右滑動查看完整代碼

在推理請求中載入該內存對象,并執行推理:

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();

向右滑動查看完整代碼

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

參考示例使用方法

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

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

2.安裝相應組件和依賴

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

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

3.下載預訓練模型

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

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

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

5.運行輸出

最終效果如下:

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

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

結論

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

審核編輯:湯梓紅

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

    關注

    61

    文章

    9985

    瀏覽量

    171957
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4754

    瀏覽量

    129069
  • AI
    AI
    +關注

    關注

    87

    文章

    31154

    瀏覽量

    269480
  • 人工智能
    +關注

    關注

    1792

    文章

    47442

    瀏覽量

    238989
  • 視頻分析
    +關注

    關注

    0

    文章

    30

    瀏覽量

    10853

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

文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA中的流水線設計

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

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

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

    什么是流水線技術

    什么是流水線技術 流水線技術
    發表于 02-04 10:21 ?3933次閱讀

    流水線中的相關培訓教程[1]

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

    流水線ADC的行為級仿真

    行為級仿真是提高流水線(Pipeline)ADC設計效率的重要手段。建立精確的行為級模型是進行行為級仿真的關鍵。本文采用基于電路宏模型技術的運算放大器模型,構建流水線ADC的行為
    發表于 04-05 15:37 ?21次下載
    <b class='flag-5'>流水線</b>ADC的行為級仿真

    電鍍流水線的PLC控制

    電鍍流水線的PLC控制電鍍流水線的PLC控制電鍍流水線的PLC控制
    發表于 02-17 17:13 ?36次下載

    淺談GPU的渲染流水線實現

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

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

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

    FPGA之為什么要進行流水線的設計

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

    各種流水線特點及常見流水線設計方式

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

    如何選擇合適的LED生產流水線輸送方式

    LED生產流水線輸送形式分為平面直線傳輸流水線、各種角度平面轉彎傳輸流水線、斜面上傳流水線、斜面下傳流水線這四種輸送方式,企業也是可以根據L
    發表于 08-06 11:53 ?1033次閱讀

    嵌入式_流水線

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

    CPU流水線的問題

    1989 年推出的 i486 處理器引入了五級流水線。這時,在 CPU 中不再僅運行一條指令,每一級流水線在同一時刻都運行著不同的指令。這個設計使得 i486 比同頻率的 386 處理器性能提升了不止一倍。
    的頭像 發表于 09-22 10:04 ?2025次閱讀

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

    在 Part 1 部分我們已經討論了如何在英特爾 GPU 設備上利用 oneVPL 和 OpenVINO 構建一個簡單的視頻分析
    的頭像 發表于 12-20 11:30 ?1528次閱讀

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

    jenkins 有 2 種流水線分為聲明式流水線與腳本化流水線,腳本化流水線是 jenkins 舊版本使用的流水線腳本,新版本 Jenkin
    發表于 05-17 16:57 ?1094次閱讀
    主站蜘蛛池模板: 久久精品观看影院2828| 人妻免费视频公开上传| CHINA末成年VIDEO学生| 美女裸露100%奶头视频| beeg日本老师按摩| 忘忧草在线影院www日本| 京香在线观看| 99久久精品互换人妻AV| 少妇人妻偷人精品视蜜桃| 国产亚洲AV精品无码麻豆| 最新国产三级在线不卡视频| 日产精品高潮呻吟AV久久| 国产呦精品一区二区三区下载| 中文字幕亚洲乱码熟女在线萌芽 | 内射白嫩少妇超碰| 国产成久久免费精品AV片天堂| 一本道的mv中文字幕| 欧美深深色噜噜狠狠yyy| 国产剧情麻豆mv| 99国产精品人妻无码免费| 乡村教师电影版| 内射后入在线观看一区| 国产午夜免费不卡精品理论片| 最新国产av.在线视频| 天天射天天爱天天干| 美女被触手注入精子强制受孕漫画| 古代荡女丫鬟高H辣文纯肉| 中文字幕人妻无码系列第三区| 少妇厨房愉情理9伦片视频| 久久这里有精品| 国产精品免费小视频| 99久久精品国产高清一区二区| 亚洲精品乱码久久久久久直播 | 99精品视频在线观看免费播放| 性888xxxx入欧美| 欧美性色xo影院69| 精品久久久久久久高清| 国产69精品久久久久观看软件| 2021自产拍在线观看视频| 亚州三级久久电影| 三叶草成人|