英偉達 CV-CUDA 高性能圖像處理加速庫 Alpha 版本發(fā)布 ,并在 GitHub 上開源
IT之家 12 月 21 日消息,英偉達宣布,CV-CUDA (Computer Vision – Compute Unified Device Architecture)高性能圖像處理加速庫,近日發(fā)布 Alpha 版本,正式向全球開發(fā)者開源。用戶可在 GitHub 下載和試用。
CV-CUDA 是一個開源項目,可在 AI 成像和計算機視覺 (CV) 流程中通過 GPU 加速構建高效的預處理和后處理步驟。CV-CUDA 前期由 NVIDIA 和字節(jié)跳動的機器學習團隊聯(lián)合開發(fā)。
隨著短視頻 App、視頻會議平臺以及 VR / AR 等技術的發(fā)展,視頻與圖像已逐漸成為全球互聯(lián)網(wǎng)流量的主要組成部分。包含我們平時接觸到的這些視頻圖像,也有很多是被 AI 和計算機視覺(CV)算法處理并增強過的。然而,隨著社交媒體和視頻分享服務的快速增長,作為 AI 圖像算法基礎的視頻圖像處理部分,也早已成為計算流程中不可忽視的成本和瓶頸?;仡櫼幌聢D像處理的一些常見的例子,以更好地理解 CV-CUDA 的應用場景。
(相關資料圖)
(1)AI 算法圖像背景模糊化
圖像背景模糊化通常會被應用于視頻會議,美圖修圖等場景。在這些場景中,我們通常希望 AI 算法可以把主體之外的背景部分模糊化,這樣可以保護用戶隱私,美化圖像等。圖像背景模糊化的流程大體可以分為 3 個過程:前處理,DNN 網(wǎng)絡以及后處理過程。前處理過程,通常包含了對圖像做 Resize、Padding、Image2Tensor 等操作;DNN 網(wǎng)絡可以是一些常見 segmentation network,比如 Unet 等;后處理過程,通常包括 Tensor2Mask、Crop、Resize、Denoise 等操作。
在傳統(tǒng)的圖像處理流程中,前處理和后處理部分通常都是使用 CPU 進行操作,這導致整個圖像背景模糊化流程中,有 90% 的工作時間消耗在前后處理部分,因而成為了整個算法流水線的瓶頸。若能把前后處理妥善利用 GPU 加速,這將能大幅提升整體的計算性能。
當把前后處理部分都放到 GPU 上后,就可以對整個 pipeline 進行端到端的 GPU 加速。經(jīng)過測試,在單個 GPU 上,相比于傳統(tǒng)圖像處理方式,把整個 pipeline 移植到 GPU 后,可以獲得 20 倍以上的吞吐率提升。這無疑會大大的節(jié)省計算成本。
(2)AI 算法圖像分類
圖像分類是最常見的 AI 圖像算法之一,通??梢杂糜谖矬w識別,以圖搜圖等場景,幾乎是所有 AI 圖像算法的基礎。圖像分類的 pipeline 大體可以分為 2 個部分:前處理部分和 DNN 部分。其中前處理部分,在訓練和推理過程中最常見的 4 種操作包括:圖片解碼、Resize、Padding、Normalize。DNN 部分已經(jīng)有了 GPU 的加速,而前處理部分通常都會使用 CPU 上的庫函數(shù)進行處理。如果能夠把前處理部分也移植到 GPU 上,那么一方面可以釋放 CPU 資源,另一方面也可以進一步提升 GPU 利用率,從而可以對整個 pipeline 進行加速。
針對前后處理部分,目前已有的一些主流應用方案:圖像處理庫是 OpenCV、使用 PyTorch 框架進行模型訓練引入的 torchvision 圖像處理庫等。
如上所述,傳統(tǒng)的圖像預處理操作一般在 CPU 上進行,一方面會占用大量的 CPU 資源,使得 CPU 和 GPU 的負載不均衡;另一方面由于基于 CPU 的圖像加速庫不支持 batch 操作,導致預處理的效率低下。為了解決當前主流的圖像處理庫所存在的一些問題,NVIDIA 和字節(jié)跳動的機器學習團隊聯(lián)合開發(fā)了基于 GPU 的圖像處理加速庫 CV-CUDA,并擁有以下特點:
(1)Batch
支持 batch 操作,可以充分利用 GPU 高并發(fā)、高吞吐的并行加速特性,提升計算效率和吞吐率。
(2)Variable Shape
支持同一 batch 中圖片尺寸各不相同,保證了使用上的靈活性。此外,在對圖片進行處理時,可以對每張圖片指定不同的參數(shù)。例如調(diào)用 RotateVarShape 算子時,可以對 batch 中每張圖片指定不同的旋轉角度。
(3)C / C++/Python 接口
在部署機器學習算法時需要對齊訓練和推理流程。一般來說,訓練時利用 python 進行快速驗證,推理時利用 C++ 進行高性能部署,然而一些圖像處理庫僅支持 python,這給部署帶來了極大的不便。如果在訓練和推理采用不同的圖像處理庫,則又需要在推理端重新實現(xiàn)一遍邏輯,過程會非常繁瑣。
CV-CUDA 提供了 C、C++ 和 Python 接口,可以同時服務于訓練和推理場景。從訓練遷移到推理場景時,也可免去繁瑣的對齊流程,提高部署效率。
(4)獨立算子設計
CV-CUDA 作為基礎圖像處理庫,采用了獨立算子設計,不需要預先定義流水線。獨立算子的設計具有更高的靈活性,使調(diào)試變得更加的容易,而且可以使其與其他的圖像處理交互,或者將其集成在用戶自己的圖像處理上層框架中。
(5)結果對齊 OpenCV
不同的圖像處理庫由于對一些算子的實現(xiàn)方式不一致導致計算結果難以對齊。例如常見的 Resize 操作,OpenCV、OpenCV-gpu 以及 torchvision 的實現(xiàn)方式都不一樣,計算結果存在差異。因此如果在訓練時用 OpenCV CPU 版本而推理時若要采用 GPU 版本或其他圖像處理庫,就會面臨結果存在誤差的問題。
在設計之初,我們考慮到當前圖像處理庫中,很多用戶習慣使用 OpenCV 的 CPU 版本,因此在設計算子時,不管是函數(shù)參數(shù)還是圖像處理結果上,盡可能對齊 OpenCV CPU 版本的算子。當用戶從 OpenCV 遷移到 CV-CUDA 時,只需做少許改動便可使用,且圖片處理結果和 OpenCV 一致,不需要重新訓練模型。
(6)易用性
CV-CUDA 提供了 Image、ImageBatchVarShape 等結構體,方便用戶的使用。同時還提供了 Allocator 類,用戶可以自定義顯存分配策略(例如用戶可以設計顯存池分配策略來提高顯存分配速度),方便上層框架集成和管理資源。目前 CV-CUDA 提供了 PyTorch、OpenCV 和 Pillow 的數(shù)據(jù)轉化接口,方便用戶進行算子替換和進行不同圖像庫之間的混用。
(7)針對不同 GPU 架構的性能高度優(yōu)化
CV-CUDA 可以支持 Volta、Turing、Ampere 等 GPU 架構,并針對不同架構 GPU 的特點,在 CUDA kernel 層面進行了性能上的高度優(yōu)化,可在云服務場景中規(guī)?;渴稹?/p>
IT之家獲悉,CV-CUDA Beta 版預計將在 2023 年 3 月發(fā)布,6 月份發(fā)布 v1.0 正式版。
CV-CUDA 更多內(nèi)容查看:點此鏈接。
標簽: 圖像處理