|

【Arm的AI世界】KleidiCV 0.1協助開發人員釋放影像處理能力

   
作者:Michael Platings,Arm工程部主任軟體工程師

對於在雲端及邊緣等環境中運行的數百萬人工智慧(AI)工作負載,以及各類需要理解攝影鏡頭和視訊資料的AI應用來說,電腦視覺(CV) 都在其中扮演關鍵角色。Arm KleidiCV 是一個針對Arm CPU最佳化的效能關鍵型常式的開源軟體程式庫。該軟體庫專為與各種電腦視覺框架整合而設計,能夠為Arm平台上的電腦視覺工作負載提供最佳效能,並且無需應用開發人員進行額外程式設計或開發。

電腦視覺的重要性

在消費性電子裝置中,攝影機品質是消費者選擇手機時的一大關鍵因素;而攝影機的品質不光只是與鏡頭或感測器有關。

從光子擊中攝影機鏡頭感測器到影像顯示在螢幕的過程中,影像資料須經過多次轉換,其中通常包括但不限於:熱像素校正、白平衡、去馬賽克、降雜訊、陰影校正、幾何校正、色彩校正、色調曲線調整、邊緣強化、縮放和裁剪等。

上述部分轉換應由專用的硬體完成,然而許多轉換在軟體中執行時表現更佳。在軟體中執行可以帶來出色的靈活性,使攝影機流水線(pipelines)設計者能夠快速迭代其構想,打造優異的攝影體驗,進而使產品在市場中脫穎而出。

效能因素

攝影機流水線不僅要生成高品質影像,還要能夠快速運作。既要讓消費者能夠以60fps訊框率錄製4K視訊,又可以快速拍攝優質的靜態影像。使用者想要記錄下的一些美好瞬間稍縱即逝,如果攝影機喚醒時間過長,那即使具備拍出漂亮照片的攝影功能,也只是徒勞無功。因此,要拍出令人驚豔的好照片,就最好在軟體中執行攝影機流水線,而且相關軟體需要能夠快速運作。

Arm對構成影像處理基本要素的許多運算進行了高度最佳化,充分善用現有和未來 Arm CPU的功耗和效率。我們是如何做到的?

KleidiCV 不使用普通的C函數,而是使用 Arm C 語言擴展(Arm C Language Extensions,ACLE)內建函數(intrinsics)編寫而成,可直接映射到功能強大的Arm單指令多資料流(Single instruction, multiple data,SIMD)指令。每個KleidiCV函數都有三種不同的實現方式,分別針對Neon、SVE2 (Scalable Vector Extension,SVE;可擴展向量延伸指令集第2 版)或 Streaming SVE 和 SME2 (可擴展矩陣延伸指令集第2版)。KleidiCV 會自動檢測其所執行的硬體,並據此選擇合適的實現方式。

KleidiCV 是一個小型,但不斷成長的簡單卻快速的影像底層運算集合。其中包括:

  • RGB和BGR格式(包含與不含 Alpha 通道)、灰階和 YUV 格式之間的色彩轉換
  • 高斯模糊(Gaussian blur)
  • 膨脹和侵蝕(Dilate & erode)
  • 索伯算子(Sobel operators)
  • 調整影像大小

KleidiCV 可用作羽量級獨立影像處理程式庫,此外還可作為非常熱門的OpenCV函式庫的其中一部分來無縫使用。如果你已經在使用OpenCV,那麼可以輕鬆啟用KleidiCV來加速影像處理。

KleidiCV的速度有多快?

透過OpenCV 的基準測試,我們可以了解KleidiCV如何能夠加速OpenCV。

程式碼使用Android NDK 26d建構而成。以下基準測試顯示了KleidiCV在三星Galaxy S22 手機上搭載的Arm Cortex-X2核心上的效能提升情況,其中影像尺寸為1920×1080。

目前,KleidiCV 不提供內建的多執行緒支援──影像處理是一個「極容易平行」的問題,因此原則上,可以輕易地為KleidiCV添加多執行緒,但我們仍在不斷改善API,致力於為開發人員提供在多工環境中使用異質CPU時所需的控制功能──為了使比較更有意義,我們的基準測試在 OpenCV 中禁用了多執行緒。基準測試顯示的是單核心效能。

各個運算的基準測試得分各有不同。在某些情況中,效能取得了小幅提升,而在更好的情況下,KleidiCV 的執行時間比標準OpenCV要短得多。不同運算的平均提升率超過 75%。

若想詳細瞭解我們如何執行基準測試,可以在 KleidiCV 資源庫中查看我們使用的腳本

取得方式

在Java專案中,要想取得啟用 KleidiCV 的 OpenCV,最簡單的方法是使用OpenCV 4.10 Maven套件,開發人員可瀏覽:https://central.sonatype.com/artifact/org.openpnp/opencv,取得相關資源。

或者,在使用CMake建構OpenCV 4.10時,添加參數 -DWITH_KLEIDICV=ON,即可啟用 KleidiCV 0.1。

cmake -S /path/to/opencv-4.10 -B build-opencv-with-kleidicv -DWITH_KLEIDICV=ON

cmake --build build-opencv-with-kleidicv --parallel

你也可以將KleidiCV建構為獨立的程式庫,詳情請參閱建構文件

安全和測試

Arm 非常重視安全問題,安全開發生命週期(Security Development Lifecycle)已融入到我們工作的各個步驟。在可能的情況下,KleidiCV函數將驗證其參數,例如參數超出有效範圍時,將返回錯誤。

該專案包含大量自動測試。核心庫程式碼的分支覆蓋率非常高,遠遠超過 99%,且行覆蓋率(line coverage)達到 100%。

開源

KleidiCV 以符合Apache 許可證 2.0 版原始程式碼形式提供

初期階段

KleidiCV 程式庫會不斷增加更多功能,歡迎開發人員在我們的GitLab 資源庫中提出回饋意見或問題。

(參考原文:Announcing Arm KleidiCV 0.1: Unleashing the power of Arm CPUs for image processing中文版校閱者為Arm主任應用工程師林宜均)

本文為會員限定文章

立即加入會員! 全站文章無限看~

                               

已經是會員? 按此登入

只需不到短短一分鐘...

輸入您的信箱與ID註冊即可享有一切福利!

會員福利
1

免費電子報

2

會員搶先看

3

主題訂閱

4

好文收藏

Arm作者群

Author: Arm作者群

來自各方的Arm開發者社群專家。

Share This Post On

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *