昨天,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 是低级矩阵运算的最佳选择。