CV-CUDA高性能图像处理加速库

news/2024/10/30 15:22:56/

开源地址:https://github.com/CVCUDA/CV-CUDA
CV-CUDA 可以集成到 C/C++、Python 应用程序中,也可以集成到 PyTorch 等现有的深度学习框架中。
以图像背景模糊算法为例,将CV-CUDA替换 OpenCV作为图像预/后处理的后端,整个推理过程吞吐量能加20 多倍。
CV-CUDA Beta 版预计将在 2023 年 3 月发布,6 月份发布 v1.0 正式版。

CV-CUDA特点

图像分类是最常见的 AI 图像算法之一,通常可以用于物体识别,以图搜图等场景,几乎是所有 AI 图像算法的基础。图像分类的 pipeline 大体可以分为 2 个部分:前处理部分和 DNN 部分。其中前处理部分,在训练和推理过程中最常见的 4 种操作包括:图片解码、Resize、Padding、Normalize。DNN 部分已经有了 GPU 的加速,而前处理部分通常都会使用 CPU 上的库函数进行处理。如果能够把前处理部分也移植到 GPU 上,那么一方面可以释放 CPU 资源,另一方面也可以进一步提升 GPU 利用率,从而可以对整个 pipeline 进行加速。

传统的图像预处理操作一般在 CPU 上进行,一方面会占用大量的 CPU 资源,使得 CPU 和 GPU 的负载不均衡;另一方面由于基于 CPU 的图像加速库不支持 batch 操作,导致预处理的效率低下。为了解决当前主流的图像处理库所存在的一些问题,NVIDIA 和字节跳动的机器学习团队联合开发了基于 GPU 的图像处理加速库 CV-CUDA,并拥有以下特点:

(1)Batch

支持 batch 操作,可以充分利用 GPU 高并发、高吞吐的并行加速特性,提升计算效率和吞吐率。

(2)Variable Shape

支持同一 batch 中图片尺寸各不相同,保证了使用上的灵活性。此外,在对图片进行处理时,可以对每张图片指定不同的参数。例如调用 RotateVarShape 算子时,可以对 batch 中每张图片指定不同的旋转角度。

(3)C / C++/Python 接口

在部署机器学习算法时需要对齐训练和推理流程。一般来说,训练时利用 python 进行快速验证,推理时利用 C++ 进行高性能部署,然而一些图像处理库仅支持 python,这给部署带来了极大的不便。如果在训练和推理采用不同的图像处理库,则又需要在推理端重新实现一遍逻辑,过程会非常繁琐。

CV-CUDA 提供了 C、C++ 和 Python 接口,可以同时服务于训练和推理场景。从训练迁移到推理场景时,也可免去繁琐的对齐流程,提高部署效率。

(4)独立算子设计

CV-CUDA 作为基础图像处理库,采用了独立算子设计,不需要预先定义流水线。独立算子的设计具有更高的灵活性,使调试变得更加的容易,而且可以使其与其他的图像处理交互,或者将其集成在用户自己的图像处理上层框架中。

(5)结果对齐 OpenCV

不同的图像处理库由于对一些算子的实现方式不一致导致计算结果难以对齐。例如常见的 Resize 操作,OpenCV、OpenCV-gpu 以及 torchvision 的实现方式都不一样,计算结果存在差异。因此如果在训练时用 OpenCV CPU 版本而推理时若要采用 GPU 版本或其他图像处理库,就会面临结果存在误差的问题。

在设计之初,我们考虑到当前图像处理库中,很多用户习惯使用 OpenCV 的 CPU 版本,因此在设计算子时,不管是函数参数还是图像处理结果上,尽可能对齐 OpenCV CPU 版本的算子。当用户从 OpenCV 迁移到 CV-CUDA 时,只需做少许改动便可使用,且图片处理结果和 OpenCV 一致,不需要重新训练模型。

(6)易用性

CV-CUDA 提供了 Image、ImageBatchVarShape 等结构体,方便用户的使用。同时还提供了 Allocator 类,用户可以自定义显存分配策略(例如用户可以设计显存池分配策略来提高显存分配速度),方便上层框架集成和管理资源。目前 CV-CUDA 提供了 PyTorch、OpenCV 和 Pillow 的数据转化接口,方便用户进行算子替换和进行不同图像库之间的混用。

(7)针对不同 GPU 架构的性能高度优化

CV-CUDA 可以支持 Volta、Turing、Ampere 等 GPU 架构,并针对不同架构 GPU 的特点,在 CUDA kernel 层面进行了性能上的高度优化,可在云服务场景中规模化部署。

为什么 OpenCV 仍不够好?

在 CV 中,应用最广泛的图像处理库当然就是长久维护的OpenCV 了,它拥有非常广泛的图像处理操作,基本能满足各种视觉任务的预/后处理所需。但是随着图像任务负载的加大,它的速度已经有点慢慢跟不上了,因为OpenCV 绝大多数图像操作都是 CPU 实现,缺少 GPU 实现,或者 GPU 实现本来就存在一些问题。

在NVIDIA与字节跳动算法同学的研发经验中,他们发现OpenCV 中那些少数有 GPU 实现的算子存在三大问题:

部分算子的 CPU 和 GPU 结果精度无法对齐;

部分算子 GPU 性能比 CPU 性能还弱;


http://www.ppmy.cn/news/170801.html

相关文章

CV-CUDA: NVIDIA 官方出品高性能图像处理加速库

引言 随着短视频 APP、视频会议平台以及 VR/AR 等技术的发展,视频与图像已逐渐成为全球互联网流量的主要组成部分。包含我们平时接触到的这些视频图像,也有很多是被 AI 和计算机视觉(CV)算法处理并增强过的。然而,随着…

【AI应用】NVIDIA GeForce RTX 1080Ti的详情参数

【AI应用】NVIDIA GeForce RTX 1080Ti的详情参数 1、背景2、理论性能3、实测1、背景 NVIDIA GeForce RTX 1080Ti 主要参数: 核心频率1481 MHz(注意3060:1320 MHzTurbo频率1582 MHz(注意3060:1777 MHz)流处理单元3584核心架构Pascal(注意3060:Ampere)GPU代号GP102(注意…

【配环境】ubuntu18.04 3080ti显卡+cuda+cudnn+torch

1. 安装显卡驱动 1. (方法一)打开系统设置中的software & updates 注意:后期出现黑屏问题 点击 System Settings,选择 Additional Drivers 标签,下面会列出当前显卡可用的驱动版本。 注意:3080ti建议不要安装最新版本驱动 点…

CPU?GPU?+配置CUDA

CPU?GPU?配置CUDA 一、CPU和GPU区别1、内部结构区别2、结构不同能力不同 二、配置GPU环境(CUDA)1、必要条件2、安装正确的版本 三、参考博客 一、CPU和GPU区别 1、内部结构区别 CPU:中央处理器(central pr…

NVIDIA RTX A6000/RTX3090/3080/3070深度学习训练/GPU服务器硬件配置推荐2021

本方案中,推荐配置报价更新日期:2021/03/06 变更原因: 1)近期唯利是图的厂家将RTX显卡大部分卖给挖矿的,造成断货、暴涨 2)RTX A6000上市、增加新GPU配置方案 3)GX630M保证6块GPU卡全部在Pcie 1…

Win11+RTX3060显卡 配置cuda和cudnn

目录 Win11RTX3060配置CUDA等深度学习环境1. 下载前的准备工作2. 下载Anaconda3. 下载cuda4. 下载cudnn5. 小结 Win11RTX3060配置CUDA等深度学习环境 1. 下载前的准备工作 查看nvidia设置,右击它 点击nvidai控制面板,点击系统信息: 选择C…

ReID专栏(二)多尺度设计与应用

前言 多尺度流层可以更有效地提取多尺度信息,而基于显著性的学习融合层有利于重要特征通道的自动选择,因此MuDeep在学习鉴别模式方面很强大。其实这也是目前大多数深度学习任务发表论文的趋势,即多尺度、显著性特征的表示。 本教程禁止转载。…

iptables 基础

iptables防火墙 主要实现数据包的过滤、封包重定向和网络地址转换(NAT)等功能 iptables:用户空间的命令行工具,用于管理配置netfilter:真正实现功能的是netfilter运行在内核空间 iptables的4表5链 链:通过…