IT爱家 12 月 21 日消息,英伟达宣布,CV-CUDA (Computer Vision – Compute Unified Device Architecture)高效率能影像处置快速库,日前发布 Alpha 版,正式向亚洲地区开发人员开放源码。使用者可在 GitHub 浏览和试玩。
CV-CUDA 是两个开放源码项目,可在 AI 光学和排序机系统听觉 (CV) 业务流程中通过 GPU 快速构筑高效率的预处置和后处置关键步骤。CV-CUDA 后期由 NVIDIA 和二进制颤动的机器学习项目组合作开发。
随著短音频 App、音频会议网络平台和 VR / AR 等技术的发展,音频与影像已逐渐正式成为亚洲地区网络网络流量的主要组成部份。包涵他们平常碰触到的那些音频影像,也有很多是被 AI 和排序机系统听觉(CV)演算法处置并增强过的。然而,随著SNS新闻媒体和音频撷取服务的稳步增长,作为 AI 影像演算法基础的音频影像处置部份,也已然正式成为排序业务流程中不可忽视的成本和困局。简述一下影像处置的许多常用的范例,以更快地认知 CV-CUDA 的应用情景。
(1)AI 演算法影像大背景nobres
电视广告影像大背景nobres一般来说会被应用于音频会议,雷蛇绘图等情景。在那些情景中,他们一般来说希望 AI 演算法能把市场主体之外的大背景部份nobres,这样能保护使用者个人隐私,亮化影像等。影像大背景nobres的业务流程大体上能分为 3 个过程:前处置,DNN 网络和后预处置。前预处置,一般来说包涵了对影像做 Resize、Padding、Image2Tensor 等操作方式;DNN 网络能是一些常用 segmentation network,比如 Unet 等;后预处置,一般来说包括 Tensor2Mask、Crop、Resize、Denoise 等操作方式。
在传统的影像处置业务流程中,前处置和后处理部份一般来说都是使用 CPU 进行操作方式,这导致整座影像大背景nobres业务流程中,有 90% 的工作时间耗用在其间处置部份,因而正式成为了整座演算法电路板的困局。若能把其间处置妥为利用 GPU 快速,这将能大幅提升整体的排序操控性。
图 2. AI 大背景模糊不清(GPU 其间处置方案)当把其间处置部份都放到 GPU 上后,就能对整座 pipeline 进行端到端的 GPU 快速。经过测试,在单个 GPU 上,相比于传统图像处置方式,把整座 pipeline 移植到 GPU 后,能获得 20 倍以上的吞吐率提升。这无疑会大大的节省排序成本。
(2)AI 演算法影像分类
电视广告影像分类是最常用的 AI 影像演算法之一,一般来说能用于物体识别,以图搜图等情景,几乎是所有 AI 影像演算法的基础。影像分类的 pipeline 大体上能分为 2 个部份:前处置部分和 DNN 部份。其翅茎处置部份,在训练和推理过程中最常用的 4 种操作方式包括:图片解码、Resize、Padding、Normalize。DNN 部份已经有了 GPU 的快速,而前处置部份一般来说都会使用 CPU 上的库函数进行处置。如果能够把前处置部份也移植到 GPU 上,那么一方面能释放 CPU 资源,另一方面也能进一步提升 GPU 利用率,从而能对整座 pipeline 进行快速。
针对前后处置部份,目前已有的是许多主流应用方案:影像处置库是 OpenCV、使用 PyTorch 框架进行模型训练引入的 torchvision 影像处置库等。
如上所述,传统的影像预处置操作方式一般在 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 层面进行了操控性上的高度优化,可在云服务情景中规模化部署。
IT爱家获悉,CV-CUDA Beta 版预计将在 2023 年 3 月正式发布,6 月份发布 v1.0 正式版。
CV-CUDA 更多内容查看:点此链接。