在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

在NVIDIA Holoscan SDK中使用OpenCV構建零拷貝AI傳感器處理管線

NVIDIA英偉達企業解決方案 ? 來源:NVIDIA英偉達企業解決方案 ? 2024-07-02 11:50 ? 次閱讀

NVIDIA Holoscan 是 NVIDIA 的跨領域多模態實時 AI 傳感器處理平臺,為開發者構建端到端傳感器處理管線奠定了基礎。NVIDIA Holoscan SDK 的功能包括:

具有低延遲傳感器和網絡連接的組合硬件系統

專為數據處理和 AI 優化的庫

靈活部署:邊緣或云端

多種編程語言,例如 PythonC++

Holoscan SDK 可用于為一系列行業和用例構建流式 AI 管線,包括醫療設備、邊緣高性能計算和工業檢測等。欲了解更多信息,請參閱利用 NVIDIA Holoscan 1.0 開發生產就緒型 AI 傳感器處理應用。

Holoscan SDK 利用軟硬件加速流式 AI 應用。它可以與 RDMA 技術配合使用,通過 GPU 加速功能進一步提高端到端管線性能。端到端傳感器處理管線通常包括:

傳感器數據輸入

加速計算和 AI 推理

實時可視化、執行和數據流出口

該管線中的所有數據均存儲在 GPU 內存中,Holoscan 原生運算符無需進行主機-設備內存傳輸,就可以直接訪問這些數據。

15a89e78-346f-11ef-a4c8-92fbcf53809c.png

圖 1. 超聲波分割應用的典型管線

本文將介紹如何通過集成 Holoscan SDK 和開源庫 OpenCV,實現無需額外內存傳輸的端到端 GPU 加速工作流。

什么是 OpenCV?

OpenCV(開源計算機視覺庫)是一個綜合全面的開源計算機視覺庫。它包含 2500 多種算法,例如圖像和視頻處理、物體和人臉檢測,以及 OpenCV 深度學習模塊等。

OpenCV 支持 GPU 加速功能,包含一個 CUDA 模塊。該模塊提供了一組利用 CUDA 計算能力的類和函數,它通過 NVIDIA CUDA 運行時 API 實現,能夠提供各種實用功能、底層視覺原語和高級算法。

借助 OpenCV 提供的綜合全面的 GPU 加速算法和運算符,開發者可以基于 Holoscan SDK 實現更加復雜的管線(圖 2)。

15c61188-346f-11ef-a4c8-92fbcf53809c.png

圖 2. 基于 OpenCV 和 Holoscan SDK

的增強型超聲波分割管線

在 Holoscan SDK 管線中

集成 OpenCV 運算符

如要開始在 Holoscan SDK 管線中集成 OpenCV 運算符,您需要滿足以下條件:

OpenCV >= 4.8.0

Holoscan SDK >= v0.6

如要安裝帶有 CUDA 模塊的 OpenCV,請遵循 opencv/opencv_contrib 提供的指南。如要使用 Holoscan SDK 和 OpenCV CUDA 構建鏡像,請參閱 nvidia-holoscan/holohub Dockerfile

https://github.com/nvidia-holoscan/holohub/blob/main/applications/endoscopy_depth_estimation/Dockerfile

張量是 Holoscan SDK 中的數據類型,它被定義為單一數據類型的多維元素數組。張量類是 DLManagedTensorCtx 結構的包裝器,DLManagedTensorCtx 結構持有 DLManagedTensor 對象。張量類支持 DLPack 和 NumPy 數組接口(__array_interface__ 和 __cuda_array_interface__),因此可以與其他 Python 庫(如 CuPy、PyTorch、JAX、TensorFlow 和 Numba)一起使用。

但 OpenCV 的數據類型是 GpuMat,它既沒有實現 __cuda_array_interface_,也沒有實現標準 DLPack。如要實現端到端 GPU 加速管線或應用,需要實現兩個函數來將 GpuMat 轉換為 CuPy 數組,后者可以直接使用 Holoscan Tensor 訪問,反之亦然。

從 GpuMat 到 CuPy

數組的無縫零拷貝

OpenCV Python 綁定的 GpuMat 對象提供了一個 cudaPtr 方法,該方法可用于訪問 GpuMat 對象的 GPU 內存地址。該內存指針可用于直接初始化 CuPy 數組,從而避免主機和設備之間發生不必要的數據傳輸,實現高效率的數據處理。

下面的函數用于從 GpuMat 創建 CuPy 數組。HoloHub 內窺鏡深度估計應用提供了源代碼。

importcv2
import cupy as cp 
  
def?gpumat_to_cupy(gpu_mat:?cv2.cuda.GpuMat)?->?cp.ndarray: 
????w,?h?=?gpu_mat.size() 
????size_in_bytes?=?gpu_mat.step?*?w 
????shapes = (h, w, gpu_mat.channels()) 
????assert?gpu_mat.channels()?<=3,?"Unsupported?GpuMat?channels"
  
????dtype?=?None
????if?gpu_mat.type()?in?[cv2.CV_8U,cv2.CV_8UC1,cv2.CV_8UC2,cv2.CV_8UC3]: 
????????dtype?=?cp.uint8 
????elif?gpu_mat.type()?==?cv2.CV_8S: 
????????dtype?=?cp.int8 
????elif?gpu_mat.type()?==?cv2.CV_16U: 
????????dtype?=?cp.uint16 
????elif?gpu_mat.type()?==?cv2.CV_16S: 
????????dtype?=?cp.int16 
????elif?gpu_mat.type()?==?cv2.CV_32S: 
????????dtype?=?cp.int32 
????elif?gpu_mat.type()?==?cv2.CV_32F: 
????????dtype?=?cp.float32 
????elif?gpu_mat.type()?==?cv2.CV_64F: 
????????dtype?=?cp.float64? 
  
assert?dtype?is?not?None,?"Unsupported?GpuMat?type"
???? 
????mem?=?cp.cuda.UnownedMemory(gpu_mat.cudaPtr(),?size_in_bytes,?owner=gpu_mat) 
????memptr?=?cp.cuda.MemoryPointer(mem,?offset=0) 
????cp_out = cp.ndarray( 
        shapes, 
        dtype=dtype, 
        memptr=memptr, 
        strides=(gpu_mat.step, gpu_mat.elemSize(), gpu_mat.elemSize1()), 
    ) 
????return?cp_out

請注意,我們在此函數中使用了非自有內存 API 創建 CuPy 數組。在某些情況下,OpenCV 運算符會創建一個需要由 CuPy 處理的新設備內存,其生命周期不限于一個運算符,而是整個管線。在這種情況下,從 GpuMat 啟動的 CuPy 數組會知道所有者并保留對對象的引用。更多詳情,請參閱 CuPy 互操作性文檔

https://docs.cupy.dev/en/stable/user_guide/interoperability.html#device-memory-pointers

從 Holoscan Tensor 到

GpuMat 的無縫零拷貝

隨著 OpenCV 4.8 的發布,OpenCV 的 Python 綁定現在支持直接從 GPU 內存指針初始化 GpuMat 對象。這一功能通過與 GPU 駐留數據直接交互,來提高數據整合和處理效率,避免了主機和設備內存之間的數據傳輸。

在基于 Holoscan SDK 的管線應用中,可以通過 CuPy 數組提供的 __cuda_array_interface__ 獲取 GPU 內存指針。請參考下面概述的函數,了解如何利用 CuPy 數組創建 GpuMat 對象。有關實現詳情,請參見HoloHub 內窺鏡深度估計應用中提供的源代碼

https://github.com/nvidia-holoscan/holohub/blob/main/applications/endoscopy_depth_estimation/endoscopy_depth_estimation.py#L28

import?cv2 
import?cupy?as?cp 
  
def?gpumat_from_cp_array(arr:?cp.ndarray)?->?cv2.cuda.GpuMat: 
????assert?len(arr.shape)?in?(2,?3),?"CuPy?array?must?have?2?or?3?dimensions?to?be?a?valid?GpuMat"
????type_map?=?{ 
????????cp.dtype('uint8'):?cv2.CV_8U, 
????????cp.dtype('int8'):?cv2.CV_8S, 
????????cp.dtype('uint16'):?cv2.CV_16U, 
????????cp.dtype('int16'):?cv2.CV_16S, 
????????cp.dtype('int32'):?cv2.CV_32S, 
????????cp.dtype('float32'):?cv2.CV_32F, 
????????cp.dtype('float64'):?cv2.CV_64F 
????} 
????depth?=?type_map.get(arr.dtype) 
????assert?depth?is?not?None,?"Unsupported?CuPy?array?dtype"
????channels?=?1?if?len(arr.shape)?==?2?else?arr.shape[2] 
????mat_type?=?depth?+?((channels?-?1)?<

整合 OpenCV 運算符

有了上述兩個函數,您就可以在基于 Holoscan SDK 的管線中進行任何 OpenCV-CUDA 操作,而無需進行內存傳輸。實現步驟如下:

在調用 OpenCV 運算符的位置創建自定義運算符。詳情參見 Holoscan SDK 示例文檔

https://docs.nvidia.com/holoscan/sdk-user-guide/holoscan_create_operator.html#creating-a-custom-operator-python

在運算符的計算函數中:

a.接收前一個運算符的信息,并從HoloscanTensor創建一個CuPy 數組

b.調用gpumat_from_cp_array以創建GpuMat

c.使用自定義OpenCV運算符進行處理

d.調用gpumat_to_cupy,從GpuMat創建CuPy數組

請看下面的演示代碼。完整的源代碼請參見 HoloHub 內窺鏡深度估計應用

https://github.com/nvidia-holoscan/holohub/blob/main/applications/endoscopy_depth_estimation/endoscopy_depth_estimation.py#L161

defcompute(self,op_input,op_output,context):
        stream = cv2.cuda_Stream() 
        message = op_input.receive("in") 
  
        cp_frame = cp.asarray(message.get(""))  # CuPy array 
        cv_frame = gpumat_from_cp_array(cp_frame)  # GPU OpenCV mat 
  
        ## Call OpenCV Operator  
        cv_frame = cv2.cuda.XXX(hsv_merge, cv2.COLOR_HSV2RGB) 
  
        cp_frame = gpumat_to_cupy(cv_frame) 
        cp_frame = cp.ascontiguousarray(cp_frame) 
  
        out_message = Entity(context) 
        out_message.add(hs.as_tensor(cp_frame), "") 
op_output.emit(out_message,"out")

總結

要將 OpenCV CUDA 運算符集成到基于 Holoscan SDK 構建的應用中,只需要實現兩個函數即可促成 OpenCV GpuMat 和 CuPy 數組間的轉換。借助這兩個函數,您可以在自定義運算符中直接訪問 Holoscan Tensors。通過調用這些函數,您可以無縫創建端到端 GPU 加速應用,而不再需要通過內存傳輸來提高性能。

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

    關注

    2560

    文章

    52090

    瀏覽量

    761096
  • NVIDIA
    +關注

    關注

    14

    文章

    5181

    瀏覽量

    105329
  • OpenCV
    +關注

    關注

    31

    文章

    641

    瀏覽量

    42195

原文標題:在 NVIDIA Holoscan SDK 中使用 OpenCV 構建零拷貝 AI 傳感器處理管線

文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何使用SDK獨立模式下的OpenCV應用程序

    嗨,大家好,我是新手SDK用戶。我使用vivado hls來合成一個簡單的圖像處理算法,并構建了我現在使用sdk的硬件平臺,我想使用sdk
    發表于 05-04 17:09

    NVIDIA Jetson的相關資料分享

    。Jetson是以機器學習應用為目的而設計的,具有GPU的并行處理用的嵌入式計算板,用于高速執行圖像識別、機器學習和自動駕駛等。爆炸式增長的AI模型的復雜性近年來,由于傳感器技術的革新,IoT設備比以往發揮
    發表于 11-09 08:26

    MFC中使OpenCV的教程下載

    MFC中使OpenCV的教程下載
    發表于 06-26 14:35 ?2次下載

    NVIDIA DRIVE OS 5.2.6 Linux SDK發布 為加速計算和AI而設計

    DRIVE SDK的基礎,NVIDIA DRIVE OS專為加速計算和AI而設計。它包括用于高效并行計算的NVIDIA CUDA、用于實時AI
    的頭像 發表于 09-03 15:03 ?7484次閱讀

    NVIDIA 發布適用于醫療設備和計算傳感系統的 AI 計算平臺

    Clara Holoscan MGX 醫療級平臺配備 NVIDIA Orin 系統和 NVIDIA AI 軟件棧,為嵌入式計算領域的領先企業所構建
    發表于 03-23 11:36 ?2083次閱讀
    <b class='flag-5'>NVIDIA</b> 發布適用于醫療設備和計算<b class='flag-5'>傳感</b>系統的 <b class='flag-5'>AI</b> 計算平臺

    NVIDIA發布Clara Holoscan MGX醫療級平臺

    Clara Holoscan MGX 醫療級平臺配備 NVIDIA Orin 系統和 NVIDIA AI 軟件棧,為嵌入式計算領域的領先企業所構建
    的頭像 發表于 03-28 09:13 ?1729次閱讀

    使用Clara Holoscan SDK增強AI醫療設備流式處理工作流

      NVIDIA JetPack SDK 包含 Clara Holoscan SDK 的基本操作系統。對于版本 0.2 , JetPack SDK
    的頭像 發表于 08-15 14:50 ?1506次閱讀
    使用Clara <b class='flag-5'>Holoscan</b> <b class='flag-5'>SDK</b>增強<b class='flag-5'>AI</b>醫療設備流式<b class='flag-5'>處理</b>工作流

    使用 NVIDIA DeepStream SDK 6.2 順利開發視覺 AI 應用

    NVIDIA 宣布用于構建高性能視頻分析和流式傳輸應用的人工智能(AI)分析工具套件? NVIDIADeepStream SDK 6.2 全面上市。此次更新增加了新的功能,包括改進后的
    的頭像 發表于 02-11 10:25 ?1115次閱讀

    使用NVIDIA Holoscan for Media構建下一代直播媒體應用

    NVIDIA Holoscan for Media 現已向所有希望完全可重復使用的集群上構建下一代直播媒體應用的開發者開放。
    的頭像 發表于 04-16 14:04 ?910次閱讀

    利用NVIDIA Holoscan 1.0開發生產就緒型AI傳感器處理應用

    邊緣 AI 開發者正在構建用于安全關鍵型和受監管用例的 AI 應用和產品。借助 NVIDIA Holoscan 1.0,這些應用可在幾毫秒內
    的頭像 發表于 04-25 09:58 ?641次閱讀

    NVIDIA發布DeepStream 7.0,助力下一代視覺AI開發

    NVIDIA DeepStream 是一款功能強大的 SDK,能夠提供用于構建端到端視覺 AI 管線的 GPU 加速
    的頭像 發表于 05-23 10:09 ?1003次閱讀
    <b class='flag-5'>NVIDIA</b>發布DeepStream 7.0,助力下一代視覺<b class='flag-5'>AI</b>開發

    NVIDIA 通過 HoloscanNVIDIA IGX 提供企業軟件支持,實現邊緣實時醫療、工業和科學 AI 應用

    美敦力、SETI協會以及領先的制造商正在構建? NVIDIA IGX 系統, 為 ?AI 工業邊緣賦能 ? ? COMPUTEX — 2024 年 6 月 2 日 —
    發表于 06-03 09:48 ?423次閱讀
      <b class='flag-5'>NVIDIA</b> 通過 <b class='flag-5'>Holoscan</b> 為 <b class='flag-5'>NVIDIA</b> IGX 提供企業軟件支持,實現邊緣實時醫療、工業和科學 <b class='flag-5'>AI</b> 應用

    NVIDIA 通過 HoloscanNVIDIA IGX 提供企業軟件支持

    美敦力、SETI 協會以及領先制造商正在構建 NVIDIA IGX 系統,為 AI 工業邊緣賦能。 ? NVIDIA 于6月2日宣布,集成
    的頭像 發表于 06-04 10:21 ?697次閱讀

    Microchip PolarFire? FPGA以太網傳感器橋與NVIDIA Holoscan傳感器處理平臺兼容的人工智能(AI)驅動的傳感器處理系統

    Microchip Technology推出了PolarFire? FPGA以太網傳感器橋,以幫助開發人員創建與NVIDIA Holoscan傳感器
    的頭像 發表于 11-19 09:29 ?991次閱讀

    Microchip發布PolarFire FPGA以太網傳感器橋接器

    為了幫助開發人員構建人工智能(AI)驅動的傳感器處理系統,Microchip Technology Inc.(微芯科技公司)發布了支持NVIDIA
    的頭像 發表于 11-25 16:43 ?684次閱讀
    主站蜘蛛池模板: 玖操在线 | 日本a网 | 日韩性xxx| 色狠狠一区二区 | 豆国产97在线 | 欧洲 | 午夜三级网 | 日韩亚洲欧美日本精品va | 淫五月| 日日夜夜天天人人 | 欧美在线小视频 | 她也啪97在线视频 | 精品国产午夜久久久久九九 | 久操中文 | 色图综合网 | 日本加勒比一区 | 欧美黄色免费网站 | 日本欧洲亚洲一区在线观看 | 欧美猛交xxxx乱大交 | 4tube高清性欧美 | 久久综合九色综合98一99久久99久 | 夜夜精品视频一区二区 | 77成人| 久热网| 国产乱人视频免费播放 | 久久网站免费 | 性xxxxbbbb免费播放视频 | 精品国内一区二区三区免费视频 | 久久2017| 欧美性猛交xxx嘿人猛交 | 99久久久精品免费观看国产 | 在线观看886影院成人影院 | 大胆国模一区二区三区伊人 | 亚洲小视频在线播放 | 韩国三级hd中文字幕 | 天天干一干 | 男女性高爱潮免费的国产 | 国产一级特黄在线视频 | 色婷婷激情五月 | 天天拍夜夜爽 | 日女人免费视频 | www.色五月 |