對於在雲端及邊緣等環境中運行的數百萬人工智慧(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註冊即可享有一切福利!
會員福利
免費電子報
會員搶先看
主題訂閱
好文收藏