文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.04.031
中文引用格式: 田旭文,朱茂華. 基于異構平臺的自適應圖像去馬賽克的OpenCL加速[J].電子技術應用,2016,42(4):111-115.
英文引用格式: Tian Xuwen,Zhu Maohua. An OpenCL implementation of an image de-mosaicking algorithm on a hybrid platform of heterogeneous system architecture[J].Application of Electronic Technique,2016,42(4):111-115.
0 引言
隨著高清影像與手持數碼產品的普及,數字影像技術受到了產業界的重視,因數字影像攜帶大容量信息且引起豐富的創造潛能。高清、高幀率影像不僅能展現更高的畫面質量,還能提升畫面的連續性,在網絡監控、醫療等領域有廣闊的前景。通常,數字影像采集設備用成像芯片將光學圖像轉換為電荷,成像芯片決定影像質量,占相機成本的10%~25%??紤]到成本、體積及硬件工藝,多數影像采集設備使用覆蓋有一層色彩濾鏡陣列的單個成像芯片。每個感光單元只能取樣一種色彩,其余兩種顏色值需用相鄰單元的取樣值進行插值計算得到。這種色彩插值就是去馬賽克,是數字影像采集流水線的一個關鍵環節,在高幀率、高清圖像處理應用中有重要價值。
本設計基于異構計算實現了一個自適應去馬賽克算法的OpenCL代碼,并在AMD Bald Eagle和AMD FirePro W8100(或ES8950 MXM)GPU組成的異構計算平臺上進行了測試。據了解,目前還沒有異構平臺的去馬賽克并行代碼。深度優化的代碼充分發揮了異構平臺的架構優勢以及FirePro W8100的浮點運算能力和高GFLOPS/J特點。整個系統具有低的計算耗時,處理圖像的速率超過了100 f/s,每幀的像素數量是1 920×1 080。實驗數據證明該方案能滿足醫療、安監等領域對高幀率和高清數字影像的需求。
1 圖像插值算法和異構計算
1.1 圖像去馬賽克算法
圖像去馬賽克算法是數碼影像產品里的一項關鍵技術,其性能優劣直接影響著圖像質量,性能不好的算法會使重建圖像有彩色馬賽克或拉鏈失真等畸變。按是否利用空間相關性,文獻[1]將現有的算法分為兩類——非自適應插值法(如最近鄰域復制、雙線性插值和三次樣條插值)和利用相關性的插值法。前一類算法易于實現,可以在圖像的平滑區域得到滿意的插值效果,但在目標邊緣等高頻區域易引起插值畸變。后一類方法利用相關性實現插值,相關性包括每個色彩通道內像素間的空間相關性和多通道間的色彩值相關性。第二類算法能得到高質量的重建圖像,但是計算復雜度高。沒有專用加速計算芯片的支持,數字影像采集設備很難實時運行后一類算法。本文采用的Adaptive Homogeneity-Directed De-Mosaicking(AHDDM)屬于利用相關性的插值算法[2]。該算法適于處理以Bayer色彩濾波陣列模式采集到的圖像,圖1是該算法的主要計算步驟流程。雖然這些步驟需要大量的浮點運算和復雜的數值計算,但是適于用并行計算代碼實現加速。
1.2 異構計算
傳統的圖像處理平臺用CPU,系統運算能力的提升受限于因提高CPU工作頻率引起的功耗的顯著增加。雖然CPU的同構并行和分布系統能提升運算能力,但其提升幅度不能隨著處理器數量線性增長。在這些系統上,即便得到成熟的開發經驗、編程語言、算法和調試工具等手段的協助,開發圖像處理軟件也是一項困難的工作。異構計算技術產生于80年代中期,主要指使用不同類型指令集、體系架構的計算單元組成混合系統的一種計算方式。常見的計算單元包括兼容X86指令集的多核CPU、GPU、FPGA、DSP、音頻/視頻處理等專用集成電路(ASIC)[3-4]。由于異構計算能經濟、有效地配置計算資源,提升資源利用率和可擴展性,該技術已成為并行/分布計算領域中的一個研究熱點。異構平臺通常由多核CPU和GPU組成。
1.3 AMD GPU
在2012年以前,AMD 的GPU架構采用VLIW4作為計算單元的指令格式,這使GPU適用于圖像渲染和3D圖形運算。通常,通用計算的數據有復雜的結構,這些數據結構很難被歸并到有限的類型之中,因此舊架構的GPU芯片難以高效地完成通用并行計算或合理地配置資源。從2012年開始,AMD 發布的GPU芯片采用了新架構GCN[5],如圖2所示。GCN架構不僅支持渲染和3D圖形計算,還支持通用計算和OpenCL 1.2標準。
GCN架構的核心特點表現在兩個方面。首先,該架構用了新的CU結構和指令集。每個CU有4個獨立的SIMD向量處理器和向量寄存器,還有一個標量處理器和8 KB寄存器,用于減少向量計算的冗余計算。除了私有資源,4個SIMD共享前端、分支單元和數據緩存。這些設計使得一個CU能支持多達2 560 個線程。其次,GCN架構還將改變擴展到整個系統,如GCN架構采用分級緩存。由一個向量數據讀取指令引發的64個存儲訪問會被合并成一個訪問。合并機制將讀取同一個cache line里的數據合并為一次訪問,這能顯著地降低片外存儲器的讀取次數。數據存儲采用了不同于讀取的合并方式。在合并存儲器讀取請求之后,數據將被送至一級數據緩存,即分級緩存的第一級。如果CU需要的數據不在一級緩存,那么CU將通過開關矩陣訪問二級緩存。二級緩存有多個bank,采用交織尋址方式,各bank通過一個64位雙通道存儲控制器連接到片外存儲器。GCN分級存儲是一個合并讀寫的緩存系統,支持虛擬內存和原子操作,進而支持GPU和CPU間的數據零拷貝。
1.4 OpenCL
通常,硬件廠商僅提供支持自身芯片的編程模型和工具,所以難用一種風格的編程語言實現異構編程。此外,將不同設備作為統一的計算單元來處理是非常困難的。為解決該問題,OpenCL通過一套機制實現獨立于硬件的軟件開發環境,還能支持多級別的并行計算和不同設備的并行特性,將高級語言的代碼有效地映射到由CPU、GPU和其他芯片組成的系統上[6]。OpenCL定義了運行時系統管理資源,將不同類型的硬件結合在同種執行環境中,用來支持動態平衡計算、功耗及其他資源[7]。圖3示意了平臺模型和執行模型間的關系。
2 OpenCL代碼設計及優化
本文用OpenCL 1.2標準設計GPU代碼,實現一個高復雜度的自適應去馬賽克算法。因為該算法對每個像素進行多次插值、濾波和非線性映射等操作,所以這個算法需要大量的浮點運算以及數值計算,屬于數據密集型應用,適合于GPU實現。為高速實現該算法,OpenCL代碼必須充分利用GPU的計算資源,如高速浮點運算能力。目標異構平臺以CPU為核心,包含一個或多個OpenCL設備,這要求不同架構的微處理器同時運行不同性質和內容的計算任務,因此代碼應同時進行數據傳輸和計算,以利于整個系統高速地處理數據幀序列。
OpenCL代碼的主要技術特點如下所述。在代碼加速方面,優化了中值濾波和線性濾波的計算流程,優化了片外存儲數據的訪問。設備代碼還采用OpenCL內建函數,加速了立方根等數值計算函數,這顯著地降低了處理器時間。軟件優化了數據的存儲布局,降低了讀寫數據次數。部分優化方法的說明可參考文獻[7-8]。在異構加速方面,軟件創建了兩個命令隊列,分別控制OpenCL設備完成圖像處理和主機與設備間的數據傳輸。相比于單命令隊列控制OpenCL設備的計算和通信,新做法隱藏了數據傳輸,進一步提高了每幀數據的處理速度。軟件采用了兩個事件對象同步兩個命令隊列。這種方式通過交替地創建和釋放事件對象,有效地避免了不同隊列里的命令在任一個時刻處理同一幀數據,保證了數據一致性。下面分別介紹這些代碼部分的設計。
2.1 軟件流程設計和描述
按照OpenCL 1.2標準,采用主機和OpenCL設備協作實現AHDDM算法。主機代碼按照一個指定順序啟動設備執行設備代碼,完成平臺和設備信息的獲取、設備選擇、各種對象創建、主機和設備間通信、設備代碼的輸入參數配置和資源釋放。設備完成圖像處理計算,對輸入數據進行插值和濾波,得到重建結果。在圖像處理中,水平/豎直方向插值、homogeneity計算、中值濾波和色彩空間轉換需要大量運算。下面概略地介紹這些算法步驟。
2.1.1 插值
對于一幅輸入圖像,AHDDM算法用一個像素的周邊像素值分布估計出該點缺失的信息,對水平插值和豎直插值結果進行了選擇性組合。水平插值過程是:(1)求像素RGB值的和,存于矩陣X中;(2)在處理G通道時,對應于G Mask的像素取矩陣X的值,對應于R/B Mask的像素取矩陣X水平方向的鄰近4個值的加權平均;(3)在處理R和B通道時,輸出像素取以其為中心的3×3窗口內所有R/B Mask像素的平均值。豎直插值過程是:除G通道R/B Mask下的像素取矩陣X豎直方向的最近4個值的計算結果以外,其余與水平插值相同。
2.1.2 計算Homogeneity矩陣
該算法將水平插值和豎直插值得到的圖像轉換成LAB格式,并求出這兩張LAB圖像的亮度差和色彩差。隨后根據這兩個差值矩陣,OpenCL設備計算出水平插值和豎直插值的同質矩陣Hx和Hy;接著對這兩個矩陣里的數據進行平滑處理。根據平滑結果,OpenCL設備合并水平插值圖像和豎直插值圖像,每個像素的取值判據是選擇其在Hx/Hy較大的像素值。
2.1.3 中值濾波
合并后的插值圖像需要進行中值濾波,以保證重建質量。在R和B通道,每個像素取其相鄰的8個像素的中值濾波結果;在G通道里,每個像素取其上下左右4個相鄰的像素的中值濾波結果。中值計算需先將輸入的數據按照升序或降序排列,再輸出中間位置上的那個數值。當輸入奇數個數據時,計算結果將是排序后的序列中間的數據;當輸入偶數個數據時,計算結果將是排序后的序列中間的兩個數據的平均值。自適應算法用兩次中值濾波,以得到較好的濾波效果。
2.1.4 色彩空間轉換
RGB和CIELAB是常用的顏色空間。RGB便于建模物理設備的輸出,但不適合描述人類視覺感知。CIELAB具有視覺上的均勻性,接近于人類的視覺感知,即色彩值的變化和視覺感知到的變化程度是一致的[9]。RGB和CIELAB之間的色彩值轉換需要分兩步進行,即先規范化RGB值到0~1之間,用XYZ顏色空間作中間層;再用一組非線性變換得到CIELAB值[10]。
轉換公式顯示CIELAB轉換需要浮點型運算,雖然可截取浮點計算結果的整數部分換取計算速度的增加,但是損失了計算精度。因為RGB轉換CIELAB需要較多的數值計算,所以快速轉換是OpenCL代碼設計的一個重點。本文用一個3×3矩陣和一個1×3向量的浮點乘法實現規范化計算,用OpenCL 1.2標準的內建立方根等函數實現非線性數值計算,用三元運算符而不是條件指令加快非線性轉換中的流程控制。
2.2 并行圖像處理和數據通信
本文用單個命令隊列實現單幅圖像的插值處理,用兩個命令隊列處理一個幀序列,隱藏了數據傳輸時間。代碼采用任務并行的方式,同步地完成圖像處理和數據通信。主機代碼用一個命令隊列里的命令啟動OpenCL設備執行設備代碼,用另一個命令隊列中的命令去控制設備內存和主機內存之間的數據通信。系統使用兩個事件對象同步兩個命令隊列的命令,通過交替地監測兩個事件對象建立和釋放的返回值,安排兩個命令隊列中的命令讀寫不同的存儲位置,免除了兩個隊列里的命令讀寫相同的存儲位置。
2.3 存儲空間配置
根據算法流程,在開始插值計算前,需鏡像擴展原始圖像的邊緣部分。其次,一些計算步驟訪問多個相鄰的像素,這需要條件指令限定并行線程的處理范圍,否則邊緣像素的重建結果將會有明顯偏差。軟件采取了圖像補零法,填補寬度是各步驟的最大補零長度,這利于合并掉一些條件指令,減少計算時間。如果原始圖像的尺寸是M×N,鏡像擴展圖像的尺寸是H×W,則輸入和輸出圖像的尺寸是M×N,中間結果的尺寸均是(H+2×P)×(W+2×P),其中P是補零寬度,取2和delta(homogeneity函數的參數)的最大值。在本文的實驗中,delta默認取值為3,所以P取delta值。最后,代碼將擴展圖像的寬度和高度取為16的整數倍,以提高數據訪問效率。在實驗中,原始圖像和重建圖像的尺寸是1 920×1 080像素,中間結果是1 952×1 104像素。
3 實驗及討論
本文的異構計算平臺的配置如下:硬件平臺由AMD Bald Eagle和AMD FirePro W8100[11](或ES8950 MXM)組成,軟件開發環境是Win7、AMD Catalyst 13.11以上版本和AMD APP SDK 2.8[12],編程語言及版本號是VC2010和OpenCL 1.2 C。圖4是原始RGB圖像、模擬數據和插值重建圖像。三幅圖像的尺寸均為1 920×1 080像素,有3個圖像通道。按照Bayer模式,對原始圖進行采樣得到模擬圖,模擬圖偏綠。對比原始圖像和重建結果,可看出重建結果非常接近于原始圖像,而且差別很小。該異構平臺的重建圖像與CPU代碼的計算結果不存在明顯差異,區域交界處的虛假色塊和拉鏈等失真被抑制和消除,細節得到了保留。
在Intel i7平臺上,該算法的MATLAB代碼的運行時間約為7 s。圖5是 FirePro W8100的一段工作時序,顯示了兩個命令隊列的運行情況,其中Queue0 和Queue1分別對應于數據處理命令隊列和通信命令隊列。該圖顯示出交疊的數據通信和數據處理命令節省了GPU計算時間。AMD Bald Eagle APU處理器集成有X86 CPU內核和GPU內核,但其GPU核的計算單元數量遠小于W8100的計算單元數量。因為用一個命令隊列完成數據通信和執行處理算法,所以該GPU核大約用67 ms完成單幅圖像的去馬賽克處理,如圖6所示。表1列出了W8100處理各步驟的耗時,總和約為6.22 ms,因為設備啟動命令需要時間,所以每一幅圖像的插值處理大約用8.6 ms。兩種工作時序的對比顯示出多命令隊列方式能更高效地使用OpenCL設備的計算資源。
除了上述的代碼優化方法以外,OpenCL代碼仍有進一步提升性能的方式,如使用三維查找表插值法提高RGB值轉換為CIELAB值的速度。
4 小結
按照OpenCL 1.2標準,本文開發了自適應去馬賽克并行代碼,在AMD Bald Eagle和AMD FirePro W8100 GPU組成的異構系統上進行了驗證。AMD FirePro W8100能滿足100 f/s的圖像處理,圖像尺寸達到了1 920×1 080像素,每個像素有RGB值。本文的實驗證明異構計算是一種適于高清影像和大尺幅圖像處理的有效方案。
參考文獻
[1] LI X.Image demosaicking:a systematic survey[C].Proc.of SPIE Electronic Imaging Conference,2008.
[2] HIRAKAWA K.Adaptive homogeneity-directed demosaicing algorithm[J].IEEE Trans.on Image Processing,2005,14(3):360-369.
[3] HSA Foundation.Heterogeneous system architecture:A technical review presentation[EB/OL].(2012)[2015].Available:http://www.slideshare.net/hsafoundation/hsa10-whitepaper.
[4] AMD Inc.AMD and HSA:A new era of vivid digital experiences website[EB/OL].(2013)[2016].Available:http://www.amd.com/us/products/technologies/hsa/Pages/hsa.aspx#1.
[5] AMD Inc.AMD Graphics Cores Next(GCN) architecture[EB/OL].(2012)[2016].Available:http://www.amd.com/jp/Documents/GCN Architecture whitepaper.pdf.
[6] Khronos OpenCL Working Group.The OpenCL specification 1.2[EB/OL].(2011)[2016].Available:http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf.
[7] MUNSHI A.OpenCL programming guide for optimization techniques[M].Addison-Wesley Professional,2011.
[8] AMD Inc.ATI streaming SDK OpenCL programming guide 4.2[EB/OL].(2013)[2016].Available:http://developer.amd.com/wordpress/media/2013/07/AMD_Accelerated_Parallel_Processing_OCL_Programming_Guide-2013-06-21.pdf.
[9] BILLMEYER F W,SALTZMAN J M.Principles of color technology[M].2nd ed.,John Wiley & Sons,Inc.,New York,1981.
[10] SCHALLER N C.Color conversion algorithms[EB/OL].(2015)[2016].Available:http://www.cs.rit.edu/~ncs/color/t_convert.html.
[11] AMD Inc.FirePro datasheet[EB/OL].(2015)[2016].Available:http://www.amd.com/Documents/FirePro-W8100-Data-Sheet.pdf.
[12] AMD Inc.AMD accelerated parallel processing software development Kit[EB/OL].(2016)[2016].Available:http://developer.amd.com/sdks/amdappsdk/.