0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NVIDIA SDK 3.0新硬件功能介绍

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-04-20 16:31 次阅读

NVIDIA 图灵架构引入了一种新的硬件功能,用于以非常高的性能计算一对图像之间的光流。 NVIDIA 光流 SDK 公开了使用这种光流硬件(也称为 NVOFA )加速应用程序的 API 。我们很高兴地宣布光流 SDK 3.0 的可用性具有以下新功能:

DirectX 12 光流 API

通过单个 API 的前后向光流

全球流动矢量

DirectX 12 光流 API

DirectX 12 是一个来自 Microsoft 的低级编程 API ,与它的前身 DirectX 11 相比,它减少了驱动程序开销。 DirectX 12 为开发人员提供了更大的灵活性和细粒度的控制。开发人员现在可以利用 DirectX 12 中的低级编程 API 并优化其应用程序,以提供比早期 DirectX 版本更好的性能—同时,客户端应用程序本身必须负责资源管理、同步, DirectX 12 在游戏和其他图形应用程序中迅速发展。

光流 SDK 3.0 支持 DirectX 12 应用程序使用 NVIDIA 光流引擎。计算出的光流可用于提高游戏和视频中的帧速率,以获得更平滑的体验或用于目标跟踪。为了提高帧速率, F rame R ate U p C onversion ( FRUC )技术通过在原始帧之间插入插值帧来使用。插值算法使用帧对之间的流来生成中间帧。

光流硬件的所有代支持 DirectX 12 光流接口。光流 SDK 包包含头( S )、演示使用的示例应用程序、可根据需要重新使用或修改的 C ++包装类和文档。用于访问光流硬件的所有其他组件都包含在 NVIDIA 显示驱动程序中。 Windows 20H1 或更高版本的操作系统支持 DirectX 12 光流 API 。

除了显式同步之外, directx12 光流 API 的设计与 SDK 中已有的其他接口( CUDA 和 DirectX 11 )非常接近, DirectX 12 光流 API 由初始化、流量估计和销毁三个核心功能组成。

ypedef NV_OF_STATUS(NVOFAPI* PFNNVOFINIT) (NvOFHandle hOf, const NV_OF_INIT_PARAMS* initParams);

typedef NV_OF_STATUS(NVOFAPI* PFNNVOFEXECUTED3D12) (NvOFHandle hOf, const NV_OF_EXECUTE_INPUT_PARAMS_D3D12* executeInParams, NV_OF_EXECUTE_OUTPUT_PARAMS_D3D12* executeOutParams);

typedef NV_OF_STATUS(NVOFAPI* PFNNVOFDESTROY) (NvOFHandle hOf);

初始化和销毁 API 在所有接口上都是相同的,但在 DirectX 12 和其他接口(即 DirectX 11 和 CUDA )之间执行 API 是不同的。尽管在 DirectX 12 中传递给 executeapi 的大多数参数与其他两个接口中的参数相同,但在功能上还是存在一些差异。 DirectX 11 和 CUDA 接口中的同步由操作系统运行时和驱动程序自动处理。但是,在 DirectX 12 中,需要有关围栏和围栏值的附加信息作为执行 API 的输入参数。这些围栏对象将用于同步 CPUGPU 和 GPU ↔ GPU 操作。有关详细信息,请参阅光流 SDK 附带的编程指南。

DirectX 12 中的缓冲区管理 API 接口也需要 fence 对象来进行同步。

所有接口的光流输出质量相同。与其他两个接口相比, DirectX 12 的性能应该非常接近。

正反向光流

没有一种光流算法能给出 100% 的准确流量。在闭塞区域,流动通常是扭曲的。有时, NVOA 提供的成本也可能不代表流动的真实可信度。通常采用的一个简单检查是比较向前和向后流动。如果正向流和反向流之间的欧氏距离超过阈值,则该流可以标记为无效。

为了估计两个方向上的流,客户机必须调用 Execute API 两次:一次调用输入和引用图像,第二次调用在反转输入和引用图像之后。像这样两次调用 Optical Flow Execute API 可能会由于上下文切换、线程切换等开销而导致性能不佳。 Optical Flow sdk3 。 0 公开了一个新的 API ,以便在单个 Execute 调用中生成双向流。可以通过在初始化中设置 NV_OF_INIT_PARAMS::predDirection to NV_OF_PRED_DIRECTION_BOTH 并在 NV_OF_EXECUTE_OUTPUT_PARAMS/NV_OF_EXECUTE_OUTPUT_PARAMS_D3D12::bwdOutputBuffer, NV_OF_EXECUTE_OUTPUT_PARAMS/NV_OF_EXECUTE_OUTPUT_PARAMS_D3D12::bwdOutputCostBuffer 。 中提供接收反向流和/或开销所需的缓冲区来启用此功能

一旦在两个方向上生成流,客户端应用程序就可以比较两个方向的流向量,根据适当的标准(例如,向前和向后流向量之间的欧几里德距离)丢弃不准确的流向量,并使用孔填充算法来填充这些丢弃的流向量。

注意,由于一些优化, FB 流的输出质量可能不同于单向流。

演示 FB flow API 编程和一致性检查的示例代码:

// Initialization of API
NV_OF_INIT_PARAMS initParams = { 0 };
...
initParams.predDirection = NV_OF_PRED_DIRECTION_BOTH;
...
NvOFAPI->nvOFInit(hNvOF, &initParams);
// Estimation of forward and backward flow
NV_OF_EXECUTE_INPUT_PARAMS executeInParams = { 0 };
...
NV_OF_EXECUTE_OUTPUT_PARAMS executeOutParams = { 0 };
...
executeOutParams.outputBuffer = forwardFlowBuffer;
executeOutParams.outputCostBuffer = forwardFlowCostBuffer;
executeOutParams.bwdOutputBuffer = backwardFlowBuffer;
executeOutParams.bwdOutputCostBuffer = backwardFlowCostBuffer;

NvOFAPI->nvOFExecute(hNvOF, &executeInparams, &executeOutParams)


// Invalidating flow vectors
for (int y = 0; y < height; y++) {
    for (int x = 0; x < width; x++) {
        // read forward flow vector
        float mvx = GetFlowX(forwardFlowBuffer, x, y);
        float mvy = GetFlowY(forwardFlowBuffer, x, y);

        // derive the corresponding position in the backward flow (assuming 1x1 grid size)
        // and read the backward flow vector
        int x2 = x + mvx;
        int y2 = y + mvy;
        if (x2 < 0 || x2 > width - 1 || y2 < 0 || y2 < height - 1)
        {
            SetFlowInvalid(forwardFlowBuffer, x, y);
            continue;
        }
        float mvx2 = -1 * GetFlowX(backwardFlowBuffer, x2, y2);
        float mvy2 = -1 * GetFlowY(backwardFlowBuffer, x2, y2);

        // mark flow vector as invalid if the distance is greater than a threshold
        if (((mvx - mvx2) * (mvx - mvx2) + (mvy - mvy2) * (mvy - mvy2)) > thresh) {
            SetFlowInvalid(forwardFlowBuffer, x, y);
        }
    }
}

全球流量估算

视频序列或游戏中的全局流是由摄影机平移运动引起的。全局流估计是一个重要的工具,广泛应用于图像分割、视频拼接或基于运动的视频分析应用中。

全局流矢量也可以启发式地用于计算背景运动。一旦估计出背景运动,它就可以用来填充遮挡区域中的流矢量,也可以用来处理插值帧中扭曲像素的碰撞。

全局流量是基于发生频率和其他一些启发式算法,在前向流矢量上计算的。

为了能够生成全局流,初始化 API 需要设置标志 初始化参数的 NV \ u :: enableGlobalFlow ,并在 executeapi 中提供额外的缓冲区 NV _ OF _ EXECUTE _ OUTPUT _ PARAMS / NV _ OF _ EXECUTE _ OUTPUT _ PARAMS _ D3D12 ::全局流缓冲区 。

关于作者

Konda Raju 是 NVIDIA 多媒体驱动团队的高级系统软件工程师。他从事 NVIDIA 光流驱动器和应用程序编程接口设计。此前,他致力于 NVIDIA 视频驱动程序和固件设计。他有技术硕士学位。印度理工学院坎普尔分校信息技术专业学位。

Sampurnananda Mishra 是 NVIDIA 负责多媒体驱动程序的高级经理。他研究过 NVIDIA GPU s 上支持的各种多媒体用例。他的兴趣包括视频编码、计算机视觉、视频安全、深度学习和系统软件。他拥有印度 IIT 坎普尔电子工程硕士学位,主攻数字信号处理。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    8577

    浏览量

    151023
  • NVIDIA
    +关注

    关注

    14

    文章

    4979

    浏览量

    102994
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1035

    浏览量

    45905
收藏 人收藏

    评论

    相关推荐

    使用NVIDIA Omniverse丰富汽车营销资产

    Katana Studio 的艺术家和开发人员通过将艺术与技术相结合,为各个品牌制作高保真 CGI 图像和数字体验。最近,该团队使用NVIDIA Omniverse SDK 和 API开发了自己
    的头像 发表于 11-27 11:20 261次阅读

    通过Google Play SDK管理中心打造更安全、更优质的SDK

      虽然 SDK 可以为应用开发者带来许多好处,但也可能会以不易识别或难以控制的方式影响应用。因此,我们在 2021 年推出了 Google Play SDK 管理中心,并在其中纳入了一些被广泛采用
    的头像 发表于 11-14 10:36 250次阅读
    通过Google Play <b class='flag-5'>SDK</b>管理中心打造更安全、更优质的<b class='flag-5'>SDK</b>

    Zigbee 3.0的新功能

    电子发烧友网站提供《Zigbee 3.0的新功能.pdf》资料免费下载
    发表于 09-26 10:45 0次下载
    Zigbee <b class='flag-5'>3.0</b>的新<b class='flag-5'>功能</b>

    NVIDIA Parabricks v4.3.1版本的新功能

    会(ESHG)上发布,其加入了新的体细胞数据变异检测功能,并将业内领先的工具升级到最新版本。这个版本是继在 NVIDIA GTC 2024 大会上发布 Parabricks v4.3 之后推出的新版本。
    的头像 发表于 09-10 10:22 376次阅读
    <b class='flag-5'>NVIDIA</b> Parabricks v4.3.1版本的新<b class='flag-5'>功能</b>

    NVIDIA JetPack 6.0版本的关键功能

    NVIDIA JetPack SDK 支持 NVIDIA Jetson 模块,为构建端到端加速 AI 应用提供全面的解决方案。JetPack 6 通过微服务和一系列新功能,扩展了 Je
    的头像 发表于 09-09 10:18 407次阅读
    <b class='flag-5'>NVIDIA</b> JetPack 6.0版本的关键<b class='flag-5'>功能</b>

    NVIDIA RTX AI套件简化AI驱动的应用开发

    NVIDIA 于近日发布 NVIDIA RTX AI套件,这一工具和 SDK 集合能够帮助 Windows 应用开发者定制、优化和部署适用于 Windows 应用的 AI 模型。该套件免费提供,不要求使用者具备 AI 框架和开发
    的头像 发表于 09-06 14:45 436次阅读

    IB Verbs和NVIDIA DOCA GPUNetIO性能测试

    NVIDIA DOCA GPUNetIO 是 NVIDIA DOCA SDK 中的一个库,专门为实时在线 GPU 数据包处理而设计。它结合了 GPUDirect RDMA 和 GPUDirect
    的头像 发表于 08-23 17:03 590次阅读
    IB Verbs和<b class='flag-5'>NVIDIA</b> DOCA GPUNetIO性能测试

    如何将SDK安装到IDE并使用所有SDK功能

    功能?我已经阅读了 SDK 入门指南,我也更新了固件,但我仍然不知道如何安装和使用 SDKSDK 仅使用 AT 命令,这些命令在 wifi_station_scan() - 相当于
    发表于 07-11 08:07

    NVIDIA Holoscan SDK中使用OpenCV构建零拷贝AI传感器处理管线

    NVIDIA Holoscan 是 NVIDIA 的跨领域多模态实时 AI 传感器处理平台,为开发者构建端到端传感器处理管线奠定了基础。
    的头像 发表于 07-02 11:50 514次阅读
    在<b class='flag-5'>NVIDIA</b> Holoscan <b class='flag-5'>SDK</b>中使用OpenCV构建零拷贝AI传感器处理管线

    MediaTek NeuroPilot SDK整合NVIDIATAO

    MediaTek 在 COMPUTEX 2024 期间宣布将 NVIDIA TAO 与 MediaTek NeuroPilot SDK 集成,应用于边缘 AI 推理芯片的开发。MediaTek
    的头像 发表于 06-12 14:03 479次阅读

    NVIDIA发布DeepStream 7.0,助力下一代视觉AI开发

    NVIDIA DeepStream 是一款功能强大的 SDK,能够提供用于构建端到端视觉 AI 管线的 GPU 加速构建模块。
    的头像 发表于 05-23 10:09 629次阅读
    <b class='flag-5'>NVIDIA</b>发布DeepStream 7.0,助力下一代视觉AI开发

    sdk中的usb-uvc演示在CYUSB3014上运行,USB3.0没有响应的原因?

    你好, ,我目前正试图让 sdk 中的 usb-uvc 演示(USBVideoClass/UsbVideoClassBulk)在 CYUSB3014 上运行。 我面临的问题是,它在 USB 2.0 中工作正常,但 USB 3.0 却没有响应(没有 uvc 设备报告)。
    发表于 05-21 06:57

    聚沃科技SDK使用指南

    本文主要针对SDK如何重定义硬件接口和外设参数进行说明,方便让大家快速灵活使用聚沃科技SDK
    的头像 发表于 05-06 10:23 508次阅读
    聚沃科技<b class='flag-5'>SDK</b>使用指南

    利用NVIDIA AI Enterprise IGX在边缘赋能任务关键型AI

    NVIDIA SDK 在加速智慧城市、医疗和机器人等领域的 AI 应用方面发挥了重要作用。
    的头像 发表于 04-26 09:46 486次阅读
    利用<b class='flag-5'>NVIDIA</b> AI Enterprise IGX在边缘赋能任务关键型AI

    NVIDIA Omniverse中的物理模拟功能

    NVIDIA Omniverse™ Simulation 作为 NVIDIA Omniverse™ 平台的关键组件之一,由 NVIDIA 技术提供动力支持,包括 PhysX®、Flow、Blast 和 AI 等技术。
    的头像 发表于 03-08 11:30 1059次阅读
    <b class='flag-5'>NVIDIA</b> Omniverse中的物理模拟<b class='flag-5'>功能</b>