解洪力,韓 明,王善瑞
(華東交通大學材料科學與工程學院,江西 南昌 330013)
電子背散射衍射 (electron backscatter diffraction,EBSD)作為掃描電子顯微鏡的一種常規(guī)附件,同時具備了X 射線分析和透射電子顯微鏡中電子衍射的特點,在材料科學和地球科學等領(lǐng)域得到了廣泛的應用,如單晶體取向測定[1-2],多晶體織構(gòu)分析[3-4]、相鑒別[5-6]、晶粒尺寸測量[7-8]、應力應變測定[9-10]和地殼構(gòu)造變形分析[11-12]等,EBSD 技術(shù)已經(jīng)成為材料微觀表征不可或缺的重要手段。
EBSD 花樣含有材料豐富的晶體學信息, 一張典型的EBSD 花樣通常含有幾十條可見的菊池帶,由于Hough 變換[13]被成功用于識別這些菊池帶,實現(xiàn)了已知晶體晶面和帶軸指數(shù)的快速標定。 特別是上世紀九十年代Lassen[14]改進的Hough 變換,進一步提高了EBSD 花樣的識別和標定速度,EBSD 技術(shù)得到了廣泛推廣。如今,英國的Oxford 公司、美國的EDAX 公司和德國的Bruker 公司幾乎壟斷了EBSD 領(lǐng)域硬件和軟件的國內(nèi)外市場。從原理上說,傳統(tǒng)Hough 變換算法只能識別圖像中的直線特征,但是EBSD 衍射幾何決定了花樣中的菊池帶具有雙曲線狀的邊界。 為了直接識別菊池帶的雙曲線邊界,Maurice 等[15]提出了一種三維Hough 變換的算法,然而這種方法依賴于準確的投影源(PS)位置,并沒有從根本上解決Hough 變換結(jié)果誤差大的問題,所以該方法并未在EBSD 實際應用中得到推廣。相比于三維Hough 變換,傳統(tǒng)Hough 變換具有穩(wěn)定性高、不受投影源位置誤差影響等優(yōu)勢,至今上述三大廠商仍采用基于中央處理器(central processing unit,CPU) 的傳統(tǒng)Hough 變換識別EBSD 花樣中的菊池帶。 由于Hough 變換是一種一對多的圖像變換算法,即EBSD 花樣X-Y 坐標系中每個像素映射到ρ-θ 坐標系時都變成一條曲線, 這種映射關(guān)系決定了Hough 變換的耗時隨圖像像素數(shù)量的增加呈指數(shù)級增長,所以計算量大且耗時長是Hough 變換算法的主要短處。 標定已知晶體的EBSD 花樣時,Hough 變換的耗時幾乎占據(jù)了標定的總時長, 在花樣像素數(shù)量少且僅識別四條不共帶軸的菊池帶情況下,目前最先進的EBSD 商業(yè)軟件標定速度最快可達到4×103FPS[16],但仍遠遠慢于EBSD 花樣的采集速度。 此外,降低圖像的像素數(shù)量雖然能顯著提高Hough 變換速度, 但會導致Hough 變換結(jié)果的誤差增大, 從而明顯降低EBSD 花樣標定結(jié)果的可信度。 在不影響EBSD 花樣標定結(jié)果的情況下,如何快速實現(xiàn)Hough 變換已成為EBSD 用戶和廠家共同關(guān)注并亟待解決的關(guān)鍵問題。
計算機技術(shù)經(jīng)過近幾十年的發(fā)展,CPU 已經(jīng)成為超大規(guī)模集成電路,芯片中的晶體管數(shù)量不可能無限制增加,摩爾定律早已失效,為提高計算速度,CPU 由單核發(fā)展出多核, 但由于保留了大量的緩存,多核CPU 的計算能力依然受限。NVIDIA 公司于2006 年基于顯卡提出統(tǒng)一計算設(shè)備架構(gòu)(compute unified device architecture,CUDA)[17],利用CUDA 可實現(xiàn)計算的高度并行化。 從硬件角度來講,目前一個CPU 至多擁有十幾個運算核心,而顯卡中運算核心的數(shù)量能高達幾千個, 龐大的核心數(shù)量為CUDA的并行計算提供了硬件支持,CUDA 高性能并行計算是未來的發(fā)展趨勢。
本文分別采用CPU 的多線程技術(shù)和CUDA 高性能并行計算技術(shù)對EBSD 花樣做Hough 變換,研究了CPU 線程數(shù)量、EBSD 花樣(原始圖像)像素數(shù)量和Hough 變換結(jié)果圖像(目標圖像)像素數(shù)量對Hough 變換時間的影響, 從不同并行模式和顯卡安裝方式兩個角度對比了CPU 和CUDA 的Hough 變換時間,最后比較了兩者的識別結(jié)果。
本實驗基于容天工作站對EBSD 花樣做Hough變換,操作環(huán)境為Windows10 系統(tǒng),編程使用C 語言,CPU 型號為Xeon E5-2643(6 核),顯卡型號為Tesla K20c(2496 核),程序基于VS2017 軟件編寫,CUDA 版本為10.2,圖像處理使用OpenCV 庫。
在二維圖像X-Y 平面坐標系中, 直線L 的方程可以表示為
式中:k 為斜率,b 為截距。
如圖1(a)所示,連接X-Y 平面內(nèi)的任意兩點(A1,A2)所形成的直線方程如式(1)所示,過點O 作直線L 的垂線,垂足為A0,線段OA0與X 軸的夾角為θ,原點O 與直線L 的距離為ρ。 根據(jù)式(2)可以將二維圖像X-Y 坐標系中一個點轉(zhuǎn)換到ρ-θ 參數(shù)坐標系中變成一條曲線
圖1 Hough 變換原理圖Fig. 1 Schematic diagram of Hough transform
X-Y 坐標系中點A1和點A2分別對應ρ-θ 坐標系中曲線a1和曲線a2,所以ρ-θ 坐標系中兩條曲線的交點對應X-Y 坐標系中直線。 從圖1(b)可以看出,兩條曲線在點N 處相交,即參數(shù)坐標系中點N 代表二維圖像坐標系中的直線L。通過上述方式,Hough 變換將二維圖像坐標系中直線映射到參數(shù)坐標系中形成交點,從而把檢測任意直線的問題轉(zhuǎn)化為統(tǒng)計交點的問題。
本文在研究不同并行模式對Hough 變換時間的影響時,因啟動線程、開辟資源等需要消耗時間,若只統(tǒng)計一張EBSD 花樣的Hough 變換時間,其結(jié)果具有不確定性, 這里求取1 000 張EBSD 花樣的平均時間作為Hough 變換時間,減小了實驗數(shù)據(jù)的誤差與波動。 此外,為了保證Hough 變換結(jié)果圖像的真實性,原始圖像像素數(shù)量應該大于目標圖像像素數(shù)量。 另一方面,在探究CUDA 技術(shù)對Hough 變換時間的影響時, 顯卡與主板共有兩種連接方式,第一種是通過PCIE X16 插槽直接將顯卡連接主板,實現(xiàn)顯卡的內(nèi)置,這也是目前最常見的一種連接方式;第二種是外置顯卡,首先將PCIE X1 轉(zhuǎn)接口的一端連接到主板, 另一端通過USB3.0 線將PCIE X1 轉(zhuǎn)接板與PCIE X16 底座相連, 最后將顯卡連接到PCIE X16 底座上。 需要指出的是, 利用CUDA 對EBSD 花樣做Hough 變換,首先從CPU 端將數(shù)據(jù)傳遞到顯卡端, 然后利用CUDA 進行計算,最后從顯卡端將計算結(jié)果回傳給CPU 端, 所以Hough 變換時間為數(shù)據(jù)傳遞時間和CUDA 運算時間之和。
圖2 是一張EBSD 花樣及其Hough 變換的結(jié)果,從圖2(b)中可以看到每個方框中存在一個清晰的亮點,在亮點的上下兩側(cè)的箭頭所示位置存在一對黑點,其中每個黑點代表菊池帶的一條邊界。
圖2 EBSD 花樣的Hough 變換Fig.2 Hough transform of EBSD pattern
從圖3 可以看出, 利用CPU 對EBSD 花樣做Hough 變換, 隨著CPU 線程數(shù)量的增加,Hough 變換時間明顯減少。在CPU 線程數(shù)量增加至核心數(shù)量之前,Hough 變換時間減少較快, 如CPU 線程數(shù)量由1 增加至2 時,Hough 變換時間幾乎減小一半,這表明CPU 的多核并行計算優(yōu)勢得到了充分發(fā)揮;當線程數(shù)量超過核心數(shù)量,即線程數(shù)量大于6,CPU 會自動開啟超線程,此時一個核心可以同時調(diào)度兩個線程。 若持續(xù)增加CPU 的線程數(shù)量,Hough 變換時間仍會減少, 但減少幅度會有所降低, 其原因是CPU 在調(diào)度線程時存在切換線程和開辟資源等方面的時間損耗,但利用CPU 的多核技術(shù)和超線程技術(shù),可以減少Hough 變換時間,加快EBSD 花樣的菊池帶識別速度。
圖3 CPU 影響Hough 變換的因素Fig.3 Factors influencing Hough transform by CPU
圖3 顯示了在同一CPU 線程數(shù)量情況下,不同原始圖像、 不同目標圖像對Hough 變換時間的影響,當原始圖像像素數(shù)量或者目標圖像像素數(shù)量增加時,Hough 變換時間都會對應增加,但兩者的增加幅度有所不同。 以1 個CPU 線程為例,在A 的情況下,即原始圖像和目標圖像像素數(shù)量都為40 像素×40 像素,此時Hough 變換時間為4.8 ms。 B 與A 相比, 目標圖像的橫向和縱向像素數(shù)量都增加一倍,Hough 變換時間對應增加一倍, 而C 相比于A 而言, 原始圖像橫向和縱向像素數(shù)量都增加一倍,Hough 變換時間增加至原來的4 倍。由此可見,原始圖像像素數(shù)量對Hough 變換時間的影響更大,這是由Hough 變換算法決定的。 原始圖像利用二重循環(huán)掃描每個像素點得到對應坐標,原始圖像橫向和縱向的像素數(shù)量都增加一倍,即X 軸方向和Y 軸方向上像素數(shù)量均增加一倍,掃描所需的工作量增大至原來的4 倍;目標圖像僅通過一重循環(huán)掃描θ 軸方向的坐標,然后利用式(2)求解得出ρ 軸方向的坐標,即ρ 軸不需要通過循環(huán)求解。 所以當目標圖像橫向和縱向的像素數(shù)量都增加一倍時,掃描所需的工作量只增加一倍。 D 與A 相比,同時增加原始圖像和目標圖像的像素數(shù)量,Hough 變換時間大幅增加。 綜上所述,CPU 線程數(shù)量越多,圖像像素數(shù)量越少,Hough 變換時間越短。
結(jié)合圖3 所示CPU 的Hough 變換數(shù)據(jù), 表1給出了CPU 與CUDA 的詳細對比, 無論是原始圖像還是目標圖像,圖像像素數(shù)量增加,Hough 變換時間均增加。需要指出的是,CUDA 的加速比與圖像像素數(shù)量有關(guān),表中第1 行與第3 行的數(shù)據(jù)給出了原始圖像像素數(shù)量對CPU 時間、CUDA 時間和加速比的影響。 當原始圖像像素數(shù)量由40×40 增加至80×80 時,CPU 時間從0.56 ms 增加至2.19 ms,CUDA時間從0.056 ms 增加至0.087 ms, 加速比從10 增加至25.17, 可見原始圖像像素數(shù)量增加,CUDA 的加速比增大;第1 行與第2 行的數(shù)據(jù)相比,目標圖像像素數(shù)量從40×40 增加至80×80,CPU 時間和CUDA 時間都增加, 但加速比從10 降低至7.71,CUDA 的加速程度減小。綜合分析,當圖像像素數(shù)量增加時,CPU 時間和CUDA 時間均增加; 原始圖像像素數(shù)量增加,CUDA 的加速比增大,目標圖像像素數(shù)量增加,CUDA 的加速比減小。 同理,第1 行與第4 行數(shù)據(jù)相比, 原始圖像像素數(shù)量和目標圖像像素數(shù)量均增加,CUDA 的加速比為21.06,處于7.71 至25.17 區(qū)間內(nèi),符合上述推斷。
表1 CPU 與CUDA 的Hough 變換時間對比Tab.1 Comparison of Hough transform time between CPU and CUDA
如圖4 所示,同一像素數(shù)量的情況下,與CPU相比,基于CUDA 的Hough 變換速度更快,原因是顯卡的線程數(shù)量明顯多于CPU 的線程數(shù)量。
另外, 從圖4 中還可以看出, 基于CPU 的Hough 變換時間隨原始圖像像素數(shù)量增加呈指數(shù)級增長, 這與圖3 所示的CPU 實驗結(jié)果一致。 基于CUDA 進行Hough 變換,因原始圖像中一個像素對應CUDA 中一個線程, 所以增加原始圖像像素數(shù)量,基于CUDA 的Hough 變換時間近似呈線性關(guān)系增長。 此外,目標圖像像素數(shù)量增加,θ 軸方向上掃描工作量對應增加,ρ 軸方向上掃描工作量無影響,所以CPU 和CUDA 的Hough 變換時間均近似呈線性關(guān)系增長。
圖4 不同并行模式下Hough 變換時間的對比Fig.4 Comparison of Hough transform time under different parallel modes
一般來說,顯卡數(shù)量越多,程序的計算能力越強,通常主板上的顯卡插槽數(shù)量有限,內(nèi)置顯卡的方式滿足不了日益增長的計算需求,可通過外置方式將顯卡與主板連接。
實驗結(jié)果如圖5 所示,無論是內(nèi)置顯卡還是外置顯卡,隨著圖像像素數(shù)量增加,Hough 變換時間均對應增加。 但需注意的是,外置顯卡的Hough 變換時間約為內(nèi)置顯卡的兩倍,而兩者的Hough 變換計算時間相同,時間差距主要在CPU 端到顯卡端的數(shù)據(jù)傳遞環(huán)節(jié),可以推斷,外置顯卡雖會降低數(shù)據(jù)的傳遞速度,但并未影響CUDA 的計算速度。 另外還可以發(fā)現(xiàn),基于CUDA 的Hough 變換時間主要消耗在數(shù)據(jù)傳遞環(huán)節(jié), 計算環(huán)節(jié)并未占用過多時間,這說明顯卡的并行計算能力并沒有得到充分發(fā)揮,所以本實驗的程序還存在一定的優(yōu)化空間。
圖5 顯卡安裝方式對CUDA 的Hough 變換時間影響Fig.5 Influence of graphics card installation mode on CUDA Hough transform time
由此可見,利用CUDA 高性能并行計算技術(shù)可以大幅度減少Hough 變換時間,提高EBSD 花樣中菊池帶的識別速度。 在內(nèi)置顯卡的情況下,原始圖像像素數(shù)量和目標圖像像素數(shù)量均為40×40, 基于CUDA 的Hough 變換總時間為0.056 ms, 即EBSD花樣中菊池帶的識別速度最快可達到1.7×104FPS。這已遠遠超過Oxford 公司商業(yè)軟件4×103FPS 的識別速度,基于CUDA 的Hough 變換將成為快速識別EBSD 花樣菊池帶的一個發(fā)展趨勢。
從上述實驗結(jié)果可知,基于CUDA 的Hough 變換速度遠遠快于CPU,本實驗對比了CPU 與CUDA的菊池帶識別結(jié)果。 菊池帶上的數(shù)字代表Hough 變換結(jié)果的最強峰順序,即Hough 變換結(jié)果的峰值越強,菊池帶特征越明顯,EBSD 花樣所對應的菊池帶序號越小,結(jié)果如圖6 所示。
圖6(e)與圖6(i),圖6(f)與圖6(j)相比,兩種并行模式的菊池帶識別順序完全一致,識別結(jié)果無明顯差異;圖6(g)和圖6(k)所示的菊池帶識別順序有所不同,具體表現(xiàn)為5 號菊池帶和6 號菊池帶的識別順序相反,這說明兩種并行模式Hough 變換結(jié)果圖像的菊池帶特征強弱程度相反;圖6(h)與圖6(l)相比,兩種并行模式識別的6 號菊池帶并非同一條菊池帶,但可以肯定的是,兩條6 號菊池帶都是清晰存在的。 另一方面,從Hough 變換結(jié)果圖像上分析,圖6(a)~圖6(d)與圖6(m)~圖6(p)的對比可知,CPU 與CUDA 對同一張EBSD 花樣的Hough變換結(jié)果沒有可見的差異。 綜上所述,CPU 與CUDA 雖在菊池帶識別細節(jié)方面有輕微差異, 但最終兩者的識別結(jié)果基本相當。
圖6 4 張EBSD 花樣中菊池帶的識別結(jié)果Fig.6 Identification results of Kikuchi bands in four EBSD patterns
本文分別使用CPU 與CUDA 對EBSD 花樣做Hough 變換,研究了圖像像素數(shù)量、不同并行模式和顯卡安裝方式對Hough 變換時間的影響,最后比較了兩者的EBSD 花樣識別結(jié)果,主要結(jié)論如下。
1) CPU 線程數(shù)量增加,Hough 變換時間減少;圖像像素數(shù)量增加,CPU 與CUDA 的Hough 變換時間均增加。
2) CPU 的原始圖像像素數(shù)量與Hough 變換時間呈指數(shù)關(guān)系增長,目標圖像像素數(shù)量與Hough 變換時間近似呈線性關(guān)系增長;CUDA 的原始圖像像素數(shù)量與目標圖像素數(shù)量均與Hough 變換時間近似呈線性關(guān)系增長。
3) 內(nèi)置顯卡和外置顯卡的Hough 變換計算時間幾乎完全相同,但外置顯卡的Hough 變換總時間約為內(nèi)置顯卡的兩倍,原因在于CPU 端到外置顯卡端的數(shù)據(jù)傳遞需要較長時間。
4) CPU 與CUDA 的菊池帶識別結(jié)果沒有本質(zhì)區(qū)別,但CUDA 的菊池帶識別速度遠遠快于CPU。