12月21日消息,英伟达NVIDIA(纳斯达克股票代码:NVDA)宣布,CV-CUDA (Computer Vision – Compute Unified Device Architecture)高性能图像处理加速库,这几天发布 Alpha 版本,正式向全球开发者( developer )开源(open source)。用户可在 Github(Github.com) 下载和试用。
CV-CUDA 是一个开源(open source)项目,可在 人工智能(AI) 成像和计算机视觉(Computer Vision) (CV) 流程中通(ZTO)过 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 加速构建高效的预处理(Preprocessing)和后处理步骤。CV-CUDA 前期由 英伟达(NVIDIA) 和字节跳动(byte dance)的机器学习(Machine Learning)团队联合开发。
随着短视频(Video) App、视频(Video)会议平台以及 VR / AR 等技术的发展,视频(Video)与图像已逐渐成为全球互联网(Internet)流量的主要组成部分。包含我们平时接触到的这些视频(Video)图像,也有很多是被 人工智能(AI) 和计算机视觉(Computer Vision)(CV)算法(Algorithm)处理并增强过的。然而,随着社交媒体和视频(Video)分享服务的快速增长,作为 人工智能(AI) 图像算法(Algorithm)基础的视频(Video)图像处理部分,也早已成为计算流程中不可忽视的成本和瓶颈。回顾一下图像处理的一些常见的例子,以更好地理解 CV-CUDA 的应用场景。
(1)人工智能(AI) 算法(Algorithm)图像背景模糊化
图像背景模糊化通常会被应用于视频(Video)会议,美图修图等场景。在这些场景中,我们通常希望 人工智能(AI) 算法(Algorithm)可以把主体之外的背景部分模糊化,这样可以保护用户隐私,美化图像等。图像背景模糊化的流程大体可以分为 3 个过程:前处理,DNN 网络以及后处理过程。前处理过程,通常包含了对图像做 Resize、Padding、Image2Tensor 等操作;DNN 网络可以是一些常见 segmentation network,比如 Unet 等;后处理过程,通常包括 Tensor2Mask、Crop、Resize、Denoise 等操作。
在传统的图像处理流程中,前处理和后处理部分通常都是使用 CPU 进行操作,这导致整个图像背景模糊化流程中,有 90% 的工作时间消耗在前后处理部分,因而成为了整个算法(Algorithm)流水线的瓶颈。若能把前后处理妥善利用 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 加速,这将能大幅提升(Boosting)整体的计算性能。
当把前后处理部分都放到 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 上后,就可以对整个 pipeline 进行端到端的 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 加速。经过测试,在单个 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 上,相比于传统图像处理方式,把整个 pipeline 移植到 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 后,可以获得 20 倍以上的吞吐率提升(Boosting)。这无疑会大大的节省计算成本。
(2)人工智能(AI) 算法(Algorithm)图像分类(Classification)
图像分类(Classification)是最常见的 人工智能(AI) 图像算法(Algorithm)之一,通常可以用于物体识别,以图搜图等场景,几乎是所有 人工智能(AI) 图像算法(Algorithm)的基础。图像分类(Classification)的 pipeline 大体可以分为 2 个部分:前处理部分和 DNN 部分。其中前处理部分,在训练和推理(Inference)过程中最常见的 4 种操作包括:图片解码(Decoding)、Resize、Padding、Normalize。DNN 部分已经有了 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 的加速,而前处理部分通常都会使用 CPU 上的库函数进行处理。如果能够把前处理部分也移植到 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 上,那么一方面可以释放 CPU 资源,另一方面也可以进一步提升(Boosting) GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 利用率,从而可以对整个 pipeline 进行加速。
针对前后处理部分,目前已有的一些主流应用方案:图像处理库是 OpenCV、使用 PyTorch 框架进行模型(Model)训练引入的 torchvision 图像处理库等。
如上所述,传统的图像预处理(Preprocessing)操作一般在 CPU 上进行,一方面会占用大量的 CPU 资源,使得 CPU 和 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 的负载不均衡;另一方面由于基于 CPU 的图像加速库不支持 batch 操作,导致预处理(Preprocessing)的效率低下。为了解决当前主流的图像处理库所存在的一些问题,英伟达(NVIDIA) 和字节跳动(byte dance)的机器学习(Machine Learning)团队联合开发了基于 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 的图像处理加速库 CV-CUDA,并拥有以下特点:
(1)Batch
支持 batch 操作,可以充分利用 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 高并发、高吞吐的并行加速特性,提升(Boosting)计算效率和吞吐率。
(2)Variable Shape
支持同一 batch 中图片尺寸各不相同,保证了使用上的灵活性。网站(网站维护)说另外一个方面,在对图片进行处理时,可以对每张图片指定不同的参数。例如调用 RotateVarShape 算子时,可以对 batch 中每张图片指定不同的旋转角度。
(3)C / C++/Python 接口
在部署机器学习(Machine Learning)算法(Algorithm)时需要对齐训练和推理(Inference)流程。一般来说,训练时利用 python 进行快速验证(Validation),推理(Inference)时利用 C++ 进行高性能部署,然而一些图像处理库仅支持 python,这给部署带来了极大的不便。如果在训练和推理(Inference)采用不同的图像处理库,则又需要在推理(Inference)端重新实现一遍逻辑,过程会非常繁琐。
CV-CUDA 提供了 C、C++ 和 Python 接口,可以同时服务于训练和推理(Inference)场景。从训练迁移到推理(Inference)场景时,也可免去繁琐的对齐流程,提高部署效率。
(4)独立算子设计
CV-CUDA 作为基础图像处理库,采用了独立算子设计,不需要预先定义流水线。独立算子的设计具有更高的灵活性,使调试变得更加的容易,而且可以使其与其他的图像处理交互,或者将其集成在用户自己的图像处理上层框架中。
(5)结果对齐 OpenCV
不同的图像处理库由于对一些算子的实现方式不一致导致计算结果难以对齐。例如常见的 Resize 操作,OpenCV、OpenCV-gpu 以及 torchvision 的实现方式都不一样,计算结果存在差异。因此如果在训练时用 OpenCV CPU 版本而推理(Inference)时若要采用 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 版本或其他图像处理库,就会面临结果存在误差的问题。
在设计之初,我们考虑到当前图像处理库中,很多用户习惯使用 OpenCV 的 CPU 版本,因此在设计算子时,不管是函数参数还是图像处理结果上,尽可能对齐 OpenCV CPU 版本的算子。当用户从 OpenCV 迁移到 CV-CUDA 时,只需做少许改动便可使用,且图片处理结果和 OpenCV 一致,不需要重新训练模型(Model)。
(6)易用性
CV-CUDA 提供了 Image、ImageBatchVarShape 等结构体,方便用户的使用。同时还提供了 Allocator 类,用户可以自定义显存分配策略(例如用户可以设计显存池分配策略来提高显存分配速度),方便上层框架集成和管理资源。目前 CV-CUDA 提供了 PyTorch、OpenCV 和 Pillow 的数据转化接口,方便用户进行算子替换和进行不同图像库之间的混用。
(7)针对不同 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 架构的性能高度优化(Optimization)
CV-CUDA 可以支持 Volta、Turing、Ampere 等 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 架构,并针对不同架构 GPU(图形处理器graphics processing unit,又称显示核心、视觉处理器、显示芯片) 的特点,在 CUDA kernel 层面进行了性能上的高度优化(Optimization),可在云服务场景中规模化部署。
获悉,CV-CUDA Beta 版预计将在 2023 年 3 月发布,6 月份发布 v1.0 正式版。
CV-CUDA 更多内容查看:点此链接。