使用VPI 1.1加速计算机视觉和图像处理

2021-09-22 11:26:34 浏览数 (1)

昨天,NVIDIA美国针对NVIDIA VPI 1.1 做了一个讲座:

我们看看都讲了啥?

什么是VPI?可以用来做什么?

VPI是VISION PROGRAMING INTERFACE的缩写,即视觉编程接口,是NVIDIA 用于高性能计算机视觉处理的下一代 API

特点:

-使用所有计算加速器创建高效的计算机视觉管道

-首次公开 PVA 和 VIC 处理器以供一般用途

-在系统级别上,可以对CV 工作负载轻松实现负载平衡

-可以在 Tegra 和 PC 上加速

-与不同硬件的无缝接口

-比较容易使用

-使用 NVIDIA JetPack 部署

计算Pipline示例(以Stereo Disparity Estimation为例)

目前可以支持哪些算法?

Benchmark结果

VPI 1.1新功能

Background Subtraction

-使用高斯混合模型技术

-适用于图像序列

-在 CPU 和 CUDA 后端实现

-可选的阴影检测和背景输出

-接受灰度和彩色图像格式

-常用于输入预处理

-在 CPU 和 CUDA 后端实现

-CPU 上的图像直方图比 OpenCV/CPU 快 3.3 倍

-在 CUDA 上均衡直方图比 OpenCV/CUDA 快 3.8 倍

-用于运动检测和物体跟踪由

-NVENC 后端实现,仅适用于 Jetson AGX Xavier 设备

-在 NV12 块线性图像序列上运行

-输出是一个 S10.5 有符号定点二维向量场(2S16 块线性图像)

-输出分辨率为输入的 1/4

-1920x1080 输入性能:低质量——每帧 1.7 毫秒;高质量——每帧 3.1 毫秒

-用于将图像分解为频段

-由 CUDA 和 CPU 后端实现

-对应高斯金字塔表示的可选输出

-逆运算,拉普拉斯重建,

-计划用于未来的 VPI 版本

-更好的输出质量,更少的噪音

-支持多达 256 个视差级别

-CUDA 后端比以前快 2.2 倍

-在 Jetson AGX Xavier 上实现——480x270x16bpp,最多 64 个差异:2.61ms

-输出置信度图

-检测无效的差异

-亮点:使用颜色输出更新的立体样本:

VPI Python编程

编程模式

-支持 Python 2.7 和 3.6。

-与 numpy 和 OpenCV 的轻松互操作性。

-允许快速的图像处理管道原型设计。

-受 Pillow 库启发的伪立即模式 API。

-高效的多后端算法执行。

-首次作为开发者预览版发布

-API 在生产就绪时可能会略有变化。

-只允许使用全局处理流。

-计划用于生产发布的多流处理

-分配新图像

代码语言:javascript复制
img = vpi.Image(size, format)
size: (width,height) tuple
format: vpi.Format enumeration
vpi.Format.RGB8
vpi.Format.Y8
vpi.Format.NV12
…

-封装现有的 2D numpy 数组

代码语言:javascript复制
img = vpi.asimage(buffer [,format])
buffer: numpy array, for single plane images, or
buffer: list of numpy arrays, for multi-plane images

封装单个平面时,可以推导出格式。

分配一个新数组

代码语言:javascript复制
arr = vpi.Array(capacity, type)
type: vpi.Type enumeration
vpi.Type.U8
vpi.Type.KEYPOINT
vpi.Type.HOMOGRAPHY_TRANSFORM_2D
…
Created arrays are initially empty (size == 0)

封装一个现存的1D numy 数组

代码语言:javascript复制
arr = vpi.asarray(buffer [,type])

封装的时候,类型可以被推导,比如:

分配一个新的金字塔:

代码语言:javascript复制
arr = vpi.Pyramid(size, format, levels, scale=0.5)

使用算法:指定执行后端

使用算法:组合

使用结果:Lock memory buffers

更多例子:

Q&A

问:金字塔 LK 光流和密集光流算法在 xavier NX 和 nano 上可用吗?它们是否可以直接通过 VPI 获得,也可以通过 opencv 获得?

答:您好,PVA 后端的 LK 光流仅适用于 Xavier 设备,例如 NX。Nano没有PVA。您可以在 Nano 上使用 CUDA 或 CPU 后端。对于 NVENC 后端的密集光流,所有 Jetson 都支持它。

问:如果我想让我在 AGX Xavier 上的 C 程序只为许多巨大的矩阵执行低级矩阵乘积运算,我应该选择什么 API?

答:cuBLAS 或 cuDNN 是低级矩阵运算的最佳选择。

0 人点赞